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

Commit f2eddf8d authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Proper autofill fix to let phone process autofill Settings activity." into oc-mr1-dev

parents a06854e7 92b5d278
Loading
Loading
Loading
Loading
+5 −0
Original line number Original line Diff line number Diff line
@@ -268,4 +268,9 @@ public abstract class ActivityManagerInternal {
     * @param token The IApplicationToken for the activity
     * @param token The IApplicationToken for the activity
     */
     */
    public abstract void setFocusedActivity(IBinder token);
    public abstract void setFocusedActivity(IBinder token);

    /**
     * Returns {@code true} if {@code uid} is running an activity from {@code packageName}.
     */
    public abstract boolean hasRunningActivity(int uid, @Nullable String packageName);
}
}
+6 −3
Original line number Original line Diff line number Diff line
@@ -26,6 +26,7 @@ import static com.android.server.autofill.Helper.sVerbose;
import android.annotation.NonNull;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.Nullable;
import android.app.ActivityManager;
import android.app.ActivityManager;
import android.app.ActivityManagerInternal;
import android.app.AppGlobals;
import android.app.AppGlobals;
import android.app.IActivityManager;
import android.app.IActivityManager;
import android.content.ComponentName;
import android.content.ComponentName;
@@ -69,6 +70,7 @@ import com.android.internal.annotations.GuardedBy;
import com.android.internal.logging.MetricsLogger;
import com.android.internal.logging.MetricsLogger;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.internal.os.HandlerCaller;
import com.android.internal.os.HandlerCaller;
import com.android.server.LocalServices;
import com.android.server.autofill.ui.AutoFillUI;
import com.android.server.autofill.ui.AutoFillUI;


import java.io.PrintWriter;
import java.io.PrintWriter;
@@ -417,16 +419,17 @@ final class AutofillManagerServiceImpl {
     * Asserts the component is owned by the caller.
     * Asserts the component is owned by the caller.
     */
     */
    private void assertCallerLocked(@NonNull ComponentName componentName) {
    private void assertCallerLocked(@NonNull ComponentName componentName) {
        final String packageName = componentName.getPackageName();
        final PackageManager pm = mContext.getPackageManager();
        final PackageManager pm = mContext.getPackageManager();
        final int callingUid = Binder.getCallingUid();
        final int callingUid = Binder.getCallingUid();
        final int packageUid;
        final int packageUid;
        try {
        try {
            packageUid = pm.getPackageUidAsUser(componentName.getPackageName(),
            packageUid = pm.getPackageUidAsUser(packageName, UserHandle.getCallingUserId());
                    UserHandle.getCallingUserId());
        } catch (NameNotFoundException e) {
        } catch (NameNotFoundException e) {
            throw new SecurityException("Could not verify UID for " + componentName);
            throw new SecurityException("Could not verify UID for " + componentName);
        }
        }
        if (callingUid != packageUid) {
        if (callingUid != packageUid && !LocalServices.getService(ActivityManagerInternal.class)
                .hasRunningActivity(callingUid, packageName)) {
            final String[] packages = pm.getPackagesForUid(callingUid);
            final String[] packages = pm.getPackagesForUid(callingUid);
            final String callingPackage = packages != null ? packages[0] : "uid-" + callingUid;
            final String callingPackage = packages != null ? packages[0] : "uid-" + callingUid;
            Slog.w(TAG, "App (package=" + callingPackage + ", UID=" + callingUid
            Slog.w(TAG, "App (package=" + callingPackage + ", UID=" + callingUid
+20 −0
Original line number Original line Diff line number Diff line
@@ -24248,6 +24248,26 @@ public class ActivityManagerService extends IActivityManager.Stub
                }
                }
            }
            }
        }
        }
        @Override
        public boolean hasRunningActivity(int uid, @Nullable String packageName) {
            if (packageName == null) return false;
            synchronized (ActivityManagerService.this) {
                for (int i = 0; i < mLruProcesses.size(); i++) {
                    final ProcessRecord processRecord = mLruProcesses.get(i);
                    if (processRecord.uid == uid) {
                        for (int j = 0; j < processRecord.activities.size(); j++) {
                            final ActivityRecord activityRecord = processRecord.activities.get(j);
                            if (packageName.equals(activityRecord.packageName)) {
                                return true;
                            }
                        }
                    }
                }
            }
            return false;
        }
    }
    }
    /**
    /**