Skip to content

Commit 9846a62

Browse files
authored
Merge pull request #101 from FossifyOrg/fix_app_lock
Fix bug in app lock
2 parents 4142e96 + 8253e9a commit 9846a62

File tree

11 files changed

+753
-313
lines changed

11 files changed

+753
-313
lines changed
Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,7 @@
11
package org.fossify.notes
22

3-
import android.app.Application
4-
import org.fossify.commons.extensions.checkUseEnglish
3+
import org.fossify.commons.FossifyApp
54

6-
class App : Application() {
7-
override fun onCreate() {
8-
super.onCreate()
9-
checkUseEnglish()
10-
}
5+
class App : FossifyApp() {
6+
override val isAppLockFeatureAvailable = true
117
}

app/src/main/kotlin/org/fossify/notes/activities/MainActivity.kt

Lines changed: 360 additions & 114 deletions
Large diffs are not rendered by default.

app/src/main/kotlin/org/fossify/notes/activities/SettingsActivity.kt

Lines changed: 130 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -15,16 +15,58 @@ import org.fossify.commons.dialogs.ConfirmationDialog
1515
import org.fossify.commons.dialogs.PermissionRequiredDialog
1616
import org.fossify.commons.dialogs.RadioGroupDialog
1717
import org.fossify.commons.dialogs.SecurityDialog
18-
import org.fossify.commons.extensions.*
19-
import org.fossify.commons.helpers.*
18+
import org.fossify.commons.extensions.beGone
19+
import org.fossify.commons.extensions.beVisible
20+
import org.fossify.commons.extensions.beVisibleIf
21+
import org.fossify.commons.extensions.getProperPrimaryColor
22+
import org.fossify.commons.extensions.openRequestExactAlarmSettings
23+
import org.fossify.commons.extensions.showErrorToast
24+
import org.fossify.commons.extensions.toast
25+
import org.fossify.commons.extensions.updateTextColors
26+
import org.fossify.commons.extensions.viewBinding
27+
import org.fossify.commons.helpers.IS_CUSTOMIZING_COLORS
28+
import org.fossify.commons.helpers.NavigationIcon
29+
import org.fossify.commons.helpers.PROTECTION_FINGERPRINT
30+
import org.fossify.commons.helpers.SHOW_ALL_TABS
31+
import org.fossify.commons.helpers.ensureBackgroundThread
32+
import org.fossify.commons.helpers.isOreoPlus
33+
import org.fossify.commons.helpers.isQPlus
34+
import org.fossify.commons.helpers.isRPlus
35+
import org.fossify.commons.helpers.isSPlus
36+
import org.fossify.commons.helpers.isTiramisuPlus
2037
import org.fossify.commons.models.RadioItem
2138
import org.fossify.notes.BuildConfig
2239
import org.fossify.notes.R
2340
import org.fossify.notes.databinding.ActivitySettingsBinding
2441
import org.fossify.notes.dialogs.ExportNotesDialog
2542
import org.fossify.notes.dialogs.ManageAutoBackupsDialog
26-
import org.fossify.notes.extensions.*
27-
import org.fossify.notes.helpers.*
43+
import org.fossify.notes.extensions.cancelScheduledAutomaticBackup
44+
import org.fossify.notes.extensions.config
45+
import org.fossify.notes.extensions.requestUnlockNotes
46+
import org.fossify.notes.extensions.scheduleNextAutomaticBackup
47+
import org.fossify.notes.extensions.updateWidgets
48+
import org.fossify.notes.extensions.widgetsDB
49+
import org.fossify.notes.helpers.CUSTOMIZED_WIDGET_BG_COLOR
50+
import org.fossify.notes.helpers.CUSTOMIZED_WIDGET_ID
51+
import org.fossify.notes.helpers.CUSTOMIZED_WIDGET_KEY_ID
52+
import org.fossify.notes.helpers.CUSTOMIZED_WIDGET_NOTE_ID
53+
import org.fossify.notes.helpers.CUSTOMIZED_WIDGET_SHOW_TITLE
54+
import org.fossify.notes.helpers.CUSTOMIZED_WIDGET_TEXT_COLOR
55+
import org.fossify.notes.helpers.FONT_SIZE_100_PERCENT
56+
import org.fossify.notes.helpers.FONT_SIZE_125_PERCENT
57+
import org.fossify.notes.helpers.FONT_SIZE_150_PERCENT
58+
import org.fossify.notes.helpers.FONT_SIZE_175_PERCENT
59+
import org.fossify.notes.helpers.FONT_SIZE_200_PERCENT
60+
import org.fossify.notes.helpers.FONT_SIZE_250_PERCENT
61+
import org.fossify.notes.helpers.FONT_SIZE_300_PERCENT
62+
import org.fossify.notes.helpers.FONT_SIZE_50_PERCENT
63+
import org.fossify.notes.helpers.FONT_SIZE_60_PERCENT
64+
import org.fossify.notes.helpers.FONT_SIZE_75_PERCENT
65+
import org.fossify.notes.helpers.FONT_SIZE_90_PERCENT
66+
import org.fossify.notes.helpers.GRAVITY_CENTER
67+
import org.fossify.notes.helpers.GRAVITY_END
68+
import org.fossify.notes.helpers.GRAVITY_START
69+
import org.fossify.notes.helpers.NotesHelper
2870
import org.fossify.notes.models.Note
2971
import org.fossify.notes.models.Widget
3072
import java.util.Locale
@@ -47,7 +89,12 @@ class SettingsActivity : SimpleActivity() {
4789
super.onCreate(savedInstanceState)
4890
setContentView(binding.root)
4991

50-
updateMaterialActivityViews(binding.settingsCoordinator, binding.settingsHolder, useTransparentNavigation = true, useTopSearchMenu = false)
92+
updateMaterialActivityViews(
93+
mainCoordinatorLayout = binding.settingsCoordinator,
94+
nestedView = binding.settingsHolder,
95+
useTransparentNavigation = true,
96+
useTopSearchMenu = false
97+
)
5198
setupMaterialScrollListener(binding.settingsNestedScrollview, binding.settingsToolbar)
5299
}
53100

@@ -105,18 +152,19 @@ class SettingsActivity : SimpleActivity() {
105152
}
106153
}
107154

108-
private val saveDocument = registerForActivityResult(ActivityResultContracts.CreateDocument(notesFileType)) { uri ->
109-
if (uri != null) {
110-
toast(org.fossify.commons.R.string.exporting)
111-
NotesHelper(this).getNotes { notes ->
112-
requestUnlockNotes(notes) { unlockedNotes ->
113-
val notLockedNotes = notes.filterNot { it.isLocked() }
114-
val notesToExport = unlockedNotes + notLockedNotes
115-
exportNotes(notesToExport, uri)
155+
private val saveDocument =
156+
registerForActivityResult(ActivityResultContracts.CreateDocument(notesFileType)) { uri ->
157+
if (uri != null) {
158+
toast(org.fossify.commons.R.string.exporting)
159+
NotesHelper(this).getNotes { notes ->
160+
requestUnlockNotes(notes) { unlockedNotes ->
161+
val notLockedNotes = notes.filterNot { it.isLocked() }
162+
val notesToExport = unlockedNotes + notLockedNotes
163+
exportNotes(notesToExport, uri)
164+
}
116165
}
117166
}
118167
}
119-
}
120168

121169
private fun setupCustomizeColors() {
122170
binding.settingsColorCustomizationHolder.setOnClickListener {
@@ -136,9 +184,13 @@ class SettingsActivity : SimpleActivity() {
136184

137185
private fun setupLanguage() {
138186
binding.settingsLanguage.text = Locale.getDefault().displayLanguage
139-
binding.settingsLanguageHolder.beVisibleIf(isTiramisuPlus())
140-
binding.settingsLanguageHolder.setOnClickListener {
141-
launchChangeAppLanguageIntent()
187+
if (isTiramisuPlus()) {
188+
binding.settingsLanguageHolder.beVisible()
189+
binding.settingsLanguageHolder.setOnClickListener {
190+
launchChangeAppLanguageIntent()
191+
}
192+
} else {
193+
binding.settingsLanguageHolder.beGone()
142194
}
143195
}
144196

@@ -241,7 +293,9 @@ class SettingsActivity : SimpleActivity() {
241293
private fun setupGravity() {
242294
binding.settingsGravity.text = getGravityText()
243295
binding.settingsGravityHolder.setOnClickListener {
244-
val items = listOf(GRAVITY_START, GRAVITY_CENTER, GRAVITY_END).map { RadioItem(it, getGravityOptionLabel(it)) }
296+
val items = listOf(GRAVITY_START, GRAVITY_CENTER, GRAVITY_END).map {
297+
RadioItem(it, getGravityOptionLabel(it))
298+
}
245299
RadioGroupDialog(this@SettingsActivity, ArrayList(items), config.gravity) {
246300
config.gravity = it as Int
247301
binding.settingsGravity.text = getGravityText()
@@ -251,13 +305,15 @@ class SettingsActivity : SimpleActivity() {
251305
}
252306

253307
private fun getGravityOptionLabel(gravity: Int): String {
254-
val leftToRightDirection = TextUtilsCompat.getLayoutDirectionFromLocale(Locale.getDefault()) == ViewCompat.LAYOUT_DIRECTION_LTR
308+
val leftToRightDirection = TextUtilsCompat
309+
.getLayoutDirectionFromLocale(Locale.getDefault()) == ViewCompat.LAYOUT_DIRECTION_LTR
255310
val leftRightLabels = listOf(R.string.left, R.string.right)
256311
val startEndLabels = if (leftToRightDirection) {
257312
leftRightLabels
258313
} else {
259314
leftRightLabels.reversed()
260315
}
316+
261317
return getString(
262318
when (gravity) {
263319
GRAVITY_START -> startEndLabels.first()
@@ -436,8 +492,17 @@ class SettingsActivity : SimpleActivity() {
436492
private fun setupAppPasswordProtection() {
437493
binding.settingsAppPasswordProtection.isChecked = config.isAppPasswordProtectionOn
438494
binding.settingsAppPasswordProtectionHolder.setOnClickListener {
439-
val tabToShow = if (config.isAppPasswordProtectionOn) config.appProtectionType else SHOW_ALL_TABS
440-
SecurityDialog(this, config.appPasswordHash, tabToShow) { hash, type, success ->
495+
val tabToShow = if (config.isAppPasswordProtectionOn) {
496+
config.appProtectionType
497+
} else {
498+
SHOW_ALL_TABS
499+
}
500+
501+
SecurityDialog(
502+
activity = this,
503+
requiredHash = config.appPasswordHash,
504+
showTabIndex = tabToShow
505+
) { hash, type, success ->
441506
if (success) {
442507
val hasPasswordProtection = config.isAppPasswordProtectionOn
443508
binding.settingsAppPasswordProtection.isChecked = !hasPasswordProtection
@@ -446,31 +511,65 @@ class SettingsActivity : SimpleActivity() {
446511
config.appProtectionType = type
447512

448513
if (config.isAppPasswordProtectionOn) {
449-
val confirmationTextId = if (config.appProtectionType == PROTECTION_FINGERPRINT)
450-
org.fossify.commons.R.string.fingerprint_setup_successfully else org.fossify.commons.R.string.protection_setup_successfully
451-
ConfirmationDialog(this, "", confirmationTextId, org.fossify.commons.R.string.ok, 0) { }
514+
val confirmationTextId =
515+
if (config.appProtectionType == PROTECTION_FINGERPRINT) {
516+
org.fossify.commons.R.string.fingerprint_setup_successfully
517+
} else {
518+
org.fossify.commons.R.string.protection_setup_successfully
519+
}
520+
521+
ConfirmationDialog(
522+
activity = this,
523+
message = "",
524+
messageId = confirmationTextId,
525+
positive = org.fossify.commons.R.string.ok,
526+
negative = 0
527+
) { }
452528
}
453529
}
454530
}
455531
}
456532
}
457533

458534
private fun setupNoteDeletionPasswordProtection() {
459-
binding.settingsNoteDeletionPasswordProtection.isChecked = config.isDeletePasswordProtectionOn
535+
binding.settingsNoteDeletionPasswordProtection.isChecked =
536+
config.isDeletePasswordProtectionOn
537+
460538
binding.settingsNoteDeletionPasswordProtectionHolder.setOnClickListener {
461-
val tabToShow = if (config.isDeletePasswordProtectionOn) config.deleteProtectionType else SHOW_ALL_TABS
462-
SecurityDialog(this, config.deletePasswordHash, tabToShow) { hash, type, success ->
539+
val tabToShow = if (config.isDeletePasswordProtectionOn) {
540+
config.deleteProtectionType
541+
} else {
542+
SHOW_ALL_TABS
543+
}
544+
545+
SecurityDialog(
546+
activity = this,
547+
requiredHash = config.deletePasswordHash,
548+
showTabIndex = tabToShow
549+
) { hash, type, success ->
463550
if (success) {
464551
val hasPasswordProtection = config.isDeletePasswordProtectionOn
465-
binding.settingsNoteDeletionPasswordProtection.isChecked = !hasPasswordProtection
552+
binding.settingsNoteDeletionPasswordProtection.isChecked =
553+
!hasPasswordProtection
466554
config.isDeletePasswordProtectionOn = !hasPasswordProtection
467555
config.deletePasswordHash = if (hasPasswordProtection) "" else hash
468556
config.deleteProtectionType = type
469557

470558
if (config.isDeletePasswordProtectionOn) {
471-
val confirmationTextId = if (config.deleteProtectionType == PROTECTION_FINGERPRINT)
472-
org.fossify.commons.R.string.fingerprint_setup_successfully else org.fossify.commons.R.string.protection_setup_successfully
473-
ConfirmationDialog(this, "", confirmationTextId, org.fossify.commons.R.string.ok, 0) { }
559+
val confirmationTextId =
560+
if (config.deleteProtectionType == PROTECTION_FINGERPRINT) {
561+
org.fossify.commons.R.string.fingerprint_setup_successfully
562+
} else {
563+
org.fossify.commons.R.string.protection_setup_successfully
564+
}
565+
566+
ConfirmationDialog(
567+
activity = this,
568+
message = "",
569+
messageId = confirmationTextId,
570+
positive = org.fossify.commons.R.string.ok,
571+
negative = 0
572+
) { }
474573
}
475574
}
476575
}

app/src/main/kotlin/org/fossify/notes/activities/SimpleActivity.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,4 +27,6 @@ open class SimpleActivity : BaseSimpleActivity() {
2727
)
2828

2929
override fun getAppLauncherName() = getString(R.string.app_launcher_name)
30+
31+
override fun getRepositoryName() = "Notes"
3032
}

app/src/main/kotlin/org/fossify/notes/activities/WidgetConfigureActivity.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -85,10 +85,10 @@ class WidgetConfigureActivity : SimpleActivity() {
8585
} else {
8686
mBgColor = extras?.getInt(CUSTOMIZED_WIDGET_BG_COLOR) ?: config.widgetBgColor
8787
mTextColor = extras?.getInt(CUSTOMIZED_WIDGET_TEXT_COLOR) ?: config.widgetTextColor
88-
mShowTitle = extras?.getBoolean(CUSTOMIZED_WIDGET_SHOW_TITLE) ?: false
88+
mShowTitle = extras?.getBoolean(CUSTOMIZED_WIDGET_SHOW_TITLE) == true
8989
}
9090

91-
if (mTextColor == resources.getColor(org.fossify.commons.R.color.default_widget_text_color) && config.isUsingSystemTheme) {
91+
if (mTextColor == resources.getColor(org.fossify.commons.R.color.default_widget_text_color) && isDynamicTheme()) {
9292
mTextColor = resources.getColor(org.fossify.commons.R.color.you_primary_color, theme)
9393
}
9494

app/src/main/kotlin/org/fossify/notes/adapters/OpenNoteAdapter.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ class OpenNoteAdapter(
107107
Color.BLACK
108108
}
109109

110-
val cardBackground = if (context.config.isUsingSystemTheme) {
110+
val cardBackground = if (context.isDynamicTheme()) {
111111
org.fossify.commons.R.drawable.dialog_you_background
112112
} else {
113113
org.fossify.commons.R.drawable.dialog_bg

gradle/libs.versions.toml

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,20 @@
11
[versions]
22
#jetbrains
3-
kotlin = "1.9.24"
3+
kotlin = "1.9.25"
44
#KSP
55
kotlinxSerializationJson = "1.6.3"
6-
ksp = "1.9.24-1.0.20"
6+
ksp = "1.9.25-1.0.20"
77
#Detekt
88
detekt = "1.23.3"
99
#AndroidX
10-
androidx-constraintlayout = "2.1.4"
10+
androidx-constraintlayout = "2.2.1"
1111
androidx-documentfile = "1.0.1"
1212
#Room
1313
room = "2.6.1"
1414
#Fossify
15-
commons = "54f71d56a6"
15+
commons = "29e9b0d13e"
1616
#Gradle
17-
gradlePlugins-agp = "8.5.0"
17+
gradlePlugins-agp = "8.9.0"
1818
#build
1919
app-build-compileSDKVersion = "34"
2020
app-build-targetSDK = "34"

gradle/wrapper/gradle-wrapper.jar

-9.82 KB
Binary file not shown.

gradle/wrapper/gradle-wrapper.properties

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
1-
#Tue Nov 03 19:54:48 CET 2020
21
distributionBase=GRADLE_USER_HOME
32
distributionPath=wrapper/dists
3+
distributionUrl=https\://services.gradle.org/distributions/gradle-8.11.1-bin.zip
4+
networkTimeout=10000
5+
validateDistributionUrl=true
46
zipStoreBase=GRADLE_USER_HOME
57
zipStorePath=wrapper/dists
6-
distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip

0 commit comments

Comments
 (0)