1// Copyright 2014 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5package org.chromium.chrome.shell.sync;
6
7import android.app.AlertDialog;
8import android.app.Dialog;
9import android.app.DialogFragment;
10import android.content.DialogInterface;
11import android.os.Bundle;
12
13import org.chromium.chrome.shell.R;
14import org.chromium.sync.signin.AccountManagerHelper;
15
16import java.util.List;
17
18/**
19 * The fragment to show when the user is given the option to sign in to Chromium.
20 *
21 * It lists the available Google accounts on the device and makes the user choose one.
22 */
23public class AccountChooserFragment extends DialogFragment
24        implements DialogInterface.OnClickListener {
25
26    private String[] mAccounts;
27    private int mSelectedAccount;
28
29    @Override
30    public Dialog onCreateDialog(Bundle savedInstanceState) {
31        List<String> accountsList = AccountManagerHelper.get(getActivity()).getGoogleAccountNames();
32        mAccounts = accountsList.toArray(new String[accountsList.size()]);
33        return new AlertDialog.Builder(getActivity(), AlertDialog.THEME_HOLO_LIGHT)
34                .setTitle(R.string.signin_select_account)
35                .setSingleChoiceItems(mAccounts, mSelectedAccount, this)
36                .setPositiveButton(R.string.signin_sign_in, this)
37                .setNegativeButton(R.string.signin_cancel, this)
38                .create();
39    }
40
41    @Override
42    public void onClick(DialogInterface dialog, int which) {
43        switch (which) {
44            case DialogInterface.BUTTON_POSITIVE: {
45                selectAccount(mAccounts[mSelectedAccount]);
46                break;
47            }
48            case DialogInterface.BUTTON_NEGATIVE: {
49                dismiss();
50                break;
51            }
52            default: {
53                mSelectedAccount = which;
54                break;
55            }
56        }
57    }
58
59    private void selectAccount(String accountName) {
60        SyncController.get(getActivity()).signIn(getActivity(), accountName);
61    }
62}
63