Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 67ba32d1 authored by Grant Menke's avatar Grant Menke Committed by Android (Google) Code Review
Browse files

Merge "Ensure AppLabelProxy is multiuser aware." into main

parents b55fe920 b671d95c
Loading
Loading
Loading
Loading
+12 −0
Original line number Diff line number Diff line
@@ -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
+29 −7
Original line number Diff line number Diff line
@@ -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;

/**
@@ -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);
            }
@@ -47,5 +69,5 @@ public interface AppLabelProxy {
        }
    }

    CharSequence getAppLabel(String packageName);
    CharSequence getAppLabel(String packageName, UserHandle userHandle);
}
+5 −5
Original line number Diff line number Diff line
@@ -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,
@@ -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 -> {
@@ -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;
        }
+4 −1
Original line number Diff line number Diff line
@@ -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)
+4 −4
Original line number Diff line number Diff line
@@ -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() {
@@ -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