Loading packages/SystemUI/src/com/android/systemui/mediaprojection/permission/BaseMediaProjectionPermissionDialogDelegate.kt +6 −2 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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) { Loading Loading @@ -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() } Loading @@ -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) { Loading packages/SystemUI/src/com/android/systemui/screenrecord/ScreenRecordPermissionDialogDelegate.kt +42 −10 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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 Loading @@ -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(), Loading @@ -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 { Loading @@ -77,7 +109,7 @@ class ScreenRecordPermissionDialogDelegate @AssistedInject constructor( recordingController: RecordingController, hostUserHandle: UserHandle, hostUid: Int, onStartRecordingClicked: Runnable? onStartRecordingClicked: Runnable?, ): ScreenRecordPermissionDialogDelegate } Loading @@ -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?) { Loading packages/SystemUI/src/com/android/systemui/statusbar/phone/SystemUIDialog.java +10 −6 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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"; Loading Loading @@ -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. Loading @@ -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); } /** Loading @@ -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) { Loading @@ -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, Loading packages/SystemUI/tests/src/com/android/systemui/screenrecord/ScreenRecordPermissionDialogDelegateTest.kt +1 −0 Original line number Diff line number Diff line Loading @@ -93,6 +93,7 @@ class ScreenRecordPermissionDialogDelegateTest : SysuiTestCase() { onStartRecordingClicked, mediaProjectionMetricsLogger, systemUIDialogFactory, context, ) dialog = delegate.createDialog() } Loading Loading
packages/SystemUI/src/com/android/systemui/mediaprojection/permission/BaseMediaProjectionPermissionDialogDelegate.kt +6 −2 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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) { Loading Loading @@ -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() } Loading @@ -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) { Loading
packages/SystemUI/src/com/android/systemui/screenrecord/ScreenRecordPermissionDialogDelegate.kt +42 −10 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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 Loading @@ -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(), Loading @@ -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 { Loading @@ -77,7 +109,7 @@ class ScreenRecordPermissionDialogDelegate @AssistedInject constructor( recordingController: RecordingController, hostUserHandle: UserHandle, hostUid: Int, onStartRecordingClicked: Runnable? onStartRecordingClicked: Runnable?, ): ScreenRecordPermissionDialogDelegate } Loading @@ -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?) { Loading
packages/SystemUI/src/com/android/systemui/statusbar/phone/SystemUIDialog.java +10 −6 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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"; Loading Loading @@ -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. Loading @@ -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); } /** Loading @@ -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) { Loading @@ -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, Loading
packages/SystemUI/tests/src/com/android/systemui/screenrecord/ScreenRecordPermissionDialogDelegateTest.kt +1 −0 Original line number Diff line number Diff line Loading @@ -93,6 +93,7 @@ class ScreenRecordPermissionDialogDelegateTest : SysuiTestCase() { onStartRecordingClicked, mediaProjectionMetricsLogger, systemUIDialogFactory, context, ) dialog = delegate.createDialog() } Loading