| /* |
| * 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.settings.fdn; |
| |
| 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 com.android.phone.PhoneGlobals; |
| import com.android.phone.R; |
| |
| 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); |
| } |
| } |