Update PhoneAccount icon API (5/6)
Bug: 18291787
Change-Id: I0b83c0d36c67e12c27355d0893a0fa78a4f3aaa6
diff --git a/src/com/android/server/telecom/PhoneAccountRegistrar.java b/src/com/android/server/telecom/PhoneAccountRegistrar.java
index a156f6a..1d7993d 100644
--- a/src/com/android/server/telecom/PhoneAccountRegistrar.java
+++ b/src/com/android/server/telecom/PhoneAccountRegistrar.java
@@ -84,7 +84,7 @@
private static final String FILE_NAME = "phone-account-registrar-state.xml";
@VisibleForTesting
- public static final int EXPECTED_STATE_VERSION = 4;
+ public static final int EXPECTED_STATE_VERSION = 5;
/** Keep in sync with the same in SipSettings.java */
private static final String SIP_SHARED_PREFERENCES = "SIP_PREFERENCES";
@@ -394,6 +394,9 @@
* @param account The {@code PhoneAccount} to add or replace.
*/
private void addOrReplacePhoneAccount(PhoneAccount account) {
+ Log.d(this, "addOrReplacePhoneAccount(%s -> %s)",
+ account.getAccountHandle(), account);
+
mState.accounts.add(account);
// Search for duplicates and remove any that are found.
for (int i = 0; i < mState.accounts.size() - 1; i++) {
@@ -857,7 +860,8 @@
private static final String ICON_RES_ID = "icon_res_id";
private static final String ICON_PACKAGE_NAME = "icon_package_name";
private static final String ICON_BITMAP = "icon_bitmap";
- private static final String COLOR = "color";
+ private static final String ICON_TINT = "icon_tint";
+ private static final String HIGHLIGHT_COLOR = "highlight_color";
private static final String LABEL = "label";
private static final String SHORT_DESCRIPTION = "short_description";
private static final String SUPPORTED_URI_SCHEMES = "supported_uri_schemes";
@@ -880,7 +884,9 @@
writeTextIfNonNull(ICON_RES_ID, Integer.toString(o.getIconResId()), serializer);
writeTextIfNonNull(ICON_PACKAGE_NAME, o.getIconPackageName(), serializer);
writeBitmapIfNonNull(ICON_BITMAP, o.getIconBitmap(), serializer);
- writeTextIfNonNull(COLOR, Integer.toString(o.getColor()), serializer);
+ writeTextIfNonNull(ICON_TINT, Integer.toString(o.getIconTint()), serializer);
+ writeTextIfNonNull(HIGHLIGHT_COLOR,
+ Integer.toString(o.getHighlightColor()), serializer);
writeTextIfNonNull(LABEL, o.getLabel(), serializer);
writeTextIfNonNull(SHORT_DESCRIPTION, o.getShortDescription(), serializer);
writeStringList(SUPPORTED_URI_SCHEMES, o.getSupportedUriSchemes(), serializer);
@@ -897,10 +903,11 @@
Uri address = null;
Uri subscriptionAddress = null;
int capabilities = 0;
- int iconResId = 0;
+ int iconResId = PhoneAccount.NO_RESOURCE_ID;
String iconPackageName = null;
- Bitmap icon = null;
- int color = 0;
+ Bitmap iconBitmap = null;
+ int iconTint = PhoneAccount.NO_COLOR;
+ int highlightColor = PhoneAccount.NO_COLOR;
String label = null;
String shortDescription = null;
List<String> supportedUriSchemes = null;
@@ -928,10 +935,13 @@
iconPackageName = parser.getText();
} else if (parser.getName().equals(ICON_BITMAP)) {
parser.next();
- icon = readBitmap(parser);
- } else if (parser.getName().equals(COLOR)) {
+ iconBitmap = readBitmap(parser);
+ } else if (parser.getName().equals(ICON_TINT)) {
parser.next();
- color = Integer.parseInt(parser.getText());
+ iconTint = Integer.parseInt(parser.getText());
+ } else if (parser.getName().equals(HIGHLIGHT_COLOR)) {
+ parser.next();
+ highlightColor = Integer.parseInt(parser.getText());
} else if (parser.getName().equals(LABEL)) {
parser.next();
label = parser.getText();
@@ -964,17 +974,28 @@
}
}
- return PhoneAccount.builder(accountHandle, label)
+ // Upgrade older phone accounts with explicit package name
+ if (version < 5) {
+ if (iconBitmap == null) {
+ iconPackageName = accountHandle.getComponentName().getPackageName();
+ }
+ }
+
+ PhoneAccount.Builder builder = PhoneAccount.builder(accountHandle, label)
.setAddress(address)
.setSubscriptionAddress(subscriptionAddress)
.setCapabilities(capabilities)
- .setIconResId(iconResId)
- .setIconPackageName(iconPackageName)
- .setIconBitmap(icon)
- .setColor(color)
.setShortDescription(shortDescription)
.setSupportedUriSchemes(supportedUriSchemes)
- .build();
+ .setHighlightColor(highlightColor);
+
+ if (iconBitmap == null) {
+ builder.setIcon(iconPackageName, iconResId, iconTint);
+ } else {
+ builder.setIcon(iconBitmap);
+ }
+
+ return builder.build();
}
return null;
}