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

Commit 2f92c177 authored by Android Build Coastguard Worker's avatar Android Build Coastguard Worker
Browse files

Merge cherrypicks of ['googleplex-android-review.googlesource.com/28784393',...

Merge cherrypicks of ['googleplex-android-review.googlesource.com/28784393', 'googleplex-android-review.googlesource.com/31226852', 'googleplex-android-review.googlesource.com/31175678'] into security-aosp-24Q3-release.

Change-Id: I842826bb35daaf626782624c491cbb9cef81f993
parents 6b0e0b1b 12a83120
Loading
Loading
Loading
Loading
+13 −12
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@ import static com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;

import android.Manifest;
import android.app.Activity;
import android.app.ActivityManager;
import android.app.Dialog;
import android.app.admin.DevicePolicyManager;
import android.app.settings.SettingsEnums;
@@ -34,6 +35,7 @@ import android.content.pm.PackageManager.NameNotFoundException;
import android.hardware.usb.IUsbManager;
import android.os.Bundle;
import android.os.IBinder;
import android.os.RemoteException;
import android.os.ServiceManager;
import android.os.UserHandle;
import android.os.UserManager;
@@ -176,20 +178,19 @@ public abstract class AppInfoBase extends SettingsPreferenceFragment
        if (!(activity instanceof SettingsActivity)) {
            return false;
        }
        final String callingPackageName =
                ((SettingsActivity) activity).getInitialCallingPackage();

        if (TextUtils.isEmpty(callingPackageName)) {
            Log.w(TAG, "Not able to get calling package name for permission check");
            return false;
        }
        if (mPm.checkPermission(Manifest.permission.INTERACT_ACROSS_USERS_FULL, callingPackageName)
                != PackageManager.PERMISSION_GRANTED) {
            Log.w(TAG, "Package " + callingPackageName + " does not have required permission "
        try {
            int callerUid = ActivityManager.getService().getLaunchedFromUid(
                    activity.getActivityToken());
            if (ActivityManager.checkUidPermission(Manifest.permission.INTERACT_ACROSS_USERS_FULL,
                    callerUid) != PackageManager.PERMISSION_GRANTED) {
                Log.w(TAG, "Uid " + callerUid + " does not have required permission "
                        + Manifest.permission.INTERACT_ACROSS_USERS_FULL);
                return false;
            }
            return true;
        } catch (RemoteException e) {
            return false;
        }
    }

    protected void setIntentAndFinish(boolean appChanged) {
+0 −15
Original line number Diff line number Diff line
@@ -41,7 +41,6 @@ import android.os.UserManager;
import android.service.notification.NotificationListenerService;
import android.text.TextUtils;
import android.util.Slog;
import android.view.WindowManager;
import android.view.accessibility.AccessibilityEvent;
import android.widget.Toast;

@@ -161,20 +160,6 @@ public class NotificationAccessConfirmationActivity extends Activity
        getWindow().setCloseOnTouchOutside(false); 
    }

    @Override
    public void onResume() {
        super.onResume();
        getWindow().addFlags(
                WindowManager.LayoutParams.SYSTEM_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS);
    }

    @Override
    public void onPause() {
        getWindow().clearFlags(
                WindowManager.LayoutParams.SYSTEM_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS);
        super.onPause();
    }

    private void onAllow() {
        mNm.setNotificationListenerAccessGranted(mComponentName, true);

+4 −9
Original line number Diff line number Diff line
@@ -17,7 +17,7 @@
package com.android.settings.password;

import android.app.settings.SettingsEnums;
import android.content.ComponentName;
import android.hardware.biometrics.BiometricManager;
import android.hardware.biometrics.BiometricPrompt;
import android.hardware.biometrics.BiometricPrompt.AuthenticationCallback;
import android.hardware.biometrics.BiometricPrompt.AuthenticationResult;
@@ -41,7 +41,6 @@ public class BiometricFragment extends InstrumentedFragment {
    private static final String TAG = "ConfirmDeviceCredential/BiometricFragment";

    private static final String KEY_PROMPT_INFO = "prompt_info";
    private static final String KEY_CALLING_ACTIVITY = "calling_activity";

    // Re-set by the application. Should be done upon orientation changes, etc
    private Executor mClientExecutor;
@@ -91,13 +90,10 @@ public class BiometricFragment extends InstrumentedFragment {
     * @param promptInfo
     * @return
     */
    public static BiometricFragment newInstance(PromptInfo promptInfo,
            ComponentName callingActivity) {
    public static BiometricFragment newInstance(PromptInfo promptInfo) {
        BiometricFragment biometricFragment = new BiometricFragment();
        final Bundle bundle = new Bundle();
        bundle.putParcelable(KEY_PROMPT_INFO, promptInfo);

        bundle.putParcelable(KEY_CALLING_ACTIVITY, callingActivity);
        biometricFragment.setArguments(bundle);
        return biometricFragment;
    }
@@ -132,8 +128,6 @@ public class BiometricFragment extends InstrumentedFragment {

        final Bundle bundle = getArguments();
        final PromptInfo promptInfo = bundle.getParcelable(KEY_PROMPT_INFO);
        final ComponentName callingActivity = bundle.getParcelable(KEY_CALLING_ACTIVITY);

        BiometricPrompt.Builder promptBuilder = new BiometricPrompt.Builder(getContext())
                .setTitle(promptInfo.getTitle())
                .setUseDefaultTitle() // use default title if title is null/empty
@@ -149,7 +143,8 @@ public class BiometricFragment extends InstrumentedFragment {
                        promptInfo.isDisallowBiometricsIfPolicyExists())
                .setShowEmergencyCallButton(promptInfo.isShowEmergencyCallButton())
                .setReceiveSystemEvents(true)
                .setComponentNameForConfirmDeviceCredentialActivity(callingActivity);
                .setRealCallerForConfirmDeviceCredentialActivity(
                        promptInfo.getRealCallerForConfirmDeviceCredentialActivity());
        if (promptInfo.getLogoRes() != 0){
            promptBuilder.setLogoRes(promptInfo.getLogoRes());
        }
+2 −2
Original line number Diff line number Diff line
@@ -213,6 +213,7 @@ public class ConfirmDeviceCredentialActivity extends FragmentActivity {
        promptInfo.setTitle(mTitle);
        promptInfo.setDescription(mDetails);
        promptInfo.setDisallowBiometricsIfPolicyExists(mCheckDevicePolicyManager);
        promptInfo.setRealCallerForConfirmDeviceCredentialActivity(getCallingActivity());

        if (android.multiuser.Flags.enablePrivateSpaceFeatures()
                && android.multiuser.Flags.usePrivateSpaceIconInBiometricPrompt()
@@ -478,8 +479,7 @@ public class ConfirmDeviceCredentialActivity extends FragmentActivity {
        boolean newFragment = false;

        if (mBiometricFragment == null) {
            mBiometricFragment = BiometricFragment.newInstance(promptInfo,
                    getCallingActivity());
            mBiometricFragment = BiometricFragment.newInstance(promptInfo);
            newFragment = true;
        }
        mBiometricFragment.setCallbacks(mExecutor, mAuthenticationCallback);
+15 −0
Original line number Diff line number Diff line
@@ -16,6 +16,8 @@

package com.android.settings.notification;

import static android.view.WindowManager.LayoutParams.SYSTEM_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS;

import static com.android.internal.notification.NotificationAccessConfirmationActivityContract.EXTRA_COMPONENT_NAME;

import static com.google.common.truth.Truth.assertThat;
@@ -42,6 +44,19 @@ import org.robolectric.RuntimeEnvironment;
@RunWith(RobolectricTestRunner.class)
public class NotificationAccessConfirmationActivityTest {

    @Test
    public void onCreate_setsWindowFlags() {
        ComponentName cn = new ComponentName("com.example", "com.example.SomeService");
        installPackage(cn.getPackageName(), "Example");

        NotificationAccessConfirmationActivity activity = startActivityWithIntent(cn);

        assertThat(activity.getWindow().getAttributes().privateFlags
                & SYSTEM_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS).isNotEqualTo(0);
        assertThat(activity.getWindow().getAttributes().flags
                & SYSTEM_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS).isEqualTo(0);
    }

    @Test
    public void start_withMissingIntentFilter_finishes() {
        ComponentName cn = new ComponentName("com.example", "com.example.SomeService");