diff --git a/src/com/android/settings/network/telephony/SubscriptionActionDialogActivity.java b/src/com/android/settings/network/telephony/SubscriptionActionDialogActivity.java index 288f1ac1e53..c509bac575c 100644 --- a/src/com/android/settings/network/telephony/SubscriptionActionDialogActivity.java +++ b/src/com/android/settings/network/telephony/SubscriptionActionDialogActivity.java @@ -16,8 +16,12 @@ package com.android.settings.network.telephony; +import static android.content.Context.MODE_PRIVATE; + +import android.content.SharedPreferences; import android.os.Bundle; import android.telephony.SubscriptionManager; +import android.util.Log; import androidx.fragment.app.FragmentActivity; @@ -27,14 +31,27 @@ public class SubscriptionActionDialogActivity extends FragmentActivity { private static final String TAG = "SubscriptionActionDialogActivity"; // Arguments protected static final String ARG_SUB_ID = "sub_id"; - protected SubscriptionManager mSubscriptionManager; + public static final String SIM_ACTION_DIALOG_PREFS = "sim_action_dialog_prefs"; + // Shared preference keys + public static final String KEY_PROGRESS_STATE = "progress_state"; + public static final int PROGRESS_IS_NOT_SHOWING = 0; + public static final int PROGRESS_IS_SHOWING = 1; + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mSubscriptionManager = getSystemService(SubscriptionManager.class); + setProgressState(PROGRESS_IS_NOT_SHOWING); + } + + + @Override + public void finish() { + setProgressState(PROGRESS_IS_NOT_SHOWING); + super.finish(); } /** @@ -44,11 +61,13 @@ public class SubscriptionActionDialogActivity extends FragmentActivity { */ protected void showProgressDialog(String message) { ProgressDialogFragment.show(getFragmentManager(), message, null); + setProgressState(PROGRESS_IS_SHOWING); } /** Dismisses the loading dialog. */ protected void dismissProgressDialog() { ProgressDialogFragment.dismiss(getFragmentManager()); + setProgressState(PROGRESS_IS_NOT_SHOWING); } /** @@ -60,4 +79,10 @@ public class SubscriptionActionDialogActivity extends FragmentActivity { protected void showErrorDialog(String title, String message) { AlertDialogFragment.show(this, title, message); } + + protected void setProgressState(int state) { + final SharedPreferences prefs = getSharedPreferences(SIM_ACTION_DIALOG_PREFS, MODE_PRIVATE); + prefs.edit().putInt(KEY_PROGRESS_STATE, state).apply(); + Log.i(TAG, "setProgressState:" + state); + } } diff --git a/src/com/android/settings/sim/SimDialogActivity.java b/src/com/android/settings/sim/SimDialogActivity.java index 1125e1fe295..732277b3d8a 100644 --- a/src/com/android/settings/sim/SimDialogActivity.java +++ b/src/com/android/settings/sim/SimDialogActivity.java @@ -16,8 +16,11 @@ package com.android.settings.sim; +import static android.content.Context.MODE_PRIVATE; + import android.app.Activity; import android.content.Intent; +import android.content.SharedPreferences; import android.os.Bundle; import android.telecom.PhoneAccountHandle; import android.telecom.TelecomManager; @@ -32,6 +35,7 @@ import androidx.fragment.app.FragmentActivity; import androidx.fragment.app.FragmentManager; import com.android.settings.R; +import com.android.settings.network.telephony.SubscriptionActionDialogActivity; import java.util.List; @@ -60,6 +64,7 @@ public class SimDialogActivity extends FragmentActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + getWindow().addSystemFlags( WindowManager.LayoutParams.SYSTEM_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS); showOrUpdateDialog(); @@ -72,6 +77,13 @@ public class SimDialogActivity extends FragmentActivity { showOrUpdateDialog(); } + private int getProgressState() { + final SharedPreferences prefs = getSharedPreferences( + SubscriptionActionDialogActivity.SIM_ACTION_DIALOG_PREFS, MODE_PRIVATE); + return prefs.getInt(SubscriptionActionDialogActivity.KEY_PROGRESS_STATE, + SubscriptionActionDialogActivity.PROGRESS_IS_NOT_SHOWING); + } + private void showOrUpdateDialog() { final int dialogType = getIntent().getIntExtra(DIALOG_TYPE_KEY, INVALID_PICK); @@ -80,6 +92,13 @@ public class SimDialogActivity extends FragmentActivity { return; } + if (dialogType == PREFERRED_PICK + && getProgressState() == SubscriptionActionDialogActivity.PROGRESS_IS_SHOWING) { + Log.d(TAG, "Finish the sim dialog since the sim action dialog is showing the progress"); + finish(); + return; + } + final String tag = Integer.toString(dialogType); final FragmentManager fragmentManager = getSupportFragmentManager(); SimDialogFragment fragment = (SimDialogFragment) fragmentManager.findFragmentByTag(tag);