1ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian/* 2ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian * Copyright (C) 2013 The Android Open Source Project 3ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian * 4ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian * Licensed under the Apache License, Version 2.0 (the "License"); 5ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian * you may not use this file except in compliance with the License. 6ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian * You may obtain a copy of the License at 7ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian * 8ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian * http://www.apache.org/licenses/LICENSE-2.0 9ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian * 10ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian * Unless required by applicable law or agreed to in writing, software 11ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian * distributed under the License is distributed on an "AS IS" BASIS, 12ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian * See the License for the specific language governing permissions and 14ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian * limitations under the License 15ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian */ 16ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian 17d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanianpackage com.android.dialer.calllogutils; 18ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian 19ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanianimport android.content.ComponentName; 20ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanianimport android.content.Context; 21ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanianimport android.support.annotation.Nullable; 22ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanianimport android.telecom.PhoneAccount; 23ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanianimport android.telecom.PhoneAccountHandle; 24ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanianimport android.text.TextUtils; 25ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanianimport com.android.dialer.telecom.TelecomUtil; 26ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanianimport java.util.ArrayList; 27ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanianimport java.util.List; 28ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian 29ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian/** Methods to help extract {@code PhoneAccount} information from database and Telecomm sources. */ 30ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanianpublic class PhoneAccountUtils { 31ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian 32ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian /** Return a list of phone accounts that are subscription/SIM accounts. */ 33ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian public static List<PhoneAccountHandle> getSubscriptionPhoneAccounts(Context context) { 34ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian List<PhoneAccountHandle> subscriptionAccountHandles = new ArrayList<PhoneAccountHandle>(); 35ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian final List<PhoneAccountHandle> accountHandles = 36ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian TelecomUtil.getCallCapablePhoneAccounts(context); 37ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian for (PhoneAccountHandle accountHandle : accountHandles) { 38ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian PhoneAccount account = TelecomUtil.getPhoneAccount(context, accountHandle); 39ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian if (account.hasCapabilities(PhoneAccount.CAPABILITY_SIM_SUBSCRIPTION)) { 40ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian subscriptionAccountHandles.add(accountHandle); 41ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian } 42ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian } 43ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian return subscriptionAccountHandles; 44ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian } 45ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian 46ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian /** Compose PhoneAccount object from component name and account id. */ 47ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian @Nullable 48ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian public static PhoneAccountHandle getAccount( 49ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian @Nullable String componentString, @Nullable String accountId) { 50ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian if (TextUtils.isEmpty(componentString) || TextUtils.isEmpty(accountId)) { 51ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian return null; 52ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian } 53ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian final ComponentName componentName = ComponentName.unflattenFromString(componentString); 54ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian if (componentName == null) { 55ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian return null; 56ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian } 57ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian return new PhoneAccountHandle(componentName, accountId); 58ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian } 59ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian 60ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian /** Extract account label from PhoneAccount object. */ 61ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian @Nullable 62ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian public static String getAccountLabel( 63ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian Context context, @Nullable PhoneAccountHandle accountHandle) { 64ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian PhoneAccount account = getAccountOrNull(context, accountHandle); 65ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian if (account != null && account.getLabel() != null) { 66ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian return account.getLabel().toString(); 67ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian } 68ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian return null; 69ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian } 70ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian 71ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian /** Extract account color from PhoneAccount object. */ 72ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian public static int getAccountColor(Context context, @Nullable PhoneAccountHandle accountHandle) { 73ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian final PhoneAccount account = TelecomUtil.getPhoneAccount(context, accountHandle); 74ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian 75ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian // For single-sim devices the PhoneAccount will be NO_HIGHLIGHT_COLOR by default, so it is 76ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian // safe to always use the account highlight color. 77ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian return account == null ? PhoneAccount.NO_HIGHLIGHT_COLOR : account.getHighlightColor(); 78ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian } 79ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian 80ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian /** 81ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian * Determine whether a phone account supports call subjects. 82ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian * 83ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian * @return {@code true} if call subjects are supported, {@code false} otherwise. 84ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian */ 85ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian public static boolean getAccountSupportsCallSubject( 86ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian Context context, @Nullable PhoneAccountHandle accountHandle) { 87ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian final PhoneAccount account = TelecomUtil.getPhoneAccount(context, accountHandle); 88ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian 89ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian return account != null && account.hasCapabilities(PhoneAccount.CAPABILITY_CALL_SUBJECT); 90ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian } 91ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian 92ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian /** 93ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian * Retrieve the account metadata, but if the account does not exist or the device has only a 94ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian * single registered and enabled account, return null. 95ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian */ 96ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian @Nullable 97ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian private static PhoneAccount getAccountOrNull( 98ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian Context context, @Nullable PhoneAccountHandle accountHandle) { 99ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian if (TelecomUtil.getCallCapablePhoneAccounts(context).size() <= 1) { 100ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian return null; 101ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian } 102ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian return TelecomUtil.getPhoneAccount(context, accountHandle); 103ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian } 104ccca31529c07970e89419fb85a9e8153a5396838Eric Erfanian} 105