1package com.android.phone; 2 3import android.app.ActionBar; 4import android.content.Intent; 5import android.os.Bundle; 6import android.preference.Preference; 7import android.preference.PreferenceScreen; 8import android.util.Log; 9import android.view.MenuItem; 10 11import java.util.ArrayList; 12 13public class GsmUmtsAdditionalCallOptions extends 14 TimeConsumingPreferenceActivity { 15 private static final String LOG_TAG = "GsmUmtsAdditionalCallOptions"; 16 private final boolean DBG = (PhoneApp.DBG_LEVEL >= 2); 17 18 private static final String BUTTON_CLIR_KEY = "button_clir_key"; 19 private static final String BUTTON_CW_KEY = "button_cw_key"; 20 21 private CLIRListPreference mCLIRButton; 22 private CallWaitingCheckBoxPreference mCWButton; 23 24 private final ArrayList<Preference> mPreferences = new ArrayList<Preference>(); 25 private int mInitIndex= 0; 26 27 @Override 28 protected void onCreate(Bundle icicle) { 29 super.onCreate(icicle); 30 31 addPreferencesFromResource(R.xml.gsm_umts_additional_options); 32 33 PreferenceScreen prefSet = getPreferenceScreen(); 34 mCLIRButton = (CLIRListPreference) prefSet.findPreference(BUTTON_CLIR_KEY); 35 mCWButton = (CallWaitingCheckBoxPreference) prefSet.findPreference(BUTTON_CW_KEY); 36 37 mPreferences.add(mCLIRButton); 38 mPreferences.add(mCWButton); 39 40 if (icicle == null) { 41 if (DBG) Log.d(LOG_TAG, "start to init "); 42 mCLIRButton.init(this, false); 43 } else { 44 if (DBG) Log.d(LOG_TAG, "restore stored states"); 45 mInitIndex = mPreferences.size(); 46 mCLIRButton.init(this, true); 47 mCWButton.init(this, true); 48 int[] clirArray = icicle.getIntArray(mCLIRButton.getKey()); 49 if (clirArray != null) { 50 if (DBG) Log.d(LOG_TAG, "onCreate: clirArray[0]=" 51 + clirArray[0] + ", clirArray[1]=" + clirArray[1]); 52 mCLIRButton.handleGetCLIRResult(clirArray); 53 } else { 54 mCLIRButton.init(this, false); 55 } 56 } 57 58 ActionBar actionBar = getActionBar(); 59 if (actionBar != null) { 60 // android.R.id.home will be triggered in onOptionsItemSelected() 61 actionBar.setDisplayHomeAsUpEnabled(true); 62 } 63 } 64 65 @Override 66 protected void onSaveInstanceState(Bundle outState) { 67 super.onSaveInstanceState(outState); 68 69 if (mCLIRButton.clirArray != null) { 70 outState.putIntArray(mCLIRButton.getKey(), mCLIRButton.clirArray); 71 } 72 } 73 74 @Override 75 public void onFinished(Preference preference, boolean reading) { 76 if (mInitIndex < mPreferences.size()-1 && !isFinishing()) { 77 mInitIndex++; 78 Preference pref = mPreferences.get(mInitIndex); 79 if (pref instanceof CallWaitingCheckBoxPreference) { 80 ((CallWaitingCheckBoxPreference) pref).init(this, false); 81 } 82 } 83 super.onFinished(preference, reading); 84 } 85 86 @Override 87 public boolean onOptionsItemSelected(MenuItem item) { 88 final int itemId = item.getItemId(); 89 if (itemId == android.R.id.home) { // See ActionBar#setDisplayHomeAsUpEnabled() 90 CallFeaturesSetting.goUpToTopLevelSetting(this); 91 return true; 92 } 93 return super.onOptionsItemSelected(item); 94 } 95} 96