Loading packages/SystemUI/src/com/android/systemui/volume/dialog/VolumeDialog.kt +23 −2 Original line number Diff line number Diff line Loading @@ -20,18 +20,39 @@ import android.app.Dialog import android.content.Context import android.os.Bundle import android.view.ContextThemeWrapper import android.view.MotionEvent import com.android.systemui.dagger.qualifiers.Application import com.android.systemui.res.R import com.android.systemui.volume.Events import com.android.systemui.volume.dialog.domain.interactor.VolumeDialogVisibilityInteractor import com.android.systemui.volume.dialog.ui.binder.VolumeDialogBinder import javax.inject.Inject class VolumeDialog @Inject constructor(@Application context: Context, private val dialogBinder: VolumeDialogBinder) : Dialog(ContextThemeWrapper(context, R.style.volume_dialog_theme)) { constructor( @Application context: Context, private val dialogBinder: VolumeDialogBinder, private val visibilityInteractor: VolumeDialogVisibilityInteractor, ) : Dialog(ContextThemeWrapper(context, R.style.volume_dialog_theme)) { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) dialogBinder.bind(this) } /** * NOTE: This will be called with ACTION_OUTSIDE MotionEvents for touches that occur outside of * the touchable region of the volume dialog (as returned by [.onComputeInternalInsets]) even if * those touches occurred within the bounds of the volume dialog. */ override fun onTouchEvent(event: MotionEvent): Boolean { if (isShowing) { if (event.action == MotionEvent.ACTION_OUTSIDE) { visibilityInteractor.dismissDialog(Events.DISMISS_REASON_TOUCH_OUTSIDE) return true } } return false } } packages/SystemUI/src/com/android/systemui/volume/dialog/VolumeDialogPlugin.kt +2 −18 Original line number Diff line number Diff line Loading @@ -18,12 +18,10 @@ package com.android.systemui.volume.dialog import com.android.systemui.dagger.qualifiers.Application import com.android.systemui.plugins.VolumeDialog import com.android.systemui.volume.dialog.dagger.VolumeDialogComponent import com.android.systemui.volume.dialog.dagger.VolumeDialogPluginComponent import javax.inject.Inject import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Job import kotlinx.coroutines.cancel import kotlinx.coroutines.coroutineScope import kotlinx.coroutines.launch Loading @@ -34,29 +32,15 @@ constructor( private val volumeDialogPluginComponentFactory: VolumeDialogPluginComponent.Factory, ) : VolumeDialog { private var volumeDialogPluginComponent: VolumeDialogPluginComponent? = null private var job: Job? = null override fun init(windowType: Int, callback: VolumeDialog.Callback?) { job = applicationCoroutineScope.launch { coroutineScope { volumeDialogPluginComponent = volumeDialogPluginComponentFactory.create(this) } } } val component = volumeDialogPluginComponentFactory.create(this) private fun showDialog() { val volumeDialogPluginComponent = volumeDialogPluginComponent ?: error("Creating dialog before init was called") volumeDialogPluginComponent.coroutineScope().launch { coroutineScope { val volumeDialogComponent: VolumeDialogComponent = volumeDialogPluginComponent.volumeDialogComponentFactory().create(this) with(volumeDialogComponent.volumeDialog()) { setOnDismissListener { volumeDialogComponent.coroutineScope().cancel() } show() } component.viewModel().activate() } } } Loading packages/SystemUI/src/com/android/systemui/volume/dialog/dagger/VolumeDialogPluginComponent.kt +2 −9 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ package com.android.systemui.volume.dialog.dagger import com.android.systemui.volume.dialog.dagger.module.VolumeDialogPluginModule import com.android.systemui.volume.dialog.dagger.scope.VolumeDialogPlugin import com.android.systemui.volume.dialog.dagger.scope.VolumeDialogPluginScope import com.android.systemui.volume.dialog.ui.viewmodel.VolumeDialogPluginViewModel import dagger.BindsInstance import dagger.Subcomponent import kotlinx.coroutines.CoroutineScope Loading @@ -31,15 +32,7 @@ import kotlinx.coroutines.CoroutineScope @Subcomponent(modules = [VolumeDialogPluginModule::class]) interface VolumeDialogPluginComponent { /** * Provides a coroutine scope to use inside [VolumeDialogPluginScope]. * [com.android.systemui.volume.dialog.VolumeDialogPlugin] manages the lifecycle of this scope. * It's cancelled when the dialog is disposed. This helps to free occupied resources when volume * dialog is not shown. */ @VolumeDialogPlugin fun coroutineScope(): CoroutineScope fun volumeDialogComponentFactory(): VolumeDialogComponent.Factory fun viewModel(): VolumeDialogPluginViewModel @Subcomponent.Factory interface Factory { Loading packages/SystemUI/src/com/android/systemui/volume/dialog/domain/interactor/VolumeDialogCallbacksInteractor.kt +4 −3 Original line number Diff line number Diff line Loading @@ -20,7 +20,8 @@ import android.annotation.SuppressLint import android.os.Handler import com.android.systemui.dagger.qualifiers.Background import com.android.systemui.plugins.VolumeDialogController import com.android.systemui.volume.dialog.dagger.scope.VolumeDialog import com.android.systemui.volume.dialog.dagger.scope.VolumeDialogPlugin import com.android.systemui.volume.dialog.dagger.scope.VolumeDialogPluginScope import com.android.systemui.volume.dialog.domain.model.VolumeDialogEventModel import com.android.systemui.volume.dialog.domain.model.VolumeDialogStateModel import javax.inject.Inject Loading @@ -40,12 +41,12 @@ private const val BUFFER_CAPACITY = 16 * * @see VolumeDialogController.Callbacks */ @VolumeDialog @VolumeDialogPluginScope class VolumeDialogCallbacksInteractor @Inject constructor( private val volumeDialogController: VolumeDialogController, @VolumeDialog private val coroutineScope: CoroutineScope, @VolumeDialogPlugin private val coroutineScope: CoroutineScope, @Background private val bgHandler: Handler, ) { Loading packages/SystemUI/src/com/android/systemui/volume/dialog/domain/interactor/VolumeDialogStateInteractor.kt +4 −3 Original line number Diff line number Diff line Loading @@ -17,7 +17,8 @@ package com.android.systemui.volume.dialog.domain.interactor import com.android.systemui.plugins.VolumeDialogController import com.android.systemui.volume.dialog.dagger.scope.VolumeDialog import com.android.systemui.volume.dialog.dagger.scope.VolumeDialogPlugin import com.android.systemui.volume.dialog.dagger.scope.VolumeDialogPluginScope import com.android.systemui.volume.dialog.domain.model.VolumeDialogEventModel import com.android.systemui.volume.dialog.domain.model.VolumeDialogStateModel import javax.inject.Inject Loading @@ -35,13 +36,13 @@ import kotlinx.coroutines.flow.stateIn * * @see [VolumeDialogController] */ @VolumeDialog @VolumeDialogPluginScope class VolumeDialogStateInteractor @Inject constructor( volumeDialogCallbacksInteractor: VolumeDialogCallbacksInteractor, private val volumeDialogController: VolumeDialogController, @VolumeDialog private val coroutineScope: CoroutineScope, @VolumeDialogPlugin private val coroutineScope: CoroutineScope, ) { val volumeDialogState: Flow<VolumeDialogStateModel> = Loading Loading
packages/SystemUI/src/com/android/systemui/volume/dialog/VolumeDialog.kt +23 −2 Original line number Diff line number Diff line Loading @@ -20,18 +20,39 @@ import android.app.Dialog import android.content.Context import android.os.Bundle import android.view.ContextThemeWrapper import android.view.MotionEvent import com.android.systemui.dagger.qualifiers.Application import com.android.systemui.res.R import com.android.systemui.volume.Events import com.android.systemui.volume.dialog.domain.interactor.VolumeDialogVisibilityInteractor import com.android.systemui.volume.dialog.ui.binder.VolumeDialogBinder import javax.inject.Inject class VolumeDialog @Inject constructor(@Application context: Context, private val dialogBinder: VolumeDialogBinder) : Dialog(ContextThemeWrapper(context, R.style.volume_dialog_theme)) { constructor( @Application context: Context, private val dialogBinder: VolumeDialogBinder, private val visibilityInteractor: VolumeDialogVisibilityInteractor, ) : Dialog(ContextThemeWrapper(context, R.style.volume_dialog_theme)) { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) dialogBinder.bind(this) } /** * NOTE: This will be called with ACTION_OUTSIDE MotionEvents for touches that occur outside of * the touchable region of the volume dialog (as returned by [.onComputeInternalInsets]) even if * those touches occurred within the bounds of the volume dialog. */ override fun onTouchEvent(event: MotionEvent): Boolean { if (isShowing) { if (event.action == MotionEvent.ACTION_OUTSIDE) { visibilityInteractor.dismissDialog(Events.DISMISS_REASON_TOUCH_OUTSIDE) return true } } return false } }
packages/SystemUI/src/com/android/systemui/volume/dialog/VolumeDialogPlugin.kt +2 −18 Original line number Diff line number Diff line Loading @@ -18,12 +18,10 @@ package com.android.systemui.volume.dialog import com.android.systemui.dagger.qualifiers.Application import com.android.systemui.plugins.VolumeDialog import com.android.systemui.volume.dialog.dagger.VolumeDialogComponent import com.android.systemui.volume.dialog.dagger.VolumeDialogPluginComponent import javax.inject.Inject import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Job import kotlinx.coroutines.cancel import kotlinx.coroutines.coroutineScope import kotlinx.coroutines.launch Loading @@ -34,29 +32,15 @@ constructor( private val volumeDialogPluginComponentFactory: VolumeDialogPluginComponent.Factory, ) : VolumeDialog { private var volumeDialogPluginComponent: VolumeDialogPluginComponent? = null private var job: Job? = null override fun init(windowType: Int, callback: VolumeDialog.Callback?) { job = applicationCoroutineScope.launch { coroutineScope { volumeDialogPluginComponent = volumeDialogPluginComponentFactory.create(this) } } } val component = volumeDialogPluginComponentFactory.create(this) private fun showDialog() { val volumeDialogPluginComponent = volumeDialogPluginComponent ?: error("Creating dialog before init was called") volumeDialogPluginComponent.coroutineScope().launch { coroutineScope { val volumeDialogComponent: VolumeDialogComponent = volumeDialogPluginComponent.volumeDialogComponentFactory().create(this) with(volumeDialogComponent.volumeDialog()) { setOnDismissListener { volumeDialogComponent.coroutineScope().cancel() } show() } component.viewModel().activate() } } } Loading
packages/SystemUI/src/com/android/systemui/volume/dialog/dagger/VolumeDialogPluginComponent.kt +2 −9 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ package com.android.systemui.volume.dialog.dagger import com.android.systemui.volume.dialog.dagger.module.VolumeDialogPluginModule import com.android.systemui.volume.dialog.dagger.scope.VolumeDialogPlugin import com.android.systemui.volume.dialog.dagger.scope.VolumeDialogPluginScope import com.android.systemui.volume.dialog.ui.viewmodel.VolumeDialogPluginViewModel import dagger.BindsInstance import dagger.Subcomponent import kotlinx.coroutines.CoroutineScope Loading @@ -31,15 +32,7 @@ import kotlinx.coroutines.CoroutineScope @Subcomponent(modules = [VolumeDialogPluginModule::class]) interface VolumeDialogPluginComponent { /** * Provides a coroutine scope to use inside [VolumeDialogPluginScope]. * [com.android.systemui.volume.dialog.VolumeDialogPlugin] manages the lifecycle of this scope. * It's cancelled when the dialog is disposed. This helps to free occupied resources when volume * dialog is not shown. */ @VolumeDialogPlugin fun coroutineScope(): CoroutineScope fun volumeDialogComponentFactory(): VolumeDialogComponent.Factory fun viewModel(): VolumeDialogPluginViewModel @Subcomponent.Factory interface Factory { Loading
packages/SystemUI/src/com/android/systemui/volume/dialog/domain/interactor/VolumeDialogCallbacksInteractor.kt +4 −3 Original line number Diff line number Diff line Loading @@ -20,7 +20,8 @@ import android.annotation.SuppressLint import android.os.Handler import com.android.systemui.dagger.qualifiers.Background import com.android.systemui.plugins.VolumeDialogController import com.android.systemui.volume.dialog.dagger.scope.VolumeDialog import com.android.systemui.volume.dialog.dagger.scope.VolumeDialogPlugin import com.android.systemui.volume.dialog.dagger.scope.VolumeDialogPluginScope import com.android.systemui.volume.dialog.domain.model.VolumeDialogEventModel import com.android.systemui.volume.dialog.domain.model.VolumeDialogStateModel import javax.inject.Inject Loading @@ -40,12 +41,12 @@ private const val BUFFER_CAPACITY = 16 * * @see VolumeDialogController.Callbacks */ @VolumeDialog @VolumeDialogPluginScope class VolumeDialogCallbacksInteractor @Inject constructor( private val volumeDialogController: VolumeDialogController, @VolumeDialog private val coroutineScope: CoroutineScope, @VolumeDialogPlugin private val coroutineScope: CoroutineScope, @Background private val bgHandler: Handler, ) { Loading
packages/SystemUI/src/com/android/systemui/volume/dialog/domain/interactor/VolumeDialogStateInteractor.kt +4 −3 Original line number Diff line number Diff line Loading @@ -17,7 +17,8 @@ package com.android.systemui.volume.dialog.domain.interactor import com.android.systemui.plugins.VolumeDialogController import com.android.systemui.volume.dialog.dagger.scope.VolumeDialog import com.android.systemui.volume.dialog.dagger.scope.VolumeDialogPlugin import com.android.systemui.volume.dialog.dagger.scope.VolumeDialogPluginScope import com.android.systemui.volume.dialog.domain.model.VolumeDialogEventModel import com.android.systemui.volume.dialog.domain.model.VolumeDialogStateModel import javax.inject.Inject Loading @@ -35,13 +36,13 @@ import kotlinx.coroutines.flow.stateIn * * @see [VolumeDialogController] */ @VolumeDialog @VolumeDialogPluginScope class VolumeDialogStateInteractor @Inject constructor( volumeDialogCallbacksInteractor: VolumeDialogCallbacksInteractor, private val volumeDialogController: VolumeDialogController, @VolumeDialog private val coroutineScope: CoroutineScope, @VolumeDialogPlugin private val coroutineScope: CoroutineScope, ) { val volumeDialogState: Flow<VolumeDialogStateModel> = Loading