Dialog and chip for privacy showing

Creates a chip and a dialog to show the current apps using certain app
ops (location, microphone, camera).

Dimens are estimated. Settings button dismisses dialog for now.

Test: atest && visual
Bug: 117646163
Change-Id: Ida5b42acf331d6c9da06141379eadc0da5e72df2
diff --git a/packages/SystemUI/src/com/android/systemui/qs/QuickStatusBarHeader.java b/packages/SystemUI/src/com/android/systemui/qs/QuickStatusBarHeader.java
index 326df49..3ee6195 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/QuickStatusBarHeader.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/QuickStatusBarHeader.java
@@ -21,6 +21,7 @@
 import android.annotation.ColorInt;
 import android.app.ActivityManager;
 import android.app.AlarmManager;
+import android.app.Dialog;
 import android.content.BroadcastReceiver;
 import android.content.Context;
 import android.content.Intent;
@@ -31,6 +32,7 @@
 import android.graphics.Rect;
 import android.media.AudioManager;
 import android.os.Handler;
+import android.os.Looper;
 import android.provider.AlarmClock;
 import android.service.notification.ZenModeConfig;
 import android.text.format.DateUtils;
@@ -39,6 +41,7 @@
 import android.util.Pair;
 import android.view.View;
 import android.view.WindowInsets;
+import android.view.WindowManager;
 import android.widget.FrameLayout;
 import android.widget.ImageView;
 import android.widget.RelativeLayout;
@@ -52,11 +55,14 @@
 import com.android.systemui.Prefs;
 import com.android.systemui.R;
 import com.android.systemui.plugins.ActivityStarter;
+import com.android.systemui.privacy.OngoingPrivacyChip;
+import com.android.systemui.privacy.OngoingPrivacyDialog;
 import com.android.systemui.qs.QSDetail.Callback;
 import com.android.systemui.statusbar.phone.PhoneStatusBarView;
 import com.android.systemui.statusbar.phone.StatusBarIconController;
 import com.android.systemui.statusbar.phone.StatusBarIconController.TintedIconManager;
 import com.android.systemui.statusbar.phone.StatusIconContainer;
+import com.android.systemui.statusbar.phone.SystemUIDialog;
 import com.android.systemui.statusbar.policy.Clock;
 import com.android.systemui.statusbar.policy.DarkIconDispatcher;
 import com.android.systemui.statusbar.policy.DarkIconDispatcher.DarkReceiver;
@@ -118,6 +124,7 @@
     private BatteryMeterView mBatteryMeterView;
     private Clock mClockView;
     private DateView mDateView;
+    private OngoingPrivacyChip mPrivacyChip;
 
     private NextAlarmController mAlarmController;
     private ZenModeController mZenController;
@@ -185,6 +192,8 @@
         mClockView = findViewById(R.id.clock);
         mClockView.setOnClickListener(this);
         mDateView = findViewById(R.id.date);
+        mPrivacyChip = findViewById(R.id.privacy_chip);
+        mPrivacyChip.setOnClickListener(this);
     }
 
     private void updateStatusText() {
@@ -263,6 +272,13 @@
                 newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE;
         mBatteryMeterView.useWallpaperTextColor(shouldUseWallpaperTextColor);
         mClockView.useWallpaperTextColor(shouldUseWallpaperTextColor);
+
+        MarginLayoutParams lm = (MarginLayoutParams) mPrivacyChip.getLayoutParams();
+        int sideMargins = lm.leftMargin;
+        int topBottomMargins = (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE)
+                ? 0 : sideMargins;
+        lm.setMargins(sideMargins, topBottomMargins, sideMargins, topBottomMargins);
+        mPrivacyChip.setLayoutParams(lm);
     }
 
     @Override
@@ -421,6 +437,7 @@
             return;
         }
         mHeaderQsPanel.setListening(listening);
+        mPrivacyChip.setListening(listening);
         mListening = listening;
 
         if (listening) {
@@ -443,6 +460,19 @@
         } else if (v == mBatteryMeterView) {
             Dependency.get(ActivityStarter.class).postStartActivityDismissingKeyguard(new Intent(
                     Intent.ACTION_POWER_USAGE_SUMMARY),0);
+        } else if (v == mPrivacyChip) {
+            Handler mUiHandler = new Handler(Looper.getMainLooper());
+            mUiHandler.post(() -> {
+                Dialog mDialog = new OngoingPrivacyDialog(mContext,
+                        mPrivacyChip.getBuilder()).createDialog();
+                mDialog.getWindow().setType(
+                        WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG);
+                SystemUIDialog.setShowForAllUsers(mDialog, true);
+                SystemUIDialog.registerDismissListener(mDialog);
+                SystemUIDialog.setWindowOnTop(mDialog);
+                mUiHandler.post(() -> mDialog.show());
+                mHost.collapsePanels();
+            });
         }
     }