mirror of
https://github.com/SimpleMobileTools/Simple-Notes.git
synced 2025-06-05 17:00:23 +02:00
Merge branch 'master' into fix-import-dialog
This commit is contained in:
@ -319,8 +319,11 @@ class MainActivity : SimpleActivity() {
|
||||
}
|
||||
|
||||
private fun initViewPager(wantedNoteId: Long? = null) {
|
||||
NotesHelper(this).getNotes {
|
||||
mNotes = it
|
||||
NotesHelper(this).getNotes { notes ->
|
||||
notes.filter { it.shouldBeUnlocked(this) }
|
||||
.forEach(::removeProtection)
|
||||
|
||||
mNotes = notes
|
||||
invalidateOptionsMenu()
|
||||
mCurrentNote = mNotes[0]
|
||||
mAdapter = NotesPagerAdapter(supportFragmentManager, mNotes, this)
|
||||
@ -750,17 +753,19 @@ class MainActivity : SimpleActivity() {
|
||||
|
||||
RadioGroupDialog(this, items) {
|
||||
val syncFile = it as Int == EXPORT_FILE_SYNC
|
||||
tryExportNoteValueToFile(exportPath, textToExport, true) {
|
||||
if (syncFile) {
|
||||
mCurrentNote.path = exportPath
|
||||
mCurrentNote.value = ""
|
||||
} else {
|
||||
mCurrentNote.path = ""
|
||||
mCurrentNote.value = textToExport
|
||||
}
|
||||
tryExportNoteValueToFile(exportPath, textToExport, true) { exportedSuccessfully ->
|
||||
if (exportedSuccessfully) {
|
||||
if (syncFile) {
|
||||
mCurrentNote.path = exportPath
|
||||
mCurrentNote.value = ""
|
||||
} else {
|
||||
mCurrentNote.path = ""
|
||||
mCurrentNote.value = textToExport
|
||||
}
|
||||
|
||||
getPagerAdapter().updateCurrentNoteData(view_pager.currentItem, mCurrentNote.path, mCurrentNote.value)
|
||||
NotesHelper(this).insertOrUpdateNote(mCurrentNote)
|
||||
getPagerAdapter().updateCurrentNoteData(view_pager.currentItem, mCurrentNote.path, mCurrentNote.value)
|
||||
NotesHelper(this).insertOrUpdateNote(mCurrentNote)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -792,23 +797,26 @@ class MainActivity : SimpleActivity() {
|
||||
toast(String.format(getString(R.string.filename_invalid_characters_placeholder, filename)))
|
||||
} else {
|
||||
val noteStoredValue = note.getNoteStoredValue(this) ?: ""
|
||||
tryExportNoteValueToFile(file.absolutePath, note.value, false) {
|
||||
if (syncFile) {
|
||||
note.path = file.absolutePath
|
||||
note.value = ""
|
||||
} else {
|
||||
note.path = ""
|
||||
note.value = noteStoredValue
|
||||
tryExportNoteValueToFile(file.absolutePath, note.value, false) { exportedSuccessfully ->
|
||||
if (exportedSuccessfully) {
|
||||
if (syncFile) {
|
||||
note.path = file.absolutePath
|
||||
note.value = ""
|
||||
} else {
|
||||
note.path = ""
|
||||
note.value = noteStoredValue
|
||||
}
|
||||
|
||||
NotesHelper(this).insertOrUpdateNote(note)
|
||||
}
|
||||
|
||||
NotesHelper(this).insertOrUpdateNote(note)
|
||||
if (mCurrentNote.id == note.id) {
|
||||
mCurrentNote.value = note.value
|
||||
mCurrentNote.path = note.path
|
||||
getPagerAdapter().updateCurrentNoteData(view_pager.currentItem, mCurrentNote.path, mCurrentNote.value)
|
||||
}
|
||||
|
||||
if (!it) {
|
||||
if (!exportedSuccessfully) {
|
||||
failCount++
|
||||
}
|
||||
|
||||
@ -880,7 +888,7 @@ class MainActivity : SimpleActivity() {
|
||||
|
||||
private fun exportNoteValueToUri(uri: Uri, content: String, callback: ((success: Boolean) -> Unit)? = null) {
|
||||
try {
|
||||
val outputStream = contentResolver.openOutputStream(uri, "wt")
|
||||
val outputStream = contentResolver.openOutputStream(uri, "rwt")
|
||||
outputStream!!.bufferedWriter().use { out ->
|
||||
out.write(content)
|
||||
}
|
||||
@ -1087,19 +1095,21 @@ class MainActivity : SimpleActivity() {
|
||||
performSecurityCheck(
|
||||
protectionType = mCurrentNote.protectionType,
|
||||
requiredHash = mCurrentNote.protectionHash,
|
||||
successCallback = { _, _ -> removeProtection() }
|
||||
successCallback = { _, _ -> removeProtection(mCurrentNote) }
|
||||
)
|
||||
}
|
||||
|
||||
private fun removeProtection() {
|
||||
mCurrentNote.protectionHash = ""
|
||||
mCurrentNote.protectionType = PROTECTION_NONE
|
||||
NotesHelper(this).insertOrUpdateNote(mCurrentNote) {
|
||||
getCurrentFragment()?.apply {
|
||||
shouldShowLockedContent = true
|
||||
checkLockState()
|
||||
private fun removeProtection(note: Note) {
|
||||
note.protectionHash = ""
|
||||
note.protectionType = PROTECTION_NONE
|
||||
NotesHelper(this).insertOrUpdateNote(note) {
|
||||
if (note == mCurrentNote) {
|
||||
getCurrentFragment()?.apply {
|
||||
shouldShowLockedContent = true
|
||||
checkLockState()
|
||||
}
|
||||
invalidateOptionsMenu()
|
||||
}
|
||||
invalidateOptionsMenu()
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -104,16 +104,18 @@ class WidgetConfigureActivity : SimpleActivity() {
|
||||
|
||||
if (mNotes.size == 1 && note == null) {
|
||||
note = mNotes.first()
|
||||
performSecurityCheck(
|
||||
protectionType = note.protectionType,
|
||||
requiredHash = note.protectionHash,
|
||||
successCallback = { _, _ -> updateCurrentNote(note) },
|
||||
failureCallback = { finish() }
|
||||
)
|
||||
} else {
|
||||
if (note != null) {
|
||||
if (note.shouldBeUnlocked(this)) {
|
||||
updateCurrentNote(note)
|
||||
} else {
|
||||
performSecurityCheck(
|
||||
protectionType = note.protectionType,
|
||||
requiredHash = note.protectionHash,
|
||||
successCallback = { _, _ -> updateCurrentNote(note) },
|
||||
failureCallback = { finish() }
|
||||
)
|
||||
}
|
||||
} else if (note != null) {
|
||||
updateCurrentNote(note)
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -127,7 +129,7 @@ class WidgetConfigureActivity : SimpleActivity() {
|
||||
RadioGroupDialog(this, items, mCurrentNoteId.toInt()) {
|
||||
val selectedId = it as Int
|
||||
val note = mNotes.firstOrNull { it.id!!.toInt() == selectedId } ?: return@RadioGroupDialog
|
||||
if (note.protectionType == PROTECTION_NONE) {
|
||||
if (note.protectionType == PROTECTION_NONE || note.shouldBeUnlocked(this)) {
|
||||
updateCurrentNote(note)
|
||||
} else {
|
||||
performSecurityCheck(
|
||||
|
@ -78,11 +78,13 @@ class ChecklistFragment : NoteFragment(), ChecklistItemsListener {
|
||||
items.clear()
|
||||
|
||||
note.value.split("\n").map { it.trim() }.filter { it.isNotBlank() }.forEachIndexed { index, value ->
|
||||
items.add(ChecklistItem(
|
||||
id = index,
|
||||
title = value,
|
||||
isDone = false
|
||||
))
|
||||
items.add(
|
||||
ChecklistItem(
|
||||
id = index,
|
||||
title = value,
|
||||
isDone = false
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
saveChecklist()
|
||||
@ -120,6 +122,10 @@ class ChecklistFragment : NoteFragment(), ChecklistItemsListener {
|
||||
}
|
||||
|
||||
override fun checkLockState() {
|
||||
if (note == null) {
|
||||
return
|
||||
}
|
||||
|
||||
view.apply {
|
||||
checklist_content_holder.beVisibleIf(!note!!.isLocked() || shouldShowLockedContent)
|
||||
checklist_fab.beVisibleIf(!note!!.isLocked() || shouldShowLockedContent)
|
||||
|
@ -176,6 +176,10 @@ class TextFragment : NoteFragment() {
|
||||
fun removeTextWatcher() = view.text_note_view.removeTextChangedListener(textWatcher)
|
||||
|
||||
override fun checkLockState() {
|
||||
if (note == null) {
|
||||
return
|
||||
}
|
||||
|
||||
view.apply {
|
||||
notes_counter.beVisibleIf((!note!!.isLocked() || shouldShowLockedContent) && config!!.showWordCount)
|
||||
notes_scrollview.beVisibleIf(!note!!.isLocked() || shouldShowLockedContent)
|
||||
@ -263,11 +267,13 @@ class TextFragment : NoteFragment() {
|
||||
text.removeSpan(span)
|
||||
}
|
||||
|
||||
Selection.setSelection(text, if (edit.before == null) {
|
||||
start
|
||||
} else {
|
||||
start + edit.before.length
|
||||
})
|
||||
Selection.setSelection(
|
||||
text, if (edit.before == null) {
|
||||
start
|
||||
} else {
|
||||
start + edit.before.length
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
fun redo() {
|
||||
@ -285,11 +291,13 @@ class TextFragment : NoteFragment() {
|
||||
text.removeSpan(o)
|
||||
}
|
||||
|
||||
Selection.setSelection(text, if (edit.after == null) {
|
||||
start
|
||||
} else {
|
||||
start + edit.after.length
|
||||
})
|
||||
Selection.setSelection(
|
||||
text, if (edit.after == null) {
|
||||
start
|
||||
} else {
|
||||
start + edit.after.length
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
fun isUndoAvailable() = textHistory.position > 0
|
||||
|
@ -6,6 +6,8 @@ import androidx.room.ColumnInfo
|
||||
import androidx.room.Entity
|
||||
import androidx.room.Index
|
||||
import androidx.room.PrimaryKey
|
||||
import com.simplemobiletools.commons.extensions.isBiometricIdAvailable
|
||||
import com.simplemobiletools.commons.helpers.PROTECTION_FINGERPRINT
|
||||
import com.simplemobiletools.commons.helpers.PROTECTION_NONE
|
||||
import java.io.File
|
||||
|
||||
@ -17,7 +19,8 @@ data class Note(
|
||||
@ColumnInfo(name = "type") var type: Int,
|
||||
@ColumnInfo(name = "path") var path: String,
|
||||
@ColumnInfo(name = "protection_type") var protectionType: Int,
|
||||
@ColumnInfo(name = "protection_hash") var protectionHash: String) {
|
||||
@ColumnInfo(name = "protection_hash") var protectionHash: String
|
||||
) {
|
||||
|
||||
fun getNoteStoredValue(context: Context): String? {
|
||||
return if (path.isNotEmpty()) {
|
||||
@ -37,4 +40,8 @@ data class Note(
|
||||
}
|
||||
|
||||
fun isLocked() = protectionType != PROTECTION_NONE
|
||||
|
||||
fun shouldBeUnlocked(context: Context): Boolean {
|
||||
return protectionType == PROTECTION_FINGERPRINT && !context.isBiometricIdAvailable()
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user