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

Commit bfffb5c2 authored by Riddle Hsu's avatar Riddle Hsu
Browse files

Dismiss app warning dialogues by CLOSE_SYSTEM_DIALOGS

ActivityManagerTestBase#launchHomeActivityNoWait is called in setUp
and it also sends CLOSE_SYSTEM_DIALOGS.

So these warning dialogues won't affect other tests which rely on
window focus.

Bug: 112837428
Bug: 242608650
Test: atest DeprecatedTargetSdkTest DisplaySizeTest

Change-Id: I651871be836c9fe43874cca326c7041f199f54c0
parent eeee9520
Loading
Loading
Loading
Loading
+50 −3
Original line number Diff line number Diff line
@@ -17,8 +17,12 @@
package com.android.server.wm;

import android.annotation.UiThread;
import android.app.AlertDialog;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.res.Configuration;
import android.os.Build;
import android.os.Handler;
@@ -305,21 +309,21 @@ class AppWarnings {
    private void hideDialogsForPackageUiThread(String name) {
        // Hides the "unsupported display" dialog if necessary.
        if (mUnsupportedDisplaySizeDialog != null && (name == null || name.equals(
                mUnsupportedDisplaySizeDialog.getPackageName()))) {
                mUnsupportedDisplaySizeDialog.mPackageName))) {
            mUnsupportedDisplaySizeDialog.dismiss();
            mUnsupportedDisplaySizeDialog = null;
        }

        // Hides the "unsupported compile SDK" dialog if necessary.
        if (mUnsupportedCompileSdkDialog != null && (name == null || name.equals(
                mUnsupportedCompileSdkDialog.getPackageName()))) {
                mUnsupportedCompileSdkDialog.mPackageName))) {
            mUnsupportedCompileSdkDialog.dismiss();
            mUnsupportedCompileSdkDialog = null;
        }

        // Hides the "deprecated target sdk version" dialog if necessary.
        if (mDeprecatedTargetSdkVersionDialog != null && (name == null || name.equals(
                mDeprecatedTargetSdkVersionDialog.getPackageName()))) {
                mDeprecatedTargetSdkVersionDialog.mPackageName))) {
            mDeprecatedTargetSdkVersionDialog.dismiss();
            mDeprecatedTargetSdkVersionDialog = null;
        }
@@ -431,6 +435,49 @@ class AppWarnings {
        }
    }

    static class BaseDialog {
        final AppWarnings mManager;
        final String mPackageName;
        AlertDialog mDialog;
        private BroadcastReceiver mCloseReceiver;

        BaseDialog(AppWarnings manager, String packageName) {
            mManager = manager;
            mPackageName = packageName;
        }

        @UiThread
        void show() {
            if (mDialog == null) return;
            if (mCloseReceiver == null) {
                mCloseReceiver = new BroadcastReceiver() {
                    @Override
                    public void onReceive(Context context, Intent intent) {
                        if (Intent.ACTION_CLOSE_SYSTEM_DIALOGS.equals(intent.getAction())) {
                            mManager.mUiHandler.hideDialogsForPackage(mPackageName);
                        }
                    }
                };
                mManager.mUiContext.registerReceiver(mCloseReceiver,
                        new IntentFilter(Intent.ACTION_CLOSE_SYSTEM_DIALOGS),
                        Context.RECEIVER_EXPORTED);
            }
            Slog.w(TAG, "Showing " + getClass().getSimpleName() + " for package " + mPackageName);
            mDialog.show();
        }

        @UiThread
        void dismiss() {
            if (mDialog == null) return;
            if (mCloseReceiver != null) {
                mManager.mUiContext.unregisterReceiver(mCloseReceiver);
                mCloseReceiver = null;
            }
            mDialog.dismiss();
            mDialog = null;
        }
    }

    /**
     * Handles messages on the ActivityTaskManagerService thread.
     */
+3 −24
Original line number Diff line number Diff line
@@ -16,31 +16,23 @@

package com.android.server.wm;

import static com.android.server.wm.ActivityTaskManagerDebugConfig.TAG_ATM;
import static com.android.server.wm.ActivityTaskManagerDebugConfig.TAG_WITH_CLASS_NAME;

import android.app.AlertDialog;
import android.content.Context;
import android.content.Intent;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageItemInfo;
import android.content.pm.PackageManager;
import android.util.Log;
import android.view.Window;
import android.view.WindowManager;

import com.android.internal.R;
import com.android.server.utils.AppInstallerUtil;

public class DeprecatedTargetSdkVersionDialog {
    private static final String TAG = TAG_WITH_CLASS_NAME ? "DeprecatedTargetSdkVersionDialog" : TAG_ATM;

    private final AlertDialog mDialog;
    private final String mPackageName;
class DeprecatedTargetSdkVersionDialog extends AppWarnings.BaseDialog {

    public DeprecatedTargetSdkVersionDialog(final AppWarnings manager, Context context,
    DeprecatedTargetSdkVersionDialog(final AppWarnings manager, Context context,
            ApplicationInfo appInfo) {
        mPackageName = appInfo.packageName;
        super(manager, appInfo.packageName);

        final PackageManager pm = context.getPackageManager();
        final CharSequence label = appInfo.loadSafeLabel(pm,
@@ -75,17 +67,4 @@ public class DeprecatedTargetSdkVersionDialog {
        // DO NOT MODIFY. Used by CTS to verify the dialog is displayed.
        window.getAttributes().setTitle("DeprecatedTargetSdkVersionDialog");
    }

    public String getPackageName() {
        return mPackageName;
    }

    public void show() {
        Log.w(TAG, "Showing SDK deprecation warning for package " + mPackageName);
        mDialog.show();
    }

    public void dismiss() {
        mDialog.dismiss();
    }
}
+3 −17
Original line number Diff line number Diff line
@@ -29,13 +29,11 @@ import android.widget.CheckBox;
import com.android.internal.R;
import com.android.server.utils.AppInstallerUtil;

public class UnsupportedCompileSdkDialog {
    private final AlertDialog mDialog;
    private final String mPackageName;
class UnsupportedCompileSdkDialog extends AppWarnings.BaseDialog {

    public UnsupportedCompileSdkDialog(final AppWarnings manager, Context context,
    UnsupportedCompileSdkDialog(final AppWarnings manager, Context context,
            ApplicationInfo appInfo) {
        mPackageName = appInfo.packageName;
        super(manager, appInfo.packageName);

        final PackageManager pm = context.getPackageManager();
        final CharSequence label = appInfo.loadSafeLabel(pm,
@@ -72,16 +70,4 @@ public class UnsupportedCompileSdkDialog {
        alwaysShow.setOnCheckedChangeListener((buttonView, isChecked) -> manager.setPackageFlag(
                mPackageName, AppWarnings.FLAG_HIDE_COMPILE_SDK, !isChecked));
    }

    public String getPackageName() {
        return mPackageName;
    }

    public void show() {
        mDialog.show();
    }

    public void dismiss() {
        mDialog.dismiss();
    }
}
+5 −19
Original line number Diff line number Diff line
@@ -16,8 +16,6 @@

package com.android.server.wm;

import com.android.internal.R;

import android.app.AlertDialog;
import android.content.Context;
import android.content.pm.ApplicationInfo;
@@ -27,13 +25,13 @@ import android.view.Window;
import android.view.WindowManager;
import android.widget.CheckBox;

public class UnsupportedDisplaySizeDialog {
    private final AlertDialog mDialog;
    private final String mPackageName;
import com.android.internal.R;

    public UnsupportedDisplaySizeDialog(final AppWarnings manager, Context context,
class UnsupportedDisplaySizeDialog extends AppWarnings.BaseDialog {

    UnsupportedDisplaySizeDialog(final AppWarnings manager, Context context,
            ApplicationInfo appInfo) {
        mPackageName = appInfo.packageName;
        super(manager, appInfo.packageName);

        final PackageManager pm = context.getPackageManager();
        final CharSequence label = appInfo.loadSafeLabel(pm,
@@ -63,16 +61,4 @@ public class UnsupportedDisplaySizeDialog {
        alwaysShow.setOnCheckedChangeListener((buttonView, isChecked) -> manager.setPackageFlag(
                mPackageName, AppWarnings.FLAG_HIDE_DISPLAY_SIZE, !isChecked));
    }

    public String getPackageName() {
        return mPackageName;
    }

    public void show() {
        mDialog.show();
    }

    public void dismiss() {
        mDialog.dismiss();
    }
}