Merge "Allow firing the LOST_INTERNET intent immediately in config"

This commit is contained in:
Jean Chalard
2023-06-27 05:14:44 +00:00
committed by Gerrit Code Review
3 changed files with 67 additions and 22 deletions

View File

@@ -62,6 +62,7 @@ import android.testing.PollingCheck;
import android.util.DisplayMetrics;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.StringRes;
import androidx.test.filters.SmallTest;
@@ -386,14 +387,37 @@ public class NetworkNotificationManagerTest {
}
@Test
public void testNotifyNoInternetAsDialogWhenHighPriority() throws Exception {
doReturn(true).when(mResources).getBoolean(
public void testNotifyNoInternet_asNotification() throws Exception {
doTestNotifyNotificationAsDialogWhenHighPriority(false, NO_INTERNET);
}
@Test
public void testNotifyNoInternet_asDialog() throws Exception {
doTestNotifyNotificationAsDialogWhenHighPriority(true, NO_INTERNET);
}
@Test
public void testNotifyLostInternet_asNotification() throws Exception {
doTestNotifyNotificationAsDialogWhenHighPriority(false, LOST_INTERNET);
}
@Test
public void testNotifyLostInternet_asDialog() throws Exception {
doTestNotifyNotificationAsDialogWhenHighPriority(true, LOST_INTERNET);
}
public void doTestNotifyNotificationAsDialogWhenHighPriority(final boolean configActive,
@NonNull final NotificationType notifType) throws Exception {
doReturn(configActive).when(mResources).getBoolean(
R.bool.config_notifyNoInternetAsDialogWhenHighPriority);
final Instrumentation instr = InstrumentationRegistry.getInstrumentation();
final UiDevice uiDevice = UiDevice.getInstance(instr);
final Context ctx = instr.getContext();
final PowerManager pm = ctx.getSystemService(PowerManager.class);
// If the prio of this notif is < that of NETWORK_SWITCH, it's the lowest prio and
// therefore it can't be tested whether it cancels other lower-prio notifs.
final boolean isLowestPrioNotif = NetworkNotificationManager.priority(notifType)
< NetworkNotificationManager.priority(NETWORK_SWITCH);
// Wake up the device (it has no effect if the device is already awake).
uiDevice.executeShellCommand("input keyevent KEYCODE_WAKEUP");
@@ -409,9 +433,13 @@ public class NetworkNotificationManagerTest {
uiDevice.wait(Until.hasObject(By.pkg(launcherPackageName)),
UI_AUTOMATOR_WAIT_TIME_MILLIS));
mManager.showNotification(TEST_NOTIF_ID, NETWORK_SWITCH, mWifiNai, mCellNai, null, false);
// Non-"no internet" notifications are not affected
verify(mNotificationManager).notify(eq(TEST_NOTIF_TAG), eq(NETWORK_SWITCH.eventId), any());
if (!isLowestPrioNotif) {
mManager.showNotification(TEST_NOTIF_ID, NETWORK_SWITCH, mWifiNai, mCellNai,
null, false);
// Non-"no internet" notifications are not affected
verify(mNotificationManager).notify(eq(TEST_NOTIF_TAG), eq(NETWORK_SWITCH.eventId),
any());
}
final String testAction = "com.android.connectivity.coverage.TEST_DIALOG";
final Intent intent = new Intent(testAction)
@@ -420,22 +448,30 @@ public class NetworkNotificationManagerTest {
final PendingIntent pendingIntent = PendingIntent.getActivity(ctx, 0 /* requestCode */,
intent, PendingIntent.FLAG_CANCEL_CURRENT | PendingIntent.FLAG_IMMUTABLE);
mManager.showNotification(TEST_NOTIF_ID, NO_INTERNET, mWifiNai, null /* switchToNai */,
mManager.showNotification(TEST_NOTIF_ID, notifType, mWifiNai, null /* switchToNai */,
pendingIntent, true /* highPriority */);
// Previous notifications are still dismissed
verify(mNotificationManager).cancel(TEST_NOTIF_TAG, NETWORK_SWITCH.eventId);
if (!isLowestPrioNotif) {
// Previous notifications are still dismissed
verify(mNotificationManager).cancel(TEST_NOTIF_TAG, NETWORK_SWITCH.eventId);
}
// Verify that the activity is shown (the activity shows the action on screen)
final UiObject actionText = uiDevice.findObject(new UiSelector().text(testAction));
assertTrue("Activity not shown", actionText.waitForExists(TEST_TIMEOUT_MS));
if (configActive) {
// Verify that the activity is shown (the activity shows the action on screen)
final UiObject actionText = uiDevice.findObject(new UiSelector().text(testAction));
assertTrue("Activity not shown", actionText.waitForExists(TEST_TIMEOUT_MS));
// Tapping the text should dismiss the dialog
actionText.click();
assertTrue("Activity not dismissed", actionText.waitUntilGone(TEST_TIMEOUT_MS));
// Tapping the text should dismiss the dialog
actionText.click();
assertTrue("Activity not dismissed", actionText.waitUntilGone(TEST_TIMEOUT_MS));
// Verify no NO_INTERNET notification was posted
verify(mNotificationManager, never()).notify(any(), eq(NO_INTERNET.eventId), any());
// Verify that the notification was not posted
verify(mNotificationManager, never()).notify(any(), eq(notifType.eventId), any());
} else {
// Notification should have been posted, and will have overridden the previous
// one because it has the same id (hence no cancel).
verify(mNotificationManager).notify(eq(TEST_NOTIF_TAG), eq(notifType.eventId), any());
}
}
private void doNotificationTextTest(NotificationType type, @StringRes int expectedTitleRes,