summaryrefslogtreecommitdiff
path: root/src/com/android/phone/DeleteFdnContactScreen.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/android/phone/DeleteFdnContactScreen.java')
-rw-r--r--src/com/android/phone/DeleteFdnContactScreen.java189
1 files changed, 189 insertions, 0 deletions
diff --git a/src/com/android/phone/DeleteFdnContactScreen.java b/src/com/android/phone/DeleteFdnContactScreen.java
new file mode 100644
index 00000000..074078cf
--- /dev/null
+++ b/src/com/android/phone/DeleteFdnContactScreen.java
@@ -0,0 +1,189 @@
+/*
+ * Copyright (C) 2006 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.phone;
+
+import android.app.Activity;
+import android.content.AsyncQueryHandler;
+import android.content.ContentResolver;
+import android.content.Intent;
+import android.database.Cursor;
+import android.net.Uri;
+import android.os.Bundle;
+import android.os.Handler;
+import android.text.TextUtils;
+import android.util.Log;
+import android.view.Window;
+import android.widget.Toast;
+
+import static android.view.Window.PROGRESS_VISIBILITY_OFF;
+import static android.view.Window.PROGRESS_VISIBILITY_ON;
+
+/**
+ * Activity to let the user delete an FDN contact.
+ */
+public class DeleteFdnContactScreen extends Activity {
+ private static final String LOG_TAG = PhoneGlobals.LOG_TAG;
+ private static final boolean DBG = false;
+
+ private static final String INTENT_EXTRA_NAME = "name";
+ private static final String INTENT_EXTRA_NUMBER = "number";
+
+ private static final int PIN2_REQUEST_CODE = 100;
+
+ private String mName;
+ private String mNumber;
+ private String mPin2;
+
+ protected QueryHandler mQueryHandler;
+
+ private Handler mHandler = new Handler();
+
+ @Override
+ protected void onCreate(Bundle icicle) {
+ super.onCreate(icicle);
+
+ resolveIntent();
+
+ authenticatePin2();
+
+ getWindow().requestFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
+ setContentView(R.layout.delete_fdn_contact_screen);
+ }
+
+ @Override
+ protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
+ if (DBG) log("onActivityResult");
+
+ switch (requestCode) {
+ case PIN2_REQUEST_CODE:
+ Bundle extras = (intent != null) ? intent.getExtras() : null;
+ if (extras != null) {
+ mPin2 = extras.getString("pin2");
+ showStatus(getResources().getText(
+ R.string.deleting_fdn_contact));
+ deleteContact();
+ } else {
+ // if they cancelled, then we just cancel too.
+ if (DBG) log("onActivityResult: CANCELLED");
+ displayProgress(false);
+ finish();
+ }
+ break;
+ }
+ }
+
+ private void resolveIntent() {
+ Intent intent = getIntent();
+
+ mName = intent.getStringExtra(INTENT_EXTRA_NAME);
+ mNumber = intent.getStringExtra(INTENT_EXTRA_NUMBER);
+
+ if (TextUtils.isEmpty(mNumber)) {
+ finish();
+ }
+ }
+
+ private void deleteContact() {
+ StringBuilder buf = new StringBuilder();
+ if (TextUtils.isEmpty(mName)) {
+ buf.append("number='");
+ } else {
+ buf.append("tag='");
+ buf.append(mName);
+ buf.append("' AND number='");
+ }
+ buf.append(mNumber);
+ buf.append("' AND pin2='");
+ buf.append(mPin2);
+ buf.append("'");
+
+ Uri uri = Uri.parse("content://icc/fdn");
+
+ mQueryHandler = new QueryHandler(getContentResolver());
+ mQueryHandler.startDelete(0, null, uri, buf.toString(), null);
+ displayProgress(true);
+ }
+
+ private void authenticatePin2() {
+ Intent intent = new Intent();
+ intent.setClass(this, GetPin2Screen.class);
+ startActivityForResult(intent, PIN2_REQUEST_CODE);
+ }
+
+ private void displayProgress(boolean flag) {
+ getWindow().setFeatureInt(
+ Window.FEATURE_INDETERMINATE_PROGRESS,
+ flag ? PROGRESS_VISIBILITY_ON : PROGRESS_VISIBILITY_OFF);
+ }
+
+ // Replace the status field with a toast to make things appear similar
+ // to the rest of the settings. Removed the useless status field.
+ private void showStatus(CharSequence statusMsg) {
+ if (statusMsg != null) {
+ Toast.makeText(this, statusMsg, Toast.LENGTH_SHORT)
+ .show();
+ }
+ }
+
+ private void handleResult(boolean success) {
+ if (success) {
+ if (DBG) log("handleResult: success!");
+ showStatus(getResources().getText(R.string.fdn_contact_deleted));
+ } else {
+ if (DBG) log("handleResult: failed!");
+ showStatus(getResources().getText(R.string.pin2_invalid));
+ }
+
+ mHandler.postDelayed(new Runnable() {
+ @Override
+ public void run() {
+ finish();
+ }
+ }, 2000);
+
+ }
+
+ private class QueryHandler extends AsyncQueryHandler {
+ public QueryHandler(ContentResolver cr) {
+ super(cr);
+ }
+
+ @Override
+ protected void onQueryComplete(int token, Object cookie, Cursor c) {
+ }
+
+ @Override
+ protected void onInsertComplete(int token, Object cookie, Uri uri) {
+ }
+
+ @Override
+ protected void onUpdateComplete(int token, Object cookie, int result) {
+ }
+
+ @Override
+ protected void onDeleteComplete(int token, Object cookie, int result) {
+ if (DBG) log("onDeleteComplete");
+ displayProgress(false);
+ handleResult(result > 0);
+ }
+
+ }
+
+ private void log(String msg) {
+ Log.d(LOG_TAG, "[DeleteFdnContact] " + msg);
+ }
+}