diff --git a/app/src/main/kotlin/com/simplemobiletools/notes/activities/MainActivity.kt b/app/src/main/kotlin/com/simplemobiletools/notes/activities/MainActivity.kt index 81af578e..f55dee5b 100644 --- a/app/src/main/kotlin/com/simplemobiletools/notes/activities/MainActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/notes/activities/MainActivity.kt @@ -14,10 +14,7 @@ import android.view.MenuItem import com.simplemobiletools.commons.dialogs.FilePickerDialog import com.simplemobiletools.commons.dialogs.RadioGroupDialog import com.simplemobiletools.commons.extensions.* -import com.simplemobiletools.commons.helpers.LICENSE_LEAK_CANARY -import com.simplemobiletools.commons.helpers.LICENSE_RTL -import com.simplemobiletools.commons.helpers.LICENSE_STETHO -import com.simplemobiletools.commons.helpers.PERMISSION_WRITE_STORAGE +import com.simplemobiletools.commons.helpers.* import com.simplemobiletools.commons.models.FAQItem import com.simplemobiletools.commons.models.FileDirItem import com.simplemobiletools.commons.models.RadioItem @@ -138,6 +135,7 @@ class MainActivity : SimpleActivity(), ViewPager.OnPageChangeListener { R.id.rename_note -> displayRenameDialog() R.id.share -> shareText() R.id.open_file -> tryOpenFile() + R.id.import_folder -> tryOpenFolder() R.id.export_as_file -> tryExportAsFile() R.id.export_all_notes -> tryExportAllNotes() R.id.delete_note -> displayDeleteNotePrompt() @@ -309,6 +307,13 @@ class MainActivity : SimpleActivity(), ViewPager.OnPageChangeListener { } } + private fun openFolder(path: String, onChecksPassed: (file: File) -> Unit) { + val file = File(path) + if (file.isDirectory) { + onChecksPassed(file) + } + } + private fun importFileWithSync(uri: Uri) { when (uri.scheme) { "file" -> openPath(uri.path) @@ -334,6 +339,31 @@ class MainActivity : SimpleActivity(), ViewPager.OnPageChangeListener { } } + private fun tryOpenFolder() { + handlePermission(PERMISSION_READ_STORAGE) { + if (it) { + openFolder() + } + } + } + + private fun openFolder() { + FilePickerDialog(this, pickFile = false) { + openFolder(it) { + ImportFolderDialog(this, it.path) { + mNotes = dbHelper.getNotes() + showSaveButton = false + invalidateOptionsMenu() + initViewPager() + updateSelectedNote(it) + view_pager.onGlobalLayout { + mAdapter?.focusEditText(getNoteIndexWithId(it)) + } + } + } + } + } + private fun tryExportAsFile() { handlePermission(PERMISSION_WRITE_STORAGE) { if (it) { diff --git a/app/src/main/kotlin/com/simplemobiletools/notes/dialogs/ImportFolderDialog.kt b/app/src/main/kotlin/com/simplemobiletools/notes/dialogs/ImportFolderDialog.kt new file mode 100644 index 00000000..78eb269b --- /dev/null +++ b/app/src/main/kotlin/com/simplemobiletools/notes/dialogs/ImportFolderDialog.kt @@ -0,0 +1,72 @@ +package com.simplemobiletools.notes.dialogs + +import android.support.v7.app.AlertDialog +import android.view.ViewGroup +import com.simplemobiletools.commons.extensions.* +import com.simplemobiletools.notes.R +import com.simplemobiletools.notes.activities.SimpleActivity +import com.simplemobiletools.notes.extensions.dbHelper +import com.simplemobiletools.notes.helpers.TYPE_NOTE +import com.simplemobiletools.notes.models.Note +import kotlinx.android.synthetic.main.dialog_open_file.view.* +import java.io.File + +class ImportFolderDialog(val activity: SimpleActivity, val path: String, val callback: (id: Int) -> Unit) : AlertDialog.Builder(activity) { + private var dialog: AlertDialog + + init { + val view = (activity.layoutInflater.inflate(R.layout.dialog_import_folder, null) as ViewGroup).apply { + open_file_filename.text = activity.humanizePath(path) + } + + dialog = AlertDialog.Builder(activity) + .setPositiveButton(R.string.ok, null) + .setNegativeButton(R.string.cancel, null) + .create().apply { + activity.setupDialogStuff(view, this, R.string.import_folder) { + getButton(AlertDialog.BUTTON_POSITIVE).setOnClickListener { + val updateFilesOnEdit = view.open_file_type.checkedRadioButtonId == R.id.open_file_update_file + saveFolder(updateFilesOnEdit) + } + } + } + } + + private fun saveFolder(updateFilesOnEdit: Boolean) { + val folder = File(path) + var lastSavedNoteId = -1; + folder.listFiles({ file -> + val filename = file.path.getFilenameFromPath() + when { + filename.isImageVideoGif() -> false + file.length() > 10 * 1000 * 1000 -> false + activity.dbHelper.doesTitleExist(filename) -> false + else -> true + } + }).forEach { + val storePath = if (updateFilesOnEdit) it.path else "" + val storeContent = if (updateFilesOnEdit) "" else it.readText() + + if (updateFilesOnEdit) { + activity.handleSAFDialog(path) { + lastSavedNoteId = saveNote(storeContent, storePath) + } + } else { + lastSavedNoteId = saveNote(storeContent, storePath) + } + } + + if (lastSavedNoteId != -1) { + callback(lastSavedNoteId) + } + + dialog.dismiss() + } + + private fun saveNote(storeContent: String, storePath: String): Int { + val filename = storePath.getFilenameFromPath() + val note = Note(0, filename, storeContent, TYPE_NOTE, storePath) + val id = activity.dbHelper.insertNote(note) + return id + } +} \ No newline at end of file diff --git a/app/src/main/res/layout/dialog_import_folder.xml b/app/src/main/res/layout/dialog_import_folder.xml new file mode 100644 index 00000000..be44a9b5 --- /dev/null +++ b/app/src/main/res/layout/dialog_import_folder.xml @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + + diff --git a/app/src/main/res/menu/menu.xml b/app/src/main/res/menu/menu.xml index ddccadaa..b0bc0735 100644 --- a/app/src/main/res/menu/menu.xml +++ b/app/src/main/res/menu/menu.xml @@ -30,6 +30,10 @@ android:id="@+id/open_file" android:title="@string/open_file" app:showAsAction="never"/> +