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