Loading packages/SystemUI/src/com/android/systemui/mediaprojection/permission/BaseMediaProjectionPermissionDialogDelegate.kt +0 −57 Original line number Diff line number Diff line Loading @@ -16,15 +16,10 @@ package com.android.systemui.mediaprojection.permission import android.app.AlertDialog import android.content.Context import android.os.Bundle import android.view.Gravity import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.view.WindowManager import android.view.accessibility.AccessibilityNodeInfo import android.widget.ArrayAdapter import android.widget.ImageView import android.widget.Spinner import android.widget.TextView Loading Loading @@ -85,7 +80,6 @@ abstract class BaseMediaProjectionPermissionDialogDelegate<T : AlertDialog>( viewBinder = createViewBinder() } viewBinder.bind() initScreenShareSpinner() } private fun updateIcon() { Loading @@ -98,28 +92,6 @@ abstract class BaseMediaProjectionPermissionDialogDelegate<T : AlertDialog>( } } private fun initScreenShareSpinner() { val adapter = OptionsAdapter(dialog.context.applicationContext, screenShareOptions) screenShareModeSpinner = dialog.requireViewById(R.id.screen_share_mode_options) screenShareModeSpinner.adapter = adapter screenShareModeSpinner.onItemSelectedListener = viewBinder // disable redundant Touch & Hold accessibility action for Switch Access screenShareModeSpinner.accessibilityDelegate = object : View.AccessibilityDelegate() { override fun onInitializeAccessibilityNodeInfo( host: View, info: AccessibilityNodeInfo, ) { info.removeAction(AccessibilityNodeInfo.AccessibilityAction.ACTION_LONG_CLICK) super.onInitializeAccessibilityNodeInfo(host, info) } } screenShareModeSpinner.isLongClickable = false val defaultModePosition = screenShareOptions.indexOfFirst { it.mode == defaultSelectedMode } screenShareModeSpinner.setSelection(defaultModePosition, /* animate= */ false) } fun getSelectedScreenShareOption(): ScreenShareOption { return viewBinder.selectedScreenShareOption } Loading @@ -138,32 +110,3 @@ abstract class BaseMediaProjectionPermissionDialogDelegate<T : AlertDialog>( cancelButton.setOnClickListener(listener) } } private class OptionsAdapter(context: Context, private val options: List<ScreenShareOption>) : ArrayAdapter<String>( context, R.layout.screen_share_dialog_spinner_text, options.map { context.getString(it.spinnerText, it.displayName) }, ) { override fun isEnabled(position: Int): Boolean { return options[position].spinnerDisabledText == null } override fun getDropDownView(position: Int, convertView: View?, parent: ViewGroup): View { val inflater = LayoutInflater.from(parent.context) val view = inflater.inflate(R.layout.screen_share_dialog_spinner_item_text, parent, false) val titleTextView = view.requireViewById<TextView>(android.R.id.text1) val errorTextView = view.requireViewById<TextView>(android.R.id.text2) titleTextView.text = getItem(position) errorTextView.text = options[position].spinnerDisabledText if (isEnabled(position)) { errorTextView.visibility = View.GONE titleTextView.isEnabled = true } else { errorTextView.visibility = View.VISIBLE titleTextView.isEnabled = false } return view } } packages/SystemUI/src/com/android/systemui/mediaprojection/permission/BaseMediaProjectionPermissionViewBinder.kt +59 −0 Original line number Diff line number Diff line Loading @@ -17,9 +17,15 @@ package com.android.systemui.mediaprojection.permission import android.app.AlertDialog import android.content.Context import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.view.ViewStub import android.view.accessibility.AccessibilityNodeInfo import android.widget.AdapterView import android.widget.ArrayAdapter import android.widget.Spinner import android.widget.TextView import androidx.annotation.LayoutRes import com.android.systemui.mediaprojection.MediaProjectionMetricsLogger Loading @@ -35,6 +41,7 @@ open class BaseMediaProjectionPermissionViewBinder( ) : AdapterView.OnItemSelectedListener { private lateinit var warning: TextView private lateinit var startButton: TextView private lateinit var screenShareModeSpinner: Spinner var selectedScreenShareOption: ScreenShareOption = screenShareOptions.first { it.mode == defaultSelectedMode } private var shouldLogCancel: Boolean = true Loading @@ -57,6 +64,7 @@ open class BaseMediaProjectionPermissionViewBinder( private fun initScreenShareOptions() { selectedScreenShareOption = screenShareOptions.first { it.mode == defaultSelectedMode } setOptionSpecificFields() initScreenShareSpinner() } /** Sets fields on the dialog that change based on which option is selected. */ Loading @@ -65,6 +73,28 @@ open class BaseMediaProjectionPermissionViewBinder( startButton.text = startButtonText } private fun initScreenShareSpinner() { val adapter = OptionsAdapter(dialog.context.applicationContext, screenShareOptions) screenShareModeSpinner = dialog.requireViewById(R.id.screen_share_mode_options) screenShareModeSpinner.adapter = adapter screenShareModeSpinner.onItemSelectedListener = this // disable redundant Touch & Hold accessibility action for Switch Access screenShareModeSpinner.accessibilityDelegate = object : View.AccessibilityDelegate() { override fun onInitializeAccessibilityNodeInfo( host: View, info: AccessibilityNodeInfo, ) { info.removeAction(AccessibilityNodeInfo.AccessibilityAction.ACTION_LONG_CLICK) super.onInitializeAccessibilityNodeInfo(host, info) } } 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) { selectedScreenShareOption = screenShareOptions[pos] setOptionSpecificFields() Loading Loading @@ -96,3 +126,32 @@ open class BaseMediaProjectionPermissionViewBinder( stub.inflate() } } private class OptionsAdapter(context: Context, private val options: List<ScreenShareOption>) : ArrayAdapter<String>( context, R.layout.screen_share_dialog_spinner_text, options.map { context.getString(it.spinnerText, it.displayName) }, ) { override fun isEnabled(position: Int): Boolean { return options[position].spinnerDisabledText == null } override fun getDropDownView(position: Int, convertView: View?, parent: ViewGroup): View { val inflater = LayoutInflater.from(parent.context) val view = inflater.inflate(R.layout.screen_share_dialog_spinner_item_text, parent, false) val titleTextView = view.requireViewById<TextView>(android.R.id.text1) val errorTextView = view.requireViewById<TextView>(android.R.id.text2) titleTextView.text = getItem(position) errorTextView.text = options[position].spinnerDisabledText if (isEnabled(position)) { errorTextView.visibility = View.GONE titleTextView.isEnabled = true } else { errorTextView.visibility = View.VISIBLE titleTextView.isEnabled = false } return view } } Loading
packages/SystemUI/src/com/android/systemui/mediaprojection/permission/BaseMediaProjectionPermissionDialogDelegate.kt +0 −57 Original line number Diff line number Diff line Loading @@ -16,15 +16,10 @@ package com.android.systemui.mediaprojection.permission import android.app.AlertDialog import android.content.Context import android.os.Bundle import android.view.Gravity import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.view.WindowManager import android.view.accessibility.AccessibilityNodeInfo import android.widget.ArrayAdapter import android.widget.ImageView import android.widget.Spinner import android.widget.TextView Loading Loading @@ -85,7 +80,6 @@ abstract class BaseMediaProjectionPermissionDialogDelegate<T : AlertDialog>( viewBinder = createViewBinder() } viewBinder.bind() initScreenShareSpinner() } private fun updateIcon() { Loading @@ -98,28 +92,6 @@ abstract class BaseMediaProjectionPermissionDialogDelegate<T : AlertDialog>( } } private fun initScreenShareSpinner() { val adapter = OptionsAdapter(dialog.context.applicationContext, screenShareOptions) screenShareModeSpinner = dialog.requireViewById(R.id.screen_share_mode_options) screenShareModeSpinner.adapter = adapter screenShareModeSpinner.onItemSelectedListener = viewBinder // disable redundant Touch & Hold accessibility action for Switch Access screenShareModeSpinner.accessibilityDelegate = object : View.AccessibilityDelegate() { override fun onInitializeAccessibilityNodeInfo( host: View, info: AccessibilityNodeInfo, ) { info.removeAction(AccessibilityNodeInfo.AccessibilityAction.ACTION_LONG_CLICK) super.onInitializeAccessibilityNodeInfo(host, info) } } screenShareModeSpinner.isLongClickable = false val defaultModePosition = screenShareOptions.indexOfFirst { it.mode == defaultSelectedMode } screenShareModeSpinner.setSelection(defaultModePosition, /* animate= */ false) } fun getSelectedScreenShareOption(): ScreenShareOption { return viewBinder.selectedScreenShareOption } Loading @@ -138,32 +110,3 @@ abstract class BaseMediaProjectionPermissionDialogDelegate<T : AlertDialog>( cancelButton.setOnClickListener(listener) } } private class OptionsAdapter(context: Context, private val options: List<ScreenShareOption>) : ArrayAdapter<String>( context, R.layout.screen_share_dialog_spinner_text, options.map { context.getString(it.spinnerText, it.displayName) }, ) { override fun isEnabled(position: Int): Boolean { return options[position].spinnerDisabledText == null } override fun getDropDownView(position: Int, convertView: View?, parent: ViewGroup): View { val inflater = LayoutInflater.from(parent.context) val view = inflater.inflate(R.layout.screen_share_dialog_spinner_item_text, parent, false) val titleTextView = view.requireViewById<TextView>(android.R.id.text1) val errorTextView = view.requireViewById<TextView>(android.R.id.text2) titleTextView.text = getItem(position) errorTextView.text = options[position].spinnerDisabledText if (isEnabled(position)) { errorTextView.visibility = View.GONE titleTextView.isEnabled = true } else { errorTextView.visibility = View.VISIBLE titleTextView.isEnabled = false } return view } }
packages/SystemUI/src/com/android/systemui/mediaprojection/permission/BaseMediaProjectionPermissionViewBinder.kt +59 −0 Original line number Diff line number Diff line Loading @@ -17,9 +17,15 @@ package com.android.systemui.mediaprojection.permission import android.app.AlertDialog import android.content.Context import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.view.ViewStub import android.view.accessibility.AccessibilityNodeInfo import android.widget.AdapterView import android.widget.ArrayAdapter import android.widget.Spinner import android.widget.TextView import androidx.annotation.LayoutRes import com.android.systemui.mediaprojection.MediaProjectionMetricsLogger Loading @@ -35,6 +41,7 @@ open class BaseMediaProjectionPermissionViewBinder( ) : AdapterView.OnItemSelectedListener { private lateinit var warning: TextView private lateinit var startButton: TextView private lateinit var screenShareModeSpinner: Spinner var selectedScreenShareOption: ScreenShareOption = screenShareOptions.first { it.mode == defaultSelectedMode } private var shouldLogCancel: Boolean = true Loading @@ -57,6 +64,7 @@ open class BaseMediaProjectionPermissionViewBinder( private fun initScreenShareOptions() { selectedScreenShareOption = screenShareOptions.first { it.mode == defaultSelectedMode } setOptionSpecificFields() initScreenShareSpinner() } /** Sets fields on the dialog that change based on which option is selected. */ Loading @@ -65,6 +73,28 @@ open class BaseMediaProjectionPermissionViewBinder( startButton.text = startButtonText } private fun initScreenShareSpinner() { val adapter = OptionsAdapter(dialog.context.applicationContext, screenShareOptions) screenShareModeSpinner = dialog.requireViewById(R.id.screen_share_mode_options) screenShareModeSpinner.adapter = adapter screenShareModeSpinner.onItemSelectedListener = this // disable redundant Touch & Hold accessibility action for Switch Access screenShareModeSpinner.accessibilityDelegate = object : View.AccessibilityDelegate() { override fun onInitializeAccessibilityNodeInfo( host: View, info: AccessibilityNodeInfo, ) { info.removeAction(AccessibilityNodeInfo.AccessibilityAction.ACTION_LONG_CLICK) super.onInitializeAccessibilityNodeInfo(host, info) } } 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) { selectedScreenShareOption = screenShareOptions[pos] setOptionSpecificFields() Loading Loading @@ -96,3 +126,32 @@ open class BaseMediaProjectionPermissionViewBinder( stub.inflate() } } private class OptionsAdapter(context: Context, private val options: List<ScreenShareOption>) : ArrayAdapter<String>( context, R.layout.screen_share_dialog_spinner_text, options.map { context.getString(it.spinnerText, it.displayName) }, ) { override fun isEnabled(position: Int): Boolean { return options[position].spinnerDisabledText == null } override fun getDropDownView(position: Int, convertView: View?, parent: ViewGroup): View { val inflater = LayoutInflater.from(parent.context) val view = inflater.inflate(R.layout.screen_share_dialog_spinner_item_text, parent, false) val titleTextView = view.requireViewById<TextView>(android.R.id.text1) val errorTextView = view.requireViewById<TextView>(android.R.id.text2) titleTextView.text = getItem(position) errorTextView.text = options[position].spinnerDisabledText if (isEnabled(position)) { errorTextView.visibility = View.GONE titleTextView.isEnabled = true } else { errorTextView.visibility = View.VISIBLE titleTextView.isEnabled = false } return view } }