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

Commit 1a6d229e 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."

parents ef8d5f50 2a580d18
Loading
Loading
Loading
Loading
+5 −0
Original line number Original line Diff line number Diff line
@@ -299,4 +299,9 @@ public abstract class ActivityManagerInternal {
     * @return true if runtime was restarted, false if it's normal boot
     * @return true if runtime was restarted, false if it's normal boot
     */
     */
    public abstract boolean isRuntimeRestarted();
    public abstract boolean isRuntimeRestarted();

    /**
     * Returns {@code true} if {@code uid} is running an activity from {@code packageName}.
     */
    public abstract boolean hasRunningActivity(int uid, @Nullable String packageName);
}
}
+6 −7
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;
@@ -75,11 +76,11 @@ 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;
import java.util.ArrayList;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Random;
import java.util.Random;


/**
/**
@@ -483,19 +484,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);
        }
        }
        // TODO(b/70506888): allow all system UIDs to call it is too broad, we should call
        if (callingUid != packageUid && !LocalServices.getService(ActivityManagerInternal.class)
        // something like am.isActivityRunningInProcess(componentName, callingPid), but there is
                .hasRunningActivity(callingUid, packageName)) {
        // no such API yet.
        if (callingUid != packageUid && Process.isApplicationUid(callingUid)) {
            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
@@ -24493,6 +24493,26 @@ public class ActivityManagerService extends IActivityManager.Stub
        public boolean isRuntimeRestarted() {
        public boolean isRuntimeRestarted() {
            return mSystemServiceManager.isRuntimeRestarted();
            return mSystemServiceManager.isRuntimeRestarted();
        }
        }
        @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;
        }
    }
    }
    /**
    /**