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:
Andrii Chubko 2021-08-27 16:38:59 +03:00
parent e9131cabe5
commit a2faa7107f
5 changed files with 60 additions and 36 deletions

View File

@ -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()
}
}

View File

@ -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(

View File

@ -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)

View File

@ -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

View File

@ -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()
}
}