• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 package com.android.phone;
2 
3 import android.content.Intent;
4 import android.database.Cursor;
5 import android.os.Bundle;
6 import android.preference.Preference;
7 import android.preference.PreferenceScreen;
8 import android.provider.ContactsContract.CommonDataKinds.Phone;
9 import android.util.Log;
10 
11 import com.android.internal.telephony.CallForwardInfo;
12 import com.android.internal.telephony.CommandsInterface;
13 
14 import java.util.ArrayList;
15 
16 
17 public class GsmUmtsCallForwardOptions extends TimeConsumingPreferenceActivity {
18     private static final String LOG_TAG = "GsmUmtsCallForwardOptions";
19     private final boolean DBG = (PhoneApp.DBG_LEVEL >= 2);
20 
21     private static final String NUM_PROJECTION[] = {Phone.NUMBER};
22 
23     private static final String BUTTON_CFU_KEY   = "button_cfu_key";
24     private static final String BUTTON_CFB_KEY   = "button_cfb_key";
25     private static final String BUTTON_CFNRY_KEY = "button_cfnry_key";
26     private static final String BUTTON_CFNRC_KEY = "button_cfnrc_key";
27 
28     private static final String KEY_TOGGLE = "toggle";
29     private static final String KEY_STATUS = "status";
30     private static final String KEY_NUMBER = "number";
31 
32     private CallForwardEditPreference mButtonCFU;
33     private CallForwardEditPreference mButtonCFB;
34     private CallForwardEditPreference mButtonCFNRy;
35     private CallForwardEditPreference mButtonCFNRc;
36 
37     private final ArrayList<CallForwardEditPreference> mPreferences =
38             new ArrayList<CallForwardEditPreference> ();
39     private int mInitIndex= 0;
40 
41     private boolean mFirstResume;
42     private Bundle mIcicle;
43 
44     @Override
onCreate(Bundle icicle)45     protected void onCreate(Bundle icicle) {
46         super.onCreate(icicle);
47 
48         addPreferencesFromResource(R.xml.callforward_options);
49 
50         PreferenceScreen prefSet = getPreferenceScreen();
51         mButtonCFU   = (CallForwardEditPreference) prefSet.findPreference(BUTTON_CFU_KEY);
52         mButtonCFB   = (CallForwardEditPreference) prefSet.findPreference(BUTTON_CFB_KEY);
53         mButtonCFNRy = (CallForwardEditPreference) prefSet.findPreference(BUTTON_CFNRY_KEY);
54         mButtonCFNRc = (CallForwardEditPreference) prefSet.findPreference(BUTTON_CFNRC_KEY);
55 
56         mButtonCFU.setParentActivity(this, mButtonCFU.reason);
57         mButtonCFB.setParentActivity(this, mButtonCFB.reason);
58         mButtonCFNRy.setParentActivity(this, mButtonCFNRy.reason);
59         mButtonCFNRc.setParentActivity(this, mButtonCFNRc.reason);
60 
61         mPreferences.add(mButtonCFU);
62         mPreferences.add(mButtonCFB);
63         mPreferences.add(mButtonCFNRy);
64         mPreferences.add(mButtonCFNRc);
65 
66         // we wait to do the initialization until onResume so that the
67         // TimeConsumingPreferenceActivity dialog can display as it
68         // relies on onResume / onPause to maintain its foreground state.
69 
70         mFirstResume = true;
71         mIcicle = icicle;
72     }
73 
74     @Override
onResume()75     public void onResume() {
76         super.onResume();
77 
78         if (mFirstResume) {
79             if (mIcicle == null) {
80                 if (DBG) Log.d(LOG_TAG, "start to init ");
81                 mPreferences.get(mInitIndex).init(this, false);
82             } else {
83                 mInitIndex = mPreferences.size();
84 
85                 for (CallForwardEditPreference pref : mPreferences) {
86                     Bundle bundle = mIcicle.getParcelable(pref.getKey());
87                     pref.setToggled(bundle.getBoolean(KEY_TOGGLE));
88                     CallForwardInfo cf = new CallForwardInfo();
89                     cf.number = bundle.getString(KEY_NUMBER);
90                     cf.status = bundle.getInt(KEY_STATUS);
91                     pref.handleCallForwardResult(cf);
92                     pref.init(this, true);
93                 }
94             }
95             mFirstResume = false;
96             mIcicle=null;
97         }
98     }
99 
100     @Override
onSaveInstanceState(Bundle outState)101     protected void onSaveInstanceState(Bundle outState) {
102         super.onSaveInstanceState(outState);
103 
104         for (CallForwardEditPreference pref : mPreferences) {
105             Bundle bundle = new Bundle();
106             bundle.putBoolean(KEY_TOGGLE, pref.isToggled());
107             if (pref.callForwardInfo != null) {
108                 bundle.putString(KEY_NUMBER, pref.callForwardInfo.number);
109                 bundle.putInt(KEY_STATUS, pref.callForwardInfo.status);
110             }
111             outState.putParcelable(pref.getKey(), bundle);
112         }
113     }
114 
115     @Override
onFinished(Preference preference, boolean reading)116     public void onFinished(Preference preference, boolean reading) {
117         if (mInitIndex < mPreferences.size()-1 && !isFinishing()) {
118             mInitIndex++;
119             mPreferences.get(mInitIndex).init(this, false);
120         }
121 
122         super.onFinished(preference, reading);
123     }
124 
125     @Override
onActivityResult(int requestCode, int resultCode, Intent data)126     protected void onActivityResult(int requestCode, int resultCode, Intent data) {
127         if (DBG) Log.d(LOG_TAG, "onActivityResult: done");
128         if (resultCode != RESULT_OK) {
129             if (DBG) Log.d(LOG_TAG, "onActivityResult: contact picker result not OK.");
130             return;
131         }
132         Cursor cursor = getContentResolver().query(data.getData(),
133                 NUM_PROJECTION, null, null, null);
134         if ((cursor == null) || (!cursor.moveToFirst())) {
135             if (DBG) Log.d(LOG_TAG, "onActivityResult: bad contact data, no results found.");
136             return;
137         }
138 
139         switch (requestCode) {
140             case CommandsInterface.CF_REASON_UNCONDITIONAL:
141                 mButtonCFU.onPickActivityResult(cursor.getString(0));
142                 break;
143             case CommandsInterface.CF_REASON_BUSY:
144                 mButtonCFB.onPickActivityResult(cursor.getString(0));
145                 break;
146             case CommandsInterface.CF_REASON_NO_REPLY:
147                 mButtonCFNRy.onPickActivityResult(cursor.getString(0));
148                 break;
149             case CommandsInterface.CF_REASON_NOT_REACHABLE:
150                 mButtonCFNRc.onPickActivityResult(cursor.getString(0));
151                 break;
152             default:
153                 // TODO: may need exception here.
154         }
155     }
156 }
157