From 86a7fce2779238121a3f296196e2a41cd3c2f11e Mon Sep 17 00:00:00 2001 From: Aayush Gupta Date: Mon, 5 Aug 2024 11:53:29 +0800 Subject: [PATCH] Force restart when proxy URL is changed Signed-off-by: Aayush Gupta --- .../view/ui/commons/ForceRestartDialog.kt | 40 +++++++++++++++++++ .../view/ui/preferences/NetworkPreference.kt | 1 + .../view/ui/preferences/ProxyURLDialog.kt | 12 +++++- .../main/res/navigation/mobile_navigation.xml | 4 ++ app/src/main/res/values/strings.xml | 4 ++ 5 files changed, 59 insertions(+), 2 deletions(-) create mode 100644 app/src/main/java/com/aurora/store/view/ui/commons/ForceRestartDialog.kt diff --git a/app/src/main/java/com/aurora/store/view/ui/commons/ForceRestartDialog.kt b/app/src/main/java/com/aurora/store/view/ui/commons/ForceRestartDialog.kt new file mode 100644 index 000000000..e700ecb40 --- /dev/null +++ b/app/src/main/java/com/aurora/store/view/ui/commons/ForceRestartDialog.kt @@ -0,0 +1,40 @@ +package com.aurora.store.view.ui.commons + +import android.app.Dialog +import android.content.Intent +import android.os.Bundle +import androidx.fragment.app.DialogFragment +import com.aurora.store.R +import com.google.android.material.dialog.MaterialAlertDialogBuilder +import dagger.hilt.android.AndroidEntryPoint +import kotlin.system.exitProcess + +@AndroidEntryPoint +class ForceRestartDialog: DialogFragment() { + + override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { + return MaterialAlertDialogBuilder(requireContext()) + .setTitle(R.string.force_restart_title) + .setMessage(R.string.force_restart_summary) + .setPositiveButton(getString(R.string.action_restart)) { _, _ -> restartApp() } + .create() + } + + override fun onResume() { + super.onResume() + dialog?.setCancelable(false) + } + + private fun restartApp() { + val context = requireContext() + val intent = context.packageManager.getLaunchIntentForPackage(context.packageName) + val componentName = intent?.component + + val newIntent = Intent.makeRestartActivityTask(componentName).apply { + setPackage(context.packageName) + } + + startActivity(newIntent) + exitProcess(0) + } +} diff --git a/app/src/main/java/com/aurora/store/view/ui/preferences/NetworkPreference.kt b/app/src/main/java/com/aurora/store/view/ui/preferences/NetworkPreference.kt index 2bdc1bfaa..479557c26 100644 --- a/app/src/main/java/com/aurora/store/view/ui/preferences/NetworkPreference.kt +++ b/app/src/main/java/com/aurora/store/view/ui/preferences/NetworkPreference.kt @@ -64,6 +64,7 @@ class NetworkPreference : BasePreferenceFragment(), } else { remove(PREFERENCE_PROXY_URL) remove(PREFERENCE_PROXY_INFO) + findNavController().navigate(R.id.forceRestartDialog) } false } diff --git a/app/src/main/java/com/aurora/store/view/ui/preferences/ProxyURLDialog.kt b/app/src/main/java/com/aurora/store/view/ui/preferences/ProxyURLDialog.kt index e6fba6480..2d3085f4b 100644 --- a/app/src/main/java/com/aurora/store/view/ui/preferences/ProxyURLDialog.kt +++ b/app/src/main/java/com/aurora/store/view/ui/preferences/ProxyURLDialog.kt @@ -1,10 +1,12 @@ package com.aurora.store.view.ui.preferences import android.annotation.SuppressLint +import android.app.AlertDialog import android.app.Dialog import android.os.Bundle import android.view.WindowManager import androidx.fragment.app.DialogFragment +import androidx.navigation.fragment.findNavController import com.aurora.extensions.showKeyboard import com.aurora.extensions.toast import com.aurora.store.R @@ -30,13 +32,18 @@ class ProxyURLDialog: DialogFragment() { override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { val view = layoutInflater.inflate(R.layout.dialog_text_input_edit_text, null) - return MaterialAlertDialogBuilder(requireContext()) + val alertDialog = MaterialAlertDialogBuilder(requireContext()) .setTitle(R.string.pref_network_proxy_url) .setMessage(R.string.pref_network_proxy_url_message) .setView(view) - .setPositiveButton(getString(R.string.add)) { _, _ -> saveProxyUrl() } + .setPositiveButton(getString(R.string.add), null) .setNegativeButton(getString(android.R.string.cancel)) { _, _ -> dialog?.dismiss()} .create() + + alertDialog.setOnShowListener { + alertDialog.getButton(AlertDialog.BUTTON_POSITIVE).setOnClickListener { saveProxyUrl() } + } + return alertDialog } @SuppressLint("AuthLeak") // False-positive @@ -62,6 +69,7 @@ class ProxyURLDialog: DialogFragment() { save(PREFERENCE_PROXY_URL, url) save(PREFERENCE_PROXY_INFO, gson.toJson(proxyInfo)) toast(R.string.toast_proxy_success) + findNavController().navigate(R.id.forceRestartDialog) return } else { toast(R.string.toast_proxy_failed) diff --git a/app/src/main/res/navigation/mobile_navigation.xml b/app/src/main/res/navigation/mobile_navigation.xml index 6244177b0..63eaf700a 100644 --- a/app/src/main/res/navigation/mobile_navigation.xml +++ b/app/src/main/res/navigation/mobile_navigation.xml @@ -491,4 +491,8 @@ android:id="@+id/proxyURLDialog" android:name="com.aurora.store.view.ui.preferences.ProxyURLDialog" android:label="@string/pref_network_proxy_url" /> + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index e6526d024..e9479b2d2 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -479,4 +479,8 @@ Check for updates + + + Restart Aurora Store + Aurora Store needs to be restarted to apply the newly changed settings