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

Commit bfd6d85d authored by Fabian Kozynski's avatar Fabian Kozynski
Browse files

Added atoms for logging

Adds atom for tracking when the Privacy chip is viewed and clicked and
how the Privacy Dialog is dismissed, as long as dismissed from inside the dialog.

Test: manual using statsd_testdrive
Bug: 123896378
Bug: 125731930
Change-Id: Ia09f39dc6bd636a120f8ed2b1b892bdb1a78951f
parent 0ec0800d
Loading
Loading
Loading
Loading
+27 −0
Original line number Diff line number Diff line
@@ -249,6 +249,7 @@ message Atom {
        TouchGestureClassified touch_gesture_classified = 177;
        HiddenApiUsed hidden_api_used = 178 [(allow_from_any_uid) = true];
        StyleUIChanged style_ui_changed = 179;
        PrivacyIndicatorsInteracted privacy_indicators_interacted = 180;
    }

    // Pulled events will start at field 10000.
@@ -3395,6 +3396,32 @@ message HiddenApiUsed {
    optional bool access_denied = 4;
}

/**
 * Logs user interaction with the Privacy Indicators added in Q. In particular:
 * - When user sees privacy chip
 * - When user clicks privacy chip
 * - How does the user exit the Privacy Dialog
 * Logged from:
 *   packages/SystemUI/src/com/android/systemui/privacy/OngoingPrivacyDialog.kt
 *   packages/SystemUI/src/com/android/systemui/qs/QuickStatusBarHeader.java
 */
message PrivacyIndicatorsInteracted {

    enum Type {
        UNKNOWN = 0;
        CHIP_VIEWED = 1;
        CHIP_CLICKED = 2;
        DIALOG_PRIVACY_SETTINGS = 3;
        DIALOG_DISMISS = 4;
        DIALOG_LINE_ITEM = 5;
    }

    optional Type type = 1 [(state_field_option).option = EXCLUSIVE];

    // Used if the type is LINE_ITEM
    optional string package_name = 2;
}

//////////////////////////////////////////////////////////////////////
// Pulled atoms below this line //
//////////////////////////////////////////////////////////////////////
+13 −1
Original line number Diff line number Diff line
@@ -24,6 +24,7 @@ import android.content.res.ColorStateList
import android.os.UserHandle
import android.provider.Settings
import android.util.IconDrawableFactory
import android.util.StatsLog
import android.view.Gravity
import android.view.LayoutInflater
import android.view.View
@@ -55,7 +56,13 @@ class OngoingPrivacyDialog constructor(

    fun createDialog(): Dialog {
        val builder = AlertDialog.Builder(context).apply {
            setPositiveButton(R.string.ongoing_privacy_dialog_ok, null)
            setPositiveButton(R.string.ongoing_privacy_dialog_ok,
                    object : DialogInterface.OnClickListener {
                override fun onClick(dialog: DialogInterface?, which: Int) {
                    StatsLog.write(StatsLog.PRIVACY_INDICATORS_INTERACTED,
                            StatsLog.PRIVACY_INDICATORS_INTERACTED__TYPE__DIALOG_DISMISS)
                }
            })
            setNeutralButton(R.string.ongoing_privacy_dialog_open_settings,
                    object : DialogInterface.OnClickListener {
                        val intent = Intent(Settings.ACTION_PRIVACY_SETTINGS).putExtra(
@@ -63,6 +70,8 @@ class OngoingPrivacyDialog constructor(

                        @Suppress("DEPRECATION")
                        override fun onClick(dialog: DialogInterface?, which: Int) {
                            StatsLog.write(StatsLog.PRIVACY_INDICATORS_INTERACTED, StatsLog
                                    .PRIVACY_INDICATORS_INTERACTED__TYPE__DIALOG_PRIVACY_SETTINGS)
                            Dependency.get(ActivityStarter::class.java)
                                    .postStartActivityDismissingKeyguard(intent, 0)
                        }
@@ -136,6 +145,9 @@ class OngoingPrivacyDialog constructor(
                        .putExtra(Intent.EXTRA_PACKAGE_NAME, app.packageName)
                        .putExtra(Intent.EXTRA_USER, UserHandle.getUserHandleForUid(app.uid))
                override fun onClick(v: View?) {
                    StatsLog.write(StatsLog.PRIVACY_INDICATORS_INTERACTED,
                            StatsLog.PRIVACY_INDICATORS_INTERACTED__TYPE__DIALOG_LINE_ITEM,
                            app.packageName)
                    Dependency.get(ActivityStarter::class.java)
                            .postStartActivityDismissingKeyguard(intent, 0)
                    dismissDialog?.invoke()
+13 −0
Original line number Diff line number Diff line
@@ -41,6 +41,7 @@ import android.text.format.DateUtils;
import android.util.AttributeSet;
import android.util.Log;
import android.util.Pair;
import android.util.StatsLog;
import android.view.DisplayCutout;
import android.view.View;
import android.view.WindowInsets;
@@ -156,6 +157,7 @@ public class QuickStatusBarHeader extends RelativeLayout implements
        }
    };
    private boolean mHasTopCutout = false;
    private boolean mPrivacyChipLogged = false;

    /**
     * Runnable for automatically fading out the long press tooltip (as if it were animating away).
@@ -210,6 +212,7 @@ public class QuickStatusBarHeader extends RelativeLayout implements
        mPrivacyChip.setOnClickListener(this);
        mCarrierGroup = findViewById(R.id.carrier_group);


        updateResources();

        Rect tintArea = new Rect(0, 0, 0, 0);
@@ -265,6 +268,13 @@ public class QuickStatusBarHeader extends RelativeLayout implements
    private void setChipVisibility(boolean chipVisible) {
        if (chipVisible) {
            mPrivacyChip.setVisibility(View.VISIBLE);
            // Makes sure that the chip is logged as viewed at most once each time QS is opened
            // mListening makes sure that the callback didn't return after the user closed QS
            if (!mPrivacyChipLogged && mListening) {
                mPrivacyChipLogged = true;
                StatsLog.write(StatsLog.PRIVACY_INDICATORS_INTERACTED,
                        StatsLog.PRIVACY_INDICATORS_INTERACTED__TYPE__CHIP_VIEWED);
            }
        } else {
            mPrivacyChip.setVisibility(View.GONE);
        }
@@ -534,6 +544,7 @@ public class QuickStatusBarHeader extends RelativeLayout implements
            mAlarmController.removeCallback(this);
            mPrivacyItemController.removeCallback(mPICCallback);
            mContext.unregisterReceiver(mRingerReceiver);
            mPrivacyChipLogged = false;
        }
    }

@@ -547,6 +558,8 @@ public class QuickStatusBarHeader extends RelativeLayout implements
            PrivacyDialogBuilder builder = mPrivacyChip.getBuilder();
            if (builder.getAppsAndTypes().size() == 0) return;
            Handler mUiHandler = new Handler(Looper.getMainLooper());
            StatsLog.write(StatsLog.PRIVACY_INDICATORS_INTERACTED,
                    StatsLog.PRIVACY_INDICATORS_INTERACTED__TYPE__CHIP_CLICKED);
            mUiHandler.post(() -> {
                Dialog mDialog = new OngoingPrivacyDialog(mContext, builder).createDialog();
                SystemUIDialog.setShowForAllUsers(mDialog, false);