blob: 074078cff598c298fb3702a3637ed8d31044803c [file] [log] [blame]
Santos Cordon7d4ddf62013-07-10 11:58:08 -07001/*
2 * Copyright (C) 2006 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
17package com.android.phone;
18
19import android.app.Activity;
20import android.content.AsyncQueryHandler;
21import android.content.ContentResolver;
22import android.content.Intent;
23import android.database.Cursor;
24import android.net.Uri;
25import android.os.Bundle;
26import android.os.Handler;
27import android.text.TextUtils;
28import android.util.Log;
29import android.view.Window;
30import android.widget.Toast;
31
32import static android.view.Window.PROGRESS_VISIBILITY_OFF;
33import static android.view.Window.PROGRESS_VISIBILITY_ON;
34
35/**
36 * Activity to let the user delete an FDN contact.
37 */
38public class DeleteFdnContactScreen extends Activity {
39 private static final String LOG_TAG = PhoneGlobals.LOG_TAG;
40 private static final boolean DBG = false;
41
42 private static final String INTENT_EXTRA_NAME = "name";
43 private static final String INTENT_EXTRA_NUMBER = "number";
44
45 private static final int PIN2_REQUEST_CODE = 100;
46
47 private String mName;
48 private String mNumber;
49 private String mPin2;
50
51 protected QueryHandler mQueryHandler;
52
53 private Handler mHandler = new Handler();
54
55 @Override
56 protected void onCreate(Bundle icicle) {
57 super.onCreate(icicle);
58
59 resolveIntent();
60
61 authenticatePin2();
62
63 getWindow().requestFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
64 setContentView(R.layout.delete_fdn_contact_screen);
65 }
66
67 @Override
68 protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
69 if (DBG) log("onActivityResult");
70
71 switch (requestCode) {
72 case PIN2_REQUEST_CODE:
73 Bundle extras = (intent != null) ? intent.getExtras() : null;
74 if (extras != null) {
75 mPin2 = extras.getString("pin2");
76 showStatus(getResources().getText(
77 R.string.deleting_fdn_contact));
78 deleteContact();
79 } else {
80 // if they cancelled, then we just cancel too.
81 if (DBG) log("onActivityResult: CANCELLED");
82 displayProgress(false);
83 finish();
84 }
85 break;
86 }
87 }
88
89 private void resolveIntent() {
90 Intent intent = getIntent();
91
92 mName = intent.getStringExtra(INTENT_EXTRA_NAME);
93 mNumber = intent.getStringExtra(INTENT_EXTRA_NUMBER);
94
95 if (TextUtils.isEmpty(mNumber)) {
96 finish();
97 }
98 }
99
100 private void deleteContact() {
101 StringBuilder buf = new StringBuilder();
102 if (TextUtils.isEmpty(mName)) {
103 buf.append("number='");
104 } else {
105 buf.append("tag='");
106 buf.append(mName);
107 buf.append("' AND number='");
108 }
109 buf.append(mNumber);
110 buf.append("' AND pin2='");
111 buf.append(mPin2);
112 buf.append("'");
113
114 Uri uri = Uri.parse("content://icc/fdn");
115
116 mQueryHandler = new QueryHandler(getContentResolver());
117 mQueryHandler.startDelete(0, null, uri, buf.toString(), null);
118 displayProgress(true);
119 }
120
121 private void authenticatePin2() {
122 Intent intent = new Intent();
123 intent.setClass(this, GetPin2Screen.class);
124 startActivityForResult(intent, PIN2_REQUEST_CODE);
125 }
126
127 private void displayProgress(boolean flag) {
128 getWindow().setFeatureInt(
129 Window.FEATURE_INDETERMINATE_PROGRESS,
130 flag ? PROGRESS_VISIBILITY_ON : PROGRESS_VISIBILITY_OFF);
131 }
132
133 // Replace the status field with a toast to make things appear similar
134 // to the rest of the settings. Removed the useless status field.
135 private void showStatus(CharSequence statusMsg) {
136 if (statusMsg != null) {
137 Toast.makeText(this, statusMsg, Toast.LENGTH_SHORT)
138 .show();
139 }
140 }
141
142 private void handleResult(boolean success) {
143 if (success) {
144 if (DBG) log("handleResult: success!");
145 showStatus(getResources().getText(R.string.fdn_contact_deleted));
146 } else {
147 if (DBG) log("handleResult: failed!");
148 showStatus(getResources().getText(R.string.pin2_invalid));
149 }
150
151 mHandler.postDelayed(new Runnable() {
152 @Override
153 public void run() {
154 finish();
155 }
156 }, 2000);
157
158 }
159
160 private class QueryHandler extends AsyncQueryHandler {
161 public QueryHandler(ContentResolver cr) {
162 super(cr);
163 }
164
165 @Override
166 protected void onQueryComplete(int token, Object cookie, Cursor c) {
167 }
168
169 @Override
170 protected void onInsertComplete(int token, Object cookie, Uri uri) {
171 }
172
173 @Override
174 protected void onUpdateComplete(int token, Object cookie, int result) {
175 }
176
177 @Override
178 protected void onDeleteComplete(int token, Object cookie, int result) {
179 if (DBG) log("onDeleteComplete");
180 displayProgress(false);
181 handleResult(result > 0);
182 }
183
184 }
185
186 private void log(String msg) {
187 Log.d(LOG_TAG, "[DeleteFdnContact] " + msg);
188 }
189}