AI 144142: am: CL 144141 Pick up a couple of edited translations.
[android/platform/packages/apps/Phone.git] / src / com / android / phone / SimNetworkDepersonalizationPanel.java
1 /*
2  * Copyright (C) 2008 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16
17 package com.android.phone;
18
19 import android.content.Context;
20 import android.os.AsyncResult;
21 import android.os.Bundle;
22 import android.os.Handler;
23 import android.os.Message;
24 import com.android.internal.telephony.Phone;
25 import com.android.internal.telephony.PhoneFactory;
26 import android.text.Editable;
27 import android.text.Spannable;
28 import android.text.TextUtils;
29 import android.text.TextWatcher;
30 import android.text.method.DialerKeyListener;
31 import android.util.Log;
32 import android.view.KeyEvent;
33 import android.view.View;
34 import android.widget.Button;
35 import android.widget.EditText;
36 import android.widget.LinearLayout;
37 import android.widget.TextView;
38
39
40 /**
41  * "SIM network unlock" PIN entry screen.
42  *
43  * @see PhoneApp.EVENT_SIM_NETWORK_LOCKED
44  */
45 public class SimNetworkDepersonalizationPanel extends SimPanel {
46     private static final boolean DBG = false;
47
48     //events
49     private static final int EVENT_SIM_NTWRK_DEPERSONALIZATION_RESULT = 100;
50
51     private Phone mPhone;
52
53     //UI elements
54     private EditText     mPinEntry;
55     private LinearLayout mEntryPanel;
56     private LinearLayout mStatusPanel;
57     private TextView     mStatusText;
58
59     private Button       mUnlockButton;
60
61     //private textwatcher to control text entry.
62     private TextWatcher mPinEntryWatcher = new TextWatcher() {
63         public void beforeTextChanged(CharSequence buffer, int start, int olen, int nlen) {
64         }
65
66         public void onTextChanged(CharSequence buffer, int start, int olen, int nlen) {
67         }
68
69         public void afterTextChanged(Editable buffer) {
70             if (SpecialCharSequenceMgr.handleChars(
71                     getContext(), buffer.toString(), true)) {
72                 mPinEntry.getText().clear();
73             }
74         }
75     };
76     
77     //handler for unlock function results
78     private Handler mHandler = new Handler() {
79         public void handleMessage(Message msg) {
80             if (msg.what == EVENT_SIM_NTWRK_DEPERSONALIZATION_RESULT) {
81                 AsyncResult res = (AsyncResult) msg.obj;
82                 if (res.exception != null) {
83                     if (DBG) log("network depersonalization request failure.");
84                     indicateError();
85                     postDelayed(new Runnable() {
86                                     public void run() {
87                                         hideAlert();
88                                         mPinEntry.getText().clear();
89                                         mPinEntry.requestFocus();
90                                     }
91                                 }, 3000);
92                 } else {
93                     if (DBG) log("network depersonalization success.");
94                     indicateSuccess();
95                     postDelayed(new Runnable() {
96                                     public void run() {
97                                         dismiss();
98                                     }
99                                 }, 3000);
100                 }
101             }
102         }
103     };
104     
105     //constructor
106     public SimNetworkDepersonalizationPanel(Context context) {
107         super(context);
108     }
109     
110     @Override
111     protected void onCreate(Bundle icicle) {
112         super.onCreate(icicle);
113         setContentView(R.layout.sim_ndp);
114
115         // PIN entry text field
116         mPinEntry = (EditText) findViewById(R.id.pin_entry);
117         mPinEntry.setKeyListener(DialerKeyListener.getInstance());
118         mPinEntry.setOnClickListener(mUnlockListener);
119
120         // Attach the textwatcher
121         CharSequence text = mPinEntry.getText();
122         Spannable span = (Spannable) text;
123         span.setSpan(mPinEntryWatcher, 0, text.length(), Spannable.SPAN_INCLUSIVE_INCLUSIVE);
124         
125         mEntryPanel = (LinearLayout) findViewById(R.id.entry_panel);
126
127         mUnlockButton = (Button) findViewById(R.id.ndp_unlock);
128         mUnlockButton.setOnClickListener(mUnlockListener);
129
130         //status panel is used since we're having problems with the alert dialog.
131         mStatusPanel = (LinearLayout) findViewById(R.id.status_panel);
132         mStatusText = (TextView) findViewById(R.id.status_text);
133         
134         mPhone = PhoneFactory.getDefaultPhone();
135     }
136
137     @Override
138     protected void onStart() {
139         super.onStart();
140     }
141     
142     //Mirrors SimPinUnlockPanel.onKeyDown().
143     public boolean onKeyDown(int keyCode, KeyEvent event) {
144         if (keyCode == KeyEvent.KEYCODE_BACK) {
145             return true;
146         }
147
148         return super.onKeyDown(keyCode, event);
149     }
150
151     View.OnClickListener mUnlockListener = new View.OnClickListener() {
152         public void onClick(View v) {
153             String pin = mPinEntry.getText().toString();
154
155             if (TextUtils.isEmpty(pin)) {
156                 return;
157             }
158
159             if (DBG) log("requesting network depersonalization with code " + pin);
160             mPhone.getSimCard().supplyNetworkDepersonalization(pin,
161                     Message.obtain(mHandler, EVENT_SIM_NTWRK_DEPERSONALIZATION_RESULT));
162             indicateBusy();
163         }
164     };
165
166     private void indicateBusy() {
167         mStatusText.setText(R.string.requesting_unlock);
168         mEntryPanel.setVisibility(View.GONE);
169         mStatusPanel.setVisibility(View.VISIBLE);
170     }
171
172     private void indicateError() {
173         mStatusText.setText(R.string.unlock_failed);
174         mEntryPanel.setVisibility(View.GONE);
175         mStatusPanel.setVisibility(View.VISIBLE);
176     }
177
178     private void indicateSuccess() {
179         mStatusText.setText(R.string.unlock_success);
180         mEntryPanel.setVisibility(View.GONE);
181         mStatusPanel.setVisibility(View.VISIBLE);
182     }
183
184     private void hideAlert() {
185         mEntryPanel.setVisibility(View.VISIBLE);
186         mStatusPanel.setVisibility(View.GONE);
187     }
188
189     private void log(String msg) {
190         Log.v(TAG, "[SimNetworkDepersonalizationPanel] " + msg);
191     }
192 }