Loading flags/telecom_headless_system_user_mode.aconfig +12 −0 Original line number Diff line number Diff line Loading @@ -24,3 +24,15 @@ flag { purpose: PURPOSE_BUGFIX } } # OWNER=grantmenke TARGET=25Q2 flag { name: "telecom_app_label_proxy_hsum_aware" is_exported: true namespace: "telecom" description: "Support HSUM mode by ensuring AppLableProxy is multiuser aware." bug: "321817633" metadata { purpose: PURPOSE_BUGFIX } } No newline at end of file src/com/android/server/telecom/AppLabelProxy.java +29 −7 Original line number Diff line number Diff line Loading @@ -16,8 +16,11 @@ package com.android.server.telecom; import android.content.Context; import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; import com.android.server.telecom.flags.FeatureFlags; import android.os.UserHandle; import android.telecom.Log; /** Loading @@ -30,15 +33,34 @@ public interface AppLabelProxy { class Util { /** * Default impl of getAppLabel. * @param pm PackageManager instance * @param context Context instance that is not necessarily associated with the correct user. * @param userHandle UserHandle instance of the user that is associated with the app. * @param packageName package name to look up. */ public static CharSequence getAppLabel(PackageManager pm, String packageName) { public static CharSequence getAppLabel(Context context, UserHandle userHandle, String packageName, FeatureFlags featureFlags) { try { if (featureFlags.telecomAppLabelProxyHsumAware()){ Context userContext = context.createContextAsUser(userHandle, 0 /* flags */); PackageManager userPackageManager = userContext.getPackageManager(); if (userPackageManager == null) { Log.w(LOG_TAG, "Could not determine app label since PackageManager is " + "null. Package name is %s", packageName); return null; } ApplicationInfo info = userPackageManager.getApplicationInfo(packageName, 0); CharSequence result = userPackageManager.getApplicationLabel(info); Log.i(LOG_TAG, "package %s: name is %s for user = %s", packageName, result, userHandle.toString()); return result; } else { // Legacy code path: PackageManager pm = context.getPackageManager(); ApplicationInfo info = pm.getApplicationInfo(packageName, 0); CharSequence result = pm.getApplicationLabel(info); Log.i(LOG_TAG, "package %s: name is %s", packageName, result); return result; } } catch (PackageManager.NameNotFoundException nnfe) { Log.w(LOG_TAG, "Could not determine app label. Package name is %s", packageName); } Loading @@ -47,5 +69,5 @@ public interface AppLabelProxy { } } CharSequence getAppLabel(String packageName); CharSequence getAppLabel(String packageName, UserHandle userHandle); } src/com/android/server/telecom/CallsManager.java +5 −5 Original line number Diff line number Diff line Loading @@ -939,8 +939,8 @@ public class CallsManager extends Call.ListenerBase String defaultDialerPackageName = telecomManager.getDefaultDialerPackage(userHandle); String userChosenPackageName = getRoleManagerAdapter(). getDefaultCallScreeningApp(userHandle); AppLabelProxy appLabelProxy = packageName -> AppLabelProxy.Util.getAppLabel( mContext.getPackageManager(), packageName); AppLabelProxy appLabelProxy = (packageName, user) -> AppLabelProxy.Util.getAppLabel( mContext, user, packageName, mFeatureFlags); ParcelableCallUtils.Converter converter = new ParcelableCallUtils.Converter(); IncomingCallFilterGraph graph = mIncomingCallFilterGraphProvider.createGraph(incomingCall, Loading Loading @@ -2592,8 +2592,8 @@ public class CallsManager extends Call.ListenerBase theCall, new AppLabelProxy() { @Override public CharSequence getAppLabel(String packageName) { return Util.getAppLabel(mContext.getPackageManager(), packageName); public CharSequence getAppLabel(String packageName, UserHandle userHandle) { return Util.getAppLabel(mContext, userHandle, packageName, mFeatureFlags); } }).process(); future.thenApply( v -> { Loading Loading @@ -3214,7 +3214,7 @@ public class CallsManager extends Call.ListenerBase } CharSequence requestingAppName = AppLabelProxy.Util.getAppLabel( mContext.getPackageManager(), requestingPackageName); mContext, call.getAssociatedUser(), requestingPackageName, mFeatureFlags); if (requestingAppName == null) { requestingAppName = requestingPackageName; } Loading src/com/android/server/telecom/PhoneAccountRegistrar.java +4 −1 Original line number Diff line number Diff line Loading @@ -1326,7 +1326,10 @@ public class PhoneAccountRegistrar { // Ensure name is correct. CharSequence newLabel = mAppLabelProxy.getAppLabel( account.getAccountHandle().getComponentName().getPackageName()); account.getAccountHandle().getComponentName().getPackageName(), UserUtil.getAssociatedUserForCall( mTelecomFeatureFlags.associatedUserRefactorForWorkProfile(), this, UserHandle.CURRENT, account.getAccountHandle())); account = account.toBuilder() .setLabel(newLabel) Loading src/com/android/server/telecom/TelecomSystem.java +4 −4 Original line number Diff line number Diff line Loading @@ -245,8 +245,8 @@ public class TelecomSystem { // Wrap this in a try block to ensure session cleanup occurs in the case of error. try { mPhoneAccountRegistrar = new PhoneAccountRegistrar(mContext, mLock, defaultDialerCache, packageName -> AppLabelProxy.Util.getAppLabel( mContext.getPackageManager(), packageName), null, mFeatureFlags); (packageName, userHandle) -> AppLabelProxy.Util.getAppLabel(mContext, userHandle, packageName, mFeatureFlags), null, mFeatureFlags); mContactsAsyncHelper = contactsAsyncHelperFactory.create( new ContactsAsyncHelper.ContentResolverAdapter() { Loading Loading @@ -386,8 +386,8 @@ public class TelecomSystem { CallStreamingNotification callStreamingNotification = new CallStreamingNotification(mContext, packageName -> AppLabelProxy.Util.getAppLabel( mContext.getPackageManager(), packageName), asyncTaskExecutor); (packageName, userHandle) -> AppLabelProxy.Util.getAppLabel(mContext, userHandle, packageName, mFeatureFlags), asyncTaskExecutor); mCallsManager = new CallsManager( mContext, Loading Loading
flags/telecom_headless_system_user_mode.aconfig +12 −0 Original line number Diff line number Diff line Loading @@ -24,3 +24,15 @@ flag { purpose: PURPOSE_BUGFIX } } # OWNER=grantmenke TARGET=25Q2 flag { name: "telecom_app_label_proxy_hsum_aware" is_exported: true namespace: "telecom" description: "Support HSUM mode by ensuring AppLableProxy is multiuser aware." bug: "321817633" metadata { purpose: PURPOSE_BUGFIX } } No newline at end of file
src/com/android/server/telecom/AppLabelProxy.java +29 −7 Original line number Diff line number Diff line Loading @@ -16,8 +16,11 @@ package com.android.server.telecom; import android.content.Context; import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; import com.android.server.telecom.flags.FeatureFlags; import android.os.UserHandle; import android.telecom.Log; /** Loading @@ -30,15 +33,34 @@ public interface AppLabelProxy { class Util { /** * Default impl of getAppLabel. * @param pm PackageManager instance * @param context Context instance that is not necessarily associated with the correct user. * @param userHandle UserHandle instance of the user that is associated with the app. * @param packageName package name to look up. */ public static CharSequence getAppLabel(PackageManager pm, String packageName) { public static CharSequence getAppLabel(Context context, UserHandle userHandle, String packageName, FeatureFlags featureFlags) { try { if (featureFlags.telecomAppLabelProxyHsumAware()){ Context userContext = context.createContextAsUser(userHandle, 0 /* flags */); PackageManager userPackageManager = userContext.getPackageManager(); if (userPackageManager == null) { Log.w(LOG_TAG, "Could not determine app label since PackageManager is " + "null. Package name is %s", packageName); return null; } ApplicationInfo info = userPackageManager.getApplicationInfo(packageName, 0); CharSequence result = userPackageManager.getApplicationLabel(info); Log.i(LOG_TAG, "package %s: name is %s for user = %s", packageName, result, userHandle.toString()); return result; } else { // Legacy code path: PackageManager pm = context.getPackageManager(); ApplicationInfo info = pm.getApplicationInfo(packageName, 0); CharSequence result = pm.getApplicationLabel(info); Log.i(LOG_TAG, "package %s: name is %s", packageName, result); return result; } } catch (PackageManager.NameNotFoundException nnfe) { Log.w(LOG_TAG, "Could not determine app label. Package name is %s", packageName); } Loading @@ -47,5 +69,5 @@ public interface AppLabelProxy { } } CharSequence getAppLabel(String packageName); CharSequence getAppLabel(String packageName, UserHandle userHandle); }
src/com/android/server/telecom/CallsManager.java +5 −5 Original line number Diff line number Diff line Loading @@ -939,8 +939,8 @@ public class CallsManager extends Call.ListenerBase String defaultDialerPackageName = telecomManager.getDefaultDialerPackage(userHandle); String userChosenPackageName = getRoleManagerAdapter(). getDefaultCallScreeningApp(userHandle); AppLabelProxy appLabelProxy = packageName -> AppLabelProxy.Util.getAppLabel( mContext.getPackageManager(), packageName); AppLabelProxy appLabelProxy = (packageName, user) -> AppLabelProxy.Util.getAppLabel( mContext, user, packageName, mFeatureFlags); ParcelableCallUtils.Converter converter = new ParcelableCallUtils.Converter(); IncomingCallFilterGraph graph = mIncomingCallFilterGraphProvider.createGraph(incomingCall, Loading Loading @@ -2592,8 +2592,8 @@ public class CallsManager extends Call.ListenerBase theCall, new AppLabelProxy() { @Override public CharSequence getAppLabel(String packageName) { return Util.getAppLabel(mContext.getPackageManager(), packageName); public CharSequence getAppLabel(String packageName, UserHandle userHandle) { return Util.getAppLabel(mContext, userHandle, packageName, mFeatureFlags); } }).process(); future.thenApply( v -> { Loading Loading @@ -3214,7 +3214,7 @@ public class CallsManager extends Call.ListenerBase } CharSequence requestingAppName = AppLabelProxy.Util.getAppLabel( mContext.getPackageManager(), requestingPackageName); mContext, call.getAssociatedUser(), requestingPackageName, mFeatureFlags); if (requestingAppName == null) { requestingAppName = requestingPackageName; } Loading
src/com/android/server/telecom/PhoneAccountRegistrar.java +4 −1 Original line number Diff line number Diff line Loading @@ -1326,7 +1326,10 @@ public class PhoneAccountRegistrar { // Ensure name is correct. CharSequence newLabel = mAppLabelProxy.getAppLabel( account.getAccountHandle().getComponentName().getPackageName()); account.getAccountHandle().getComponentName().getPackageName(), UserUtil.getAssociatedUserForCall( mTelecomFeatureFlags.associatedUserRefactorForWorkProfile(), this, UserHandle.CURRENT, account.getAccountHandle())); account = account.toBuilder() .setLabel(newLabel) Loading
src/com/android/server/telecom/TelecomSystem.java +4 −4 Original line number Diff line number Diff line Loading @@ -245,8 +245,8 @@ public class TelecomSystem { // Wrap this in a try block to ensure session cleanup occurs in the case of error. try { mPhoneAccountRegistrar = new PhoneAccountRegistrar(mContext, mLock, defaultDialerCache, packageName -> AppLabelProxy.Util.getAppLabel( mContext.getPackageManager(), packageName), null, mFeatureFlags); (packageName, userHandle) -> AppLabelProxy.Util.getAppLabel(mContext, userHandle, packageName, mFeatureFlags), null, mFeatureFlags); mContactsAsyncHelper = contactsAsyncHelperFactory.create( new ContactsAsyncHelper.ContentResolverAdapter() { Loading Loading @@ -386,8 +386,8 @@ public class TelecomSystem { CallStreamingNotification callStreamingNotification = new CallStreamingNotification(mContext, packageName -> AppLabelProxy.Util.getAppLabel( mContext.getPackageManager(), packageName), asyncTaskExecutor); (packageName, userHandle) -> AppLabelProxy.Util.getAppLabel(mContext, userHandle, packageName, mFeatureFlags), asyncTaskExecutor); mCallsManager = new CallsManager( mContext, Loading