diff options
4 files changed, 59 insertions, 18 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/mediaprojection/permission/BaseMediaProjectionPermissionDialogDelegate.kt b/packages/SystemUI/src/com/android/systemui/mediaprojection/permission/BaseMediaProjectionPermissionDialogDelegate.kt index dba0173afb1c..6224170fd906 100644 --- a/packages/SystemUI/src/com/android/systemui/mediaprojection/permission/BaseMediaProjectionPermissionDialogDelegate.kt +++ b/packages/SystemUI/src/com/android/systemui/mediaprojection/permission/BaseMediaProjectionPermissionDialogDelegate.kt @@ -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) { diff --git a/packages/SystemUI/src/com/android/systemui/screenrecord/ScreenRecordPermissionDialogDelegate.kt b/packages/SystemUI/src/com/android/systemui/screenrecord/ScreenRecordPermissionDialogDelegate.kt index ba775cd3cd82..1c76b00f7f05 100644 --- a/packages/SystemUI/src/com/android/systemui/screenrecord/ScreenRecordPermissionDialogDelegate.kt +++ b/packages/SystemUI/src/com/android/systemui/screenrecord/ScreenRecordPermissionDialogDelegate.kt @@ -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?) { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/SystemUIDialog.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/SystemUIDialog.java index 82d9fc7d0152..2a921dc38416 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/SystemUIDialog.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/SystemUIDialog.java @@ -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, diff --git a/packages/SystemUI/tests/src/com/android/systemui/screenrecord/ScreenRecordPermissionDialogDelegateTest.kt b/packages/SystemUI/tests/src/com/android/systemui/screenrecord/ScreenRecordPermissionDialogDelegateTest.kt index 598a0f2d88d0..943245150e64 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/screenrecord/ScreenRecordPermissionDialogDelegateTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/screenrecord/ScreenRecordPermissionDialogDelegateTest.kt @@ -93,6 +93,7 @@ class ScreenRecordPermissionDialogDelegateTest : SysuiTestCase() { onStartRecordingClicked, mediaProjectionMetricsLogger, systemUIDialogFactory, + context, ) dialog = delegate.createDialog() } |