1cd0189299f484dcbd51400b994daf585923e9e8dDavid Krausepackage com.android.phone; 2cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause 32c8c40738e9b8a8e767aa061721ebaa5b5591a4cDaisuke Miyakawaimport com.android.internal.telephony.CallForwardInfo; 42c8c40738e9b8a8e767aa061721ebaa5b5591a4cDaisuke Miyakawaimport com.android.internal.telephony.CommandsInterface; 52c8c40738e9b8a8e767aa061721ebaa5b5591a4cDaisuke Miyakawa 62c8c40738e9b8a8e767aa061721ebaa5b5591a4cDaisuke Miyakawaimport android.app.ActionBar; 7cd0189299f484dcbd51400b994daf585923e9e8dDavid Krauseimport android.content.Intent; 8cd0189299f484dcbd51400b994daf585923e9e8dDavid Krauseimport android.database.Cursor; 9cd0189299f484dcbd51400b994daf585923e9e8dDavid Krauseimport android.os.Bundle; 10cd0189299f484dcbd51400b994daf585923e9e8dDavid Krauseimport android.preference.Preference; 11cd0189299f484dcbd51400b994daf585923e9e8dDavid Krauseimport android.preference.PreferenceScreen; 12849bc5bfd940cea4e55332e805e0a7da4a765bcdDmitri Plotnikovimport android.provider.ContactsContract.CommonDataKinds.Phone; 13cd0189299f484dcbd51400b994daf585923e9e8dDavid Krauseimport android.util.Log; 142c8c40738e9b8a8e767aa061721ebaa5b5591a4cDaisuke Miyakawaimport android.view.MenuItem; 154a0b3738f8a710d2ffc8c49b3ae7e44100c88839Tim Park 164a0b3738f8a710d2ffc8c49b3ae7e44100c88839Tim Parkimport java.util.ArrayList; 174a0b3738f8a710d2ffc8c49b3ae7e44100c88839Tim Park 18cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause 19cd0189299f484dcbd51400b994daf585923e9e8dDavid Krausepublic class GsmUmtsCallForwardOptions extends TimeConsumingPreferenceActivity { 20cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause private static final String LOG_TAG = "GsmUmtsCallForwardOptions"; 21cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause private final boolean DBG = (PhoneApp.DBG_LEVEL >= 2); 22cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause 23849bc5bfd940cea4e55332e805e0a7da4a765bcdDmitri Plotnikov private static final String NUM_PROJECTION[] = {Phone.NUMBER}; 24cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause 25cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause private static final String BUTTON_CFU_KEY = "button_cfu_key"; 26cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause private static final String BUTTON_CFB_KEY = "button_cfb_key"; 27cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause private static final String BUTTON_CFNRY_KEY = "button_cfnry_key"; 28cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause private static final String BUTTON_CFNRC_KEY = "button_cfnrc_key"; 29cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause 30cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause private static final String KEY_TOGGLE = "toggle"; 31cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause private static final String KEY_STATUS = "status"; 32cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause private static final String KEY_NUMBER = "number"; 33cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause 34cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause private CallForwardEditPreference mButtonCFU; 35cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause private CallForwardEditPreference mButtonCFB; 36cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause private CallForwardEditPreference mButtonCFNRy; 37cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause private CallForwardEditPreference mButtonCFNRc; 38cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause 394a0b3738f8a710d2ffc8c49b3ae7e44100c88839Tim Park private final ArrayList<CallForwardEditPreference> mPreferences = 40cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause new ArrayList<CallForwardEditPreference> (); 41cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause private int mInitIndex= 0; 424a0b3738f8a710d2ffc8c49b3ae7e44100c88839Tim Park 434a0b3738f8a710d2ffc8c49b3ae7e44100c88839Tim Park private boolean mFirstResume; 444a0b3738f8a710d2ffc8c49b3ae7e44100c88839Tim Park private Bundle mIcicle; 454a0b3738f8a710d2ffc8c49b3ae7e44100c88839Tim Park 46cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause @Override 47cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause protected void onCreate(Bundle icicle) { 48cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause super.onCreate(icicle); 49cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause 50cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause addPreferencesFromResource(R.xml.callforward_options); 51cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause 52cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause PreferenceScreen prefSet = getPreferenceScreen(); 53cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause mButtonCFU = (CallForwardEditPreference) prefSet.findPreference(BUTTON_CFU_KEY); 54cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause mButtonCFB = (CallForwardEditPreference) prefSet.findPreference(BUTTON_CFB_KEY); 55cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause mButtonCFNRy = (CallForwardEditPreference) prefSet.findPreference(BUTTON_CFNRY_KEY); 56cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause mButtonCFNRc = (CallForwardEditPreference) prefSet.findPreference(BUTTON_CFNRC_KEY); 57cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause 58cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause mButtonCFU.setParentActivity(this, mButtonCFU.reason); 59cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause mButtonCFB.setParentActivity(this, mButtonCFB.reason); 60cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause mButtonCFNRy.setParentActivity(this, mButtonCFNRy.reason); 61cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause mButtonCFNRc.setParentActivity(this, mButtonCFNRc.reason); 62cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause 63cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause mPreferences.add(mButtonCFU); 64cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause mPreferences.add(mButtonCFB); 65cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause mPreferences.add(mButtonCFNRy); 66cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause mPreferences.add(mButtonCFNRc); 67cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause 684a0b3738f8a710d2ffc8c49b3ae7e44100c88839Tim Park // we wait to do the initialization until onResume so that the 694a0b3738f8a710d2ffc8c49b3ae7e44100c88839Tim Park // TimeConsumingPreferenceActivity dialog can display as it 704a0b3738f8a710d2ffc8c49b3ae7e44100c88839Tim Park // relies on onResume / onPause to maintain its foreground state. 714a0b3738f8a710d2ffc8c49b3ae7e44100c88839Tim Park 724a0b3738f8a710d2ffc8c49b3ae7e44100c88839Tim Park mFirstResume = true; 734a0b3738f8a710d2ffc8c49b3ae7e44100c88839Tim Park mIcicle = icicle; 742c8c40738e9b8a8e767aa061721ebaa5b5591a4cDaisuke Miyakawa 752c8c40738e9b8a8e767aa061721ebaa5b5591a4cDaisuke Miyakawa ActionBar actionBar = getActionBar(); 762c8c40738e9b8a8e767aa061721ebaa5b5591a4cDaisuke Miyakawa if (actionBar != null) { 772c8c40738e9b8a8e767aa061721ebaa5b5591a4cDaisuke Miyakawa // android.R.id.home will be triggered in onOptionsItemSelected() 782c8c40738e9b8a8e767aa061721ebaa5b5591a4cDaisuke Miyakawa actionBar.setDisplayHomeAsUpEnabled(true); 792c8c40738e9b8a8e767aa061721ebaa5b5591a4cDaisuke Miyakawa } 804a0b3738f8a710d2ffc8c49b3ae7e44100c88839Tim Park } 814a0b3738f8a710d2ffc8c49b3ae7e44100c88839Tim Park 824a0b3738f8a710d2ffc8c49b3ae7e44100c88839Tim Park @Override 834a0b3738f8a710d2ffc8c49b3ae7e44100c88839Tim Park public void onResume() { 844a0b3738f8a710d2ffc8c49b3ae7e44100c88839Tim Park super.onResume(); 854a0b3738f8a710d2ffc8c49b3ae7e44100c88839Tim Park 864a0b3738f8a710d2ffc8c49b3ae7e44100c88839Tim Park if (mFirstResume) { 874a0b3738f8a710d2ffc8c49b3ae7e44100c88839Tim Park if (mIcicle == null) { 884a0b3738f8a710d2ffc8c49b3ae7e44100c88839Tim Park if (DBG) Log.d(LOG_TAG, "start to init "); 894a0b3738f8a710d2ffc8c49b3ae7e44100c88839Tim Park mPreferences.get(mInitIndex).init(this, false); 904a0b3738f8a710d2ffc8c49b3ae7e44100c88839Tim Park } else { 914a0b3738f8a710d2ffc8c49b3ae7e44100c88839Tim Park mInitIndex = mPreferences.size(); 924a0b3738f8a710d2ffc8c49b3ae7e44100c88839Tim Park 934a0b3738f8a710d2ffc8c49b3ae7e44100c88839Tim Park for (CallForwardEditPreference pref : mPreferences) { 944a0b3738f8a710d2ffc8c49b3ae7e44100c88839Tim Park Bundle bundle = mIcicle.getParcelable(pref.getKey()); 954a0b3738f8a710d2ffc8c49b3ae7e44100c88839Tim Park pref.setToggled(bundle.getBoolean(KEY_TOGGLE)); 964a0b3738f8a710d2ffc8c49b3ae7e44100c88839Tim Park CallForwardInfo cf = new CallForwardInfo(); 974a0b3738f8a710d2ffc8c49b3ae7e44100c88839Tim Park cf.number = bundle.getString(KEY_NUMBER); 984a0b3738f8a710d2ffc8c49b3ae7e44100c88839Tim Park cf.status = bundle.getInt(KEY_STATUS); 994a0b3738f8a710d2ffc8c49b3ae7e44100c88839Tim Park pref.handleCallForwardResult(cf); 1004a0b3738f8a710d2ffc8c49b3ae7e44100c88839Tim Park pref.init(this, true); 1014a0b3738f8a710d2ffc8c49b3ae7e44100c88839Tim Park } 102cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause } 1034a0b3738f8a710d2ffc8c49b3ae7e44100c88839Tim Park mFirstResume = false; 1044a0b3738f8a710d2ffc8c49b3ae7e44100c88839Tim Park mIcicle=null; 105cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause } 106cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause } 107cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause 108cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause @Override 109cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause protected void onSaveInstanceState(Bundle outState) { 110cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause super.onSaveInstanceState(outState); 111cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause 112cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause for (CallForwardEditPreference pref : mPreferences) { 113cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause Bundle bundle = new Bundle(); 114cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause bundle.putBoolean(KEY_TOGGLE, pref.isToggled()); 115cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause if (pref.callForwardInfo != null) { 116cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause bundle.putString(KEY_NUMBER, pref.callForwardInfo.number); 117cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause bundle.putInt(KEY_STATUS, pref.callForwardInfo.status); 118cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause } 119cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause outState.putParcelable(pref.getKey(), bundle); 120cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause } 121cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause } 122cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause 123cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause @Override 124cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause public void onFinished(Preference preference, boolean reading) { 125948a17dc246520345b81455fdae0e1d628adc263Li Zhe if (mInitIndex < mPreferences.size()-1 && !isFinishing()) { 126cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause mInitIndex++; 127cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause mPreferences.get(mInitIndex).init(this, false); 128cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause } 129cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause 130cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause super.onFinished(preference, reading); 131cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause } 132cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause 133cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause @Override 134cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause protected void onActivityResult(int requestCode, int resultCode, Intent data) { 135cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause if (DBG) Log.d(LOG_TAG, "onActivityResult: done"); 136cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause if (resultCode != RESULT_OK) { 137cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause if (DBG) Log.d(LOG_TAG, "onActivityResult: contact picker result not OK."); 138cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause return; 139cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause } 140cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause Cursor cursor = getContentResolver().query(data.getData(), 141cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause NUM_PROJECTION, null, null, null); 142cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause if ((cursor == null) || (!cursor.moveToFirst())) { 143cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause if (DBG) Log.d(LOG_TAG, "onActivityResult: bad contact data, no results found."); 144cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause return; 145cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause } 146cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause 147cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause switch (requestCode) { 148cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause case CommandsInterface.CF_REASON_UNCONDITIONAL: 149cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause mButtonCFU.onPickActivityResult(cursor.getString(0)); 150cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause break; 151cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause case CommandsInterface.CF_REASON_BUSY: 152cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause mButtonCFB.onPickActivityResult(cursor.getString(0)); 153cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause break; 154cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause case CommandsInterface.CF_REASON_NO_REPLY: 155cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause mButtonCFNRy.onPickActivityResult(cursor.getString(0)); 156cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause break; 157cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause case CommandsInterface.CF_REASON_NOT_REACHABLE: 158cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause mButtonCFNRc.onPickActivityResult(cursor.getString(0)); 159cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause break; 160cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause default: 161cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause // TODO: may need exception here. 162cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause } 163cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause } 1642c8c40738e9b8a8e767aa061721ebaa5b5591a4cDaisuke Miyakawa 1652c8c40738e9b8a8e767aa061721ebaa5b5591a4cDaisuke Miyakawa @Override 1662c8c40738e9b8a8e767aa061721ebaa5b5591a4cDaisuke Miyakawa public boolean onOptionsItemSelected(MenuItem item) { 1672c8c40738e9b8a8e767aa061721ebaa5b5591a4cDaisuke Miyakawa final int itemId = item.getItemId(); 1682c8c40738e9b8a8e767aa061721ebaa5b5591a4cDaisuke Miyakawa if (itemId == android.R.id.home) { // See ActionBar#setDisplayHomeAsUpEnabled() 1692c8c40738e9b8a8e767aa061721ebaa5b5591a4cDaisuke Miyakawa CallFeaturesSetting.goUpToTopLevelSetting(this); 1702c8c40738e9b8a8e767aa061721ebaa5b5591a4cDaisuke Miyakawa return true; 1712c8c40738e9b8a8e767aa061721ebaa5b5591a4cDaisuke Miyakawa } 1722c8c40738e9b8a8e767aa061721ebaa5b5591a4cDaisuke Miyakawa return super.onOptionsItemSelected(item); 1732c8c40738e9b8a8e767aa061721ebaa5b5591a4cDaisuke Miyakawa } 174cd0189299f484dcbd51400b994daf585923e9e8dDavid Krause} 175