Add polling and logging when launcher is settings

getLauncherPackageName sometimes returns "com.android.settings", causing
the test to fail.

Add polling for the launcher to not return settings, and logging to
try to understand why this happens, especially if polling does not solve
the issue.

Bug: 286550950
Test: atest

Change-Id: I90963d5db326732dfc82db07f36676190ffdcce9
This commit is contained in:
Remi NGUYEN VAN
2023-07-18 16:34:39 +09:00
parent b063daea6d
commit 6c3f4160df

View File

@@ -50,6 +50,7 @@ import android.content.Context;
import android.content.Intent;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.content.res.Resources;
import android.net.NetworkCapabilities;
import android.net.NetworkInfo;
@@ -60,6 +61,7 @@ import android.os.UserHandle;
import android.telephony.TelephonyManager;
import android.testing.PollingCheck;
import android.util.DisplayMetrics;
import android.util.Log;
import android.widget.TextView;
import androidx.annotation.Nullable;
@@ -404,6 +406,22 @@ public class NetworkNotificationManagerTest {
// UiDevice.getLauncherPackageName() requires the test manifest to have a <queries> tag for
// the launcher intent.
// Attempted workaround for b/286550950 where Settings is reported as the launcher
PollingCheck.check(
"Launcher package name was still settings after " + TEST_TIMEOUT_MS + "ms",
TEST_TIMEOUT_MS,
() -> {
if ("com.android.settings".equals(uiDevice.getLauncherPackageName())) {
final Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
final List<ResolveInfo> acts = ctx.getPackageManager()
.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);
Log.e(NetworkNotificationManagerTest.class.getSimpleName(),
"Got settings as launcher name; launcher activities: " + acts);
return false;
}
return true;
});
final String launcherPackageName = uiDevice.getLauncherPackageName();
assertTrue(String.format("Launcher (%s) is not shown", launcherPackageName),
uiDevice.wait(Until.hasObject(By.pkg(launcherPackageName)),