package com.android.phone; import android.content.Intent; import android.database.Cursor; import android.os.Bundle; import android.preference.Preference; import android.preference.PreferenceScreen; import android.provider.ContactsContract.CommonDataKinds.Phone; import android.util.Log; import com.android.internal.telephony.CallBarringInfo; import com.android.internal.telephony.CommandsInterface; import com.android.internal.telephony.PhoneFactory; import java.util.ArrayList; public class CallBarringOptions extends TimeConsumingPreferenceActivity implements CallBarringEditPreferencePreferenceListener{ private static final String LOG_TAG = "CallBarringOptions"; private final boolean DBG = (PhoneApp.DBG_LEVEL >= 2); private static final String NUM_PROJECTION[] = {Phone.NUMBER}; private static final String BUTTON_AO_KEY = "button_ao_key"; private static final String BUTTON_OI_KEY = "button_oi_key"; private static final String BUTTON_OX_KEY = "button_ox_key"; private static final String BUTTON_AI_KEY = "button_ai_key"; private static final String BUTTON_IR_KEY = "button_ir_key"; private static final String BUTTON_AB_KEY = "button_ab_key"; private static final String BUTTON_CHGPWD_KEY = "button_chgpwd_key"; private static final String KEY_TOGGLE = "toggle"; private static final String KEY_STATUS = "status"; private static final String KEY_PASSWORD = "password"; private CallBarringEditPreference mButtonAO; private CallBarringEditPreference mButtonOI; private CallBarringEditPreference mButtonOX; private CallBarringEditPreference mButtonAI; private CallBarringEditPreference mButtonIR; private CallBarringEditPreference mButtonAB; private CallBarringChgPwdPreference mButtonChgPwd; private final ArrayList<CallBarringEditPreference> mPreferences = new ArrayList<CallBarringEditPreference> (); private int mInitIndex= 0; private boolean mFirstResume; private Bundle mIcicle; int mSubId = 0; @Override protected void onCreate(Bundle icicle) { super.onCreate(icicle); mSubId = getIntent().getIntExtra(CallSettingOptions.SUB_ID, 0); addPreferencesFromResource(R.xml.callbarring_options); if (PhoneFactory.getPhoneCount() > 1) { if (mSubId == 0) { setTitle(getResources().getString(R.string.sim1) + getResources().getString(R.string.call_barring_settings)); } else if (mSubId == 1) { setTitle(getResources().getString(R.string.sim2) + getResources().getString(R.string.call_barring_settings)); } } PreferenceScreen prefSet = getPreferenceScreen(); mButtonAO = (CallBarringEditPreference) prefSet.findPreference(BUTTON_AO_KEY); mButtonOI = (CallBarringEditPreference) prefSet.findPreference(BUTTON_OI_KEY); mButtonOX = (CallBarringEditPreference) prefSet.findPreference(BUTTON_OX_KEY); mButtonAI = (CallBarringEditPreference) prefSet.findPreference(BUTTON_AI_KEY); mButtonIR = (CallBarringEditPreference) prefSet.findPreference(BUTTON_IR_KEY); mButtonAB = (CallBarringEditPreference) prefSet.findPreference(BUTTON_AB_KEY); mButtonChgPwd = (CallBarringChgPwdPreference) prefSet.findPreference(BUTTON_CHGPWD_KEY); mButtonAO.setParentActivity(this, mButtonAO.mReason); mButtonOI.setParentActivity(this, mButtonOI.mReason); mButtonOX.setParentActivity(this, mButtonOX.mReason); mButtonAI.setParentActivity(this, mButtonAI.mReason); mButtonIR.setParentActivity(this, mButtonIR.mReason); mButtonAB.setParentActivity(this, mButtonAB.mReason); mButtonAB.setNeedEcho(false); mButtonAB.setToggled(true); mButtonChgPwd.setParentActivity(this, 0); mPreferences.add(mButtonAO); mPreferences.add(mButtonOI); mPreferences.add(mButtonOX); mPreferences.add(mButtonAI); mPreferences.add(mButtonIR); mPreferences.add(mButtonAB); // we wait to do the initialization until onResume so that the // TimeConsumingPreferenceActivity dialog can display as it // relies on onResume / onPause to maintain its foreground state. mFirstResume = true; mIcicle = icicle; } @Override public void onResume() { super.onResume(); if (mFirstResume) { if (mIcicle == null) { if (DBG) Log.d(LOG_TAG, "start to init "); mPreferences.get(mInitIndex).init(this, false, mSubId); mPreferences.get(mInitIndex).setListener(this); mButtonChgPwd.init(this, false, mSubId); } else { mInitIndex = mPreferences.size(); for (CallBarringEditPreference pref : mPreferences) { Bundle bundle = mIcicle.getParcelable(pref.getKey()); pref.setToggled(bundle.getBoolean(KEY_TOGGLE)); CallBarringInfo cb = new CallBarringInfo(); cb.password = bundle.getString(KEY_PASSWORD); cb.status = bundle.getInt(KEY_STATUS); pref.handleCallBarringResult(cb); pref.init(this, true, mSubId); } } mFirstResume = false; mIcicle=null; } } @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); for (CallBarringEditPreference pref : mPreferences) { Bundle bundle = new Bundle(); bundle.putBoolean(KEY_TOGGLE, pref.isToggled()); if (pref.mCallBarringInfo != null) { bundle.putString(KEY_PASSWORD, pref.mCallBarringInfo.password); bundle.putInt(KEY_STATUS, pref.mCallBarringInfo.status); } outState.putParcelable(pref.getKey(), bundle); } } @Override public void onFinished(Preference preference, boolean reading) { if (mInitIndex < mPreferences.size()-1 && !isFinishing()) { mInitIndex++; mPreferences.get(mInitIndex).init(this, !mPreferences.get(mInitIndex).getNeedEcho(), mSubId); mPreferences.get(mInitIndex).setListener(this); } super.onFinished(preference, reading); } public void onChange(Preference preference, int reason){ if (DBG) Log.d(LOG_TAG, "onChange, reason: " + reason); mInitIndex = 0; mPreferences.get(mInitIndex).init(this, !mPreferences.get(mInitIndex).getNeedEcho(), mSubId); } }