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