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

Commit 08d6d728 authored by Chenjie Yu's avatar Chenjie Yu
Browse files

Avoid double logging for app overlay

Right now if an app is TYPE_APPLICATION_OVERLAY, it gets logged twice

Fix: 73952594
Test: manual test and cts test
Change-Id: Ieca79545c76f0773cb939efd236705a067bb1e6d
parent 6158952c
Loading
Loading
Loading
Loading
+21 −6
Original line number Diff line number Diff line
@@ -21,6 +21,7 @@ import android.content.Context;
import android.content.pm.PackageManager.NameNotFoundException;
import android.util.Pair;
import android.util.StatsLog;
import android.view.WindowManager.LayoutParams;

import com.android.internal.logging.MetricsLogger;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
@@ -103,13 +104,27 @@ public class MetricsLoggerWrapper {
                StatsLog.PICTURE_IN_PICTURE_STATE_CHANGED__STATE__EXPANDED_TO_FULL_SCREEN);
    }

    public static void logAppOverlayEnter(int uid, String packageName, boolean usingAlertWindow) {
        StatsLog.write(StatsLog.OVERLAY_STATE_CHANGED, uid, packageName, usingAlertWindow,
    public static void logAppOverlayEnter(int uid, String packageName, boolean changed, int type, boolean usingAlertWindow) {
        if (changed) {
            if (type != LayoutParams.TYPE_APPLICATION_OVERLAY) {
                StatsLog.write(StatsLog.OVERLAY_STATE_CHANGED, uid, packageName, true,
                        StatsLog.OVERLAY_STATE_CHANGED__STATE__ENTERED);
            } else if (!usingAlertWindow){
                StatsLog.write(StatsLog.OVERLAY_STATE_CHANGED, uid, packageName, false,
                        StatsLog.OVERLAY_STATE_CHANGED__STATE__ENTERED);
            }
        }
    }

    public static void logAppOverlayExit(int uid, String packageName, boolean usingAlertWindow) {
        StatsLog.write(StatsLog.OVERLAY_STATE_CHANGED, uid, packageName, usingAlertWindow,
    public static void logAppOverlayExit(int uid, String packageName, boolean changed, int type, boolean usingAlertWindow) {
        if (changed) {
            if (type != LayoutParams.TYPE_APPLICATION_OVERLAY) {
                StatsLog.write(StatsLog.OVERLAY_STATE_CHANGED, uid, packageName, true,
                        StatsLog.OVERLAY_STATE_CHANGED__STATE__EXITED);
            } else if (!usingAlertWindow){
                StatsLog.write(StatsLog.OVERLAY_STATE_CHANGED, uid, packageName, false,
                        StatsLog.OVERLAY_STATE_CHANGED__STATE__EXITED);
            }
        }
    }
}
+4 −12
Original line number Diff line number Diff line
@@ -509,14 +509,10 @@ class Session extends IWindowSession.Stub implements IBinder.DeathRecipient {
            // on-going notification for the user to control their visibility.
            if (visible) {
                changed = mAlertWindowSurfaces.add(surfaceController);
                if (changed) {
                    MetricsLoggerWrapper.logAppOverlayEnter(mUid, mPackageName, true);
                }
                MetricsLoggerWrapper.logAppOverlayEnter(mUid, mPackageName, changed, type, true);
            } else {
                changed = mAlertWindowSurfaces.remove(surfaceController);
                if (changed) {
                    MetricsLoggerWrapper.logAppOverlayExit(mUid, mPackageName, true);
                }
                MetricsLoggerWrapper.logAppOverlayExit(mUid, mPackageName, changed, type, true);
            }

            if (changed) {
@@ -537,14 +533,10 @@ class Session extends IWindowSession.Stub implements IBinder.DeathRecipient {

        if (visible) {
            changed = mAppOverlaySurfaces.add(surfaceController);
            if (changed) {
                MetricsLoggerWrapper.logAppOverlayEnter(mUid, mPackageName, false);
            }
            MetricsLoggerWrapper.logAppOverlayEnter(mUid, mPackageName, changed, type, false);
        } else {
            changed = mAppOverlaySurfaces.remove(surfaceController);
            if (changed) {
                MetricsLoggerWrapper.logAppOverlayExit(mUid, mPackageName, false);
            }
            MetricsLoggerWrapper.logAppOverlayExit(mUid, mPackageName, changed, type, false);
        }

        if (changed) {