From cce05b7431ccda63f01995cf3516c48cadff8ff0 Mon Sep 17 00:00:00 2001 From: sonalyadav Date: Mon, 23 Dec 2024 12:22:01 +0530 Subject: [PATCH] Fix: Allow back button functionality to dismiss language selection dialog --- .../nrw/commons/settings/SettingsFragment.kt | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/fr/free/nrw/commons/settings/SettingsFragment.kt b/app/src/main/java/fr/free/nrw/commons/settings/SettingsFragment.kt index fe93ebc8a7..ee47f4a366 100644 --- a/app/src/main/java/fr/free/nrw/commons/settings/SettingsFragment.kt +++ b/app/src/main/java/fr/free/nrw/commons/settings/SettingsFragment.kt @@ -11,6 +11,7 @@ import android.net.Uri import android.os.Bundle import android.text.Editable import android.text.TextWatcher +import android.view.KeyEvent import android.view.View import android.widget.AdapterView import android.widget.EditText @@ -332,11 +333,20 @@ class SettingsFragment : PreferenceFragmentCompat() { val dialog = Dialog(requireActivity()) dialog.setContentView(R.layout.dialog_select_language) - dialog.setCancelable(false) + dialog.setCancelable(true)// Allow dialog to close with the back button dialog.window?.setLayout( (resources.displayMetrics.widthPixels * 0.90).toInt(), (resources.displayMetrics.heightPixels * 0.90).toInt() ) + // Handle back button explicitly to dismiss the dialog + dialog.setOnKeyListener { _, keyCode, event -> + if (keyCode == KeyEvent.KEYCODE_BACK && event.action == KeyEvent.ACTION_UP) { + dialog.dismiss() // Close the dialog when the back button is pressed + true + } else { + false + } + } dialog.show() val editText: EditText = dialog.findViewById(R.id.search_language) @@ -378,10 +388,12 @@ class SettingsFragment : PreferenceFragmentCompat() { if (keyListPreference == "appUiDefaultLanguagePref") { appUiLanguageListPreference?.summary = defLocale.getDisplayLanguage(defLocale) setLocale(requireActivity(), lCode) - requireActivity().recreate() val intent = Intent(requireActivity(), MainActivity::class.java) + intent.flags = Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_SINGLE_TOP + requireActivity().finish() startActivity(intent) - } else { + } + else { descriptionLanguageListPreference?.summary = defLocale.getDisplayLanguage(defLocale) } dialog.dismiss()