77 * @author Christian Schabesberger
88 * @author David Crespo Ríos
99 * @author Juan Carlos Garrote Gascón
10+ * @author Aitor Ballesteros Pavón
1011 *
11- * Copyright (C) 2023 ownCloud GmbH.
12+ * Copyright (C) 2024 ownCloud GmbH.
1213 *
1314 * This program is free software: you can redistribute it and/or modify
1415 * it under the terms of the GNU General Public License version 2,
@@ -37,7 +38,6 @@ import android.view.WindowManager
3738import android.widget.CheckBox
3839import androidx.appcompat.app.AlertDialog
3940import androidx.core.content.pm.PackageInfoCompat
40- import com.owncloud.android.presentation.authentication.AccountUtils
4141import com.owncloud.android.data.providers.implementation.OCSharedPreferencesProvider
4242import com.owncloud.android.datamodel.ThumbnailsCacheManager
4343import com.owncloud.android.db.PreferenceManager
@@ -52,19 +52,21 @@ import com.owncloud.android.domain.spaces.model.OCSpace
5252import com.owncloud.android.domain.spaces.usecases.GetPersonalSpaceForAccountUseCase
5353import com.owncloud.android.extensions.createNotificationChannel
5454import com.owncloud.android.lib.common.SingleSessionManager
55+ import com.owncloud.android.presentation.authentication.AccountUtils
5556import com.owncloud.android.presentation.migration.StorageMigrationActivity
5657import com.owncloud.android.presentation.releasenotes.ReleaseNotesActivity
5758import com.owncloud.android.presentation.security.biometric.BiometricActivity
5859import com.owncloud.android.presentation.security.biometric.BiometricManager
59- import com.owncloud.android.presentation.security.pattern.PatternActivity
60- import com.owncloud.android.presentation.security.pattern.PatternManager
6160import com.owncloud.android.presentation.security.passcode.PassCodeActivity
6261import com.owncloud.android.presentation.security.passcode.PassCodeManager
62+ import com.owncloud.android.presentation.security.pattern.PatternActivity
63+ import com.owncloud.android.presentation.security.pattern.PatternManager
6364import com.owncloud.android.presentation.settings.logging.SettingsLogsFragment.Companion.PREFERENCE_ENABLE_LOGGING
6465import com.owncloud.android.providers.CoroutinesDispatcherProvider
6566import com.owncloud.android.providers.LogsProvider
6667import com.owncloud.android.providers.MdmProvider
6768import com.owncloud.android.ui.activity.FileDisplayActivity
69+ import com.owncloud.android.ui.activity.FileDisplayActivity.Companion.PREFERENCE_CLEAR_DATA_ALREADY_TRIGGERED
6870import com.owncloud.android.ui.activity.WhatsNewActivity
6971import com.owncloud.android.utils.CONFIGURATION_ALLOW_SCREENSHOTS
7072import com.owncloud.android.utils.DOWNLOAD_NOTIFICATION_CHANNEL_ID
@@ -133,24 +135,30 @@ class MainApp : Application() {
133135 ReleaseNotesActivity .runIfNeeded(activity)
134136
135137 val pref = PreferenceManager .getDefaultSharedPreferences(appContext)
136- val dontShowAgainDialogPref = pref.getBoolean(PREFERENCE_KEY_DONT_SHOW_OCIS_ACCOUNT_WARNING_DIALOG , false )
137- if (! dontShowAgainDialogPref && shouldShowDialog(activity)) {
138- val checkboxDialog = activity.layoutInflater.inflate(R .layout.checkbox_dialog, null )
139- val checkbox = checkboxDialog.findViewById<CheckBox >(R .id.checkbox_dialog)
140- checkbox.setText(R .string.ocis_accounts_warning_checkbox_message)
141- val builder = AlertDialog .Builder (activity).apply {
142- setView(checkboxDialog)
143- setTitle(R .string.ocis_accounts_warning_title)
144- setMessage(R .string.ocis_accounts_warning_message)
145- setCancelable(false )
146- setPositiveButton(R .string.ocis_accounts_warning_button) { _, _ ->
147- if (checkbox.isChecked) {
148- pref.edit().putBoolean(PREFERENCE_KEY_DONT_SHOW_OCIS_ACCOUNT_WARNING_DIALOG , true ).apply ()
138+ val clearDataAlreadyTriggered = pref.contains(PREFERENCE_CLEAR_DATA_ALREADY_TRIGGERED )
139+ if (clearDataAlreadyTriggered || isNewVersionCode()) {
140+ val dontShowAgainDialogPref = pref.getBoolean(PREFERENCE_KEY_DONT_SHOW_OCIS_ACCOUNT_WARNING_DIALOG , false )
141+ if (! dontShowAgainDialogPref && shouldShowDialog(activity)) {
142+ val checkboxDialog = activity.layoutInflater.inflate(R .layout.checkbox_dialog, null )
143+ val checkbox = checkboxDialog.findViewById<CheckBox >(R .id.checkbox_dialog)
144+ checkbox.setText(R .string.ocis_accounts_warning_checkbox_message)
145+ val builder = AlertDialog .Builder (activity).apply {
146+ setView(checkboxDialog)
147+ setTitle(R .string.ocis_accounts_warning_title)
148+ setMessage(R .string.ocis_accounts_warning_message)
149+ setCancelable(false )
150+ setPositiveButton(R .string.ocis_accounts_warning_button) { _, _ ->
151+ if (checkbox.isChecked) {
152+ pref.edit().putBoolean(PREFERENCE_KEY_DONT_SHOW_OCIS_ACCOUNT_WARNING_DIALOG , true ).apply ()
153+ }
149154 }
150155 }
156+ val alertDialog = builder.create()
157+ alertDialog.show()
151158 }
152- val alertDialog = builder.create()
153- alertDialog.show()
159+ } else { // "Clear data" button is pressed from the app settings in the device settings.
160+ AccountUtils .deleteAccounts(appContext)
161+ WhatsNewActivity .runIfNeeded(activity)
154162 }
155163 }
156164 }
@@ -381,5 +389,13 @@ class MainApp : Application() {
381389 val pref = PreferenceManager .getDefaultSharedPreferences(appContext)
382390 return pref.getInt(PREFERENCE_KEY_LAST_SEEN_VERSION_CODE , 0 )
383391 }
392+
393+ private fun isNewVersionCode (): Boolean {
394+ val lastSeenVersionCode = getLastSeenVersionCode()
395+ if (lastSeenVersionCode == 0 ) { // The preferences have been deleted, so we can delete the accounts and navigate to login
396+ return false
397+ }
398+ return lastSeenVersionCode != versionCode // The version has changed and the accounts must not be deleted
399+ }
384400 }
385401}
0 commit comments