15648054667c89d1a61c6792ef226eabedb30443dSatoshi Kataoka/*
25648054667c89d1a61c6792ef226eabedb30443dSatoshi Kataoka * Copyright (C) 2013 The Android Open Source Project
35648054667c89d1a61c6792ef226eabedb30443dSatoshi Kataoka *
45648054667c89d1a61c6792ef226eabedb30443dSatoshi Kataoka * Licensed under the Apache License, Version 2.0 (the "License");
55648054667c89d1a61c6792ef226eabedb30443dSatoshi Kataoka * you may not use this file except in compliance with the License.
65648054667c89d1a61c6792ef226eabedb30443dSatoshi Kataoka * You may obtain a copy of the License at
75648054667c89d1a61c6792ef226eabedb30443dSatoshi Kataoka *
85648054667c89d1a61c6792ef226eabedb30443dSatoshi Kataoka *      http://www.apache.org/licenses/LICENSE-2.0
95648054667c89d1a61c6792ef226eabedb30443dSatoshi Kataoka *
105648054667c89d1a61c6792ef226eabedb30443dSatoshi Kataoka * Unless required by applicable law or agreed to in writing, software
115648054667c89d1a61c6792ef226eabedb30443dSatoshi Kataoka * distributed under the License is distributed on an "AS IS" BASIS,
125648054667c89d1a61c6792ef226eabedb30443dSatoshi Kataoka * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
135648054667c89d1a61c6792ef226eabedb30443dSatoshi Kataoka * See the License for the specific language governing permissions and
145648054667c89d1a61c6792ef226eabedb30443dSatoshi Kataoka * limitations under the License.
155648054667c89d1a61c6792ef226eabedb30443dSatoshi Kataoka */
165648054667c89d1a61c6792ef226eabedb30443dSatoshi Kataoka
175648054667c89d1a61c6792ef226eabedb30443dSatoshi Kataokapackage com.android.inputmethod.latin.personalization;
185648054667c89d1a61c6792ef226eabedb30443dSatoshi Kataoka
195648054667c89d1a61c6792ef226eabedb30443dSatoshi Kataokaimport android.accounts.Account;
205648054667c89d1a61c6792ef226eabedb30443dSatoshi Kataokaimport android.accounts.AccountManager;
215648054667c89d1a61c6792ef226eabedb30443dSatoshi Kataokaimport android.content.Context;
225648054667c89d1a61c6792ef226eabedb30443dSatoshi Kataokaimport android.util.Patterns;
235648054667c89d1a61c6792ef226eabedb30443dSatoshi Kataoka
245648054667c89d1a61c6792ef226eabedb30443dSatoshi Kataokaimport java.util.ArrayList;
255648054667c89d1a61c6792ef226eabedb30443dSatoshi Kataokaimport java.util.List;
261b100610b31261a10e1bab46801ddfb0fbbf76f4Keisuke Kuroyanagiimport java.util.Locale;
275648054667c89d1a61c6792ef226eabedb30443dSatoshi Kataoka
285648054667c89d1a61c6792ef226eabedb30443dSatoshi Kataokapublic class AccountUtils {
295648054667c89d1a61c6792ef226eabedb30443dSatoshi Kataoka    private AccountUtils() {
305648054667c89d1a61c6792ef226eabedb30443dSatoshi Kataoka        // This utility class is not publicly instantiable.
315648054667c89d1a61c6792ef226eabedb30443dSatoshi Kataoka    }
325648054667c89d1a61c6792ef226eabedb30443dSatoshi Kataoka
335648054667c89d1a61c6792ef226eabedb30443dSatoshi Kataoka    private static Account[] getAccounts(final Context context) {
345648054667c89d1a61c6792ef226eabedb30443dSatoshi Kataoka        return AccountManager.get(context).getAccounts();
355648054667c89d1a61c6792ef226eabedb30443dSatoshi Kataoka    }
365648054667c89d1a61c6792ef226eabedb30443dSatoshi Kataoka
375648054667c89d1a61c6792ef226eabedb30443dSatoshi Kataoka    public static List<String> getDeviceAccountsEmailAddresses(final Context context) {
385648054667c89d1a61c6792ef226eabedb30443dSatoshi Kataoka        final ArrayList<String> retval = new ArrayList<String>();
395648054667c89d1a61c6792ef226eabedb30443dSatoshi Kataoka        for (final Account account : getAccounts(context)) {
405648054667c89d1a61c6792ef226eabedb30443dSatoshi Kataoka            final String name = account.name;
415648054667c89d1a61c6792ef226eabedb30443dSatoshi Kataoka            if (Patterns.EMAIL_ADDRESS.matcher(name).matches()) {
425648054667c89d1a61c6792ef226eabedb30443dSatoshi Kataoka                retval.add(name);
435648054667c89d1a61c6792ef226eabedb30443dSatoshi Kataoka                retval.add(name.split("@")[0]);
445648054667c89d1a61c6792ef226eabedb30443dSatoshi Kataoka            }
455648054667c89d1a61c6792ef226eabedb30443dSatoshi Kataoka        }
465648054667c89d1a61c6792ef226eabedb30443dSatoshi Kataoka        return retval;
475648054667c89d1a61c6792ef226eabedb30443dSatoshi Kataoka    }
481b100610b31261a10e1bab46801ddfb0fbbf76f4Keisuke Kuroyanagi
491b100610b31261a10e1bab46801ddfb0fbbf76f4Keisuke Kuroyanagi    /**
501b100610b31261a10e1bab46801ddfb0fbbf76f4Keisuke Kuroyanagi     * Get all device accounts having specified domain name.
511b100610b31261a10e1bab46801ddfb0fbbf76f4Keisuke Kuroyanagi     * @param context application context
521b100610b31261a10e1bab46801ddfb0fbbf76f4Keisuke Kuroyanagi     * @param domain domain name used for filtering
531b100610b31261a10e1bab46801ddfb0fbbf76f4Keisuke Kuroyanagi     * @return List of account names that contain the specified domain name
541b100610b31261a10e1bab46801ddfb0fbbf76f4Keisuke Kuroyanagi     */
551b100610b31261a10e1bab46801ddfb0fbbf76f4Keisuke Kuroyanagi    public static List<String> getDeviceAccountsWithDomain(
561b100610b31261a10e1bab46801ddfb0fbbf76f4Keisuke Kuroyanagi            final Context context, final String domain) {
571b100610b31261a10e1bab46801ddfb0fbbf76f4Keisuke Kuroyanagi        final ArrayList<String> retval = new ArrayList<String>();
581b100610b31261a10e1bab46801ddfb0fbbf76f4Keisuke Kuroyanagi        final String atDomain = "@" + domain.toLowerCase(Locale.ROOT);
591b100610b31261a10e1bab46801ddfb0fbbf76f4Keisuke Kuroyanagi        for (final Account account : getAccounts(context)) {
601b100610b31261a10e1bab46801ddfb0fbbf76f4Keisuke Kuroyanagi            if (account.name.toLowerCase(Locale.ROOT).endsWith(atDomain)) {
611b100610b31261a10e1bab46801ddfb0fbbf76f4Keisuke Kuroyanagi                retval.add(account.name);
621b100610b31261a10e1bab46801ddfb0fbbf76f4Keisuke Kuroyanagi            }
631b100610b31261a10e1bab46801ddfb0fbbf76f4Keisuke Kuroyanagi        }
641b100610b31261a10e1bab46801ddfb0fbbf76f4Keisuke Kuroyanagi        return retval;
651b100610b31261a10e1bab46801ddfb0fbbf76f4Keisuke Kuroyanagi    }
665648054667c89d1a61c6792ef226eabedb30443dSatoshi Kataoka}
67