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

This commit is contained in:
Youngtae Cha
2022-05-12 13:48:15 +00:00
committed by Android (Google) Code Review
3 changed files with 55 additions and 0 deletions

View File

@@ -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;

View File

@@ -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

View File

@@ -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");
}
}