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

Commit 5126d4e4 authored by Youngtae Cha's avatar Youngtae Cha Committed by Automerger Merge Worker
Browse files

Merge "Wireless emergency message has to be run in pin app mode" into tm-dev...

Merge "Wireless emergency message has to be run in pin app mode" into tm-dev am: d353a5c5 am: e1ccd793

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/18330342



Change-Id: Ief8066822fae3c40c7107f5d945f03046d26ddb1
Signed-off-by: default avatarAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
parents 5e881cc5 e1ccd793
Loading
Loading
Loading
Loading
+24 −0
Original line number Diff line number Diff line
@@ -64,6 +64,7 @@ import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.policy.IKeyguardDismissCallback;
import com.android.internal.protolog.common.ProtoLog;
import com.android.internal.statusbar.IStatusBarService;
import com.android.internal.telephony.CellBroadcastUtils;
import com.android.internal.widget.LockPatternUtils;
import com.android.server.LocalServices;
import com.android.server.am.ActivityManagerService;
@@ -392,6 +393,10 @@ public class LockTaskController {
            return false;
        }

        if (isWirelessEmergencyAlert(intent)) {
            return false;
        }

        return !(isTaskAuthAllowlisted(taskAuth) || mLockTaskModeTasks.isEmpty());
    }

@@ -424,6 +429,25 @@ public class LockTaskController {
        return isPackageAllowlisted(userId, packageName);
    }

    private boolean isWirelessEmergencyAlert(Intent intent) {
        if (intent == null) {
            return false;
        }

        final ComponentName cellBroadcastAlertDialogComponentName =
                CellBroadcastUtils.getDefaultCellBroadcastAlertDialogComponent(mContext);

        if (cellBroadcastAlertDialogComponentName == null) {
            return false;
        }

        if (cellBroadcastAlertDialogComponentName.equals(intent.getComponent())) {
            return true;
        }

        return false;
    }

    private boolean isEmergencyCallIntent(Intent intent) {
        if (intent == null) {
            return false;
+17 −0
Original line number Diff line number Diff line
@@ -82,6 +82,7 @@ import android.util.Pair;
import androidx.test.filters.SmallTest;

import com.android.internal.statusbar.IStatusBarService;
import com.android.internal.telephony.CellBroadcastUtils;
import com.android.internal.widget.LockPatternUtils;
import com.android.server.LocalServices;
import com.android.server.statusbar.StatusBarManagerInternal;
@@ -296,6 +297,22 @@ public class LockTaskControllerTest {
        assertTrue(mLockTaskController.isLockTaskModeViolation(dialer));
    }

    @Test
    public void testLockTaskViolation_wirelessEmergencyAlerts() {
        // GIVEN one task record with allowlisted auth that is in lock task mode
        Task tr = getTask(LOCK_TASK_AUTH_ALLOWLISTED);
        mLockTaskController.startLockTaskMode(tr, false, TEST_UID);

        // GIVEN cellbroadcast task necessary for emergency warning alerts
        Task cellbroadcastreceiver = getTask(
                new Intent().setComponent(
                        CellBroadcastUtils.getDefaultCellBroadcastAlertDialogComponent(mContext)),
                LOCK_TASK_AUTH_PINNABLE);

        // THEN the cellbroadcast task should all be allowed
        assertFalse(mLockTaskController.isLockTaskModeViolation(cellbroadcastreceiver));
    }

    @Test
    public void testStopLockTaskMode() throws Exception {
        // GIVEN one task record with allowlisted auth that is in lock task mode
+14 −0
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@

package com.android.internal.telephony;

import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
@@ -62,4 +63,17 @@ public class CellBroadcastUtils {

        return packageName;
    }

    /**
     * Utility method to get cellbroadcast alert dialog component name
     */
    public static ComponentName getDefaultCellBroadcastAlertDialogComponent(Context context) {
        String cellBroadcastReceiverPackageName =
                getDefaultCellBroadcastReceiverPackageName(context);
        if (TextUtils.isEmpty(cellBroadcastReceiverPackageName)) {
            return null;
        }
        return ComponentName.createRelative(cellBroadcastReceiverPackageName,
                "com.android.cellbroadcastreceiver.CellBroadcastAlertDialog");
    }
}