Skip to content

Commit a39fde4

Browse files
committed
Add Import Folder option
1 parent 6f43408 commit a39fde4

File tree

4 files changed

+161
-4
lines changed

4 files changed

+161
-4
lines changed

app/src/main/kotlin/com/simplemobiletools/notes/activities/MainActivity.kt

Lines changed: 34 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,7 @@ import android.view.MenuItem
1414
import com.simplemobiletools.commons.dialogs.FilePickerDialog
1515
import com.simplemobiletools.commons.dialogs.RadioGroupDialog
1616
import com.simplemobiletools.commons.extensions.*
17-
import com.simplemobiletools.commons.helpers.LICENSE_LEAK_CANARY
18-
import com.simplemobiletools.commons.helpers.LICENSE_RTL
19-
import com.simplemobiletools.commons.helpers.LICENSE_STETHO
20-
import com.simplemobiletools.commons.helpers.PERMISSION_WRITE_STORAGE
17+
import com.simplemobiletools.commons.helpers.*
2118
import com.simplemobiletools.commons.models.FAQItem
2219
import com.simplemobiletools.commons.models.FileDirItem
2320
import com.simplemobiletools.commons.models.RadioItem
@@ -138,6 +135,7 @@ class MainActivity : SimpleActivity(), ViewPager.OnPageChangeListener {
138135
R.id.rename_note -> displayRenameDialog()
139136
R.id.share -> shareText()
140137
R.id.open_file -> tryOpenFile()
138+
R.id.import_folder -> tryOpenFolder()
141139
R.id.export_as_file -> tryExportAsFile()
142140
R.id.export_all_notes -> tryExportAllNotes()
143141
R.id.delete_note -> displayDeleteNotePrompt()
@@ -309,6 +307,13 @@ class MainActivity : SimpleActivity(), ViewPager.OnPageChangeListener {
309307
}
310308
}
311309

310+
private fun openFolder(path: String, onChecksPassed: (file: File) -> Unit) {
311+
val file = File(path)
312+
if (file.isDirectory) {
313+
onChecksPassed(file)
314+
}
315+
}
316+
312317
private fun importFileWithSync(uri: Uri) {
313318
when (uri.scheme) {
314319
"file" -> openPath(uri.path)
@@ -334,6 +339,31 @@ class MainActivity : SimpleActivity(), ViewPager.OnPageChangeListener {
334339
}
335340
}
336341

342+
private fun tryOpenFolder() {
343+
handlePermission(PERMISSION_READ_STORAGE) {
344+
if (it) {
345+
openFolder()
346+
}
347+
}
348+
}
349+
350+
private fun openFolder() {
351+
FilePickerDialog(this, pickFile = false) {
352+
openFolder(it) {
353+
ImportFolderDialog(this, it.path) {
354+
mNotes = dbHelper.getNotes()
355+
showSaveButton = false
356+
invalidateOptionsMenu()
357+
initViewPager()
358+
updateSelectedNote(it)
359+
view_pager.onGlobalLayout {
360+
mAdapter?.focusEditText(getNoteIndexWithId(it))
361+
}
362+
}
363+
}
364+
}
365+
}
366+
337367
private fun tryExportAsFile() {
338368
handlePermission(PERMISSION_WRITE_STORAGE) {
339369
if (it) {
Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
package com.simplemobiletools.notes.dialogs
2+
3+
import android.support.v7.app.AlertDialog
4+
import android.view.ViewGroup
5+
import com.simplemobiletools.commons.extensions.*
6+
import com.simplemobiletools.notes.R
7+
import com.simplemobiletools.notes.activities.SimpleActivity
8+
import com.simplemobiletools.notes.extensions.dbHelper
9+
import com.simplemobiletools.notes.helpers.TYPE_NOTE
10+
import com.simplemobiletools.notes.models.Note
11+
import kotlinx.android.synthetic.main.dialog_open_file.view.*
12+
import java.io.File
13+
14+
class ImportFolderDialog(val activity: SimpleActivity, val path: String, val callback: (id: Int) -> Unit) : AlertDialog.Builder(activity) {
15+
private var dialog: AlertDialog
16+
17+
init {
18+
val view = (activity.layoutInflater.inflate(R.layout.dialog_import_folder, null) as ViewGroup).apply {
19+
open_file_filename.text = activity.humanizePath(path)
20+
}
21+
22+
dialog = AlertDialog.Builder(activity)
23+
.setPositiveButton(R.string.ok, null)
24+
.setNegativeButton(R.string.cancel, null)
25+
.create().apply {
26+
activity.setupDialogStuff(view, this, R.string.import_folder) {
27+
getButton(AlertDialog.BUTTON_POSITIVE).setOnClickListener {
28+
val updateFilesOnEdit = view.open_file_type.checkedRadioButtonId == R.id.open_file_update_file
29+
saveFolder(updateFilesOnEdit)
30+
}
31+
}
32+
}
33+
}
34+
35+
private fun saveFolder(updateFilesOnEdit: Boolean) {
36+
val folder = File(path)
37+
var lastSavedNoteId = -1;
38+
folder.listFiles({ file ->
39+
val filename = file.path.getFilenameFromPath()
40+
when {
41+
filename.isImageVideoGif() -> false
42+
file.length() > 10 * 1000 * 1000 -> false
43+
activity.dbHelper.doesTitleExist(filename) -> false
44+
else -> true
45+
}
46+
}).forEach {
47+
val storePath = if (updateFilesOnEdit) it.path else ""
48+
val storeContent = if (updateFilesOnEdit) "" else it.readText()
49+
50+
if (updateFilesOnEdit) {
51+
activity.handleSAFDialog(path) {
52+
lastSavedNoteId = saveNote(storeContent, storePath)
53+
}
54+
} else {
55+
lastSavedNoteId = saveNote(storeContent, storePath)
56+
}
57+
}
58+
59+
if (lastSavedNoteId != -1) {
60+
callback(lastSavedNoteId)
61+
}
62+
63+
dialog.dismiss()
64+
}
65+
66+
private fun saveNote(storeContent: String, storePath: String): Int {
67+
val filename = storePath.getFilenameFromPath()
68+
val note = Note(0, filename, storeContent, TYPE_NOTE, storePath)
69+
val id = activity.dbHelper.insertNote(note)
70+
return id
71+
}
72+
}
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<LinearLayout
3+
xmlns:android="http://schemas.android.com/apk/res/android"
4+
android:id="@+id/open_file_holder"
5+
android:layout_width="match_parent"
6+
android:layout_height="match_parent"
7+
android:orientation="vertical"
8+
android:paddingLeft="@dimen/activity_margin"
9+
android:paddingRight="@dimen/activity_margin"
10+
android:paddingTop="@dimen/activity_margin">
11+
12+
<com.simplemobiletools.commons.views.MyTextView
13+
android:id="@+id/open_file_filename_label"
14+
android:layout_width="wrap_content"
15+
android:layout_height="wrap_content"
16+
android:text="@string/filename"
17+
android:textSize="@dimen/smaller_text_size"/>
18+
19+
<com.simplemobiletools.commons.views.MyTextView
20+
android:id="@+id/open_file_filename"
21+
android:layout_width="match_parent"
22+
android:layout_height="wrap_content"
23+
android:layout_marginBottom="@dimen/activity_margin"
24+
android:layout_marginLeft="@dimen/activity_margin"
25+
android:paddingRight="@dimen/small_margin"
26+
android:paddingTop="@dimen/small_margin"/>
27+
28+
<RadioGroup
29+
android:id="@+id/open_file_type"
30+
android:layout_width="match_parent"
31+
android:layout_height="wrap_content">
32+
33+
<com.simplemobiletools.commons.views.MyCompatRadioButton
34+
android:id="@+id/open_file_update_file"
35+
android:layout_width="match_parent"
36+
android:layout_height="wrap_content"
37+
android:checked="true"
38+
android:paddingBottom="@dimen/activity_margin"
39+
android:paddingTop="@dimen/activity_margin"
40+
android:text="@string/update_file_at_note"/>
41+
42+
<com.simplemobiletools.commons.views.MyCompatRadioButton
43+
android:id="@+id/open_file_content_only"
44+
android:layout_width="match_parent"
45+
android:layout_height="wrap_content"
46+
android:paddingBottom="@dimen/activity_margin"
47+
android:paddingTop="@dimen/activity_margin"
48+
android:text="@string/only_import_file_content"/>
49+
50+
</RadioGroup>
51+
</LinearLayout>

app/src/main/res/menu/menu.xml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,10 @@
3030
android:id="@+id/open_file"
3131
android:title="@string/open_file"
3232
app:showAsAction="never"/>
33+
<item
34+
android:id="@+id/import_folder"
35+
android:title="@string/import_folder"
36+
app:showAsAction="never"/>
3337
<item
3438
android:id="@+id/export_as_file"
3539
android:title="@string/export_as_file"

0 commit comments

Comments
 (0)