Add atom and logging for app overlay

Test: will add cts test
Change-Id: I8573abd8ec920467047fd0db9d9ce22173d84960
diff --git a/cmds/statsd/src/atoms.proto b/cmds/statsd/src/atoms.proto
index e64b631..ed570e7 100644
--- a/cmds/statsd/src/atoms.proto
+++ b/cmds/statsd/src/atoms.proto
@@ -96,6 +96,7 @@
         ShutdownSequenceReported shutdown_sequence_reported = 56;
         BootSequenceReported boot_sequence_reported = 57;
         DaveyOccurred davey_occurred = 58;
+        OverlayStateChanged overlay_state_changed = 59;
         // TODO: Reorder the numbering so that the most frequent occur events occur in the first 15.
     }
 
@@ -979,6 +980,25 @@
 }
 
 /**
+ * Logs overlay action
+ * Logged from:
+ *     services/core/java/com/android/server/wm/Session.java
+ */
+message OverlayStateChanged {
+    optional int32 uid = 1;
+
+    optional string package_name = 2;
+
+    optional bool using_alert_window = 3;
+
+    enum State {
+        ENTERED = 1;
+        EXITED = 2;
+    }
+    optional State state = 4;
+}
+
+/**
  * Pulls bytes transferred via wifi (Sum of foreground and background usage).
  *
  * Pulled from:
diff --git a/core/java/com/android/internal/os/logging/MetricsLoggerWrapper.java b/core/java/com/android/internal/os/logging/MetricsLoggerWrapper.java
index 245a66e..1376687 100644
--- a/core/java/com/android/internal/os/logging/MetricsLoggerWrapper.java
+++ b/core/java/com/android/internal/os/logging/MetricsLoggerWrapper.java
@@ -96,4 +96,14 @@
                 context.getApplicationInfo().className,
                 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,
+                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,
+                StatsLog.OVERLAY_STATE_CHANGED__STATE__EXITED);
+    }
 }
diff --git a/services/core/java/com/android/server/wm/Session.java b/services/core/java/com/android/server/wm/Session.java
index f09a294..2c3c5d2 100644
--- a/services/core/java/com/android/server/wm/Session.java
+++ b/services/core/java/com/android/server/wm/Session.java
@@ -55,6 +55,7 @@
 import android.view.SurfaceSession;
 import android.view.WindowManager;
 
+import com.android.internal.os.logging.MetricsLoggerWrapper;
 import com.android.internal.view.IInputContext;
 import com.android.internal.view.IInputMethodClient;
 import com.android.internal.view.IInputMethodManager;
@@ -508,8 +509,14 @@
             // on-going notification for the user to control their visibility.
             if (visible) {
                 changed = mAlertWindowSurfaces.add(surfaceController);
+                if (changed) {
+                    MetricsLoggerWrapper.logAppOverlayEnter(mUid, mPackageName, true);
+                }
             } else {
                 changed = mAlertWindowSurfaces.remove(surfaceController);
+                if (changed) {
+                    MetricsLoggerWrapper.logAppOverlayExit(mUid, mPackageName, true);
+                }
             }
 
             if (changed) {
@@ -530,8 +537,14 @@
 
         if (visible) {
             changed = mAppOverlaySurfaces.add(surfaceController);
+            if (changed) {
+                MetricsLoggerWrapper.logAppOverlayEnter(mUid, mPackageName, false);
+            }
         } else {
             changed = mAppOverlaySurfaces.remove(surfaceController);
+            if (changed) {
+                MetricsLoggerWrapper.logAppOverlayExit(mUid, mPackageName, false);
+            }
         }
 
         if (changed) {