diff --git a/app/src/androidTest/java/com/duckduckgo/app/browser/BrowserTabViewModelTest.kt b/app/src/androidTest/java/com/duckduckgo/app/browser/BrowserTabViewModelTest.kt index 2932c864bf68..a1b015a6c8c7 100644 --- a/app/src/androidTest/java/com/duckduckgo/app/browser/BrowserTabViewModelTest.kt +++ b/app/src/androidTest/java/com/duckduckgo/app/browser/BrowserTabViewModelTest.kt @@ -87,6 +87,7 @@ import com.duckduckgo.app.email.EmailManager import com.duckduckgo.app.fire.fireproofwebsite.data.FireproofWebsiteDao import com.duckduckgo.app.fire.fireproofwebsite.data.FireproofWebsiteEntity import com.duckduckgo.app.fire.fireproofwebsite.data.FireproofWebsiteRepositoryImpl +import com.duckduckgo.app.fire.fireproofwebsite.ui.AutomaticFireproofSetting import com.duckduckgo.app.global.DispatcherProvider import com.duckduckgo.app.global.db.AppDatabase import com.duckduckgo.app.global.events.db.UserEventsStore @@ -108,7 +109,6 @@ import com.duckduckgo.app.privacy.db.UserWhitelistDao import com.duckduckgo.app.privacy.model.TestEntity import com.duckduckgo.app.privacy.model.UserWhitelistedDomain import com.duckduckgo.app.settings.db.SettingsDataStore -import com.duckduckgo.app.settings.db.SettingsSharedPreferences.LoginDetectorPrefsMapper.AutomaticFireproofSetting import com.duckduckgo.app.statistics.api.StatisticsUpdater import com.duckduckgo.app.statistics.pixels.Pixel import com.duckduckgo.app.surrogates.SurrogateResponse diff --git a/app/src/androidTest/java/com/duckduckgo/app/browser/logindetection/BrowserTabFireproofDialogsEventHandlerTest.kt b/app/src/androidTest/java/com/duckduckgo/app/browser/logindetection/BrowserTabFireproofDialogsEventHandlerTest.kt index 820974091ea6..9b14c61a7d1d 100644 --- a/app/src/androidTest/java/com/duckduckgo/app/browser/logindetection/BrowserTabFireproofDialogsEventHandlerTest.kt +++ b/app/src/androidTest/java/com/duckduckgo/app/browser/logindetection/BrowserTabFireproofDialogsEventHandlerTest.kt @@ -25,13 +25,13 @@ import com.duckduckgo.app.browser.logindetection.FireproofDialogsEventHandler.Ev import com.duckduckgo.app.browser.logindetection.FireproofDialogsEventHandler.Event.FireproofWebSiteSuccess import com.duckduckgo.app.fire.fireproofwebsite.data.FireproofWebsiteDao import com.duckduckgo.app.fire.fireproofwebsite.data.FireproofWebsiteRepositoryImpl +import com.duckduckgo.app.fire.fireproofwebsite.ui.AutomaticFireproofSetting import com.duckduckgo.app.global.db.AppDatabase import com.duckduckgo.app.global.events.db.UserEventEntity import com.duckduckgo.app.global.events.db.UserEventKey.* import com.duckduckgo.app.global.events.db.UserEventsStore import com.duckduckgo.app.pixels.AppPixelName import com.duckduckgo.app.settings.db.SettingsDataStore -import com.duckduckgo.app.settings.db.SettingsSharedPreferences.LoginDetectorPrefsMapper.AutomaticFireproofSetting import com.duckduckgo.app.statistics.pixels.Pixel import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.test.runTest diff --git a/app/src/androidTest/java/com/duckduckgo/app/browser/logindetection/JsLoginDetectorTest.kt b/app/src/androidTest/java/com/duckduckgo/app/browser/logindetection/JsLoginDetectorTest.kt index 28e19e7767b4..0dba039edd87 100644 --- a/app/src/androidTest/java/com/duckduckgo/app/browser/logindetection/JsLoginDetectorTest.kt +++ b/app/src/androidTest/java/com/duckduckgo/app/browser/logindetection/JsLoginDetectorTest.kt @@ -24,8 +24,8 @@ import androidx.test.filters.SdkSuppress import androidx.test.platform.app.InstrumentationRegistry import com.duckduckgo.app.CoroutineTestRule import com.duckduckgo.app.browser.logindetection.LoginDetectionJavascriptInterface.Companion.JAVASCRIPT_INTERFACE_NAME +import com.duckduckgo.app.fire.fireproofwebsite.ui.AutomaticFireproofSetting import com.duckduckgo.app.settings.db.SettingsDataStore -import com.duckduckgo.app.settings.db.SettingsSharedPreferences.LoginDetectorPrefsMapper.AutomaticFireproofSetting import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.test.runTest import org.junit.Rule diff --git a/app/src/androidTest/java/com/duckduckgo/app/fire/fireproofwebsite/ui/FireproofWebsitesViewModelTest.kt b/app/src/androidTest/java/com/duckduckgo/app/fire/fireproofwebsite/ui/FireproofWebsitesViewModelTest.kt index f28cfe4519b2..f2f9fa25d056 100644 --- a/app/src/androidTest/java/com/duckduckgo/app/fire/fireproofwebsite/ui/FireproofWebsitesViewModelTest.kt +++ b/app/src/androidTest/java/com/duckduckgo/app/fire/fireproofwebsite/ui/FireproofWebsitesViewModelTest.kt @@ -33,7 +33,6 @@ import com.duckduckgo.app.global.events.db.UserEventsStore import com.duckduckgo.app.pixels.AppPixelName import com.duckduckgo.app.pixels.AppPixelName.FIREPROOF_SETTING_SELECTION_ALWAYS import com.duckduckgo.app.settings.db.SettingsDataStore -import com.duckduckgo.app.settings.db.SettingsSharedPreferences.LoginDetectorPrefsMapper.AutomaticFireproofSetting import com.duckduckgo.app.statistics.pixels.Pixel import dagger.Lazy import kotlinx.coroutines.ExperimentalCoroutinesApi diff --git a/app/src/androidTest/java/com/duckduckgo/app/global/db/AppDatabaseTest.kt b/app/src/androidTest/java/com/duckduckgo/app/global/db/AppDatabaseTest.kt index 24731793e6ad..38dbf65de185 100644 --- a/app/src/androidTest/java/com/duckduckgo/app/global/db/AppDatabaseTest.kt +++ b/app/src/androidTest/java/com/duckduckgo/app/global/db/AppDatabaseTest.kt @@ -25,11 +25,11 @@ import androidx.room.testing.MigrationTestHelper import androidx.sqlite.db.SupportSQLiteDatabase import androidx.sqlite.db.framework.FrameworkSQLiteOpenHelperFactory import androidx.test.platform.app.InstrumentationRegistry.getInstrumentation +import com.duckduckgo.app.fire.fireproofwebsite.ui.AutomaticFireproofSetting.ASK_EVERY_TIME +import com.duckduckgo.app.fire.fireproofwebsite.ui.AutomaticFireproofSetting.NEVER import com.duckduckgo.app.global.exception.UncaughtExceptionSource import com.duckduckgo.app.onboarding.store.AppStage import com.duckduckgo.app.settings.db.SettingsDataStore -import com.duckduckgo.app.settings.db.SettingsSharedPreferences.LoginDetectorPrefsMapper.AutomaticFireproofSetting.ASK_EVERY_TIME -import com.duckduckgo.app.settings.db.SettingsSharedPreferences.LoginDetectorPrefsMapper.AutomaticFireproofSetting.NEVER import org.junit.Assert.assertEquals import org.junit.Assert.assertFalse import org.junit.Assert.assertTrue diff --git a/app/src/main/java/com/duckduckgo/app/browser/BrowserTabViewModel.kt b/app/src/main/java/com/duckduckgo/app/browser/BrowserTabViewModel.kt index cb32679c6b6f..999d1e9f873e 100644 --- a/app/src/main/java/com/duckduckgo/app/browser/BrowserTabViewModel.kt +++ b/app/src/main/java/com/duckduckgo/app/browser/BrowserTabViewModel.kt @@ -84,6 +84,8 @@ import com.duckduckgo.app.di.AppCoroutineScope import com.duckduckgo.app.email.EmailManager import com.duckduckgo.app.fire.fireproofwebsite.data.FireproofWebsiteEntity import com.duckduckgo.app.fire.fireproofwebsite.data.FireproofWebsiteRepository +import com.duckduckgo.app.fire.fireproofwebsite.ui.AutomaticFireproofSetting.ALWAYS +import com.duckduckgo.app.fire.fireproofwebsite.ui.AutomaticFireproofSetting.ASK_EVERY_TIME import com.duckduckgo.app.global.* import com.duckduckgo.app.global.events.db.UserEventKey import com.duckduckgo.app.global.events.db.UserEventsStore @@ -104,8 +106,6 @@ import com.duckduckgo.app.pixels.AppPixelName.FACEBOOK_LOGIN_ERROR_BREAKAGE_INVE import com.duckduckgo.app.privacy.db.NetworkLeaderboardDao import com.duckduckgo.app.privacy.db.UserWhitelistDao import com.duckduckgo.app.settings.db.SettingsDataStore -import com.duckduckgo.app.settings.db.SettingsSharedPreferences.LoginDetectorPrefsMapper.AutomaticFireproofSetting.ALWAYS -import com.duckduckgo.app.settings.db.SettingsSharedPreferences.LoginDetectorPrefsMapper.AutomaticFireproofSetting.ASK_EVERY_TIME import com.duckduckgo.app.statistics.api.StatisticsUpdater import com.duckduckgo.app.statistics.pixels.Pixel import com.duckduckgo.app.statistics.pixels.Pixel.PixelParameter diff --git a/app/src/main/java/com/duckduckgo/app/browser/logindetection/DOMLoginDetector.kt b/app/src/main/java/com/duckduckgo/app/browser/logindetection/DOMLoginDetector.kt index 5b9f4e25642e..3f65141f7a00 100644 --- a/app/src/main/java/com/duckduckgo/app/browser/logindetection/DOMLoginDetector.kt +++ b/app/src/main/java/com/duckduckgo/app/browser/logindetection/DOMLoginDetector.kt @@ -22,9 +22,9 @@ import android.webkit.WebView import androidx.annotation.UiThread import com.duckduckgo.app.browser.R import com.duckduckgo.app.browser.logindetection.LoginDetectionJavascriptInterface.Companion.JAVASCRIPT_INTERFACE_NAME +import com.duckduckgo.app.fire.fireproofwebsite.ui.AutomaticFireproofSetting import com.duckduckgo.app.global.getValidUrl import com.duckduckgo.app.settings.db.SettingsDataStore -import com.duckduckgo.app.settings.db.SettingsSharedPreferences.LoginDetectorPrefsMapper.AutomaticFireproofSetting import javax.inject.Inject import timber.log.Timber diff --git a/app/src/main/java/com/duckduckgo/app/browser/logindetection/FireproofDialogsEventHandler.kt b/app/src/main/java/com/duckduckgo/app/browser/logindetection/FireproofDialogsEventHandler.kt index 367d5a2efefd..952e3775d7c8 100644 --- a/app/src/main/java/com/duckduckgo/app/browser/logindetection/FireproofDialogsEventHandler.kt +++ b/app/src/main/java/com/duckduckgo/app/browser/logindetection/FireproofDialogsEventHandler.kt @@ -21,12 +21,12 @@ import androidx.lifecycle.MutableLiveData import com.duckduckgo.app.browser.logindetection.FireproofDialogsEventHandler.Event import com.duckduckgo.app.fire.fireproofwebsite.data.FireproofWebsiteEntity import com.duckduckgo.app.fire.fireproofwebsite.data.FireproofWebsiteRepository +import com.duckduckgo.app.fire.fireproofwebsite.ui.AutomaticFireproofSetting import com.duckduckgo.app.global.DispatcherProvider import com.duckduckgo.app.global.events.db.UserEventKey import com.duckduckgo.app.global.events.db.UserEventsStore import com.duckduckgo.app.pixels.AppPixelName import com.duckduckgo.app.settings.db.SettingsDataStore -import com.duckduckgo.app.settings.db.SettingsSharedPreferences.LoginDetectorPrefsMapper.AutomaticFireproofSetting import com.duckduckgo.app.statistics.pixels.Pixel import kotlinx.coroutines.withContext diff --git a/app/src/main/java/com/duckduckgo/app/browser/logindetection/NavigationAwareLoginDetector.kt b/app/src/main/java/com/duckduckgo/app/browser/logindetection/NavigationAwareLoginDetector.kt index 5d727d4ca70c..816d404d6520 100644 --- a/app/src/main/java/com/duckduckgo/app/browser/logindetection/NavigationAwareLoginDetector.kt +++ b/app/src/main/java/com/duckduckgo/app/browser/logindetection/NavigationAwareLoginDetector.kt @@ -21,9 +21,9 @@ import androidx.core.net.toUri import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData import com.duckduckgo.app.browser.WebNavigationStateChange +import com.duckduckgo.app.fire.fireproofwebsite.ui.AutomaticFireproofSetting import com.duckduckgo.app.global.* import com.duckduckgo.app.settings.db.SettingsDataStore -import com.duckduckgo.app.settings.db.SettingsSharedPreferences.LoginDetectorPrefsMapper.AutomaticFireproofSetting import kotlinx.coroutines.* import timber.log.Timber diff --git a/app/src/main/java/com/duckduckgo/app/fire/fireproofwebsite/ui/AutomaticFireproofSetting.kt b/app/src/main/java/com/duckduckgo/app/fire/fireproofwebsite/ui/AutomaticFireproofSetting.kt new file mode 100644 index 000000000000..03484ec19244 --- /dev/null +++ b/app/src/main/java/com/duckduckgo/app/fire/fireproofwebsite/ui/AutomaticFireproofSetting.kt @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2022 DuckDuckGo + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.duckduckgo.app.fire.fireproofwebsite.ui + +import com.duckduckgo.app.browser.R + +enum class AutomaticFireproofSetting(val stringRes: Int) { + ASK_EVERY_TIME(R.string.fireproofWebsiteSettingsSelectionDialogAskEveryTime), + ALWAYS(R.string.fireproofWebsiteSettingsSelectionDialogAlways), + NEVER(R.string.fireproofWebsiteSettingsSelectionDialogNever), + ; + + fun getOptionIndex(): Int { + return when (this) { + ASK_EVERY_TIME -> 1 + ALWAYS -> 2 + NEVER -> 3 + } + } + + companion object { + fun Int.getFireproofSettingOptionForIndex(): AutomaticFireproofSetting { + return when (this) { + 2 -> ALWAYS + 3 -> NEVER + else -> ASK_EVERY_TIME + } + } + } +} diff --git a/app/src/main/java/com/duckduckgo/app/fire/fireproofwebsite/ui/FireproofSettingsSelectorFragment.kt b/app/src/main/java/com/duckduckgo/app/fire/fireproofwebsite/ui/FireproofSettingsSelectorFragment.kt deleted file mode 100644 index bd385cd8df61..000000000000 --- a/app/src/main/java/com/duckduckgo/app/fire/fireproofwebsite/ui/FireproofSettingsSelectorFragment.kt +++ /dev/null @@ -1,101 +0,0 @@ -/* - * Copyright (c) 2022 DuckDuckGo - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.duckduckgo.app.fire.fireproofwebsite.ui - -import android.app.Dialog -import android.os.Bundle -import android.view.LayoutInflater -import android.widget.RadioGroup -import androidx.annotation.IdRes -import androidx.fragment.app.DialogFragment -import com.duckduckgo.app.browser.R -import com.duckduckgo.app.browser.databinding.DialogRadioGroupSelectorFragmentBinding -import com.duckduckgo.app.settings.db.SettingsSharedPreferences.LoginDetectorPrefsMapper.AutomaticFireproofSetting -import com.google.android.material.dialog.MaterialAlertDialogBuilder - -class FireproofSettingsSelectorFragment : DialogFragment() { - - private lateinit var binding: DialogRadioGroupSelectorFragmentBinding - - interface Listener { - fun onAutomaticFireproofSettingSelected(selectedSetting: AutomaticFireproofSetting) - } - - override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { - val currentOption: AutomaticFireproofSetting = - arguments?.getSerializable(DEFAULT_OPTION_EXTRA) as AutomaticFireproofSetting? ?: AutomaticFireproofSetting.ASK_EVERY_TIME - - binding = DialogRadioGroupSelectorFragmentBinding.inflate(LayoutInflater.from(context)) - - setRadioButtonOptions(binding) - updateCurrentSelection(currentOption, binding.selectorRadioGroup) - - val alertBuilder = MaterialAlertDialogBuilder(requireActivity()) - .setView(binding.root) - .setTitle(R.string.fireproofWebsiteSettingSelectionTitle) - .setPositiveButton(R.string.dialogSave) { _, _ -> - dialog?.let { - val radioGroup = binding.selectorRadioGroup - val selectedOption = when (radioGroup.checkedRadioButtonId) { - R.id.selectorRadioButton2 -> AutomaticFireproofSetting.ALWAYS - R.id.selectorRadioButton3 -> AutomaticFireproofSetting.NEVER - else -> AutomaticFireproofSetting.ASK_EVERY_TIME - } - val listener = activity as Listener? - listener?.onAutomaticFireproofSettingSelected(selectedOption) - } - } - .setNegativeButton(android.R.string.cancel) { _, _ -> } - - return alertBuilder.create() - } - - private fun setRadioButtonOptions(binding: DialogRadioGroupSelectorFragmentBinding) { - binding.selectorRadioButton1.setText(R.string.fireproofWebsiteSettingsSelectionDialogAskEveryTime) - binding.selectorRadioButton2.setText(R.string.fireproofWebsiteSettingsSelectionDialogAlways) - binding.selectorRadioButton3.setText(R.string.fireproofWebsiteSettingsSelectionDialogNever) - } - - private fun updateCurrentSelection( - currentOption: AutomaticFireproofSetting, - radioGroup: RadioGroup, - ) { - val selectedId = currentOption.radioButtonId() - radioGroup.check(selectedId) - } - - @IdRes - private fun AutomaticFireproofSetting.radioButtonId(): Int { - return when (this) { - AutomaticFireproofSetting.ASK_EVERY_TIME -> R.id.selectorRadioButton1 - AutomaticFireproofSetting.ALWAYS -> R.id.selectorRadioButton2 - AutomaticFireproofSetting.NEVER -> R.id.selectorRadioButton3 - } - } - - companion object { - - private const val DEFAULT_OPTION_EXTRA = "DEFAULT_OPTION" - - fun create(automaticFireproofSetting: AutomaticFireproofSetting): FireproofSettingsSelectorFragment = - FireproofSettingsSelectorFragment().apply { - arguments = Bundle().apply { - putSerializable(DEFAULT_OPTION_EXTRA, automaticFireproofSetting) - } - } - } -} diff --git a/app/src/main/java/com/duckduckgo/app/fire/fireproofwebsite/ui/FireproofWebsiteAdapter.kt b/app/src/main/java/com/duckduckgo/app/fire/fireproofwebsite/ui/FireproofWebsiteAdapter.kt index b929094e4f2d..6444f49d26de 100644 --- a/app/src/main/java/com/duckduckgo/app/fire/fireproofwebsite/ui/FireproofWebsiteAdapter.kt +++ b/app/src/main/java/com/duckduckgo/app/fire/fireproofwebsite/ui/FireproofWebsiteAdapter.kt @@ -34,7 +34,6 @@ import com.duckduckgo.app.browser.favicon.FaviconManager import com.duckduckgo.app.fire.fireproofwebsite.data.FireproofWebsiteEntity import com.duckduckgo.app.fire.fireproofwebsite.data.website import com.duckduckgo.app.fire.fireproofwebsite.ui.FireproofWebsitesViewModel.Command.ShowAutomaticFireproofSettingSelectionDialog -import com.duckduckgo.app.settings.db.SettingsSharedPreferences.LoginDetectorPrefsMapper.AutomaticFireproofSetting import com.duckduckgo.mobile.android.databinding.RowOneLineListItemBinding import com.duckduckgo.mobile.android.ui.menu.PopupMenu import kotlinx.coroutines.launch @@ -93,7 +92,7 @@ class FireproofWebsiteAdapter( } SECTION_TITLE_TYPE -> { val binding = ViewFireproofTitleBinding.inflate(inflater, parent, false) - binding.fireproofWebsiteSectionTitle.setText(R.string.fireproofWebsiteItemsSectionTitle) + binding.fireproofWebsiteSectionTitle.primaryText = binding.root.context.getString(R.string.fireproofWebsiteItemsSectionTitle) FireproofWebSiteViewHolder.FireproofWebsiteSimpleViewViewHolder(binding) } FIREPROOF_WEBSITE_TYPE -> { @@ -172,8 +171,8 @@ sealed class FireproofWebSiteViewHolder(itemView: View) : RecyclerView.ViewHolde ) : FireproofWebSiteViewHolder(binding.root) { fun bind(automaticFireproofSetting: AutomaticFireproofSetting) { - binding.fireproofWebsiteUserSetting.text = itemView.context.getString(automaticFireproofSetting.stringRes) - binding.fireproofWebsiteSettingsSelection.setOnClickListener { + binding.fireproofWebsiteSettingListItem.setSecondaryText(itemView.context.getString(automaticFireproofSetting.stringRes)) + binding.fireproofWebsiteSettingListItem.setOnClickListener { viewModel.command.value = ShowAutomaticFireproofSettingSelectionDialog(automaticFireproofSetting) } } diff --git a/app/src/main/java/com/duckduckgo/app/fire/fireproofwebsite/ui/FireproofWebsitesActivity.kt b/app/src/main/java/com/duckduckgo/app/fire/fireproofwebsite/ui/FireproofWebsitesActivity.kt index 6053d8fcf037..6cdda58fb9f1 100644 --- a/app/src/main/java/com/duckduckgo/app/fire/fireproofwebsite/ui/FireproofWebsitesActivity.kt +++ b/app/src/main/java/com/duckduckgo/app/fire/fireproofwebsite/ui/FireproofWebsitesActivity.kt @@ -29,15 +29,17 @@ import com.duckduckgo.app.browser.databinding.ActivityFireproofWebsitesBinding import com.duckduckgo.app.browser.favicon.FaviconManager import com.duckduckgo.app.fire.fireproofwebsite.data.FireproofWebsiteEntity import com.duckduckgo.app.fire.fireproofwebsite.data.website +import com.duckduckgo.app.fire.fireproofwebsite.ui.AutomaticFireproofSetting.Companion.getFireproofSettingOptionForIndex import com.duckduckgo.app.global.DuckDuckGoActivity -import com.duckduckgo.app.settings.db.SettingsSharedPreferences.LoginDetectorPrefsMapper.AutomaticFireproofSetting import com.duckduckgo.di.scopes.ActivityScope +import com.duckduckgo.mobile.android.ui.view.dialog.RadioListAlertDialogBuilder import com.duckduckgo.mobile.android.ui.viewbinding.viewBinding import com.google.android.material.snackbar.Snackbar import javax.inject.Inject +import kotlinx.android.synthetic.main.item_autocomplete_bookmark_suggestion.* @InjectWith(ActivityScope::class) -class FireproofWebsitesActivity : DuckDuckGoActivity(), FireproofSettingsSelectorFragment.Listener { +class FireproofWebsitesActivity : DuckDuckGoActivity() { @Inject lateinit var faviconManager: FaviconManager @@ -100,8 +102,28 @@ class FireproofWebsitesActivity : DuckDuckGoActivity(), FireproofSettingsSelecto } private fun showAutomaticFireproofSettingSelectionDialog(automaticFireproofSetting: AutomaticFireproofSetting) { - val dialog = FireproofSettingsSelectorFragment.create(automaticFireproofSetting) - dialog.show(supportFragmentManager, FIREPROOF_SETTING_SELECTOR_DIALOG_TAG) + val currentFireproofSetting = automaticFireproofSetting.getOptionIndex() + RadioListAlertDialogBuilder(this) + .setTitle(R.string.fireproofWebsiteSettingSelectionTitle) + .setOptions( + listOf( + R.string.settingsAppLinksAskEveryTime, + R.string.settingsAppLinksAlways, + R.string.settingsAppLinksNever, + ), + currentFireproofSetting, + ) + .setPositiveButton(R.string.dialogSave) + .setNegativeButton(R.string.cancel) + .addEventListener( + object : RadioListAlertDialogBuilder.EventListener() { + override fun onPositiveButtonClicked(selectedItem: Int) { + val fireproofSettingSelected = selectedItem.getFireproofSettingOptionForIndex() + viewModel.onAutomaticFireproofSettingChanged(fireproofSettingSelected) + } + }, + ) + .show() } @Suppress("deprecation") @@ -135,14 +157,8 @@ class FireproofWebsitesActivity : DuckDuckGoActivity(), FireproofSettingsSelecto } companion object { - private const val FIREPROOF_SETTING_SELECTOR_DIALOG_TAG = "FIREPROOF_SETTING_SELECTOR_DIALOG_TAG" - fun intent(context: Context): Intent { return Intent(context, FireproofWebsitesActivity::class.java) } } - - override fun onAutomaticFireproofSettingSelected(selectedSetting: AutomaticFireproofSetting) { - viewModel.onAutomaticFireproofSettingChanged(selectedSetting) - } } diff --git a/app/src/main/java/com/duckduckgo/app/fire/fireproofwebsite/ui/FireproofWebsitesViewModel.kt b/app/src/main/java/com/duckduckgo/app/fire/fireproofwebsite/ui/FireproofWebsitesViewModel.kt index 7c4060f4b74f..1631bff3d6b2 100644 --- a/app/src/main/java/com/duckduckgo/app/fire/fireproofwebsite/ui/FireproofWebsitesViewModel.kt +++ b/app/src/main/java/com/duckduckgo/app/fire/fireproofwebsite/ui/FireproofWebsitesViewModel.kt @@ -27,7 +27,6 @@ import com.duckduckgo.app.global.events.db.UserEventKey import com.duckduckgo.app.global.events.db.UserEventsStore import com.duckduckgo.app.pixels.AppPixelName.* import com.duckduckgo.app.settings.db.SettingsDataStore -import com.duckduckgo.app.settings.db.SettingsSharedPreferences.LoginDetectorPrefsMapper.AutomaticFireproofSetting import com.duckduckgo.app.statistics.pixels.Pixel import com.duckduckgo.di.scopes.ActivityScope import javax.inject.Inject diff --git a/app/src/main/java/com/duckduckgo/app/settings/db/SettingsDataStore.kt b/app/src/main/java/com/duckduckgo/app/settings/db/SettingsDataStore.kt index 5109e42baba4..c425002b1958 100644 --- a/app/src/main/java/com/duckduckgo/app/settings/db/SettingsDataStore.kt +++ b/app/src/main/java/com/duckduckgo/app/settings/db/SettingsDataStore.kt @@ -19,14 +19,13 @@ package com.duckduckgo.app.settings.db import android.content.Context import android.content.SharedPreferences import androidx.core.content.edit -import com.duckduckgo.app.browser.R +import com.duckduckgo.app.fire.fireproofwebsite.ui.AutomaticFireproofSetting +import com.duckduckgo.app.fire.fireproofwebsite.ui.AutomaticFireproofSetting.ASK_EVERY_TIME +import com.duckduckgo.app.fire.fireproofwebsite.ui.AutomaticFireproofSetting.NEVER import com.duckduckgo.app.icon.api.AppIcon import com.duckduckgo.app.settings.clear.ClearWhatOption import com.duckduckgo.app.settings.clear.ClearWhenOption import com.duckduckgo.app.settings.clear.FireAnimation -import com.duckduckgo.app.settings.db.SettingsSharedPreferences.LoginDetectorPrefsMapper.AutomaticFireproofSetting -import com.duckduckgo.app.settings.db.SettingsSharedPreferences.LoginDetectorPrefsMapper.AutomaticFireproofSetting.ASK_EVERY_TIME -import com.duckduckgo.app.settings.db.SettingsSharedPreferences.LoginDetectorPrefsMapper.AutomaticFireproofSetting.NEVER import com.duckduckgo.appbuildconfig.api.AppBuildConfig import com.duckduckgo.di.scopes.AppScope import com.squareup.anvil.annotations.ContributesBinding @@ -265,12 +264,6 @@ class SettingsSharedPreferences @Inject constructor( } class LoginDetectorPrefsMapper { - enum class AutomaticFireproofSetting(val stringRes: Int) { - ASK_EVERY_TIME(R.string.fireproofWebsiteSettingsSelectionDialogAskEveryTime), - ALWAYS(R.string.fireproofWebsiteSettingsSelectionDialogAlways), - NEVER(R.string.fireproofWebsiteSettingsSelectionDialogNever), - } - fun mapToAutomaticFireproofSetting(oldLoginDetectorValue: Boolean): AutomaticFireproofSetting { return when (oldLoginDetectorValue) { false -> NEVER diff --git a/app/src/main/res/layout/activity_fireproof_websites.xml b/app/src/main/res/layout/activity_fireproof_websites.xml index 4238b7446c63..af5db0cd417a 100644 --- a/app/src/main/res/layout/activity_fireproof_websites.xml +++ b/app/src/main/res/layout/activity_fireproof_websites.xml @@ -19,8 +19,8 @@ @@ -33,8 +33,8 @@ android:id="@+id/recycler" android:layout_width="match_parent" android:layout_height="match_parent" - android:paddingTop="16dp" - android:paddingBottom="16dp" + android:paddingTop="@dimen/keyline_4" + android:paddingBottom="@dimen/keyline_4" app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" tools:listItem="@layout/view_bookmark_entry" /> diff --git a/app/src/main/res/layout/view_fireproof_title.xml b/app/src/main/res/layout/view_fireproof_title.xml index bbb21f893c4a..56f414059ee1 100644 --- a/app/src/main/res/layout/view_fireproof_title.xml +++ b/app/src/main/res/layout/view_fireproof_title.xml @@ -1,5 +1,5 @@ - \ No newline at end of file + android:layout_width="match_parent" + android:layout_height="wrap_content" /> \ No newline at end of file diff --git a/app/src/main/res/layout/view_fireproof_website_description.xml b/app/src/main/res/layout/view_fireproof_website_description.xml index 5d3a703752a2..d14835e41972 100644 --- a/app/src/main/res/layout/view_fireproof_website_description.xml +++ b/app/src/main/res/layout/view_fireproof_website_description.xml @@ -1,5 +1,5 @@ - \ No newline at end of file diff --git a/app/src/main/res/layout/view_fireproof_website_empty_hint.xml b/app/src/main/res/layout/view_fireproof_website_empty_hint.xml index 7c1560f02be8..adfae272373a 100644 --- a/app/src/main/res/layout/view_fireproof_website_empty_hint.xml +++ b/app/src/main/res/layout/view_fireproof_website_empty_hint.xml @@ -14,26 +14,22 @@ ~ limitations under the License. --> - + android:paddingStart="@dimen/keyline_4" + android:paddingTop="@dimen/keyline_5" + android:paddingEnd="@dimen/keyline_4" + android:paddingBottom="@dimen/keyline_5"> - + app:textType="secondary" + app:typography="body2" /> - \ No newline at end of file + \ No newline at end of file diff --git a/app/src/main/res/layout/view_fireproof_website_settings_selection.xml b/app/src/main/res/layout/view_fireproof_website_settings_selection.xml index 8b2e77c41f30..12fc06a83597 100644 --- a/app/src/main/res/layout/view_fireproof_website_settings_selection.xml +++ b/app/src/main/res/layout/view_fireproof_website_settings_selection.xml @@ -14,28 +14,9 @@ ~ limitations under the License. --> - - - - - \ No newline at end of file + diff --git a/app/src/test/java/com/duckduckgo/app/browser/logindetection/NextPageLoginDetectionTest.kt b/app/src/test/java/com/duckduckgo/app/browser/logindetection/NextPageLoginDetectionTest.kt index 1ae2a95468e7..4b7e6aa7af48 100644 --- a/app/src/test/java/com/duckduckgo/app/browser/logindetection/NextPageLoginDetectionTest.kt +++ b/app/src/test/java/com/duckduckgo/app/browser/logindetection/NextPageLoginDetectionTest.kt @@ -22,8 +22,8 @@ import androidx.test.ext.junit.runners.AndroidJUnit4 import com.duckduckgo.app.CoroutineTestRule import com.duckduckgo.app.browser.WebNavigationStateChange import com.duckduckgo.app.browser.WebNavigationStateChange.NewPage +import com.duckduckgo.app.fire.fireproofwebsite.ui.AutomaticFireproofSetting import com.duckduckgo.app.settings.db.SettingsDataStore -import com.duckduckgo.app.settings.db.SettingsSharedPreferences.LoginDetectorPrefsMapper.AutomaticFireproofSetting import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.delay import kotlinx.coroutines.test.*