• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 package com.android.phone;
2 
3 import static com.android.phone.TimeConsumingPreferenceActivity.RESPONSE_ERROR;
4 import com.android.internal.telephony.CommandException;
5 import com.android.internal.telephony.CommandsInterface;
6 import com.android.internal.telephony.Phone;
7 import com.android.internal.telephony.PhoneFactory;
8 
9 import android.content.Context;
10 import android.os.AsyncResult;
11 import android.os.Handler;
12 import android.os.Message;
13 import android.os.Parcelable;
14 import android.preference.ListPreference;
15 import android.util.AttributeSet;
16 import android.util.Log;
17 
18 public class CLIRListPreference extends ListPreference {
19     private static final String LOG_TAG = "CLIRListPreference";
20     private final boolean DBG = (PhoneApp.DBG_LEVEL >= 2);
21 
22     private MyHandler mHandler = new MyHandler();
23     Phone phone;
24     TimeConsumingPreferenceListener tcpListener;
25 
26     int clirArray[];
27 
CLIRListPreference(Context context, AttributeSet attrs)28     public CLIRListPreference(Context context, AttributeSet attrs) {
29         super(context, attrs);
30 
31         phone = PhoneFactory.getDefaultPhone();
32     }
33 
CLIRListPreference(Context context)34     public CLIRListPreference(Context context) {
35         this(context, null);
36     }
37 
38     @Override
onDialogClosed(boolean positiveResult)39     protected void onDialogClosed(boolean positiveResult) {
40         super.onDialogClosed(positiveResult);
41 
42         phone.setOutgoingCallerIdDisplay(findIndexOfValue(getValue()),
43                 mHandler.obtainMessage(MyHandler.MESSAGE_SET_CLIR));
44         if (tcpListener != null) {
45             tcpListener.onStarted(this, false);
46         }
47     }
48 
init(TimeConsumingPreferenceListener listener, boolean skipReading)49     void init(TimeConsumingPreferenceListener listener, boolean skipReading) {
50         tcpListener = listener;
51         if (!skipReading) {
52             phone.getOutgoingCallerIdDisplay(mHandler.obtainMessage(MyHandler.MESSAGE_GET_CLIR,
53                     MyHandler.MESSAGE_GET_CLIR, MyHandler.MESSAGE_GET_CLIR));
54             if (tcpListener != null) {
55                 tcpListener.onStarted(this, true);
56             }
57         }
58     }
59 
handleGetCLIRResult(int tmpClirArray[])60     void handleGetCLIRResult(int tmpClirArray[]) {
61         clirArray = tmpClirArray;
62         final boolean enabled = tmpClirArray[1] == 1 || tmpClirArray[1] == 3 || tmpClirArray[1] == 4;
63         setEnabled(enabled);
64 
65         // set the value of the preference based upon the clirArgs.
66         int value = CommandsInterface.CLIR_DEFAULT;
67         switch (tmpClirArray[1]) {
68             case 1: // Permanently provisioned
69             case 3: // Temporary presentation disallowed
70             case 4: // Temporary presentation allowed
71                 switch (tmpClirArray[0]) {
72                     case 1: // CLIR invoked
73                         value = CommandsInterface.CLIR_INVOCATION;
74                         break;
75                     case 2: // CLIR suppressed
76                         value = CommandsInterface.CLIR_SUPPRESSION;
77                         break;
78                     case 0: // Network default
79                     default:
80                         value = CommandsInterface.CLIR_DEFAULT;
81                         break;
82                 }
83                 break;
84             case 0: // Not Provisioned
85             case 2: // Unknown (network error, etc)
86             default:
87                 value = CommandsInterface.CLIR_DEFAULT;
88                 break;
89         }
90         setValueIndex(value);
91 
92         // set the string summary to reflect the value
93         int summary = R.string.sum_default_caller_id;
94         switch (value) {
95             case CommandsInterface.CLIR_SUPPRESSION:
96                 summary = R.string.sum_show_caller_id;
97                 break;
98             case CommandsInterface.CLIR_INVOCATION:
99                 summary = R.string.sum_hide_caller_id;
100                 break;
101             case CommandsInterface.CLIR_DEFAULT:
102                 summary = R.string.sum_default_caller_id;
103                 break;
104         }
105         setSummary(summary);
106     }
107 
108     private class MyHandler extends Handler {
109         private static final int MESSAGE_GET_CLIR = 0;
110         private static final int MESSAGE_SET_CLIR = 1;
111 
112         @Override
handleMessage(Message msg)113         public void handleMessage(Message msg) {
114             switch (msg.what) {
115                 case MESSAGE_GET_CLIR:
116                     handleGetCLIRResponse(msg);
117                     break;
118                 case MESSAGE_SET_CLIR:
119                     handleSetCLIRResponse(msg);
120                     break;
121             }
122         }
123 
handleGetCLIRResponse(Message msg)124         private void handleGetCLIRResponse(Message msg) {
125             AsyncResult ar = (AsyncResult) msg.obj;
126 
127             if (msg.arg2 == MESSAGE_SET_CLIR) {
128                 tcpListener.onFinished(CLIRListPreference.this, false);
129             } else {
130                 tcpListener.onFinished(CLIRListPreference.this, true);
131             }
132             clirArray = null;
133             if (ar.exception != null) {
134                 if (DBG) Log.d(LOG_TAG, "handleGetCLIRResponse: ar.exception="+ar.exception);
135                 tcpListener.onException(CLIRListPreference.this, (CommandException) ar.exception);
136             } else if (ar.userObj instanceof Throwable) {
137                 tcpListener.onError(CLIRListPreference.this, RESPONSE_ERROR);
138             } else {
139                 int clirArray[] = (int[]) ar.result;
140                 if (clirArray.length != 2) {
141                     tcpListener.onError(CLIRListPreference.this, RESPONSE_ERROR);
142                 } else {
143                     if (DBG) Log.d(LOG_TAG, "handleGetCLIRResponse: CLIR successfully queried, clirArray[0]="
144                             + clirArray[0] + ", clirArray[1]=" + clirArray[1]);
145                     handleGetCLIRResult(clirArray);
146                 }
147             }
148         }
149 
handleSetCLIRResponse(Message msg)150         private void handleSetCLIRResponse(Message msg) {
151             AsyncResult ar = (AsyncResult) msg.obj;
152 
153             if (ar.exception != null) {
154                 if (DBG) Log.d(LOG_TAG, "handleSetCallWaitingResponse: ar.exception="+ar.exception);
155                 //setEnabled(false);
156             }
157             if (DBG) Log.d(LOG_TAG, "handleSetCallWaitingResponse: re get");
158 
159             phone.getOutgoingCallerIdDisplay(obtainMessage(MESSAGE_GET_CLIR,
160                     MESSAGE_SET_CLIR, MESSAGE_SET_CLIR, ar.exception));
161         }
162     }
163 }