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