package com.android.phone; import android.os.Bundle; import android.preference.Preference; import android.preference.PreferenceScreen; import android.util.Log; import java.util.ArrayList; public class GsmUmtsAdditionalCallOptions extends TimeConsumingPreferenceActivity { private static final String LOG_TAG = "GsmUmtsAdditionalCallOptions"; private final boolean DBG = (PhoneApp.DBG_LEVEL >= 2); private static final String BUTTON_CLIR_KEY = "button_clir_key"; private static final String BUTTON_CW_KEY = "button_cw_key"; private static final String BUTTON_PN_KEY = "button_pn_key"; private CLIRListPreference mCLIRButton; private CallWaitingCheckBoxPreference mCWButton; private MSISDNEditPreference mMSISDNButton; private ArrayList<Preference> mPreferences = new ArrayList<Preference> (); private int mInitIndex= 0; @Override protected void onCreate(Bundle icicle) { super.onCreate(icicle); addPreferencesFromResource(R.xml.gsm_umts_additional_options); PreferenceScreen prefSet = getPreferenceScreen(); mCLIRButton = (CLIRListPreference) prefSet.findPreference(BUTTON_CLIR_KEY); mCWButton = (CallWaitingCheckBoxPreference) prefSet.findPreference(BUTTON_CW_KEY); mMSISDNButton = (MSISDNEditPreference) prefSet.findPreference(BUTTON_PN_KEY); mPreferences.add(mCLIRButton); mPreferences.add(mCWButton); mPreferences.add(mMSISDNButton); if (icicle == null) { if (DBG) Log.d(LOG_TAG, "start to init "); mCLIRButton.init(this, false); } else { if (DBG) Log.d(LOG_TAG, "restore stored states"); mInitIndex = mPreferences.size(); mCLIRButton.init(this, true); mCWButton.init(this, true); mMSISDNButton.init(this, true); int[] clirArray = icicle.getIntArray(mCLIRButton.getKey()); if (clirArray != null) { if (DBG) Log.d(LOG_TAG, "onCreate: clirArray[0]=" + clirArray[0] + ", clirArray[1]=" + clirArray[1]); mCLIRButton.handleGetCLIRResult(clirArray); } else { mCLIRButton.init(this, false); } } } @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); if (mCLIRButton.clirArray != null) { outState.putIntArray(mCLIRButton.getKey(), mCLIRButton.clirArray); } } @Override public void onFinished(Preference preference, boolean reading) { if (mInitIndex < mPreferences.size()-1 && !isFinishing()) { mInitIndex++; Preference pref = mPreferences.get(mInitIndex); if (pref instanceof CallWaitingCheckBoxPreference) { ((CallWaitingCheckBoxPreference) pref).init(this, false); } else if (pref instanceof MSISDNEditPreference) { ((MSISDNEditPreference) pref).init(this, false); } } super.onFinished(preference, reading); } }