17d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordonpackage com.android.phone; 27d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 37d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordonimport com.android.internal.telephony.CallForwardInfo; 47d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordonimport com.android.internal.telephony.CommandsInterface; 52b36ba2d3b68fce3e44078c1bdedf9af00b7fc5bAndrew Leeimport com.android.internal.telephony.Phone; 67d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 77d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordonimport android.app.ActionBar; 87d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordonimport android.content.Intent; 97d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordonimport android.database.Cursor; 107d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordonimport android.os.Bundle; 117d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordonimport android.preference.Preference; 127d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordonimport android.preference.PreferenceScreen; 137d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordonimport android.util.Log; 147d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordonimport android.view.MenuItem; 157d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 167d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordonimport java.util.ArrayList; 177d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 187d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 197d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordonpublic class GsmUmtsCallForwardOptions extends TimeConsumingPreferenceActivity { 207d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon private static final String LOG_TAG = "GsmUmtsCallForwardOptions"; 217d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon private final boolean DBG = (PhoneGlobals.DBG_LEVEL >= 2); 227d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 232b36ba2d3b68fce3e44078c1bdedf9af00b7fc5bAndrew Lee private static final String NUM_PROJECTION[] = { 242b36ba2d3b68fce3e44078c1bdedf9af00b7fc5bAndrew Lee android.provider.ContactsContract.CommonDataKinds.Phone.NUMBER 252b36ba2d3b68fce3e44078c1bdedf9af00b7fc5bAndrew Lee }; 267d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 277d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon private static final String BUTTON_CFU_KEY = "button_cfu_key"; 287d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon private static final String BUTTON_CFB_KEY = "button_cfb_key"; 297d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon private static final String BUTTON_CFNRY_KEY = "button_cfnry_key"; 307d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon private static final String BUTTON_CFNRC_KEY = "button_cfnrc_key"; 317d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 327d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon private static final String KEY_TOGGLE = "toggle"; 337d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon private static final String KEY_STATUS = "status"; 347d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon private static final String KEY_NUMBER = "number"; 357d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 367d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon private CallForwardEditPreference mButtonCFU; 377d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon private CallForwardEditPreference mButtonCFB; 387d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon private CallForwardEditPreference mButtonCFNRy; 397d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon private CallForwardEditPreference mButtonCFNRc; 407d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 417d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon private final ArrayList<CallForwardEditPreference> mPreferences = 427d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon new ArrayList<CallForwardEditPreference> (); 437d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon private int mInitIndex= 0; 447d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 457d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon private boolean mFirstResume; 467d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon private Bundle mIcicle; 472b36ba2d3b68fce3e44078c1bdedf9af00b7fc5bAndrew Lee private Phone mPhone; 485efb112905b222d1a5b2e1052a94b7a7dfbe66d2Andrew Lee private SubscriptionInfoHelper mSubscriptionInfoHelper; 497d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 507d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon @Override 517d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon protected void onCreate(Bundle icicle) { 527d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon super.onCreate(icicle); 537d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 547d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon addPreferencesFromResource(R.xml.callforward_options); 557d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 56dd4f6df7bf726284b0747405307de54e0c0acabbAndrew Lee mSubscriptionInfoHelper = new SubscriptionInfoHelper(this, getIntent()); 575efb112905b222d1a5b2e1052a94b7a7dfbe66d2Andrew Lee mSubscriptionInfoHelper.setActionBarTitle( 582b36ba2d3b68fce3e44078c1bdedf9af00b7fc5bAndrew Lee getActionBar(), getResources(), R.string.call_forwarding_settings_with_label); 595efb112905b222d1a5b2e1052a94b7a7dfbe66d2Andrew Lee mPhone = mSubscriptionInfoHelper.getPhone(); 602b36ba2d3b68fce3e44078c1bdedf9af00b7fc5bAndrew Lee 617d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon PreferenceScreen prefSet = getPreferenceScreen(); 622b36ba2d3b68fce3e44078c1bdedf9af00b7fc5bAndrew Lee mButtonCFU = (CallForwardEditPreference) prefSet.findPreference(BUTTON_CFU_KEY); 632b36ba2d3b68fce3e44078c1bdedf9af00b7fc5bAndrew Lee mButtonCFB = (CallForwardEditPreference) prefSet.findPreference(BUTTON_CFB_KEY); 647d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon mButtonCFNRy = (CallForwardEditPreference) prefSet.findPreference(BUTTON_CFNRY_KEY); 657d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon mButtonCFNRc = (CallForwardEditPreference) prefSet.findPreference(BUTTON_CFNRC_KEY); 667d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 677d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon mButtonCFU.setParentActivity(this, mButtonCFU.reason); 687d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon mButtonCFB.setParentActivity(this, mButtonCFB.reason); 697d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon mButtonCFNRy.setParentActivity(this, mButtonCFNRy.reason); 707d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon mButtonCFNRc.setParentActivity(this, mButtonCFNRc.reason); 717d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 727d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon mPreferences.add(mButtonCFU); 737d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon mPreferences.add(mButtonCFB); 747d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon mPreferences.add(mButtonCFNRy); 757d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon mPreferences.add(mButtonCFNRc); 767d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 777d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon // we wait to do the initialization until onResume so that the 787d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon // TimeConsumingPreferenceActivity dialog can display as it 797d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon // relies on onResume / onPause to maintain its foreground state. 807d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 817d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon mFirstResume = true; 827d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon mIcicle = icicle; 837d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 847d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon ActionBar actionBar = getActionBar(); 857d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon if (actionBar != null) { 867d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon // android.R.id.home will be triggered in onOptionsItemSelected() 877d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon actionBar.setDisplayHomeAsUpEnabled(true); 887d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 897d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 907d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 917d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon @Override 927d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon public void onResume() { 937d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon super.onResume(); 947d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 957d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon if (mFirstResume) { 967d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon if (mIcicle == null) { 977d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon if (DBG) Log.d(LOG_TAG, "start to init "); 982b36ba2d3b68fce3e44078c1bdedf9af00b7fc5bAndrew Lee mPreferences.get(mInitIndex).init(this, false, mPhone); 997d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } else { 1007d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon mInitIndex = mPreferences.size(); 1017d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 1027d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon for (CallForwardEditPreference pref : mPreferences) { 1037d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon Bundle bundle = mIcicle.getParcelable(pref.getKey()); 1047d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon pref.setToggled(bundle.getBoolean(KEY_TOGGLE)); 1057d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon CallForwardInfo cf = new CallForwardInfo(); 1067d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon cf.number = bundle.getString(KEY_NUMBER); 1077d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon cf.status = bundle.getInt(KEY_STATUS); 1087d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon pref.handleCallForwardResult(cf); 1092b36ba2d3b68fce3e44078c1bdedf9af00b7fc5bAndrew Lee pref.init(this, true, mPhone); 1107d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 1117d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 1127d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon mFirstResume = false; 1132b36ba2d3b68fce3e44078c1bdedf9af00b7fc5bAndrew Lee mIcicle = null; 1147d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 1157d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 1167d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 1177d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon @Override 1187d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon protected void onSaveInstanceState(Bundle outState) { 1197d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon super.onSaveInstanceState(outState); 1207d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 1217d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon for (CallForwardEditPreference pref : mPreferences) { 1227d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon Bundle bundle = new Bundle(); 1237d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon bundle.putBoolean(KEY_TOGGLE, pref.isToggled()); 1247d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon if (pref.callForwardInfo != null) { 1257d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon bundle.putString(KEY_NUMBER, pref.callForwardInfo.number); 1267d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon bundle.putInt(KEY_STATUS, pref.callForwardInfo.status); 1277d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 1287d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon outState.putParcelable(pref.getKey(), bundle); 1297d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 1307d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 1317d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 1327d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon @Override 1337d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon public void onFinished(Preference preference, boolean reading) { 1347d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon if (mInitIndex < mPreferences.size()-1 && !isFinishing()) { 1357d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon mInitIndex++; 1362b36ba2d3b68fce3e44078c1bdedf9af00b7fc5bAndrew Lee mPreferences.get(mInitIndex).init(this, false, mPhone); 1377d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 1387d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 1397d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon super.onFinished(preference, reading); 1407d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 1417d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 1427d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon @Override 1437d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon protected void onActivityResult(int requestCode, int resultCode, Intent data) { 1447d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon if (DBG) Log.d(LOG_TAG, "onActivityResult: done"); 1457d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon if (resultCode != RESULT_OK) { 1467d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon if (DBG) Log.d(LOG_TAG, "onActivityResult: contact picker result not OK."); 1477d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon return; 1487d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 1497d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon Cursor cursor = null; 1507d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon try { 1517d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon cursor = getContentResolver().query(data.getData(), 1527d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon NUM_PROJECTION, null, null, null); 1537d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon if ((cursor == null) || (!cursor.moveToFirst())) { 1547d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon if (DBG) Log.d(LOG_TAG, "onActivityResult: bad contact data, no results found."); 1557d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon return; 1567d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 1577d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 1587d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon switch (requestCode) { 1597d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon case CommandsInterface.CF_REASON_UNCONDITIONAL: 1607d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon mButtonCFU.onPickActivityResult(cursor.getString(0)); 1617d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon break; 1627d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon case CommandsInterface.CF_REASON_BUSY: 1637d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon mButtonCFB.onPickActivityResult(cursor.getString(0)); 1647d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon break; 1657d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon case CommandsInterface.CF_REASON_NO_REPLY: 1667d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon mButtonCFNRy.onPickActivityResult(cursor.getString(0)); 1677d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon break; 1687d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon case CommandsInterface.CF_REASON_NOT_REACHABLE: 1697d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon mButtonCFNRc.onPickActivityResult(cursor.getString(0)); 1707d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon break; 1717d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon default: 1727d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon // TODO: may need exception here. 1737d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 1747d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } finally { 1757d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon if (cursor != null) { 1767d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon cursor.close(); 1777d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 1787d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 1797d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 1807d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 1817d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon @Override 1827d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon public boolean onOptionsItemSelected(MenuItem item) { 1837d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon final int itemId = item.getItemId(); 1847d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon if (itemId == android.R.id.home) { // See ActionBar#setDisplayHomeAsUpEnabled() 1855efb112905b222d1a5b2e1052a94b7a7dfbe66d2Andrew Lee CallFeaturesSetting.goUpToTopLevelSetting(this, mSubscriptionInfoHelper); 1867d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon return true; 1877d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 1887d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon return super.onOptionsItemSelected(item); 1897d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 1907d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon} 191