1d80c4348dd6db1046fdade375a8d8c616d93e7acChiao Cheng/* 2d80c4348dd6db1046fdade375a8d8c616d93e7acChiao Cheng * Copyright (C) 2010 The Android Open Source Project 3d80c4348dd6db1046fdade375a8d8c616d93e7acChiao Cheng * 4d80c4348dd6db1046fdade375a8d8c616d93e7acChiao Cheng * Licensed under the Apache License, Version 2.0 (the "License"); 5d80c4348dd6db1046fdade375a8d8c616d93e7acChiao Cheng * you may not use this file except in compliance with the License. 6d80c4348dd6db1046fdade375a8d8c616d93e7acChiao Cheng * You may obtain a copy of the License at 7d80c4348dd6db1046fdade375a8d8c616d93e7acChiao Cheng * 8d80c4348dd6db1046fdade375a8d8c616d93e7acChiao Cheng * http://www.apache.org/licenses/LICENSE-2.0 9d80c4348dd6db1046fdade375a8d8c616d93e7acChiao Cheng * 10d80c4348dd6db1046fdade375a8d8c616d93e7acChiao Cheng * Unless required by applicable law or agreed to in writing, software 11d80c4348dd6db1046fdade375a8d8c616d93e7acChiao Cheng * distributed under the License is distributed on an "AS IS" BASIS, 12d80c4348dd6db1046fdade375a8d8c616d93e7acChiao Cheng * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13d80c4348dd6db1046fdade375a8d8c616d93e7acChiao Cheng * See the License for the specific language governing permissions and 14d80c4348dd6db1046fdade375a8d8c616d93e7acChiao Cheng * limitations under the License. 15d80c4348dd6db1046fdade375a8d8c616d93e7acChiao Cheng */ 1669c182afb0e6d82a341a28b4317aa703af768906Gary Maipackage com.android.contacts.vcard; 17d80c4348dd6db1046fdade375a8d8c616d93e7acChiao Cheng 18c2e912c41b4f0fc4ca4b948b6d0aaa84eeb8d1d9Brian Attwellimport android.app.Activity; 19d80c4348dd6db1046fdade375a8d8c616d93e7acChiao Chengimport android.app.AlertDialog; 20d80c4348dd6db1046fdade375a8d8c616d93e7acChiao Chengimport android.app.Dialog; 21d80c4348dd6db1046fdade375a8d8c616d93e7acChiao Chengimport android.content.ComponentName; 22d80c4348dd6db1046fdade375a8d8c616d93e7acChiao Chengimport android.content.Context; 23d80c4348dd6db1046fdade375a8d8c616d93e7acChiao Chengimport android.content.DialogInterface; 24d80c4348dd6db1046fdade375a8d8c616d93e7acChiao Chengimport android.content.Intent; 25d80c4348dd6db1046fdade375a8d8c616d93e7acChiao Chengimport android.content.ServiceConnection; 26d80c4348dd6db1046fdade375a8d8c616d93e7acChiao Chengimport android.net.Uri; 27d80c4348dd6db1046fdade375a8d8c616d93e7acChiao Chengimport android.os.Bundle; 28d80c4348dd6db1046fdade375a8d8c616d93e7acChiao Chengimport android.os.IBinder; 29d80c4348dd6db1046fdade375a8d8c616d93e7acChiao Chengimport android.util.Log; 30d80c4348dd6db1046fdade375a8d8c616d93e7acChiao Cheng 313f6a2444e0134b7380cdb2e13abf4bf1163336d0Arthur Wangimport com.android.contacts.R; 32d80c4348dd6db1046fdade375a8d8c616d93e7acChiao Cheng 33d80c4348dd6db1046fdade375a8d8c616d93e7acChiao Cheng/** 34d80c4348dd6db1046fdade375a8d8c616d93e7acChiao Cheng * The Activity for canceling vCard import/export. 35d80c4348dd6db1046fdade375a8d8c616d93e7acChiao Cheng */ 36c2e912c41b4f0fc4ca4b948b6d0aaa84eeb8d1d9Brian Attwellpublic class CancelActivity extends Activity implements ServiceConnection { 37d80c4348dd6db1046fdade375a8d8c616d93e7acChiao Cheng private final String LOG_TAG = "VCardCancel"; 38d80c4348dd6db1046fdade375a8d8c616d93e7acChiao Cheng 39d80c4348dd6db1046fdade375a8d8c616d93e7acChiao Cheng /* package */ final static String JOB_ID = "job_id"; 40d80c4348dd6db1046fdade375a8d8c616d93e7acChiao Cheng /* package */ final static String DISPLAY_NAME = "display_name"; 41d80c4348dd6db1046fdade375a8d8c616d93e7acChiao Cheng 42d80c4348dd6db1046fdade375a8d8c616d93e7acChiao Cheng /** 43d80c4348dd6db1046fdade375a8d8c616d93e7acChiao Cheng * Type of the process to be canceled. Only used for choosing appropriate title/message. 44d80c4348dd6db1046fdade375a8d8c616d93e7acChiao Cheng * Must be {@link VCardService#TYPE_IMPORT} or {@link VCardService#TYPE_EXPORT}. 45d80c4348dd6db1046fdade375a8d8c616d93e7acChiao Cheng */ 46d80c4348dd6db1046fdade375a8d8c616d93e7acChiao Cheng /* package */ final static String TYPE = "type"; 47d80c4348dd6db1046fdade375a8d8c616d93e7acChiao Cheng 48d80c4348dd6db1046fdade375a8d8c616d93e7acChiao Cheng private class RequestCancelListener implements DialogInterface.OnClickListener { 49d80c4348dd6db1046fdade375a8d8c616d93e7acChiao Cheng @Override 50d80c4348dd6db1046fdade375a8d8c616d93e7acChiao Cheng public void onClick(DialogInterface dialog, int which) { 51d80c4348dd6db1046fdade375a8d8c616d93e7acChiao Cheng bindService(new Intent(CancelActivity.this, 52d80c4348dd6db1046fdade375a8d8c616d93e7acChiao Cheng VCardService.class), CancelActivity.this, Context.BIND_AUTO_CREATE); 53d80c4348dd6db1046fdade375a8d8c616d93e7acChiao Cheng } 54d80c4348dd6db1046fdade375a8d8c616d93e7acChiao Cheng } 55d80c4348dd6db1046fdade375a8d8c616d93e7acChiao Cheng 56d80c4348dd6db1046fdade375a8d8c616d93e7acChiao Cheng private class CancelListener 57d80c4348dd6db1046fdade375a8d8c616d93e7acChiao Cheng implements DialogInterface.OnClickListener, DialogInterface.OnCancelListener { 58d80c4348dd6db1046fdade375a8d8c616d93e7acChiao Cheng @Override 59d80c4348dd6db1046fdade375a8d8c616d93e7acChiao Cheng public void onClick(DialogInterface dialog, int which) { 60d80c4348dd6db1046fdade375a8d8c616d93e7acChiao Cheng finish(); 61d80c4348dd6db1046fdade375a8d8c616d93e7acChiao Cheng } 62d80c4348dd6db1046fdade375a8d8c616d93e7acChiao Cheng @Override 63d80c4348dd6db1046fdade375a8d8c616d93e7acChiao Cheng public void onCancel(DialogInterface dialog) { 64d80c4348dd6db1046fdade375a8d8c616d93e7acChiao Cheng finish(); 65d80c4348dd6db1046fdade375a8d8c616d93e7acChiao Cheng } 66d80c4348dd6db1046fdade375a8d8c616d93e7acChiao Cheng } 67d80c4348dd6db1046fdade375a8d8c616d93e7acChiao Cheng 68d80c4348dd6db1046fdade375a8d8c616d93e7acChiao Cheng private final CancelListener mCancelListener = new CancelListener(); 69d80c4348dd6db1046fdade375a8d8c616d93e7acChiao Cheng private int mJobId; 70d80c4348dd6db1046fdade375a8d8c616d93e7acChiao Cheng private String mDisplayName; 71d80c4348dd6db1046fdade375a8d8c616d93e7acChiao Cheng private int mType; 72d80c4348dd6db1046fdade375a8d8c616d93e7acChiao Cheng 73d80c4348dd6db1046fdade375a8d8c616d93e7acChiao Cheng @Override 74d80c4348dd6db1046fdade375a8d8c616d93e7acChiao Cheng public void onCreate(Bundle savedInstanceState) { 75d80c4348dd6db1046fdade375a8d8c616d93e7acChiao Cheng super.onCreate(savedInstanceState); 76d80c4348dd6db1046fdade375a8d8c616d93e7acChiao Cheng final Uri uri = getIntent().getData(); 77d80c4348dd6db1046fdade375a8d8c616d93e7acChiao Cheng mJobId = Integer.parseInt(uri.getQueryParameter(JOB_ID)); 78d80c4348dd6db1046fdade375a8d8c616d93e7acChiao Cheng mDisplayName = uri.getQueryParameter(DISPLAY_NAME); 79d80c4348dd6db1046fdade375a8d8c616d93e7acChiao Cheng mType = Integer.parseInt(uri.getQueryParameter(TYPE)); 80d80c4348dd6db1046fdade375a8d8c616d93e7acChiao Cheng showDialog(R.id.dialog_cancel_confirmation); 81d80c4348dd6db1046fdade375a8d8c616d93e7acChiao Cheng } 82d80c4348dd6db1046fdade375a8d8c616d93e7acChiao Cheng 83d80c4348dd6db1046fdade375a8d8c616d93e7acChiao Cheng @Override 84d80c4348dd6db1046fdade375a8d8c616d93e7acChiao Cheng protected Dialog onCreateDialog(int id, Bundle bundle) { 85b4a522e02a4ffa0bb6b8ea6d0acffa0a7f72e9b7Sailesh Nepal if (id == R.id.dialog_cancel_confirmation) { 86d80c4348dd6db1046fdade375a8d8c616d93e7acChiao Cheng final String message; 87d80c4348dd6db1046fdade375a8d8c616d93e7acChiao Cheng if (mType == VCardService.TYPE_IMPORT) { 88d80c4348dd6db1046fdade375a8d8c616d93e7acChiao Cheng message = getString(R.string.cancel_import_confirmation_message, mDisplayName); 89d80c4348dd6db1046fdade375a8d8c616d93e7acChiao Cheng } else { 90d80c4348dd6db1046fdade375a8d8c616d93e7acChiao Cheng message = getString(R.string.cancel_export_confirmation_message, mDisplayName); 91d80c4348dd6db1046fdade375a8d8c616d93e7acChiao Cheng } 92d80c4348dd6db1046fdade375a8d8c616d93e7acChiao Cheng final AlertDialog.Builder builder = new AlertDialog.Builder(this) 93d80c4348dd6db1046fdade375a8d8c616d93e7acChiao Cheng .setMessage(message) 94d80c4348dd6db1046fdade375a8d8c616d93e7acChiao Cheng .setPositiveButton(android.R.string.ok, new RequestCancelListener()) 95d80c4348dd6db1046fdade375a8d8c616d93e7acChiao Cheng .setOnCancelListener(mCancelListener) 96d80c4348dd6db1046fdade375a8d8c616d93e7acChiao Cheng .setNegativeButton(android.R.string.cancel, mCancelListener); 97d80c4348dd6db1046fdade375a8d8c616d93e7acChiao Cheng return builder.create(); 98b4a522e02a4ffa0bb6b8ea6d0acffa0a7f72e9b7Sailesh Nepal } else if (id == R.id.dialog_cancel_failed) { 99d80c4348dd6db1046fdade375a8d8c616d93e7acChiao Cheng final AlertDialog.Builder builder = new AlertDialog.Builder(this) 100d80c4348dd6db1046fdade375a8d8c616d93e7acChiao Cheng .setTitle(R.string.cancel_vcard_import_or_export_failed) 101d80c4348dd6db1046fdade375a8d8c616d93e7acChiao Cheng .setIconAttribute(android.R.attr.alertDialogIcon) 102d80c4348dd6db1046fdade375a8d8c616d93e7acChiao Cheng .setMessage(getString(R.string.fail_reason_unknown)) 103d80c4348dd6db1046fdade375a8d8c616d93e7acChiao Cheng .setOnCancelListener(mCancelListener) 104d80c4348dd6db1046fdade375a8d8c616d93e7acChiao Cheng .setPositiveButton(android.R.string.ok, mCancelListener); 105d80c4348dd6db1046fdade375a8d8c616d93e7acChiao Cheng return builder.create(); 106b4a522e02a4ffa0bb6b8ea6d0acffa0a7f72e9b7Sailesh Nepal } else { 107d80c4348dd6db1046fdade375a8d8c616d93e7acChiao Cheng Log.w(LOG_TAG, "Unknown dialog id: " + id); 108b4a522e02a4ffa0bb6b8ea6d0acffa0a7f72e9b7Sailesh Nepal return super.onCreateDialog(id, bundle); 109d80c4348dd6db1046fdade375a8d8c616d93e7acChiao Cheng } 110d80c4348dd6db1046fdade375a8d8c616d93e7acChiao Cheng } 111d80c4348dd6db1046fdade375a8d8c616d93e7acChiao Cheng 112d80c4348dd6db1046fdade375a8d8c616d93e7acChiao Cheng @Override 113d80c4348dd6db1046fdade375a8d8c616d93e7acChiao Cheng public void onServiceConnected(ComponentName name, IBinder binder) { 114d80c4348dd6db1046fdade375a8d8c616d93e7acChiao Cheng VCardService service = ((VCardService.MyBinder) binder).getService(); 115d80c4348dd6db1046fdade375a8d8c616d93e7acChiao Cheng 116d80c4348dd6db1046fdade375a8d8c616d93e7acChiao Cheng try { 117d80c4348dd6db1046fdade375a8d8c616d93e7acChiao Cheng final CancelRequest request = new CancelRequest(mJobId, mDisplayName); 118d80c4348dd6db1046fdade375a8d8c616d93e7acChiao Cheng service.handleCancelRequest(request, null); 119d80c4348dd6db1046fdade375a8d8c616d93e7acChiao Cheng } finally { 120d80c4348dd6db1046fdade375a8d8c616d93e7acChiao Cheng unbindService(this); 121d80c4348dd6db1046fdade375a8d8c616d93e7acChiao Cheng } 122d80c4348dd6db1046fdade375a8d8c616d93e7acChiao Cheng 123d80c4348dd6db1046fdade375a8d8c616d93e7acChiao Cheng finish(); 124d80c4348dd6db1046fdade375a8d8c616d93e7acChiao Cheng } 125d80c4348dd6db1046fdade375a8d8c616d93e7acChiao Cheng 126d80c4348dd6db1046fdade375a8d8c616d93e7acChiao Cheng @Override 127d80c4348dd6db1046fdade375a8d8c616d93e7acChiao Cheng public void onServiceDisconnected(ComponentName name) { 128d80c4348dd6db1046fdade375a8d8c616d93e7acChiao Cheng // do nothing 129d80c4348dd6db1046fdade375a8d8c616d93e7acChiao Cheng } 130d80c4348dd6db1046fdade375a8d8c616d93e7acChiao Cheng} 131