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

Commit 32aa2cfe authored by Chris Göllner's avatar Chris Göllner Committed by Android (Google) Code Review
Browse files

Merge "PSS: permission dialog - add default option as constructor parameter" into main

parents 9d5eb4f0 aff051cd
Loading
Loading
Loading
Loading
+6 −2
Original line number Diff line number Diff line
@@ -47,6 +47,7 @@ abstract class BaseMediaProjectionPermissionDialogDelegate<T : AlertDialog>(
    private val mediaProjectionMetricsLogger: MediaProjectionMetricsLogger,
    @DrawableRes private val dialogIconDrawable: Int? = null,
    @ColorRes private val dialogIconTint: Int? = null,
    @ScreenShareMode val defaultSelectedMode: Int = screenShareOptions.first().mode,
) : DialogDelegate<T>, AdapterView.OnItemSelectedListener {
    private lateinit var dialogTitle: TextView
    private lateinit var startButton: TextView
@@ -55,7 +56,8 @@ abstract class BaseMediaProjectionPermissionDialogDelegate<T : AlertDialog>(
    private lateinit var screenShareModeSpinner: Spinner
    protected lateinit var dialog: AlertDialog
    private var shouldLogCancel: Boolean = true
    var selectedScreenShareOption: ScreenShareOption = screenShareOptions.first()
    var selectedScreenShareOption: ScreenShareOption =
        screenShareOptions.first { it.mode == defaultSelectedMode }

    @CallSuper
    override fun onStop(dialog: T) {
@@ -92,7 +94,7 @@ abstract class BaseMediaProjectionPermissionDialogDelegate<T : AlertDialog>(
    }

    private fun initScreenShareOptions() {
        selectedScreenShareOption = screenShareOptions.first()
        selectedScreenShareOption = screenShareOptions.first { it.mode == defaultSelectedMode }
        warning.text = warningText
        initScreenShareSpinner()
    }
@@ -118,6 +120,8 @@ abstract class BaseMediaProjectionPermissionDialogDelegate<T : AlertDialog>(
                }
            }
        screenShareModeSpinner.isLongClickable = false
        val defaultModePosition = screenShareOptions.indexOfFirst { it.mode == defaultSelectedMode }
        screenShareModeSpinner.setSelection(defaultModePosition, /* animate= */ false)
    }

    override fun onItemSelected(adapterView: AdapterView<*>?, view: View, pos: Int, id: Long) {
+42 −10
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@ package com.android.systemui.screenrecord
import android.annotation.SuppressLint
import android.app.Activity
import android.app.PendingIntent
import android.content.Context
import android.content.Intent
import android.os.Bundle
import android.os.Handler
@@ -35,12 +36,15 @@ import android.widget.ArrayAdapter
import android.widget.Spinner
import android.widget.Switch
import androidx.annotation.LayoutRes
import androidx.annotation.StyleRes
import com.android.systemui.dagger.qualifiers.Application
import com.android.systemui.mediaprojection.MediaProjectionCaptureTarget
import com.android.systemui.mediaprojection.MediaProjectionMetricsLogger
import com.android.systemui.mediaprojection.appselector.MediaProjectionAppSelectorActivity
import com.android.systemui.mediaprojection.permission.BaseMediaProjectionPermissionDialogDelegate
import com.android.systemui.mediaprojection.permission.ENTIRE_SCREEN
import com.android.systemui.mediaprojection.permission.SINGLE_APP
import com.android.systemui.mediaprojection.permission.ScreenShareMode
import com.android.systemui.mediaprojection.permission.ScreenShareOption
import com.android.systemui.plugins.ActivityStarter
import com.android.systemui.res.R
@@ -51,15 +55,18 @@ import dagger.assisted.AssistedFactory
import dagger.assisted.AssistedInject

/** Dialog to select screen recording options */
class ScreenRecordPermissionDialogDelegate @AssistedInject constructor(
    @Assisted private val hostUserHandle: UserHandle,
    @Assisted private val hostUid: Int,
    @Assisted private val controller: RecordingController,
class ScreenRecordPermissionDialogDelegate(
    private val hostUserHandle: UserHandle,
    private val hostUid: Int,
    private val controller: RecordingController,
    private val activityStarter: ActivityStarter,
    private val userContextProvider: UserContextProvider,
    @Assisted private val onStartRecordingClicked: Runnable?,
    private val onStartRecordingClicked: Runnable?,
    mediaProjectionMetricsLogger: MediaProjectionMetricsLogger,
    private val systemUIDialogFactory: SystemUIDialog.Factory,
    @ScreenShareMode defaultSelectedMode: Int,
    @StyleRes private val theme: Int,
    private val context: Context,
) :
    BaseMediaProjectionPermissionDialogDelegate<SystemUIDialog>(
        createOptionList(),
@@ -67,9 +74,34 @@ class ScreenRecordPermissionDialogDelegate @AssistedInject constructor(
        hostUid = hostUid,
        mediaProjectionMetricsLogger,
        R.drawable.ic_screenrecord,
        R.color.screenrecord_icon_color
    ), SystemUIDialog.Delegate {

        R.color.screenrecord_icon_color,
        defaultSelectedMode,
    ),
    SystemUIDialog.Delegate {
    @AssistedInject
    constructor(
        @Assisted hostUserHandle: UserHandle,
        @Assisted hostUid: Int,
        @Assisted controller: RecordingController,
        activityStarter: ActivityStarter,
        userContextProvider: UserContextProvider,
        @Assisted onStartRecordingClicked: Runnable?,
        mediaProjectionMetricsLogger: MediaProjectionMetricsLogger,
        systemUIDialogFactory: SystemUIDialog.Factory,
        @Application context: Context,
    ) : this(
        hostUserHandle,
        hostUid,
        controller,
        activityStarter,
        userContextProvider,
        onStartRecordingClicked,
        mediaProjectionMetricsLogger,
        systemUIDialogFactory,
        defaultSelectedMode = SINGLE_APP,
        theme = SystemUIDialog.DEFAULT_THEME,
        context,
    )

    @AssistedFactory
    interface Factory {
@@ -77,7 +109,7 @@ class ScreenRecordPermissionDialogDelegate @AssistedInject constructor(
            recordingController: RecordingController,
            hostUserHandle: UserHandle,
            hostUid: Int,
            onStartRecordingClicked: Runnable?
            onStartRecordingClicked: Runnable?,
        ): ScreenRecordPermissionDialogDelegate
    }

@@ -89,7 +121,7 @@ class ScreenRecordPermissionDialogDelegate @AssistedInject constructor(
    private lateinit var options: Spinner

    override fun createDialog(): SystemUIDialog {
        return systemUIDialogFactory.create(this)
        return systemUIDialogFactory.create(this, context, theme)
    }

    override fun onCreate(dialog: SystemUIDialog, savedInstanceState: Bundle?) {
+10 −6
Original line number Diff line number Diff line
@@ -42,6 +42,7 @@ import android.view.WindowManager;
import android.view.WindowManager.LayoutParams;

import androidx.annotation.Nullable;
import androidx.annotation.StyleRes;

import com.android.systemui.Dependency;
import com.android.systemui.animation.DialogTransitionAnimator;
@@ -71,7 +72,7 @@ import javax.inject.Inject;
 * and dismisses itself when it receives the broadcast.
 */
public class SystemUIDialog extends AlertDialog implements ViewRootImpl.ConfigChangedCallback {
    protected static final int DEFAULT_THEME = R.style.Theme_SystemUI_Dialog;
    public static final int DEFAULT_THEME = R.style.Theme_SystemUI_Dialog;
    // TODO(b/203389579): Remove this once the dialog width on large screens has been agreed on.
    private static final String FLAG_TABLET_DIALOG_WIDTH =
            "persist.systemui.flag_tablet_dialog_width";
@@ -141,7 +142,7 @@ public class SystemUIDialog extends AlertDialog implements ViewRootImpl.ConfigCh
         * When you just need a dialog, call this.
         */
        public SystemUIDialog create() {
            return create(new DialogDelegate<>(){}, mContext);
            return create(new DialogDelegate<>(){}, mContext, DEFAULT_THEME);
        }

        /** Creates a new instance of {@link SystemUIDialog} with no customized behavior.
@@ -149,7 +150,7 @@ public class SystemUIDialog extends AlertDialog implements ViewRootImpl.ConfigCh
         * When you just need a dialog created with a specific {@link Context}, call this.
         */
        public SystemUIDialog create(Context context) {
            return create(new DialogDelegate<>(){}, context);
            return create(new DialogDelegate<>(){}, context, DEFAULT_THEME);
        }

        /**
@@ -159,7 +160,10 @@ public class SystemUIDialog extends AlertDialog implements ViewRootImpl.ConfigCh
         * When you need to customize the dialog, pass it a delegate.
         */
        public SystemUIDialog create(Delegate delegate, Context context) {
            return create((DialogDelegate<SystemUIDialog>) delegate, context);
            return create(delegate, context, DEFAULT_THEME);
        }
        public SystemUIDialog create(Delegate delegate, Context context, @StyleRes int theme) {
            return create((DialogDelegate<SystemUIDialog>) delegate, context, theme);
        }

        public SystemUIDialog create(Delegate delegate) {
@@ -167,10 +171,10 @@ public class SystemUIDialog extends AlertDialog implements ViewRootImpl.ConfigCh
        }

        private SystemUIDialog create(DialogDelegate<SystemUIDialog> dialogDelegate,
                Context context) {
                Context context, @StyleRes int theme) {
            return new SystemUIDialog(
                    context,
                    DEFAULT_THEME,
                    theme,
                    DEFAULT_DISMISS_ON_DEVICE_LOCK,
                    mSystemUIDialogManager,
                    mSysUiState,
+1 −0
Original line number Diff line number Diff line
@@ -93,6 +93,7 @@ class ScreenRecordPermissionDialogDelegateTest : SysuiTestCase() {
                onStartRecordingClicked,
                mediaProjectionMetricsLogger,
                systemUIDialogFactory,
                context,
            )
        dialog = delegate.createDialog()
    }