| Santos Cordon | 7d4ddf6 | 2013-07-10 11:58:08 -0700 | [diff] [blame] | 1 | package com.android.phone; |
| 2 | |
| 3 | import android.app.ActionBar; |
| SongFerngWang | bed485e | 2018-07-09 21:15:29 +0800 | [diff] [blame] | 4 | import android.app.Dialog; |
| Santos Cordon | 7d4ddf6 | 2013-07-10 11:58:08 -0700 | [diff] [blame] | 5 | import android.os.Bundle; |
| SongFerngWang | f6fd992 | 2018-06-28 17:21:43 +0800 | [diff] [blame] | 6 | import android.os.PersistableBundle; |
| Santos Cordon | 7d4ddf6 | 2013-07-10 11:58:08 -0700 | [diff] [blame] | 7 | import android.preference.Preference; |
| 8 | import android.preference.PreferenceScreen; |
| SongFerngWang | f6fd992 | 2018-06-28 17:21:43 +0800 | [diff] [blame] | 9 | import android.telephony.CarrierConfigManager; |
| Santos Cordon | 7d4ddf6 | 2013-07-10 11:58:08 -0700 | [diff] [blame] | 10 | import android.util.Log; |
| 11 | import android.view.MenuItem; |
| 12 | |
| Andrew Lee | 2b36ba2 | 2014-11-05 17:08:49 -0800 | [diff] [blame] | 13 | import com.android.internal.telephony.Phone; |
| SongFerngWang | bed485e | 2018-07-09 21:15:29 +0800 | [diff] [blame] | 14 | import com.android.phone.settings.SuppServicesUiUtil; |
| Andrew Lee | 2b36ba2 | 2014-11-05 17:08:49 -0800 | [diff] [blame] | 15 | |
| Santos Cordon | 7d4ddf6 | 2013-07-10 11:58:08 -0700 | [diff] [blame] | 16 | import java.util.ArrayList; |
| 17 | |
| Andrew Lee | 2b36ba2 | 2014-11-05 17:08:49 -0800 | [diff] [blame] | 18 | public class GsmUmtsAdditionalCallOptions extends TimeConsumingPreferenceActivity { |
| Santos Cordon | 7d4ddf6 | 2013-07-10 11:58:08 -0700 | [diff] [blame] | 19 | private static final String LOG_TAG = "GsmUmtsAdditionalCallOptions"; |
| 20 | private final boolean DBG = (PhoneGlobals.DBG_LEVEL >= 2); |
| 21 | |
| SongFerngWang | bed485e | 2018-07-09 21:15:29 +0800 | [diff] [blame] | 22 | public static final String BUTTON_CLIR_KEY = "button_clir_key"; |
| 23 | public static final String BUTTON_CW_KEY = "button_cw_key"; |
| 24 | |
| 25 | private static final int CW_WARNING_DIALOG = 201; |
| 26 | private static final int CALLER_ID_WARNING_DIALOG = 202; |
| Santos Cordon | 7d4ddf6 | 2013-07-10 11:58:08 -0700 | [diff] [blame] | 27 | |
| 28 | private CLIRListPreference mCLIRButton; |
| fionaxu | e46e69f | 2017-04-27 14:32:46 -0700 | [diff] [blame] | 29 | private CallWaitingSwitchPreference mCWButton; |
| Santos Cordon | 7d4ddf6 | 2013-07-10 11:58:08 -0700 | [diff] [blame] | 30 | |
| 31 | private final ArrayList<Preference> mPreferences = new ArrayList<Preference>(); |
| Andrew Lee | 2b36ba2 | 2014-11-05 17:08:49 -0800 | [diff] [blame] | 32 | private int mInitIndex = 0; |
| 33 | private Phone mPhone; |
| Andrew Lee | 5efb112 | 2014-12-05 04:20:42 -0800 | [diff] [blame] | 34 | private SubscriptionInfoHelper mSubscriptionInfoHelper; |
| Santos Cordon | 7d4ddf6 | 2013-07-10 11:58:08 -0700 | [diff] [blame] | 35 | |
| SongFerngWang | bed485e | 2018-07-09 21:15:29 +0800 | [diff] [blame] | 36 | private boolean mShowCLIRButton = true; |
| 37 | private boolean mShowCWButton = true; |
| 38 | private boolean mCLIROverUtPrecautions = false; |
| 39 | private boolean mCWOverUtPrecautions = false; |
| SongFerngWang | f6fd992 | 2018-06-28 17:21:43 +0800 | [diff] [blame] | 40 | |
| Santos Cordon | 7d4ddf6 | 2013-07-10 11:58:08 -0700 | [diff] [blame] | 41 | @Override |
| 42 | protected void onCreate(Bundle icicle) { |
| 43 | super.onCreate(icicle); |
| 44 | |
| Tyler Gunn | 662cb39 | 2025-01-17 23:34:46 +0000 | [diff] [blame^] | 45 | getWindow().addSystemFlags( |
| 46 | android.view.WindowManager.LayoutParams |
| 47 | .SYSTEM_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS); |
| 48 | |
| Santos Cordon | 7d4ddf6 | 2013-07-10 11:58:08 -0700 | [diff] [blame] | 49 | addPreferencesFromResource(R.xml.gsm_umts_additional_options); |
| 50 | |
| Andrew Lee | dd4f6df | 2014-12-09 19:13:51 -0800 | [diff] [blame] | 51 | mSubscriptionInfoHelper = new SubscriptionInfoHelper(this, getIntent()); |
| Andrew Lee | 5efb112 | 2014-12-05 04:20:42 -0800 | [diff] [blame] | 52 | mSubscriptionInfoHelper.setActionBarTitle( |
| Andrew Lee | 2b36ba2 | 2014-11-05 17:08:49 -0800 | [diff] [blame] | 53 | getActionBar(), getResources(), R.string.additional_gsm_call_settings_with_label); |
| Andrew Lee | 5efb112 | 2014-12-05 04:20:42 -0800 | [diff] [blame] | 54 | mPhone = mSubscriptionInfoHelper.getPhone(); |
| Andrew Lee | 2b36ba2 | 2014-11-05 17:08:49 -0800 | [diff] [blame] | 55 | |
| Santos Cordon | 7d4ddf6 | 2013-07-10 11:58:08 -0700 | [diff] [blame] | 56 | PreferenceScreen prefSet = getPreferenceScreen(); |
| 57 | mCLIRButton = (CLIRListPreference) prefSet.findPreference(BUTTON_CLIR_KEY); |
| fionaxu | e46e69f | 2017-04-27 14:32:46 -0700 | [diff] [blame] | 58 | mCWButton = (CallWaitingSwitchPreference) prefSet.findPreference(BUTTON_CW_KEY); |
| Santos Cordon | 7d4ddf6 | 2013-07-10 11:58:08 -0700 | [diff] [blame] | 59 | |
| SongFerngWang | f6fd992 | 2018-06-28 17:21:43 +0800 | [diff] [blame] | 60 | PersistableBundle b = null; |
| 61 | if (mSubscriptionInfoHelper.hasSubId()) { |
| 62 | b = PhoneGlobals.getInstance().getCarrierConfigForSubId( |
| 63 | mSubscriptionInfoHelper.getSubId()); |
| Santos Cordon | 7d4ddf6 | 2013-07-10 11:58:08 -0700 | [diff] [blame] | 64 | } else { |
| SongFerngWang | f6fd992 | 2018-06-28 17:21:43 +0800 | [diff] [blame] | 65 | b = PhoneGlobals.getInstance().getCarrierConfig(); |
| 66 | } |
| 67 | |
| 68 | if (b != null) { |
| 69 | mShowCLIRButton = b.getBoolean( |
| 70 | CarrierConfigManager.KEY_ADDITIONAL_SETTINGS_CALLER_ID_VISIBILITY_BOOL); |
| 71 | mShowCWButton = b.getBoolean( |
| 72 | CarrierConfigManager.KEY_ADDITIONAL_SETTINGS_CALL_WAITING_VISIBILITY_BOOL); |
| SongFerngWang | bed485e | 2018-07-09 21:15:29 +0800 | [diff] [blame] | 73 | mCLIROverUtPrecautions = mShowCLIRButton && b.getBoolean( |
| 74 | CarrierConfigManager.KEY_CALLER_ID_OVER_UT_WARNING_BOOL); |
| 75 | mCWOverUtPrecautions = mShowCWButton && b.getBoolean( |
| 76 | CarrierConfigManager.KEY_CALL_WAITING_OVER_UT_WARNING_BOOL); |
| 77 | if (DBG) { |
| 78 | Log.d(LOG_TAG, "mCLIROverUtPrecautions:" + mCLIROverUtPrecautions |
| 79 | + ",mCWOverUtPrecautions:" + mCWOverUtPrecautions); |
| 80 | } |
| SongFerngWang | f6fd992 | 2018-06-28 17:21:43 +0800 | [diff] [blame] | 81 | } |
| 82 | |
| SongFerngWang | bed485e | 2018-07-09 21:15:29 +0800 | [diff] [blame] | 83 | boolean isSsOverUtPrecautions = SuppServicesUiUtil.isSsOverUtPrecautions(this, mPhone); |
| 84 | |
| SongFerngWang | f6fd992 | 2018-06-28 17:21:43 +0800 | [diff] [blame] | 85 | if (mCLIRButton != null) { |
| 86 | if (mShowCLIRButton) { |
| SongFerngWang | bed485e | 2018-07-09 21:15:29 +0800 | [diff] [blame] | 87 | if (mCLIROverUtPrecautions && isSsOverUtPrecautions) { |
| 88 | mCLIRButton.setEnabled(false); |
| 89 | } else { |
| 90 | mPreferences.add(mCLIRButton); |
| 91 | } |
| Santos Cordon | 7d4ddf6 | 2013-07-10 11:58:08 -0700 | [diff] [blame] | 92 | } else { |
| SongFerngWang | f6fd992 | 2018-06-28 17:21:43 +0800 | [diff] [blame] | 93 | prefSet.removePreference(mCLIRButton); |
| 94 | } |
| 95 | } |
| 96 | |
| 97 | if (mCWButton != null) { |
| 98 | if (mShowCWButton) { |
| SongFerngWang | bed485e | 2018-07-09 21:15:29 +0800 | [diff] [blame] | 99 | if (mCWOverUtPrecautions && isSsOverUtPrecautions) { |
| 100 | mCWButton.setEnabled(false); |
| 101 | } else { |
| 102 | mPreferences.add(mCWButton); |
| 103 | } |
| SongFerngWang | f6fd992 | 2018-06-28 17:21:43 +0800 | [diff] [blame] | 104 | } else { |
| 105 | prefSet.removePreference(mCWButton); |
| 106 | } |
| 107 | } |
| 108 | |
| 109 | if (mPreferences.size() != 0) { |
| 110 | if (icicle == null) { |
| 111 | if (DBG) Log.d(LOG_TAG, "start to init "); |
| 112 | doPreferenceInit(mInitIndex); |
| 113 | } else { |
| 114 | if (DBG) Log.d(LOG_TAG, "restore stored states"); |
| 115 | mInitIndex = mPreferences.size(); |
| SongFerngWang | bed485e | 2018-07-09 21:15:29 +0800 | [diff] [blame] | 116 | if (mShowCWButton && mCWButton != null && mCWButton.isEnabled()) { |
| SongFerngWang | f6fd992 | 2018-06-28 17:21:43 +0800 | [diff] [blame] | 117 | mCWButton.init(this, true, mPhone); |
| 118 | } |
| SongFerngWang | bed485e | 2018-07-09 21:15:29 +0800 | [diff] [blame] | 119 | if (mShowCLIRButton && mCLIRButton != null && mCLIRButton.isEnabled()) { |
| SongFerngWang | f6fd992 | 2018-06-28 17:21:43 +0800 | [diff] [blame] | 120 | mCLIRButton.init(this, true, mPhone); |
| 121 | int[] clirArray = icicle.getIntArray(mCLIRButton.getKey()); |
| 122 | if (clirArray != null) { |
| 123 | if (DBG) { |
| 124 | Log.d(LOG_TAG, "onCreate: clirArray[0]=" |
| 125 | + clirArray[0] + ", clirArray[1]=" + clirArray[1]); |
| 126 | } |
| 127 | mCLIRButton.handleGetCLIRResult(clirArray); |
| 128 | } else { |
| 129 | mCLIRButton.init(this, false, mPhone); |
| 130 | } |
| 131 | } |
| Santos Cordon | 7d4ddf6 | 2013-07-10 11:58:08 -0700 | [diff] [blame] | 132 | } |
| 133 | } |
| 134 | |
| 135 | ActionBar actionBar = getActionBar(); |
| 136 | if (actionBar != null) { |
| 137 | // android.R.id.home will be triggered in onOptionsItemSelected() |
| 138 | actionBar.setDisplayHomeAsUpEnabled(true); |
| 139 | } |
| 140 | } |
| 141 | |
| 142 | @Override |
| SongFerngWang | bed485e | 2018-07-09 21:15:29 +0800 | [diff] [blame] | 143 | public void onResume() { |
| 144 | super.onResume(); |
| 145 | int indexOfStartInit = mPreferences.size(); |
| 146 | boolean isPrecaution = SuppServicesUiUtil.isSsOverUtPrecautions(this, mPhone); |
| 147 | dismissWarningDialog(); |
| 148 | |
| 149 | if (mShowCLIRButton && mCLIROverUtPrecautions && mCLIRButton != null) { |
| 150 | if (isPrecaution) { |
| 151 | showWarningDialog(CW_WARNING_DIALOG); |
| 152 | if (mCLIRButton.isEnabled()) { |
| 153 | if (mPreferences.contains(mCLIRButton)) { |
| 154 | mPreferences.remove(mCLIRButton); |
| 155 | } |
| 156 | mCLIRButton.setEnabled(false); |
| 157 | } |
| 158 | } else { |
| 159 | if (!mPreferences.contains(mCLIRButton)) { |
| 160 | mCLIRButton.setEnabled(true); |
| 161 | mPreferences.add(mCLIRButton); |
| 162 | } |
| 163 | } |
| 164 | } |
| 165 | if (mShowCWButton && mCWOverUtPrecautions && mCWButton != null) { |
| 166 | if (isPrecaution) { |
| 167 | showWarningDialog(CALLER_ID_WARNING_DIALOG); |
| 168 | if (mCWButton.isEnabled()) { |
| 169 | if (mPreferences.contains(mCWButton)) { |
| 170 | mPreferences.remove(mCWButton); |
| 171 | } |
| 172 | mCWButton.setEnabled(false); |
| 173 | } |
| 174 | } else { |
| 175 | if (!mPreferences.contains(mCWButton)) { |
| 176 | mCWButton.setEnabled(true); |
| 177 | mPreferences.add(mCWButton); |
| 178 | } |
| 179 | } |
| 180 | } |
| 181 | |
| 182 | if (indexOfStartInit < mPreferences.size()) { |
| 183 | mInitIndex = indexOfStartInit; |
| 184 | doPreferenceInit(indexOfStartInit); |
| 185 | } |
| 186 | } |
| 187 | |
| 188 | @Override |
| Santos Cordon | 7d4ddf6 | 2013-07-10 11:58:08 -0700 | [diff] [blame] | 189 | protected void onSaveInstanceState(Bundle outState) { |
| 190 | super.onSaveInstanceState(outState); |
| 191 | |
| SongFerngWang | f6fd992 | 2018-06-28 17:21:43 +0800 | [diff] [blame] | 192 | if (mShowCLIRButton && mCLIRButton.clirArray != null) { |
| Santos Cordon | 7d4ddf6 | 2013-07-10 11:58:08 -0700 | [diff] [blame] | 193 | outState.putIntArray(mCLIRButton.getKey(), mCLIRButton.clirArray); |
| 194 | } |
| 195 | } |
| 196 | |
| 197 | @Override |
| 198 | public void onFinished(Preference preference, boolean reading) { |
| 199 | if (mInitIndex < mPreferences.size()-1 && !isFinishing()) { |
| 200 | mInitIndex++; |
| SongFerngWang | f6fd992 | 2018-06-28 17:21:43 +0800 | [diff] [blame] | 201 | doPreferenceInit(mInitIndex); |
| Santos Cordon | 7d4ddf6 | 2013-07-10 11:58:08 -0700 | [diff] [blame] | 202 | } |
| 203 | super.onFinished(preference, reading); |
| 204 | } |
| 205 | |
| 206 | @Override |
| 207 | public boolean onOptionsItemSelected(MenuItem item) { |
| 208 | final int itemId = item.getItemId(); |
| 209 | if (itemId == android.R.id.home) { // See ActionBar#setDisplayHomeAsUpEnabled() |
| Andrew Lee | 5efb112 | 2014-12-05 04:20:42 -0800 | [diff] [blame] | 210 | CallFeaturesSetting.goUpToTopLevelSetting(this, mSubscriptionInfoHelper); |
| Santos Cordon | 7d4ddf6 | 2013-07-10 11:58:08 -0700 | [diff] [blame] | 211 | return true; |
| 212 | } |
| 213 | return super.onOptionsItemSelected(item); |
| 214 | } |
| SongFerngWang | f6fd992 | 2018-06-28 17:21:43 +0800 | [diff] [blame] | 215 | |
| 216 | private void doPreferenceInit(int index) { |
| SongFerngWang | bed485e | 2018-07-09 21:15:29 +0800 | [diff] [blame] | 217 | if (mPreferences.size() > index) { |
| SongFerngWang | f6fd992 | 2018-06-28 17:21:43 +0800 | [diff] [blame] | 218 | Preference pref = mPreferences.get(index); |
| 219 | if (pref instanceof CallWaitingSwitchPreference) { |
| 220 | ((CallWaitingSwitchPreference) pref).init(this, false, mPhone); |
| 221 | } else if (pref instanceof CLIRListPreference) { |
| 222 | ((CLIRListPreference) pref).init(this, false, mPhone); |
| 223 | } |
| 224 | } |
| 225 | } |
| SongFerngWang | bed485e | 2018-07-09 21:15:29 +0800 | [diff] [blame] | 226 | |
| 227 | @Override |
| 228 | protected Dialog onCreateDialog(int id) { |
| 229 | if (id == CW_WARNING_DIALOG) { |
| 230 | return SuppServicesUiUtil.showBlockingSuppServicesDialog(this, mPhone, BUTTON_CW_KEY); |
| 231 | } else if (id == CALLER_ID_WARNING_DIALOG) { |
| 232 | return SuppServicesUiUtil.showBlockingSuppServicesDialog(this, mPhone, BUTTON_CLIR_KEY); |
| 233 | } |
| 234 | return super.onCreateDialog(id); |
| 235 | } |
| 236 | |
| 237 | private void showWarningDialog(int id) { |
| 238 | showDialog(id); |
| 239 | } |
| 240 | |
| 241 | private void dismissWarningDialog() { |
| 242 | dismissDialogSafely(CW_WARNING_DIALOG); |
| 243 | dismissDialogSafely(CALLER_ID_WARNING_DIALOG); |
| 244 | } |
| Santos Cordon | 7d4ddf6 | 2013-07-10 11:58:08 -0700 | [diff] [blame] | 245 | } |