1/*
2 * Copyright (C) 2010 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16package com.android.contacts.common.vcard;
17
18import android.app.Activity;
19import android.app.Dialog;
20import android.content.DialogInterface;
21import android.content.Intent;
22import android.os.Bundle;
23import android.util.Log;
24
25import com.android.contacts.common.R;
26import com.android.contacts.common.model.AccountTypeManager;
27import com.android.contacts.common.model.account.AccountWithDataSet;
28import com.android.contacts.common.util.AccountSelectionUtil;
29
30import java.util.List;
31
32public class SelectAccountActivity extends Activity {
33    private static final String LOG_TAG = "SelectAccountActivity";
34
35    public static final String ACCOUNT_NAME = "account_name";
36    public static final String ACCOUNT_TYPE = "account_type";
37    public static final String DATA_SET = "data_set";
38
39    private class CancelListener
40            implements DialogInterface.OnClickListener, DialogInterface.OnCancelListener {
41        public void onClick(DialogInterface dialog, int which) {
42            finish();
43        }
44        public void onCancel(DialogInterface dialog) {
45            finish();
46        }
47    }
48
49    private AccountSelectionUtil.AccountSelectedListener mAccountSelectionListener;
50
51    @Override
52    protected void onCreate(Bundle bundle) {
53        super.onCreate(bundle);
54
55        // There's three possibilities:
56        // - more than one accounts -> ask the user
57        // - just one account -> use the account without asking the user
58        // - no account -> use phone-local storage without asking the user
59        final int resId = R.string.import_from_sdcard;
60        final AccountTypeManager accountTypes = AccountTypeManager.getInstance(this);
61        final List<AccountWithDataSet> accountList = accountTypes.getAccounts(true);
62        if (accountList.size() == 0) {
63            Log.w(LOG_TAG, "Account does not exist");
64            finish();
65            return;
66        } else if (accountList.size() == 1) {
67            final AccountWithDataSet account = accountList.get(0);
68            final Intent intent = new Intent();
69            intent.putExtra(ACCOUNT_NAME, account.name);
70            intent.putExtra(ACCOUNT_TYPE, account.type);
71            intent.putExtra(DATA_SET, account.dataSet);
72            setResult(RESULT_OK, intent);
73            finish();
74            return;
75        }
76
77        Log.i(LOG_TAG, "The number of available accounts: " + accountList.size());
78
79        // Multiple accounts. Let users to select one.
80        mAccountSelectionListener =
81                new AccountSelectionUtil.AccountSelectedListener(
82                        this, accountList, resId) {
83                    @Override
84                    public void onClick(DialogInterface dialog, int which) {
85                        dialog.dismiss();
86                        final AccountWithDataSet account = mAccountList.get(which);
87                        final Intent intent = new Intent();
88                        intent.putExtra(ACCOUNT_NAME, account.name);
89                        intent.putExtra(ACCOUNT_TYPE, account.type);
90                        intent.putExtra(DATA_SET, account.dataSet);
91                        setResult(RESULT_OK, intent);
92                        finish();
93                    }
94                };
95        showDialog(resId);
96        return;
97    }
98
99    @Override
100    protected Dialog onCreateDialog(int resId, Bundle bundle) {
101        switch (resId) {
102            case R.string.import_from_sdcard: {
103                if (mAccountSelectionListener == null) {
104                    throw new NullPointerException(
105                            "mAccountSelectionListener must not be null.");
106                }
107                return AccountSelectionUtil.getSelectAccountDialog(this, resId,
108                        mAccountSelectionListener,
109                        new CancelListener());
110            }
111        }
112        return super.onCreateDialog(resId, bundle);
113    }
114}
115