blob: 2d2d86fefcebab7cabdadb4b8892b166a5c96a7b (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
|
package com.android.phone.common.incall;
import android.content.Context;
import android.telecom.PhoneAccount;
import android.telecom.PhoneAccountHandle;
import android.telecom.TelecomManager;
import android.telephony.SubscriptionInfo;
import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager;
import com.android.phone.common.R;
import java.util.ArrayList;
import java.util.List;
import static com.cyanogen.ambient.incall.util.InCallHelper.NO_COLOR;
/**
* Basic Utils for call method modifications
*/
public class CallMethodUtils {
public final static String PREF_SPINNER_COACHMARK_SHOW = "pref_spinner_coachmark_shown";
public final static String PREF_LAST_ENABLED_PROVIDER = "pref_last_enabled_provider";
public final static String PREF_INTERNATIONAL_CALLS = "pref_international_calls";
public final static String PREF_WIFI_CALL = "pref_wifi_call";
public static CallMethodInfo getDefaultSimInfo(Context context) {
final TelecomManager telecomMgr =
(TelecomManager) context.getSystemService(Context.TELECOM_SERVICE);
PhoneAccountHandle handle =
telecomMgr.getDefaultOutgoingPhoneAccount(PhoneAccount.SCHEME_TEL);
if (handle == null) {
return null;
}
return phoneToCallMethod(context, handle);
}
public static List<CallMethodInfo> getSimInfoList(Context context) {
final TelecomManager telecomMgr =
(TelecomManager) context.getSystemService(Context.TELECOM_SERVICE);
final List<PhoneAccountHandle> accountHandles = telecomMgr.getCallCapablePhoneAccounts();
ArrayList<CallMethodInfo> callMethodInfoList = new ArrayList<CallMethodInfo>();
for (PhoneAccountHandle accountHandle : accountHandles) {
CallMethodInfo info = phoneToCallMethod(context, accountHandle);
if (info != null) {
callMethodInfoList.add(info);
}
}
return callMethodInfoList;
}
private static String getPhoneAccountName(Context context, PhoneAccount phoneAccount,
int slotId) {
if (phoneAccount == null) {
// Slot IDs are zero based
return context.getString(R.string.call_method_spinner_item_unknown_sim, slotId + 1);
} else if (phoneAccount.getLabel() != null) {
return phoneAccount.getLabel().toString();
}
return null;
}
private static int getPhoneAccountColor(SubscriptionInfo info) {
if (info != null) {
return info.getIconTint();
} else {
return NO_COLOR;
}
}
private static CallMethodInfo phoneToCallMethod(Context context,
PhoneAccountHandle phoneAccountHandle) {
final SubscriptionManager subMgr = (SubscriptionManager) context
.getSystemService(Context.TELEPHONY_SUBSCRIPTION_SERVICE);
final TelecomManager telecomMgr =
(TelecomManager) context.getSystemService(Context.TELECOM_SERVICE);
final TelephonyManager telephonyMgr =
(TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
PhoneAccount phoneAccount = telecomMgr.getPhoneAccount(phoneAccountHandle);
if (phoneAccount == null) {
return null;
}
CallMethodInfo callMethodInfo = new CallMethodInfo();
callMethodInfo.mComponent = phoneAccountHandle.getComponentName();
callMethodInfo.mId = phoneAccountHandle.getId();
callMethodInfo.mUserHandle = phoneAccountHandle.getUserHandle();
callMethodInfo.mSubId = telephonyMgr.getSubIdForPhoneAccount(phoneAccount);
callMethodInfo.mSlotId = SubscriptionManager.getSlotId(callMethodInfo.mSubId);
callMethodInfo.mName = getPhoneAccountName(context, phoneAccount, callMethodInfo.mSlotId);
callMethodInfo.mColor =
getPhoneAccountColor(subMgr.getActiveSubscriptionInfo(callMethodInfo.mSubId));
callMethodInfo.mIsInCallProvider = false;
final int simState = telephonyMgr.getSimState(callMethodInfo.mSlotId);
if ((simState == TelephonyManager.SIM_STATE_ABSENT) ||
(simState == TelephonyManager.SIM_STATE_UNKNOWN)) {
return null;
}
return callMethodInfo;
}
}
|