Loading src/com/android/server/telecom/PhoneAccountRegistrar.java +103 −45 Original line number Diff line number Diff line Loading @@ -58,6 +58,7 @@ import android.util.Xml; // TODO: Needed for move to system service: import com.android.internal.R; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.telephony.flags.FeatureFlags; import com.android.internal.util.IndentingPrintWriter; import com.android.internal.util.XmlUtils; import com.android.modules.utils.ModifiedUtf8; Loading @@ -81,6 +82,7 @@ import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Map; Loading Loading @@ -182,19 +184,19 @@ public class PhoneAccountRegistrar { private interface PhoneAccountRegistrarWriteLock {} private final PhoneAccountRegistrarWriteLock mWriteLock = new PhoneAccountRegistrarWriteLock() {}; private final com.android.internal.telephony.flags.FeatureFlags mTelephonyFeatureFlags; private final FeatureFlags mTelephonyFeatureFlags; @VisibleForTesting public PhoneAccountRegistrar(Context context, TelecomSystem.SyncRoot lock, DefaultDialerCache defaultDialerCache, AppLabelProxy appLabelProxy, com.android.internal.telephony.flags.FeatureFlags telephonyFeatureFlags) { FeatureFlags telephonyFeatureFlags) { this(context, lock, FILE_NAME, defaultDialerCache, appLabelProxy, telephonyFeatureFlags); } @VisibleForTesting public PhoneAccountRegistrar(Context context, TelecomSystem.SyncRoot lock, String fileName, DefaultDialerCache defaultDialerCache, AppLabelProxy appLabelProxy, com.android.internal.telephony.flags.FeatureFlags telephonyFeatureFlags) { FeatureFlags telephonyFeatureFlags) { mAtomicFile = new AtomicFile(new File(context.getFilesDir(), fileName)); Loading Loading @@ -1919,7 +1921,7 @@ public class PhoneAccountRegistrar { sortPhoneAccounts(); ByteArrayOutputStream os = new ByteArrayOutputStream(); XmlSerializer serializer = Xml.resolveSerializer(os); writeToXml(mState, serializer, mContext); writeToXml(mState, serializer, mContext, mTelephonyFeatureFlags); serializer.flush(); new AsyncXmlWriter().execute(os); } catch (IOException e) { Loading @@ -1940,7 +1942,7 @@ public class PhoneAccountRegistrar { try { XmlPullParser parser = Xml.resolvePullParser(is); parser.nextTag(); mState = readFromXml(parser, mContext); mState = readFromXml(parser, mContext, mTelephonyFeatureFlags); migratePhoneAccountHandle(mState); versionChanged = mState.versionNumber < EXPECTED_STATE_VERSION; Loading Loading @@ -1975,14 +1977,14 @@ public class PhoneAccountRegistrar { } } private static void writeToXml(State state, XmlSerializer serializer, Context context) throws IOException { sStateXml.writeToXml(state, serializer, context); private static void writeToXml(State state, XmlSerializer serializer, Context context, FeatureFlags telephonyFeatureFlags) throws IOException { sStateXml.writeToXml(state, serializer, context, telephonyFeatureFlags); } private static State readFromXml(XmlPullParser parser, Context context) throws IOException, XmlPullParserException { State s = sStateXml.readFromXml(parser, 0, context); private static State readFromXml(XmlPullParser parser, Context context, FeatureFlags telephonyFeatureFlags) throws IOException, XmlPullParserException { State s = sStateXml.readFromXml(parser, 0, context, telephonyFeatureFlags); return s != null ? s : new State(); } Loading Loading @@ -2048,8 +2050,8 @@ public class PhoneAccountRegistrar { /** * Write the supplied object to XML */ public abstract void writeToXml(T o, XmlSerializer serializer, Context context) throws IOException; public abstract void writeToXml(T o, XmlSerializer serializer, Context context, FeatureFlags telephonyFeatureFlags) throws IOException; /** * Read from the supplied XML into a new object, returning null in case of an Loading @@ -2058,8 +2060,8 @@ public class PhoneAccountRegistrar { * object's writeToXml(). This object tries to fail early without modifying * 'parser' if it does not recognize the data it sees. */ public abstract T readFromXml(XmlPullParser parser, int version, Context context) throws IOException, XmlPullParserException; public abstract T readFromXml(XmlPullParser parser, int version, Context context, FeatureFlags telephonyFeatureFlags) throws IOException, XmlPullParserException; protected void writeTextIfNonNull(String tagName, Object value, XmlSerializer serializer) throws IOException { Loading @@ -2070,6 +2072,29 @@ public class PhoneAccountRegistrar { } } /** * Serializes a List of PhoneAccountHandles. * @param tagName The tag for the List * @param handles The List of PhoneAccountHandles to serialize * @param serializer The serializer * @throws IOException if serialization fails. */ protected void writePhoneAccountHandleSet(String tagName, Set<PhoneAccountHandle> handles, XmlSerializer serializer, Context context, FeatureFlags telephonyFeatureFlags) throws IOException { serializer.startTag(null, tagName); if (handles != null) { serializer.attribute(null, ATTRIBUTE_LENGTH, Objects.toString(handles.size())); for (PhoneAccountHandle handle : handles) { sPhoneAccountHandleXml.writeToXml(handle, serializer, context, telephonyFeatureFlags); } } else { serializer.attribute(null, ATTRIBUTE_LENGTH, "0"); } serializer.endTag(null, tagName); } /** * Serializes a string array. * Loading Loading @@ -2164,6 +2189,21 @@ public class PhoneAccountRegistrar { serializer.endTag(null, tagName); } protected Set<PhoneAccountHandle> readPhoneAccountHandleSet(XmlPullParser parser, int version, Context context, FeatureFlags telephonyFeatureFlags) throws IOException, XmlPullParserException { int length = Integer.parseInt(parser.getAttributeValue(null, ATTRIBUTE_LENGTH)); Set<PhoneAccountHandle> handles = new HashSet<>(length); if (length == 0) return handles; int outerDepth = parser.getDepth(); while (XmlUtils.nextElementWithin(parser, outerDepth)) { handles.add(sPhoneAccountHandleXml.readFromXml(parser, version, context, telephonyFeatureFlags)); } return handles; } /** * Reads a string array from the XML parser. * Loading Loading @@ -2271,8 +2311,8 @@ public class PhoneAccountRegistrar { private static final String VERSION = "version"; @Override public void writeToXml(State o, XmlSerializer serializer, Context context) throws IOException { public void writeToXml(State o, XmlSerializer serializer, Context context, FeatureFlags telephonyFeatureFlags) throws IOException { if (o != null) { serializer.startTag(null, CLASS_STATE); serializer.attribute(null, VERSION, Objects.toString(EXPECTED_STATE_VERSION)); Loading @@ -2280,14 +2320,15 @@ public class PhoneAccountRegistrar { serializer.startTag(null, DEFAULT_OUTGOING); for (DefaultPhoneAccountHandle defaultPhoneAccountHandle : o .defaultOutgoingAccountHandles.values()) { sDefaultPhoneAcountHandleXml .writeToXml(defaultPhoneAccountHandle, serializer, context); sDefaultPhoneAccountHandleXml .writeToXml(defaultPhoneAccountHandle, serializer, context, telephonyFeatureFlags); } serializer.endTag(null, DEFAULT_OUTGOING); serializer.startTag(null, ACCOUNTS); for (PhoneAccount m : o.accounts) { sPhoneAccountXml.writeToXml(m, serializer, context); sPhoneAccountXml.writeToXml(m, serializer, context, telephonyFeatureFlags); } serializer.endTag(null, ACCOUNTS); Loading @@ -2296,8 +2337,8 @@ public class PhoneAccountRegistrar { } @Override public State readFromXml(XmlPullParser parser, int version, Context context) throws IOException, XmlPullParserException { public State readFromXml(XmlPullParser parser, int version, Context context, FeatureFlags telephonyFeatureFlags) throws IOException, XmlPullParserException { if (parser.getName().equals(CLASS_STATE)) { State s = new State(); Loading @@ -2313,7 +2354,8 @@ public class PhoneAccountRegistrar { // assume there are no groups. parser.nextTag(); PhoneAccountHandle phoneAccountHandle = sPhoneAccountHandleXml .readFromXml(parser, s.versionNumber, context); .readFromXml(parser, s.versionNumber, context, telephonyFeatureFlags); UserManager userManager = UserManager.get(context); UserInfo primaryUser = userManager.getPrimaryUser(); if (primaryUser != null) { Loading @@ -2328,8 +2370,9 @@ public class PhoneAccountRegistrar { int defaultAccountHandlesDepth = parser.getDepth(); while (XmlUtils.nextElementWithin(parser, defaultAccountHandlesDepth)) { DefaultPhoneAccountHandle accountHandle = sDefaultPhoneAcountHandleXml .readFromXml(parser, s.versionNumber, context); = sDefaultPhoneAccountHandleXml .readFromXml(parser, s.versionNumber, context, telephonyFeatureFlags); if (accountHandle != null && s.accounts != null) { s.defaultOutgoingAccountHandles .put(accountHandle.userHandle, accountHandle); Loading @@ -2340,7 +2383,7 @@ public class PhoneAccountRegistrar { int accountsDepth = parser.getDepth(); while (XmlUtils.nextElementWithin(parser, accountsDepth)) { PhoneAccount account = sPhoneAccountXml.readFromXml(parser, s.versionNumber, context); s.versionNumber, context, telephonyFeatureFlags); if (account != null && s.accounts != null) { s.accounts.add(account); Loading @@ -2355,7 +2398,7 @@ public class PhoneAccountRegistrar { }; @VisibleForTesting public static final XmlSerialization<DefaultPhoneAccountHandle> sDefaultPhoneAcountHandleXml = public static final XmlSerialization<DefaultPhoneAccountHandle> sDefaultPhoneAccountHandleXml = new XmlSerialization<DefaultPhoneAccountHandle>() { private static final String CLASS_DEFAULT_OUTGOING_PHONE_ACCOUNT_HANDLE = "default_outgoing_phone_account_handle"; Loading @@ -2365,7 +2408,7 @@ public class PhoneAccountRegistrar { @Override public void writeToXml(DefaultPhoneAccountHandle o, XmlSerializer serializer, Context context) throws IOException { Context context, FeatureFlags telephonyFeatureFlags) throws IOException { if (o != null) { final UserManager userManager = UserManager.get(context); final long serialNumber = userManager.getSerialNumberForUser(o.userHandle); Loading @@ -2375,7 +2418,7 @@ public class PhoneAccountRegistrar { writeNonNullString(GROUP_ID, o.groupId, serializer); serializer.startTag(null, ACCOUNT_HANDLE); sPhoneAccountHandleXml.writeToXml(o.phoneAccountHandle, serializer, context); context, telephonyFeatureFlags); serializer.endTag(null, ACCOUNT_HANDLE); serializer.endTag(null, CLASS_DEFAULT_OUTGOING_PHONE_ACCOUNT_HANDLE); } Loading @@ -2384,7 +2427,7 @@ public class PhoneAccountRegistrar { @Override public DefaultPhoneAccountHandle readFromXml(XmlPullParser parser, int version, Context context) Context context, FeatureFlags telephonyFeatureFlags) throws IOException, XmlPullParserException { if (parser.getName().equals(CLASS_DEFAULT_OUTGOING_PHONE_ACCOUNT_HANDLE)) { int outerDepth = parser.getDepth(); Loading @@ -2395,7 +2438,7 @@ public class PhoneAccountRegistrar { if (parser.getName().equals(ACCOUNT_HANDLE)) { parser.nextTag(); accountHandle = sPhoneAccountHandleXml.readFromXml(parser, version, context); context, telephonyFeatureFlags); } else if (parser.getName().equals(USER_SERIAL_NUMBER)) { parser.next(); userSerialNumberString = parser.getText(); Loading Loading @@ -2446,16 +2489,19 @@ public class PhoneAccountRegistrar { private static final String ICON = "icon"; private static final String EXTRAS = "extras"; private static final String ENABLED = "enabled"; private static final String SIMULTANEOUS_CALLING_RESTRICTION = "simultaneous_calling_restriction"; @Override public void writeToXml(PhoneAccount o, XmlSerializer serializer, Context context) throws IOException { public void writeToXml(PhoneAccount o, XmlSerializer serializer, Context context, FeatureFlags telephonyFeatureFlags) throws IOException { if (o != null) { serializer.startTag(null, CLASS_PHONE_ACCOUNT); if (o.getAccountHandle() != null) { serializer.startTag(null, ACCOUNT_HANDLE); sPhoneAccountHandleXml.writeToXml(o.getAccountHandle(), serializer, context); sPhoneAccountHandleXml.writeToXml(o.getAccountHandle(), serializer, context, telephonyFeatureFlags); serializer.endTag(null, ACCOUNT_HANDLE); } Loading @@ -2472,13 +2518,19 @@ public class PhoneAccountRegistrar { writeTextIfNonNull(ENABLED, o.isEnabled() ? "true" : "false" , serializer); writeTextIfNonNull(SUPPORTED_AUDIO_ROUTES, Integer.toString( o.getSupportedAudioRoutes()), serializer); if (o.hasSimultaneousCallingRestriction() && telephonyFeatureFlags.simultaneousCallingIndications()) { writePhoneAccountHandleSet(SIMULTANEOUS_CALLING_RESTRICTION, o.getSimultaneousCallingRestriction(), serializer, context, telephonyFeatureFlags); } serializer.endTag(null, CLASS_PHONE_ACCOUNT); } } public PhoneAccount readFromXml(XmlPullParser parser, int version, Context context) throws IOException, XmlPullParserException { public PhoneAccount readFromXml(XmlPullParser parser, int version, Context context, FeatureFlags telephonyFeatureFlags) throws IOException, XmlPullParserException { if (parser.getName().equals(CLASS_PHONE_ACCOUNT)) { int outerDepth = parser.getDepth(); PhoneAccountHandle accountHandle = null; Loading @@ -2497,12 +2549,13 @@ public class PhoneAccountRegistrar { Icon icon = null; boolean enabled = false; Bundle extras = null; Set<PhoneAccountHandle> simultaneousCallingRestriction = null; while (XmlUtils.nextElementWithin(parser, outerDepth)) { if (parser.getName().equals(ACCOUNT_HANDLE)) { parser.nextTag(); accountHandle = sPhoneAccountHandleXml.readFromXml(parser, version, context); context, telephonyFeatureFlags); } else if (parser.getName().equals(ADDRESS)) { parser.next(); address = Uri.parse(parser.getText()); Loading Loading @@ -2547,6 +2600,12 @@ public class PhoneAccountRegistrar { } else if (parser.getName().equals(SUPPORTED_AUDIO_ROUTES)) { parser.next(); supportedAudioRoutes = Integer.parseInt(parser.getText()); } else if (parser.getName().equals(SIMULTANEOUS_CALLING_RESTRICTION)) { // We can not flag this because we always need to handle the case where // this info is in the XML for parsing reasons. We only flag setting the // parsed value below based on the flag. simultaneousCallingRestriction = readPhoneAccountHandleSet(parser, version, context, telephonyFeatureFlags); } } Loading Loading @@ -2628,6 +2687,9 @@ public class PhoneAccountRegistrar { } else if (!TextUtils.isEmpty(iconPackageName)) { builder.setIcon(Icon.createWithResource(iconPackageName, iconResId)); // TODO: Need to set tint. } else if (simultaneousCallingRestriction != null && telephonyFeatureFlags.simultaneousCallingIndications()) { builder.setSimultaneousCallingRestriction(simultaneousCallingRestriction); } return builder.build(); Loading Loading @@ -2659,8 +2721,8 @@ public class PhoneAccountRegistrar { private static final String USER_SERIAL_NUMBER = "user_serial_number"; @Override public void writeToXml(PhoneAccountHandle o, XmlSerializer serializer, Context context) throws IOException { public void writeToXml(PhoneAccountHandle o, XmlSerializer serializer, Context context, FeatureFlags telephonyFeatureFlags) throws IOException { if (o != null) { serializer.startTag(null, CLASS_PHONE_ACCOUNT_HANDLE); Loading @@ -2682,8 +2744,8 @@ public class PhoneAccountRegistrar { } @Override public PhoneAccountHandle readFromXml(XmlPullParser parser, int version, Context context) throws IOException, XmlPullParserException { public PhoneAccountHandle readFromXml(XmlPullParser parser, int version, Context context, FeatureFlags telephonyFeatureFlags) throws IOException, XmlPullParserException { if (parser.getName().equals(CLASS_PHONE_ACCOUNT_HANDLE)) { String componentNameString = null; String idString = null; Loading Loading @@ -2723,8 +2785,4 @@ public class PhoneAccountRegistrar { return null; } }; private String nullToEmpty(String str) { return str == null ? "" : str; } } tests/src/com/android/server/telecom/tests/PhoneAccountRegistrarTest.java +144 −25 File changed.Preview size limit exceeded, changes collapsed. Show changes Loading
src/com/android/server/telecom/PhoneAccountRegistrar.java +103 −45 Original line number Diff line number Diff line Loading @@ -58,6 +58,7 @@ import android.util.Xml; // TODO: Needed for move to system service: import com.android.internal.R; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.telephony.flags.FeatureFlags; import com.android.internal.util.IndentingPrintWriter; import com.android.internal.util.XmlUtils; import com.android.modules.utils.ModifiedUtf8; Loading @@ -81,6 +82,7 @@ import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Map; Loading Loading @@ -182,19 +184,19 @@ public class PhoneAccountRegistrar { private interface PhoneAccountRegistrarWriteLock {} private final PhoneAccountRegistrarWriteLock mWriteLock = new PhoneAccountRegistrarWriteLock() {}; private final com.android.internal.telephony.flags.FeatureFlags mTelephonyFeatureFlags; private final FeatureFlags mTelephonyFeatureFlags; @VisibleForTesting public PhoneAccountRegistrar(Context context, TelecomSystem.SyncRoot lock, DefaultDialerCache defaultDialerCache, AppLabelProxy appLabelProxy, com.android.internal.telephony.flags.FeatureFlags telephonyFeatureFlags) { FeatureFlags telephonyFeatureFlags) { this(context, lock, FILE_NAME, defaultDialerCache, appLabelProxy, telephonyFeatureFlags); } @VisibleForTesting public PhoneAccountRegistrar(Context context, TelecomSystem.SyncRoot lock, String fileName, DefaultDialerCache defaultDialerCache, AppLabelProxy appLabelProxy, com.android.internal.telephony.flags.FeatureFlags telephonyFeatureFlags) { FeatureFlags telephonyFeatureFlags) { mAtomicFile = new AtomicFile(new File(context.getFilesDir(), fileName)); Loading Loading @@ -1919,7 +1921,7 @@ public class PhoneAccountRegistrar { sortPhoneAccounts(); ByteArrayOutputStream os = new ByteArrayOutputStream(); XmlSerializer serializer = Xml.resolveSerializer(os); writeToXml(mState, serializer, mContext); writeToXml(mState, serializer, mContext, mTelephonyFeatureFlags); serializer.flush(); new AsyncXmlWriter().execute(os); } catch (IOException e) { Loading @@ -1940,7 +1942,7 @@ public class PhoneAccountRegistrar { try { XmlPullParser parser = Xml.resolvePullParser(is); parser.nextTag(); mState = readFromXml(parser, mContext); mState = readFromXml(parser, mContext, mTelephonyFeatureFlags); migratePhoneAccountHandle(mState); versionChanged = mState.versionNumber < EXPECTED_STATE_VERSION; Loading Loading @@ -1975,14 +1977,14 @@ public class PhoneAccountRegistrar { } } private static void writeToXml(State state, XmlSerializer serializer, Context context) throws IOException { sStateXml.writeToXml(state, serializer, context); private static void writeToXml(State state, XmlSerializer serializer, Context context, FeatureFlags telephonyFeatureFlags) throws IOException { sStateXml.writeToXml(state, serializer, context, telephonyFeatureFlags); } private static State readFromXml(XmlPullParser parser, Context context) throws IOException, XmlPullParserException { State s = sStateXml.readFromXml(parser, 0, context); private static State readFromXml(XmlPullParser parser, Context context, FeatureFlags telephonyFeatureFlags) throws IOException, XmlPullParserException { State s = sStateXml.readFromXml(parser, 0, context, telephonyFeatureFlags); return s != null ? s : new State(); } Loading Loading @@ -2048,8 +2050,8 @@ public class PhoneAccountRegistrar { /** * Write the supplied object to XML */ public abstract void writeToXml(T o, XmlSerializer serializer, Context context) throws IOException; public abstract void writeToXml(T o, XmlSerializer serializer, Context context, FeatureFlags telephonyFeatureFlags) throws IOException; /** * Read from the supplied XML into a new object, returning null in case of an Loading @@ -2058,8 +2060,8 @@ public class PhoneAccountRegistrar { * object's writeToXml(). This object tries to fail early without modifying * 'parser' if it does not recognize the data it sees. */ public abstract T readFromXml(XmlPullParser parser, int version, Context context) throws IOException, XmlPullParserException; public abstract T readFromXml(XmlPullParser parser, int version, Context context, FeatureFlags telephonyFeatureFlags) throws IOException, XmlPullParserException; protected void writeTextIfNonNull(String tagName, Object value, XmlSerializer serializer) throws IOException { Loading @@ -2070,6 +2072,29 @@ public class PhoneAccountRegistrar { } } /** * Serializes a List of PhoneAccountHandles. * @param tagName The tag for the List * @param handles The List of PhoneAccountHandles to serialize * @param serializer The serializer * @throws IOException if serialization fails. */ protected void writePhoneAccountHandleSet(String tagName, Set<PhoneAccountHandle> handles, XmlSerializer serializer, Context context, FeatureFlags telephonyFeatureFlags) throws IOException { serializer.startTag(null, tagName); if (handles != null) { serializer.attribute(null, ATTRIBUTE_LENGTH, Objects.toString(handles.size())); for (PhoneAccountHandle handle : handles) { sPhoneAccountHandleXml.writeToXml(handle, serializer, context, telephonyFeatureFlags); } } else { serializer.attribute(null, ATTRIBUTE_LENGTH, "0"); } serializer.endTag(null, tagName); } /** * Serializes a string array. * Loading Loading @@ -2164,6 +2189,21 @@ public class PhoneAccountRegistrar { serializer.endTag(null, tagName); } protected Set<PhoneAccountHandle> readPhoneAccountHandleSet(XmlPullParser parser, int version, Context context, FeatureFlags telephonyFeatureFlags) throws IOException, XmlPullParserException { int length = Integer.parseInt(parser.getAttributeValue(null, ATTRIBUTE_LENGTH)); Set<PhoneAccountHandle> handles = new HashSet<>(length); if (length == 0) return handles; int outerDepth = parser.getDepth(); while (XmlUtils.nextElementWithin(parser, outerDepth)) { handles.add(sPhoneAccountHandleXml.readFromXml(parser, version, context, telephonyFeatureFlags)); } return handles; } /** * Reads a string array from the XML parser. * Loading Loading @@ -2271,8 +2311,8 @@ public class PhoneAccountRegistrar { private static final String VERSION = "version"; @Override public void writeToXml(State o, XmlSerializer serializer, Context context) throws IOException { public void writeToXml(State o, XmlSerializer serializer, Context context, FeatureFlags telephonyFeatureFlags) throws IOException { if (o != null) { serializer.startTag(null, CLASS_STATE); serializer.attribute(null, VERSION, Objects.toString(EXPECTED_STATE_VERSION)); Loading @@ -2280,14 +2320,15 @@ public class PhoneAccountRegistrar { serializer.startTag(null, DEFAULT_OUTGOING); for (DefaultPhoneAccountHandle defaultPhoneAccountHandle : o .defaultOutgoingAccountHandles.values()) { sDefaultPhoneAcountHandleXml .writeToXml(defaultPhoneAccountHandle, serializer, context); sDefaultPhoneAccountHandleXml .writeToXml(defaultPhoneAccountHandle, serializer, context, telephonyFeatureFlags); } serializer.endTag(null, DEFAULT_OUTGOING); serializer.startTag(null, ACCOUNTS); for (PhoneAccount m : o.accounts) { sPhoneAccountXml.writeToXml(m, serializer, context); sPhoneAccountXml.writeToXml(m, serializer, context, telephonyFeatureFlags); } serializer.endTag(null, ACCOUNTS); Loading @@ -2296,8 +2337,8 @@ public class PhoneAccountRegistrar { } @Override public State readFromXml(XmlPullParser parser, int version, Context context) throws IOException, XmlPullParserException { public State readFromXml(XmlPullParser parser, int version, Context context, FeatureFlags telephonyFeatureFlags) throws IOException, XmlPullParserException { if (parser.getName().equals(CLASS_STATE)) { State s = new State(); Loading @@ -2313,7 +2354,8 @@ public class PhoneAccountRegistrar { // assume there are no groups. parser.nextTag(); PhoneAccountHandle phoneAccountHandle = sPhoneAccountHandleXml .readFromXml(parser, s.versionNumber, context); .readFromXml(parser, s.versionNumber, context, telephonyFeatureFlags); UserManager userManager = UserManager.get(context); UserInfo primaryUser = userManager.getPrimaryUser(); if (primaryUser != null) { Loading @@ -2328,8 +2370,9 @@ public class PhoneAccountRegistrar { int defaultAccountHandlesDepth = parser.getDepth(); while (XmlUtils.nextElementWithin(parser, defaultAccountHandlesDepth)) { DefaultPhoneAccountHandle accountHandle = sDefaultPhoneAcountHandleXml .readFromXml(parser, s.versionNumber, context); = sDefaultPhoneAccountHandleXml .readFromXml(parser, s.versionNumber, context, telephonyFeatureFlags); if (accountHandle != null && s.accounts != null) { s.defaultOutgoingAccountHandles .put(accountHandle.userHandle, accountHandle); Loading @@ -2340,7 +2383,7 @@ public class PhoneAccountRegistrar { int accountsDepth = parser.getDepth(); while (XmlUtils.nextElementWithin(parser, accountsDepth)) { PhoneAccount account = sPhoneAccountXml.readFromXml(parser, s.versionNumber, context); s.versionNumber, context, telephonyFeatureFlags); if (account != null && s.accounts != null) { s.accounts.add(account); Loading @@ -2355,7 +2398,7 @@ public class PhoneAccountRegistrar { }; @VisibleForTesting public static final XmlSerialization<DefaultPhoneAccountHandle> sDefaultPhoneAcountHandleXml = public static final XmlSerialization<DefaultPhoneAccountHandle> sDefaultPhoneAccountHandleXml = new XmlSerialization<DefaultPhoneAccountHandle>() { private static final String CLASS_DEFAULT_OUTGOING_PHONE_ACCOUNT_HANDLE = "default_outgoing_phone_account_handle"; Loading @@ -2365,7 +2408,7 @@ public class PhoneAccountRegistrar { @Override public void writeToXml(DefaultPhoneAccountHandle o, XmlSerializer serializer, Context context) throws IOException { Context context, FeatureFlags telephonyFeatureFlags) throws IOException { if (o != null) { final UserManager userManager = UserManager.get(context); final long serialNumber = userManager.getSerialNumberForUser(o.userHandle); Loading @@ -2375,7 +2418,7 @@ public class PhoneAccountRegistrar { writeNonNullString(GROUP_ID, o.groupId, serializer); serializer.startTag(null, ACCOUNT_HANDLE); sPhoneAccountHandleXml.writeToXml(o.phoneAccountHandle, serializer, context); context, telephonyFeatureFlags); serializer.endTag(null, ACCOUNT_HANDLE); serializer.endTag(null, CLASS_DEFAULT_OUTGOING_PHONE_ACCOUNT_HANDLE); } Loading @@ -2384,7 +2427,7 @@ public class PhoneAccountRegistrar { @Override public DefaultPhoneAccountHandle readFromXml(XmlPullParser parser, int version, Context context) Context context, FeatureFlags telephonyFeatureFlags) throws IOException, XmlPullParserException { if (parser.getName().equals(CLASS_DEFAULT_OUTGOING_PHONE_ACCOUNT_HANDLE)) { int outerDepth = parser.getDepth(); Loading @@ -2395,7 +2438,7 @@ public class PhoneAccountRegistrar { if (parser.getName().equals(ACCOUNT_HANDLE)) { parser.nextTag(); accountHandle = sPhoneAccountHandleXml.readFromXml(parser, version, context); context, telephonyFeatureFlags); } else if (parser.getName().equals(USER_SERIAL_NUMBER)) { parser.next(); userSerialNumberString = parser.getText(); Loading Loading @@ -2446,16 +2489,19 @@ public class PhoneAccountRegistrar { private static final String ICON = "icon"; private static final String EXTRAS = "extras"; private static final String ENABLED = "enabled"; private static final String SIMULTANEOUS_CALLING_RESTRICTION = "simultaneous_calling_restriction"; @Override public void writeToXml(PhoneAccount o, XmlSerializer serializer, Context context) throws IOException { public void writeToXml(PhoneAccount o, XmlSerializer serializer, Context context, FeatureFlags telephonyFeatureFlags) throws IOException { if (o != null) { serializer.startTag(null, CLASS_PHONE_ACCOUNT); if (o.getAccountHandle() != null) { serializer.startTag(null, ACCOUNT_HANDLE); sPhoneAccountHandleXml.writeToXml(o.getAccountHandle(), serializer, context); sPhoneAccountHandleXml.writeToXml(o.getAccountHandle(), serializer, context, telephonyFeatureFlags); serializer.endTag(null, ACCOUNT_HANDLE); } Loading @@ -2472,13 +2518,19 @@ public class PhoneAccountRegistrar { writeTextIfNonNull(ENABLED, o.isEnabled() ? "true" : "false" , serializer); writeTextIfNonNull(SUPPORTED_AUDIO_ROUTES, Integer.toString( o.getSupportedAudioRoutes()), serializer); if (o.hasSimultaneousCallingRestriction() && telephonyFeatureFlags.simultaneousCallingIndications()) { writePhoneAccountHandleSet(SIMULTANEOUS_CALLING_RESTRICTION, o.getSimultaneousCallingRestriction(), serializer, context, telephonyFeatureFlags); } serializer.endTag(null, CLASS_PHONE_ACCOUNT); } } public PhoneAccount readFromXml(XmlPullParser parser, int version, Context context) throws IOException, XmlPullParserException { public PhoneAccount readFromXml(XmlPullParser parser, int version, Context context, FeatureFlags telephonyFeatureFlags) throws IOException, XmlPullParserException { if (parser.getName().equals(CLASS_PHONE_ACCOUNT)) { int outerDepth = parser.getDepth(); PhoneAccountHandle accountHandle = null; Loading @@ -2497,12 +2549,13 @@ public class PhoneAccountRegistrar { Icon icon = null; boolean enabled = false; Bundle extras = null; Set<PhoneAccountHandle> simultaneousCallingRestriction = null; while (XmlUtils.nextElementWithin(parser, outerDepth)) { if (parser.getName().equals(ACCOUNT_HANDLE)) { parser.nextTag(); accountHandle = sPhoneAccountHandleXml.readFromXml(parser, version, context); context, telephonyFeatureFlags); } else if (parser.getName().equals(ADDRESS)) { parser.next(); address = Uri.parse(parser.getText()); Loading Loading @@ -2547,6 +2600,12 @@ public class PhoneAccountRegistrar { } else if (parser.getName().equals(SUPPORTED_AUDIO_ROUTES)) { parser.next(); supportedAudioRoutes = Integer.parseInt(parser.getText()); } else if (parser.getName().equals(SIMULTANEOUS_CALLING_RESTRICTION)) { // We can not flag this because we always need to handle the case where // this info is in the XML for parsing reasons. We only flag setting the // parsed value below based on the flag. simultaneousCallingRestriction = readPhoneAccountHandleSet(parser, version, context, telephonyFeatureFlags); } } Loading Loading @@ -2628,6 +2687,9 @@ public class PhoneAccountRegistrar { } else if (!TextUtils.isEmpty(iconPackageName)) { builder.setIcon(Icon.createWithResource(iconPackageName, iconResId)); // TODO: Need to set tint. } else if (simultaneousCallingRestriction != null && telephonyFeatureFlags.simultaneousCallingIndications()) { builder.setSimultaneousCallingRestriction(simultaneousCallingRestriction); } return builder.build(); Loading Loading @@ -2659,8 +2721,8 @@ public class PhoneAccountRegistrar { private static final String USER_SERIAL_NUMBER = "user_serial_number"; @Override public void writeToXml(PhoneAccountHandle o, XmlSerializer serializer, Context context) throws IOException { public void writeToXml(PhoneAccountHandle o, XmlSerializer serializer, Context context, FeatureFlags telephonyFeatureFlags) throws IOException { if (o != null) { serializer.startTag(null, CLASS_PHONE_ACCOUNT_HANDLE); Loading @@ -2682,8 +2744,8 @@ public class PhoneAccountRegistrar { } @Override public PhoneAccountHandle readFromXml(XmlPullParser parser, int version, Context context) throws IOException, XmlPullParserException { public PhoneAccountHandle readFromXml(XmlPullParser parser, int version, Context context, FeatureFlags telephonyFeatureFlags) throws IOException, XmlPullParserException { if (parser.getName().equals(CLASS_PHONE_ACCOUNT_HANDLE)) { String componentNameString = null; String idString = null; Loading Loading @@ -2723,8 +2785,4 @@ public class PhoneAccountRegistrar { return null; } }; private String nullToEmpty(String str) { return str == null ? "" : str; } }
tests/src/com/android/server/telecom/tests/PhoneAccountRegistrarTest.java +144 −25 File changed.Preview size limit exceeded, changes collapsed. Show changes