summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Chris Göllner <chrisgollner@google.com> 2024-03-22 16:57:26 +0000
committer Chris Göllner <chrisgollner@google.com> 2024-04-02 10:48:39 +0100
commitaff051cde630665e11c75f6fca8bccfa8c11a721 (patch)
treeea388c0c90eb49be1e7419dfa586cca9c2527bac
parent059ac2d1fae0ea78941e899c06071eeca0501afa (diff)
PSS: permission dialog - add default option as constructor parameter
This is mainly for helping with testing. Bug: 301066607 Test: Screenshot tests in same topic Flag: NONE Change-Id: Ib3e52f9ac9f97b9263fef5c8cf74b67990f77c4e
-rw-r--r--packages/SystemUI/src/com/android/systemui/mediaprojection/permission/BaseMediaProjectionPermissionDialogDelegate.kt8
-rw-r--r--packages/SystemUI/src/com/android/systemui/screenrecord/ScreenRecordPermissionDialogDelegate.kt52
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/SystemUIDialog.java16
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/screenrecord/ScreenRecordPermissionDialogDelegateTest.kt1
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()
}