From c0b8cfb3e2108d999dc5af47ee6974a78786cab9 Mon Sep 17 00:00:00 2001 From: Evgeny Date: Wed, 7 Aug 2024 11:01:23 +0100 Subject: [PATCH] ui: reset hints in dev tools (#4613) * ui: reset hints in dev tools * fix disabled, icon, remove damage * icon --- .../Views/UserSettings/DeveloperView.swift | 21 ++++++++++++++++ .../Views/UserSettings/SettingsView.swift | 12 +++++++++ .../chat/simplex/common/model/SimpleXAPI.kt | 10 ++++++++ .../views/usersettings/DeveloperView.kt | 3 +++ .../common/views/usersettings/SettingsView.kt | 25 +++++++++++++++++++ .../commonMain/resources/MR/base/strings.xml | 1 + .../resources/MR/images/ic_lightbulb.svg | 4 +++ 7 files changed, 76 insertions(+) create mode 100644 apps/multiplatform/common/src/commonMain/resources/MR/images/ic_lightbulb.svg diff --git a/apps/ios/Shared/Views/UserSettings/DeveloperView.swift b/apps/ios/Shared/Views/UserSettings/DeveloperView.swift index 5bc86d2cc4..4ef05bd998 100644 --- a/apps/ios/Shared/Views/UserSettings/DeveloperView.swift +++ b/apps/ios/Shared/Views/UserSettings/DeveloperView.swift @@ -13,6 +13,8 @@ struct DeveloperView: View { @EnvironmentObject var theme: AppTheme @AppStorage(DEFAULT_DEVELOPER_TOOLS) private var developerTools = false @AppStorage(GROUP_DEFAULT_CONFIRM_DB_UPGRADES, store: groupDefaults) private var confirmDatabaseUpgrades = false + @State private var hintsUnchanged = hintDefaultsUnchanged() + @Environment(\.colorScheme) var colorScheme var body: some View { @@ -33,6 +35,10 @@ struct DeveloperView: View { } label: { settingsRow("terminal", color: theme.colors.secondary) { Text("Chat console") } } + settingsRow("lightbulb.max", color: theme.colors.secondary) { + Button("Reset all hints", action: resetHintDefaults) + .disabled(hintsUnchanged) + } settingsRow("chevron.left.forwardslash.chevron.right", color: theme.colors.secondary) { Toggle("Show developer options", isOn: $developerTools) } @@ -55,6 +61,21 @@ struct DeveloperView: View { } } } + + private func resetHintDefaults() { + for def in hintDefaults { + if let val = appDefaults[def] as? Bool { + UserDefaults.standard.set(val, forKey: def) + } + } + hintsUnchanged = true + } +} + +private func hintDefaultsUnchanged() -> Bool { + hintDefaults.allSatisfy { def in + appDefaults[def] as? Bool == UserDefaults.standard.bool(forKey: def) + } } struct DeveloperView_Previews: PreviewProvider { diff --git a/apps/ios/Shared/Views/UserSettings/SettingsView.swift b/apps/ios/Shared/Views/UserSettings/SettingsView.swift index fe85c420ac..51ce56939e 100644 --- a/apps/ios/Shared/Views/UserSettings/SettingsView.swift +++ b/apps/ios/Shared/Views/UserSettings/SettingsView.swift @@ -120,6 +120,18 @@ let appDefaults: [String: Any] = [ DEFAULT_CURRENT_THEME_IDS: "{}" ] +// only Bool defaults can be used here, +// or hintDefaultsUnchanged and resetHintDefaults need to be changed +let hintDefaults = [ + DEFAULT_LA_NOTICE_SHOWN, + DEFAULT_ONE_HAND_UI_CARD_SHOWN, + DEFAULT_LIVE_MESSAGE_ALERT_SHOWN, + DEFAULT_SHOW_HIDDEN_PROFILES_NOTICE, + DEFAULT_SHOW_MUTE_PROFILE_ALERT, + DEFAULT_SHOW_DELETE_CONVERSATION_NOTICE, + DEFAULT_SHOW_DELETE_CONTACT_NOTICE +] + // not used anymore enum ConnectViaLinkTab: String { case scan diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/model/SimpleXAPI.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/model/SimpleXAPI.kt index 4f193bebd2..daa75452c3 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/model/SimpleXAPI.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/model/SimpleXAPI.kt @@ -227,6 +227,16 @@ class AppPreferences { val oneHandUI = mkBoolPreference(SHARED_PREFS_ONE_HAND_UI, appPlatform.isAndroid) + val hintPreferences: List, Boolean>> = listOf( + laNoticeShown to false, + // SHARED_PREFS_ONE_HAND_UI_CARD_SHOWN to false, + liveMessageAlertShown to false, + showHiddenProfilesNotice to true, + showMuteProfileAlert to true, + showDeleteConversationNotice to true, + showDeleteContactNotice to true, + ) + private fun mkIntPreference(prefName: String, default: Int) = SharedPreference( get = fun() = settings.getInt(prefName, default), diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/DeveloperView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/DeveloperView.kt index ef8c30b43a..8a6e4efe32 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/DeveloperView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/DeveloperView.kt @@ -9,6 +9,7 @@ import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.verticalScroll import androidx.compose.runtime.* +import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalUriHandler import chat.simplex.common.model.* @@ -30,9 +31,11 @@ fun DeveloperView( AppBarTitle(stringResource(MR.strings.settings_developer_tools)) val developerTools = m.controller.appPrefs.developerTools val devTools = remember { developerTools.state } + val unchangedHints = mutableStateOf(unchangedHintPreferences()) SectionView { InstallTerminalAppItem(uriHandler) ChatConsoleItem { withAuth(generalGetString(MR.strings.auth_open_chat_console), generalGetString(MR.strings.auth_log_in_using_credential), showCustomModal { it, close -> TerminalView(it, close) }) } + ResetHintsItem(unchangedHints) SettingsPreferenceItem(painterResource(MR.images.ic_code), stringResource(MR.strings.show_developer_options), developerTools) SectionTextFooter( generalGetString(if (devTools.value) MR.strings.show_dev_options else MR.strings.hide_dev_options) + " " + diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/SettingsView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/SettingsView.kt index b0aa365a21..442bced4d9 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/SettingsView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/SettingsView.kt @@ -330,6 +330,31 @@ fun ChatLockItem( } } +@Composable fun ResetHintsItem(unchangedHints: MutableState) { + SectionItemView({ + resetHintPreferences() + unchangedHints.value = true + }, disabled = unchangedHints.value) { + Icon( + painter = painterResource(MR.images.ic_lightbulb), + contentDescription = "Lightbulb", + tint = MaterialTheme.colors.secondary, + ) + TextIconSpaced() + Text(generalGetString(MR.strings.reset_all_hints), color = if (unchangedHints.value) MaterialTheme.colors.secondary else MaterialTheme.colors.primary) + } +} + +private fun resetHintPreferences() { + for ((pref, def) in appPreferences.hintPreferences) { + pref.set(def) + } +} + +fun unchangedHintPreferences(): Boolean = appPreferences.hintPreferences.all { (pref, def) -> + pref.state.value == def +} + @Composable fun AppVersionItem(showVersion: () -> Unit) { SectionItemViewWithIcon(showVersion) { AppVersionText() } diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/base/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/base/strings.xml index bdd54811ac..ca083d91f9 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/base/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/base/strings.xml @@ -739,6 +739,7 @@ Other XFTP servers Show percentage Install SimpleX Chat for terminal + Reset all hints Star on GitHub Contribute Rate the app diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_lightbulb.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_lightbulb.svg new file mode 100644 index 0000000000..689e5c2d5c --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_lightbulb.svg @@ -0,0 +1,4 @@ + + + \ No newline at end of file