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