blob: 074078cff598c298fb3702a3637ed8d31044803c [file] [log] [blame]
/*
* 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);
}
}