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