mirror of
https://github.com/SimpleMobileTools/Simple-Notes.git
synced 2025-03-23 03:50:07 +01:00
Remove note protection if biometric id is no longer available
This check is done to avoid user not being able to unlock the note if he removes biometric id from phone settings.
This commit is contained in:
parent
e9131cabe5
commit
a2faa7107f
@ -316,8 +316,11 @@ class MainActivity : SimpleActivity() {
|
||||
}
|
||||
|
||||
private fun initViewPager(wantedNoteId: Long? = null) {
|
||||
NotesHelper(this).getNotes {
|
||||
mNotes = it
|
||||
NotesHelper(this).getNotes { notes ->
|
||||
notes.filter { it.isBiometricLockUnavailable(this) }
|
||||
.forEach(::removeProtection)
|
||||
|
||||
mNotes = notes
|
||||
invalidateOptionsMenu()
|
||||
mCurrentNote = mNotes[0]
|
||||
mAdapter = NotesPagerAdapter(supportFragmentManager, mNotes, this)
|
||||
@ -1084,19 +1087,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.isBiometricLockUnavailable(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.isBiometricLockUnavailable(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,8 @@ 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,8 @@ 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 +265,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 +289,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 isBiometricLockUnavailable(context: Context): Boolean {
|
||||
return protectionType == PROTECTION_FINGERPRINT && !context.isBiometricIdAvailable()
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user