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

Commit f04b0322 authored by Sam Cackett's avatar Sam Cackett Committed by Android (Google) Code Review
Browse files

Merge "[PartialScreenShare] Add tracking for media projection permission requested" into main

parents 38655084 3023cd1f
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -24,6 +24,7 @@ import com.android.internal.util.FrameworkStatsLog.MEDIA_PROJECTION_STATE_CHANGE
import com.android.internal.util.FrameworkStatsLog.MEDIA_PROJECTION_STATE_CHANGED__CREATION_SOURCE__CREATION_SOURCE_SYSTEM_UI_SCREEN_RECORDER as METRICS_CREATION_SOURCE_SYSTEM_UI_SCREEN_RECORDER
import com.android.internal.util.FrameworkStatsLog.MEDIA_PROJECTION_STATE_CHANGED__CREATION_SOURCE__CREATION_SOURCE_UNKNOWN as METRICS_CREATION_SOURCE_UNKNOWN
import com.android.internal.util.FrameworkStatsLog.MEDIA_PROJECTION_STATE_CHANGED__STATE__MEDIA_PROJECTION_STATE_INITIATED
import com.android.internal.util.FrameworkStatsLog.MEDIA_PROJECTION_STATE_CHANGED__STATE__MEDIA_PROJECTION_STATE_PERMISSION_REQUEST_DISPLAYED as METRICS_STATE_PERMISSION_REQUEST_DISPLAYED
import com.android.systemui.dagger.SysUISingleton
import javax.inject.Inject

@@ -47,6 +48,10 @@ constructor(private val service: IMediaProjectionManager) {
        )
    }

    fun notifyPermissionRequestDisplayed() {
        notifyToServer(METRICS_STATE_PERMISSION_REQUEST_DISPLAYED, SessionCreationSource.UNKNOWN)
    }

    /**
     * Request to log that the permission request moved to the given state.
     *
+4 −0
Original line number Diff line number Diff line
@@ -249,6 +249,10 @@ public class MediaProjectionPermissionActivity extends Activity

        setUpDialog(mDialog);
        mDialog.show();

        if (savedInstanceState == null) {
            mMediaProjectionMetricsLogger.notifyPermissionRequestDisplayed();
        }
    }

    @Override
+9 −2
Original line number Diff line number Diff line
@@ -30,12 +30,12 @@ import androidx.annotation.Nullable;

import com.android.internal.jank.InteractionJankMonitor;
import com.android.internal.logging.MetricsLogger;
import com.android.systemui.res.R;
import com.android.systemui.animation.DialogCuj;
import com.android.systemui.animation.DialogLaunchAnimator;
import com.android.systemui.dagger.qualifiers.Background;
import com.android.systemui.dagger.qualifiers.Main;
import com.android.systemui.flags.FeatureFlags;
import com.android.systemui.mediaprojection.MediaProjectionMetricsLogger;
import com.android.systemui.plugins.ActivityStarter;
import com.android.systemui.plugins.FalsingManager;
import com.android.systemui.plugins.qs.QSTile;
@@ -45,6 +45,7 @@ import com.android.systemui.qs.QsEventLogger;
import com.android.systemui.qs.logging.QSLogger;
import com.android.systemui.qs.pipeline.domain.interactor.PanelInteractor;
import com.android.systemui.qs.tileimpl.QSTileImpl;
import com.android.systemui.res.R;
import com.android.systemui.screenrecord.RecordingController;
import com.android.systemui.statusbar.phone.KeyguardDismissUtil;
import com.android.systemui.statusbar.policy.KeyguardStateController;
@@ -69,6 +70,7 @@ public class ScreenRecordTile extends QSTileImpl<QSTile.BooleanState>
    private final DialogLaunchAnimator mDialogLaunchAnimator;
    private final FeatureFlags mFlags;
    private final PanelInteractor mPanelInteractor;
    private final MediaProjectionMetricsLogger mMediaProjectionMetricsLogger;

    private long mMillisUntilFinished = 0;

@@ -88,7 +90,8 @@ public class ScreenRecordTile extends QSTileImpl<QSTile.BooleanState>
            KeyguardDismissUtil keyguardDismissUtil,
            KeyguardStateController keyguardStateController,
            DialogLaunchAnimator dialogLaunchAnimator,
            PanelInteractor panelInteractor
            PanelInteractor panelInteractor,
            MediaProjectionMetricsLogger mediaProjectionMetricsLogger
    ) {
        super(host, uiEventLogger, backgroundLooper, mainHandler, falsingManager, metricsLogger,
                statusBarStateController, activityStarter, qsLogger);
@@ -99,6 +102,7 @@ public class ScreenRecordTile extends QSTileImpl<QSTile.BooleanState>
        mKeyguardStateController = keyguardStateController;
        mDialogLaunchAnimator = dialogLaunchAnimator;
        mPanelInteractor = panelInteractor;
        mMediaProjectionMetricsLogger = mediaProjectionMetricsLogger;
    }

    @Override
@@ -190,6 +194,9 @@ public class ScreenRecordTile extends QSTileImpl<QSTile.BooleanState>
            } else {
                dialog.show();
            }

            mMediaProjectionMetricsLogger.notifyPermissionRequestDisplayed();

            return false;
        };

+33 −2
Original line number Diff line number Diff line
@@ -22,11 +22,13 @@ import static junit.framework.Assert.assertTrue;

import static org.junit.Assert.assertFalse;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyBoolean;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;

import android.app.Dialog;
import android.os.Handler;
import android.service.quicksettings.Tile;
import android.testing.AndroidTestingRunner;
@@ -35,11 +37,11 @@ import android.testing.TestableLooper;
import androidx.test.filters.SmallTest;

import com.android.internal.logging.MetricsLogger;
import com.android.systemui.res.R;
import com.android.systemui.SysuiTestCase;
import com.android.systemui.animation.DialogLaunchAnimator;
import com.android.systemui.classifier.FalsingManagerFake;
import com.android.systemui.flags.FeatureFlags;
import com.android.systemui.mediaprojection.MediaProjectionMetricsLogger;
import com.android.systemui.plugins.ActivityStarter;
import com.android.systemui.plugins.qs.QSTile;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
@@ -48,6 +50,7 @@ import com.android.systemui.qs.QsEventLogger;
import com.android.systemui.qs.logging.QSLogger;
import com.android.systemui.qs.pipeline.domain.interactor.PanelInteractor;
import com.android.systemui.qs.tileimpl.QSTileImpl;
import com.android.systemui.res.R;
import com.android.systemui.screenrecord.RecordingController;
import com.android.systemui.statusbar.phone.KeyguardDismissUtil;
import com.android.systemui.statusbar.policy.KeyguardStateController;
@@ -89,6 +92,10 @@ public class ScreenRecordTileTest extends SysuiTestCase {
    private PanelInteractor mPanelInteractor;
    @Mock
    private QsEventLogger mUiEventLogger;
    @Mock
    private MediaProjectionMetricsLogger mMediaProjectionMetricsLogger;
    @Mock
    private Dialog mPermissionDialogPrompt;

    private TestableLooper mTestableLooper;
    private ScreenRecordTile mTile;
@@ -116,7 +123,8 @@ public class ScreenRecordTileTest extends SysuiTestCase {
                mKeyguardDismissUtil,
                mKeyguardStateController,
                mDialogLaunchAnimator,
                mPanelInteractor
                mPanelInteractor,
                mMediaProjectionMetricsLogger
        );

        mTile.initialize();
@@ -280,4 +288,27 @@ public class ScreenRecordTileTest extends SysuiTestCase {
        assertEquals(state.icon, QSTileImpl.ResourceIcon.get(R.drawable.qs_screen_record_icon_off));
    }

    @Test
    public void showingDialogPrompt_logsMediaProjectionPermissionRequested() {
        when(mController.isStarting()).thenReturn(false);
        when(mController.isRecording()).thenReturn(false);
        when(mController.createScreenRecordDialog(any(), any(), any(), any(), any()))
                .thenReturn(mPermissionDialogPrompt);

        mTile.handleClick(null /* view */);
        mTestableLooper.processAllMessages();

        verify(mController).createScreenRecordDialog(any(), eq(mFeatureFlags),
                eq(mDialogLaunchAnimator), eq(mActivityStarter), any());
        var onDismissAction = ArgumentCaptor.forClass(ActivityStarter.OnDismissAction.class);
        verify(mKeyguardDismissUtil).executeWhenUnlocked(
                onDismissAction.capture(), anyBoolean(), anyBoolean());
        assertNotNull(onDismissAction.getValue());

        onDismissAction.getValue().onDismiss();

        verify(mPermissionDialogPrompt).show();
        verify(mMediaProjectionMetricsLogger).notifyPermissionRequestDisplayed();
    }

}