• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2013 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  */
16 
17 package com.android.dialer.calllogutils;
18 
19 import android.content.ComponentName;
20 import android.content.Context;
21 import android.support.annotation.Nullable;
22 import android.telecom.PhoneAccount;
23 import android.telecom.PhoneAccountHandle;
24 import android.text.TextUtils;
25 import com.android.dialer.telecom.TelecomUtil;
26 import java.util.ArrayList;
27 import java.util.List;
28 
29 /** Methods to help extract {@code PhoneAccount} information from database and Telecomm sources. */
30 public class PhoneAccountUtils {
31 
32   /** Return a list of phone accounts that are subscription/SIM accounts. */
getSubscriptionPhoneAccounts(Context context)33   public static List<PhoneAccountHandle> getSubscriptionPhoneAccounts(Context context) {
34     List<PhoneAccountHandle> subscriptionAccountHandles = new ArrayList<PhoneAccountHandle>();
35     final List<PhoneAccountHandle> accountHandles =
36         TelecomUtil.getCallCapablePhoneAccounts(context);
37     for (PhoneAccountHandle accountHandle : accountHandles) {
38       PhoneAccount account = TelecomUtil.getPhoneAccount(context, accountHandle);
39       if (account.hasCapabilities(PhoneAccount.CAPABILITY_SIM_SUBSCRIPTION)) {
40         subscriptionAccountHandles.add(accountHandle);
41       }
42     }
43     return subscriptionAccountHandles;
44   }
45 
46   /** Compose PhoneAccount object from component name and account id. */
47   @Nullable
getAccount( @ullable String componentString, @Nullable String accountId)48   public static PhoneAccountHandle getAccount(
49       @Nullable String componentString, @Nullable String accountId) {
50     if (TextUtils.isEmpty(componentString) || TextUtils.isEmpty(accountId)) {
51       return null;
52     }
53     final ComponentName componentName = ComponentName.unflattenFromString(componentString);
54     if (componentName == null) {
55       return null;
56     }
57     return new PhoneAccountHandle(componentName, accountId);
58   }
59 
60   /** Extract account label from PhoneAccount object. */
61   @Nullable
getAccountLabel( Context context, @Nullable PhoneAccountHandle accountHandle)62   public static String getAccountLabel(
63       Context context, @Nullable PhoneAccountHandle accountHandle) {
64     PhoneAccount account = getAccountOrNull(context, accountHandle);
65     if (account != null && account.getLabel() != null) {
66       return account.getLabel().toString();
67     }
68     return null;
69   }
70 
71   /** Extract account color from PhoneAccount object. */
getAccountColor(Context context, @Nullable PhoneAccountHandle accountHandle)72   public static int getAccountColor(Context context, @Nullable PhoneAccountHandle accountHandle) {
73     final PhoneAccount account = TelecomUtil.getPhoneAccount(context, accountHandle);
74 
75     // For single-sim devices the PhoneAccount will be NO_HIGHLIGHT_COLOR by default, so it is
76     // safe to always use the account highlight color.
77     return account == null ? PhoneAccount.NO_HIGHLIGHT_COLOR : account.getHighlightColor();
78   }
79 
80   /**
81    * Determine whether a phone account supports call subjects.
82    *
83    * @return {@code true} if call subjects are supported, {@code false} otherwise.
84    */
getAccountSupportsCallSubject( Context context, @Nullable PhoneAccountHandle accountHandle)85   public static boolean getAccountSupportsCallSubject(
86       Context context, @Nullable PhoneAccountHandle accountHandle) {
87     final PhoneAccount account = TelecomUtil.getPhoneAccount(context, accountHandle);
88 
89     return account != null && account.hasCapabilities(PhoneAccount.CAPABILITY_CALL_SUBJECT);
90   }
91 
92   /**
93    * Retrieve the account metadata, but if the account does not exist or the device has only a
94    * single registered and enabled account, return null.
95    */
96   @Nullable
getAccountOrNull( Context context, @Nullable PhoneAccountHandle accountHandle)97   private static PhoneAccount getAccountOrNull(
98       Context context, @Nullable PhoneAccountHandle accountHandle) {
99     if (TelecomUtil.getCallCapablePhoneAccounts(context).size() <= 1) {
100       return null;
101     }
102     return TelecomUtil.getPhoneAccount(context, accountHandle);
103   }
104 }
105