17903d2473e1120e32fa5380a7d7532d0a21e2180Chiao Cheng/* 27903d2473e1120e32fa5380a7d7532d0a21e2180Chiao Cheng * Copyright (C) 2010 The Android Open Source Project 37903d2473e1120e32fa5380a7d7532d0a21e2180Chiao Cheng * 47903d2473e1120e32fa5380a7d7532d0a21e2180Chiao Cheng * Licensed under the Apache License, Version 2.0 (the "License"); 57903d2473e1120e32fa5380a7d7532d0a21e2180Chiao Cheng * you may not use this file except in compliance with the License. 67903d2473e1120e32fa5380a7d7532d0a21e2180Chiao Cheng * You may obtain a copy of the License at 77903d2473e1120e32fa5380a7d7532d0a21e2180Chiao Cheng * 87903d2473e1120e32fa5380a7d7532d0a21e2180Chiao Cheng * http://www.apache.org/licenses/LICENSE-2.0 97903d2473e1120e32fa5380a7d7532d0a21e2180Chiao Cheng * 107903d2473e1120e32fa5380a7d7532d0a21e2180Chiao Cheng * Unless required by applicable law or agreed to in writing, software 117903d2473e1120e32fa5380a7d7532d0a21e2180Chiao Cheng * distributed under the License is distributed on an "AS IS" BASIS, 127903d2473e1120e32fa5380a7d7532d0a21e2180Chiao Cheng * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 137903d2473e1120e32fa5380a7d7532d0a21e2180Chiao Cheng * See the License for the specific language governing permissions and 147903d2473e1120e32fa5380a7d7532d0a21e2180Chiao Cheng * limitations under the License. 157903d2473e1120e32fa5380a7d7532d0a21e2180Chiao Cheng */ 167903d2473e1120e32fa5380a7d7532d0a21e2180Chiao Chengpackage com.android.contacts.common.vcard; 177903d2473e1120e32fa5380a7d7532d0a21e2180Chiao Cheng 187903d2473e1120e32fa5380a7d7532d0a21e2180Chiao Chengimport android.app.Activity; 197903d2473e1120e32fa5380a7d7532d0a21e2180Chiao Chengimport android.app.AlertDialog; 207903d2473e1120e32fa5380a7d7532d0a21e2180Chiao Chengimport android.app.Dialog; 217903d2473e1120e32fa5380a7d7532d0a21e2180Chiao Chengimport android.content.ComponentName; 227903d2473e1120e32fa5380a7d7532d0a21e2180Chiao Chengimport android.content.Context; 237903d2473e1120e32fa5380a7d7532d0a21e2180Chiao Chengimport android.content.DialogInterface; 247903d2473e1120e32fa5380a7d7532d0a21e2180Chiao Chengimport android.content.Intent; 257903d2473e1120e32fa5380a7d7532d0a21e2180Chiao Chengimport android.content.ServiceConnection; 267903d2473e1120e32fa5380a7d7532d0a21e2180Chiao Chengimport android.net.Uri; 277903d2473e1120e32fa5380a7d7532d0a21e2180Chiao Chengimport android.os.Bundle; 287903d2473e1120e32fa5380a7d7532d0a21e2180Chiao Chengimport android.os.IBinder; 297903d2473e1120e32fa5380a7d7532d0a21e2180Chiao Chengimport android.util.Log; 307903d2473e1120e32fa5380a7d7532d0a21e2180Chiao Cheng 317903d2473e1120e32fa5380a7d7532d0a21e2180Chiao Chengimport com.android.contacts.common.R; 327903d2473e1120e32fa5380a7d7532d0a21e2180Chiao Cheng 337903d2473e1120e32fa5380a7d7532d0a21e2180Chiao Cheng/** 347903d2473e1120e32fa5380a7d7532d0a21e2180Chiao Cheng * The Activity for canceling vCard import/export. 357903d2473e1120e32fa5380a7d7532d0a21e2180Chiao Cheng */ 367903d2473e1120e32fa5380a7d7532d0a21e2180Chiao Chengpublic class CancelActivity extends Activity implements ServiceConnection { 377903d2473e1120e32fa5380a7d7532d0a21e2180Chiao Cheng private final String LOG_TAG = "VCardCancel"; 387903d2473e1120e32fa5380a7d7532d0a21e2180Chiao Cheng 397903d2473e1120e32fa5380a7d7532d0a21e2180Chiao Cheng /* package */ final static String JOB_ID = "job_id"; 407903d2473e1120e32fa5380a7d7532d0a21e2180Chiao Cheng /* package */ final static String DISPLAY_NAME = "display_name"; 417903d2473e1120e32fa5380a7d7532d0a21e2180Chiao Cheng 427903d2473e1120e32fa5380a7d7532d0a21e2180Chiao Cheng /** 437903d2473e1120e32fa5380a7d7532d0a21e2180Chiao Cheng * Type of the process to be canceled. Only used for choosing appropriate title/message. 447903d2473e1120e32fa5380a7d7532d0a21e2180Chiao Cheng * Must be {@link VCardService#TYPE_IMPORT} or {@link VCardService#TYPE_EXPORT}. 457903d2473e1120e32fa5380a7d7532d0a21e2180Chiao Cheng */ 467903d2473e1120e32fa5380a7d7532d0a21e2180Chiao Cheng /* package */ final static String TYPE = "type"; 477903d2473e1120e32fa5380a7d7532d0a21e2180Chiao Cheng 487903d2473e1120e32fa5380a7d7532d0a21e2180Chiao Cheng private class RequestCancelListener implements DialogInterface.OnClickListener { 497903d2473e1120e32fa5380a7d7532d0a21e2180Chiao Cheng @Override 507903d2473e1120e32fa5380a7d7532d0a21e2180Chiao Cheng public void onClick(DialogInterface dialog, int which) { 517903d2473e1120e32fa5380a7d7532d0a21e2180Chiao Cheng bindService(new Intent(CancelActivity.this, 527903d2473e1120e32fa5380a7d7532d0a21e2180Chiao Cheng VCardService.class), CancelActivity.this, Context.BIND_AUTO_CREATE); 537903d2473e1120e32fa5380a7d7532d0a21e2180Chiao Cheng } 547903d2473e1120e32fa5380a7d7532d0a21e2180Chiao Cheng } 557903d2473e1120e32fa5380a7d7532d0a21e2180Chiao Cheng 567903d2473e1120e32fa5380a7d7532d0a21e2180Chiao Cheng private class CancelListener 577903d2473e1120e32fa5380a7d7532d0a21e2180Chiao Cheng implements DialogInterface.OnClickListener, DialogInterface.OnCancelListener { 587903d2473e1120e32fa5380a7d7532d0a21e2180Chiao Cheng @Override 597903d2473e1120e32fa5380a7d7532d0a21e2180Chiao Cheng public void onClick(DialogInterface dialog, int which) { 607903d2473e1120e32fa5380a7d7532d0a21e2180Chiao Cheng finish(); 617903d2473e1120e32fa5380a7d7532d0a21e2180Chiao Cheng } 627903d2473e1120e32fa5380a7d7532d0a21e2180Chiao Cheng @Override 637903d2473e1120e32fa5380a7d7532d0a21e2180Chiao Cheng public void onCancel(DialogInterface dialog) { 647903d2473e1120e32fa5380a7d7532d0a21e2180Chiao Cheng finish(); 657903d2473e1120e32fa5380a7d7532d0a21e2180Chiao Cheng } 667903d2473e1120e32fa5380a7d7532d0a21e2180Chiao Cheng } 677903d2473e1120e32fa5380a7d7532d0a21e2180Chiao Cheng 687903d2473e1120e32fa5380a7d7532d0a21e2180Chiao Cheng private final CancelListener mCancelListener = new CancelListener(); 697903d2473e1120e32fa5380a7d7532d0a21e2180Chiao Cheng private int mJobId; 707903d2473e1120e32fa5380a7d7532d0a21e2180Chiao Cheng private String mDisplayName; 717903d2473e1120e32fa5380a7d7532d0a21e2180Chiao Cheng private int mType; 727903d2473e1120e32fa5380a7d7532d0a21e2180Chiao Cheng 737903d2473e1120e32fa5380a7d7532d0a21e2180Chiao Cheng @Override 747903d2473e1120e32fa5380a7d7532d0a21e2180Chiao Cheng public void onCreate(Bundle savedInstanceState) { 757903d2473e1120e32fa5380a7d7532d0a21e2180Chiao Cheng super.onCreate(savedInstanceState); 767903d2473e1120e32fa5380a7d7532d0a21e2180Chiao Cheng final Uri uri = getIntent().getData(); 777903d2473e1120e32fa5380a7d7532d0a21e2180Chiao Cheng mJobId = Integer.parseInt(uri.getQueryParameter(JOB_ID)); 787903d2473e1120e32fa5380a7d7532d0a21e2180Chiao Cheng mDisplayName = uri.getQueryParameter(DISPLAY_NAME); 797903d2473e1120e32fa5380a7d7532d0a21e2180Chiao Cheng mType = Integer.parseInt(uri.getQueryParameter(TYPE)); 807903d2473e1120e32fa5380a7d7532d0a21e2180Chiao Cheng showDialog(R.id.dialog_cancel_confirmation); 817903d2473e1120e32fa5380a7d7532d0a21e2180Chiao Cheng } 827903d2473e1120e32fa5380a7d7532d0a21e2180Chiao Cheng 837903d2473e1120e32fa5380a7d7532d0a21e2180Chiao Cheng @Override 847903d2473e1120e32fa5380a7d7532d0a21e2180Chiao Cheng protected Dialog onCreateDialog(int id, Bundle bundle) { 857903d2473e1120e32fa5380a7d7532d0a21e2180Chiao Cheng switch (id) { 867903d2473e1120e32fa5380a7d7532d0a21e2180Chiao Cheng case R.id.dialog_cancel_confirmation: { 877903d2473e1120e32fa5380a7d7532d0a21e2180Chiao Cheng final String message; 887903d2473e1120e32fa5380a7d7532d0a21e2180Chiao Cheng if (mType == VCardService.TYPE_IMPORT) { 897903d2473e1120e32fa5380a7d7532d0a21e2180Chiao Cheng message = getString(R.string.cancel_import_confirmation_message, mDisplayName); 907903d2473e1120e32fa5380a7d7532d0a21e2180Chiao Cheng } else { 917903d2473e1120e32fa5380a7d7532d0a21e2180Chiao Cheng message = getString(R.string.cancel_export_confirmation_message, mDisplayName); 927903d2473e1120e32fa5380a7d7532d0a21e2180Chiao Cheng } 937903d2473e1120e32fa5380a7d7532d0a21e2180Chiao Cheng final AlertDialog.Builder builder = new AlertDialog.Builder(this) 947903d2473e1120e32fa5380a7d7532d0a21e2180Chiao Cheng .setMessage(message) 957903d2473e1120e32fa5380a7d7532d0a21e2180Chiao Cheng .setPositiveButton(android.R.string.ok, new RequestCancelListener()) 967903d2473e1120e32fa5380a7d7532d0a21e2180Chiao Cheng .setOnCancelListener(mCancelListener) 977903d2473e1120e32fa5380a7d7532d0a21e2180Chiao Cheng .setNegativeButton(android.R.string.cancel, mCancelListener); 987903d2473e1120e32fa5380a7d7532d0a21e2180Chiao Cheng return builder.create(); 997903d2473e1120e32fa5380a7d7532d0a21e2180Chiao Cheng } 1007903d2473e1120e32fa5380a7d7532d0a21e2180Chiao Cheng case R.id.dialog_cancel_failed: 1017903d2473e1120e32fa5380a7d7532d0a21e2180Chiao Cheng final AlertDialog.Builder builder = new AlertDialog.Builder(this) 1027903d2473e1120e32fa5380a7d7532d0a21e2180Chiao Cheng .setTitle(R.string.cancel_vcard_import_or_export_failed) 1037903d2473e1120e32fa5380a7d7532d0a21e2180Chiao Cheng .setIconAttribute(android.R.attr.alertDialogIcon) 1047903d2473e1120e32fa5380a7d7532d0a21e2180Chiao Cheng .setMessage(getString(R.string.fail_reason_unknown)) 1057903d2473e1120e32fa5380a7d7532d0a21e2180Chiao Cheng .setOnCancelListener(mCancelListener) 1067903d2473e1120e32fa5380a7d7532d0a21e2180Chiao Cheng .setPositiveButton(android.R.string.ok, mCancelListener); 1077903d2473e1120e32fa5380a7d7532d0a21e2180Chiao Cheng return builder.create(); 1087903d2473e1120e32fa5380a7d7532d0a21e2180Chiao Cheng default: 1097903d2473e1120e32fa5380a7d7532d0a21e2180Chiao Cheng Log.w(LOG_TAG, "Unknown dialog id: " + id); 1107903d2473e1120e32fa5380a7d7532d0a21e2180Chiao Cheng break; 1117903d2473e1120e32fa5380a7d7532d0a21e2180Chiao Cheng } 1127903d2473e1120e32fa5380a7d7532d0a21e2180Chiao Cheng return super.onCreateDialog(id, bundle); 1137903d2473e1120e32fa5380a7d7532d0a21e2180Chiao Cheng } 1147903d2473e1120e32fa5380a7d7532d0a21e2180Chiao Cheng 1157903d2473e1120e32fa5380a7d7532d0a21e2180Chiao Cheng @Override 1167903d2473e1120e32fa5380a7d7532d0a21e2180Chiao Cheng public void onServiceConnected(ComponentName name, IBinder binder) { 1177903d2473e1120e32fa5380a7d7532d0a21e2180Chiao Cheng VCardService service = ((VCardService.MyBinder) binder).getService(); 1187903d2473e1120e32fa5380a7d7532d0a21e2180Chiao Cheng 1197903d2473e1120e32fa5380a7d7532d0a21e2180Chiao Cheng try { 1207903d2473e1120e32fa5380a7d7532d0a21e2180Chiao Cheng final CancelRequest request = new CancelRequest(mJobId, mDisplayName); 1217903d2473e1120e32fa5380a7d7532d0a21e2180Chiao Cheng service.handleCancelRequest(request, null); 1227903d2473e1120e32fa5380a7d7532d0a21e2180Chiao Cheng } finally { 1237903d2473e1120e32fa5380a7d7532d0a21e2180Chiao Cheng unbindService(this); 1247903d2473e1120e32fa5380a7d7532d0a21e2180Chiao Cheng } 1257903d2473e1120e32fa5380a7d7532d0a21e2180Chiao Cheng 1267903d2473e1120e32fa5380a7d7532d0a21e2180Chiao Cheng finish(); 1277903d2473e1120e32fa5380a7d7532d0a21e2180Chiao Cheng } 1287903d2473e1120e32fa5380a7d7532d0a21e2180Chiao Cheng 1297903d2473e1120e32fa5380a7d7532d0a21e2180Chiao Cheng @Override 1307903d2473e1120e32fa5380a7d7532d0a21e2180Chiao Cheng public void onServiceDisconnected(ComponentName name) { 1317903d2473e1120e32fa5380a7d7532d0a21e2180Chiao Cheng // do nothing 1327903d2473e1120e32fa5380a7d7532d0a21e2180Chiao Cheng } 1337903d2473e1120e32fa5380a7d7532d0a21e2180Chiao Cheng} 134