Merge changes from topic "278577795" into udc-qpr-dev am: 4c79ccb1ae
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/23766505 Change-Id: If3543040169e49b920ed7d09c2fa2cd6b933cbec Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
@@ -26,7 +26,7 @@ import com.android.systemui.qs.pipeline.data.repository.TileSpecRepository
|
|||||||
import com.android.systemui.qs.pipeline.data.repository.TileSpecSettingsRepository
|
import com.android.systemui.qs.pipeline.data.repository.TileSpecSettingsRepository
|
||||||
import com.android.systemui.qs.pipeline.domain.interactor.CurrentTilesInteractor
|
import com.android.systemui.qs.pipeline.domain.interactor.CurrentTilesInteractor
|
||||||
import com.android.systemui.qs.pipeline.domain.interactor.CurrentTilesInteractorImpl
|
import com.android.systemui.qs.pipeline.domain.interactor.CurrentTilesInteractorImpl
|
||||||
import com.android.systemui.qs.pipeline.prototyping.PrototypeCoreStartable
|
import com.android.systemui.qs.pipeline.domain.startable.QSPipelineCoreStartable
|
||||||
import com.android.systemui.qs.pipeline.shared.logging.QSPipelineLogger
|
import com.android.systemui.qs.pipeline.shared.logging.QSPipelineLogger
|
||||||
import dagger.Binds
|
import dagger.Binds
|
||||||
import dagger.Module
|
import dagger.Module
|
||||||
@@ -53,8 +53,8 @@ abstract class QSPipelineModule {
|
|||||||
|
|
||||||
@Binds
|
@Binds
|
||||||
@IntoMap
|
@IntoMap
|
||||||
@ClassKey(PrototypeCoreStartable::class)
|
@ClassKey(QSPipelineCoreStartable::class)
|
||||||
abstract fun providePrototypeCoreStartable(startable: PrototypeCoreStartable): CoreStartable
|
abstract fun provideCoreStartable(startable: QSPipelineCoreStartable): CoreStartable
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -125,7 +125,6 @@ interface CurrentTilesInteractor : ProtoDumpable {
|
|||||||
class CurrentTilesInteractorImpl
|
class CurrentTilesInteractorImpl
|
||||||
@Inject
|
@Inject
|
||||||
constructor(
|
constructor(
|
||||||
autoAddInteractor: AutoAddInteractor,
|
|
||||||
private val tileSpecRepository: TileSpecRepository,
|
private val tileSpecRepository: TileSpecRepository,
|
||||||
private val installedTilesComponentRepository: InstalledTilesComponentRepository,
|
private val installedTilesComponentRepository: InstalledTilesComponentRepository,
|
||||||
private val userRepository: UserRepository,
|
private val userRepository: UserRepository,
|
||||||
@@ -173,10 +172,6 @@ constructor(
|
|||||||
if (featureFlags.isEnabled(Flags.QS_PIPELINE_NEW_HOST)) {
|
if (featureFlags.isEnabled(Flags.QS_PIPELINE_NEW_HOST)) {
|
||||||
startTileCollection()
|
startTileCollection()
|
||||||
}
|
}
|
||||||
|
|
||||||
if (featureFlags.isEnabled(Flags.QS_PIPELINE_AUTO_ADD)) {
|
|
||||||
autoAddInteractor.init(this)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@OptIn(ExperimentalCoroutinesApi::class)
|
@OptIn(ExperimentalCoroutinesApi::class)
|
||||||
|
|||||||
@@ -0,0 +1,44 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2023 The Android Open Source Project
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.android.systemui.qs.pipeline.domain.startable
|
||||||
|
|
||||||
|
import com.android.systemui.CoreStartable
|
||||||
|
import com.android.systemui.dagger.SysUISingleton
|
||||||
|
import com.android.systemui.flags.FeatureFlags
|
||||||
|
import com.android.systemui.flags.Flags
|
||||||
|
import com.android.systemui.qs.pipeline.domain.interactor.AutoAddInteractor
|
||||||
|
import com.android.systemui.qs.pipeline.domain.interactor.CurrentTilesInteractor
|
||||||
|
import javax.inject.Inject
|
||||||
|
|
||||||
|
@SysUISingleton
|
||||||
|
class QSPipelineCoreStartable
|
||||||
|
@Inject
|
||||||
|
constructor(
|
||||||
|
private val currentTilesInteractor: CurrentTilesInteractor,
|
||||||
|
private val autoAddInteractor: AutoAddInteractor,
|
||||||
|
private val featureFlags: FeatureFlags,
|
||||||
|
) : CoreStartable {
|
||||||
|
|
||||||
|
override fun start() {
|
||||||
|
if (
|
||||||
|
featureFlags.isEnabled(Flags.QS_PIPELINE_NEW_HOST) &&
|
||||||
|
featureFlags.isEnabled(Flags.QS_PIPELINE_AUTO_ADD)
|
||||||
|
) {
|
||||||
|
autoAddInteractor.init(currentTilesInteractor)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,120 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2023 The Android Open Source Project
|
|
||||||
*
|
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
* you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package com.android.systemui.qs.pipeline.prototyping
|
|
||||||
|
|
||||||
import android.util.Log
|
|
||||||
import com.android.systemui.CoreStartable
|
|
||||||
import com.android.systemui.dagger.SysUISingleton
|
|
||||||
import com.android.systemui.dagger.qualifiers.Application
|
|
||||||
import com.android.systemui.flags.FeatureFlags
|
|
||||||
import com.android.systemui.flags.Flags
|
|
||||||
import com.android.systemui.qs.pipeline.data.repository.AutoAddRepository
|
|
||||||
import com.android.systemui.qs.pipeline.data.repository.TileSpecRepository
|
|
||||||
import com.android.systemui.qs.pipeline.shared.TileSpec
|
|
||||||
import com.android.systemui.statusbar.commandline.Command
|
|
||||||
import com.android.systemui.statusbar.commandline.CommandRegistry
|
|
||||||
import com.android.systemui.user.data.repository.UserRepository
|
|
||||||
import java.io.PrintWriter
|
|
||||||
import javax.inject.Inject
|
|
||||||
import kotlinx.coroutines.CoroutineScope
|
|
||||||
import kotlinx.coroutines.ExperimentalCoroutinesApi
|
|
||||||
import kotlinx.coroutines.flow.flatMapLatest
|
|
||||||
import kotlinx.coroutines.launch
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Class for observing results while prototyping.
|
|
||||||
*
|
|
||||||
* The flows do their own logging, so we just need to make sure that they collect.
|
|
||||||
*
|
|
||||||
* This will be torn down together with the last of the new pipeline flags remaining here.
|
|
||||||
*/
|
|
||||||
// TODO(b/270385608)
|
|
||||||
@SysUISingleton
|
|
||||||
class PrototypeCoreStartable
|
|
||||||
@Inject
|
|
||||||
constructor(
|
|
||||||
private val tileSpecRepository: TileSpecRepository,
|
|
||||||
private val autoAddRepository: AutoAddRepository,
|
|
||||||
private val userRepository: UserRepository,
|
|
||||||
private val featureFlags: FeatureFlags,
|
|
||||||
@Application private val scope: CoroutineScope,
|
|
||||||
private val commandRegistry: CommandRegistry,
|
|
||||||
) : CoreStartable {
|
|
||||||
|
|
||||||
@OptIn(ExperimentalCoroutinesApi::class)
|
|
||||||
override fun start() {
|
|
||||||
if (featureFlags.isEnabled(Flags.QS_PIPELINE_NEW_HOST)) {
|
|
||||||
scope.launch {
|
|
||||||
userRepository.selectedUserInfo
|
|
||||||
.flatMapLatest { user -> tileSpecRepository.tilesSpecs(user.id) }
|
|
||||||
.collect {}
|
|
||||||
}
|
|
||||||
if (featureFlags.isEnabled(Flags.QS_PIPELINE_AUTO_ADD)) {
|
|
||||||
scope.launch {
|
|
||||||
userRepository.selectedUserInfo
|
|
||||||
.flatMapLatest { user -> autoAddRepository.autoAddedTiles(user.id) }
|
|
||||||
.collect { tiles -> Log.d(TAG, "Auto-added tiles: $tiles") }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
commandRegistry.registerCommand(COMMAND, ::CommandExecutor)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private inner class CommandExecutor : Command {
|
|
||||||
override fun execute(pw: PrintWriter, args: List<String>) {
|
|
||||||
if (args.size < 2) {
|
|
||||||
pw.println("Error: needs at least two arguments")
|
|
||||||
return
|
|
||||||
}
|
|
||||||
val spec = TileSpec.create(args[1])
|
|
||||||
if (spec == TileSpec.Invalid) {
|
|
||||||
pw.println("Error: Invalid tile spec ${args[1]}")
|
|
||||||
}
|
|
||||||
if (args[0] == "add") {
|
|
||||||
performAdd(args, spec)
|
|
||||||
pw.println("Requested tile added")
|
|
||||||
} else if (args[0] == "remove") {
|
|
||||||
performRemove(args, spec)
|
|
||||||
pw.println("Requested tile removed")
|
|
||||||
} else {
|
|
||||||
pw.println("Error: unknown command")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun performAdd(args: List<String>, spec: TileSpec) {
|
|
||||||
val position = args.getOrNull(2)?.toInt() ?: TileSpecRepository.POSITION_AT_END
|
|
||||||
val user = args.getOrNull(3)?.toInt() ?: userRepository.getSelectedUserInfo().id
|
|
||||||
scope.launch { tileSpecRepository.addTile(user, spec, position) }
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun performRemove(args: List<String>, spec: TileSpec) {
|
|
||||||
val user = args.getOrNull(2)?.toInt() ?: userRepository.getSelectedUserInfo().id
|
|
||||||
scope.launch { tileSpecRepository.removeTiles(user, listOf(spec)) }
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun help(pw: PrintWriter) {
|
|
||||||
pw.println("Usage: adb shell cmd statusbar $COMMAND:")
|
|
||||||
pw.println(" add <spec> [position] [user]")
|
|
||||||
pw.println(" remove <spec> [user]")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
companion object {
|
|
||||||
private const val COMMAND = "qs-pipeline"
|
|
||||||
private const val TAG = "PrototypeCoreStartable"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -83,8 +83,6 @@ class CurrentTilesInteractorImplTest : SysuiTestCase() {
|
|||||||
|
|
||||||
@Mock private lateinit var customTileStatePersister: CustomTileStatePersister
|
@Mock private lateinit var customTileStatePersister: CustomTileStatePersister
|
||||||
|
|
||||||
@Mock private lateinit var autoAddInteractor: AutoAddInteractor
|
|
||||||
|
|
||||||
@Mock private lateinit var userTracker: UserTracker
|
@Mock private lateinit var userTracker: UserTracker
|
||||||
|
|
||||||
@Mock private lateinit var logger: QSPipelineLogger
|
@Mock private lateinit var logger: QSPipelineLogger
|
||||||
@@ -110,7 +108,6 @@ class CurrentTilesInteractorImplTest : SysuiTestCase() {
|
|||||||
|
|
||||||
underTest =
|
underTest =
|
||||||
CurrentTilesInteractorImpl(
|
CurrentTilesInteractorImpl(
|
||||||
autoAddInteractor = autoAddInteractor,
|
|
||||||
tileSpecRepository = tileSpecRepository,
|
tileSpecRepository = tileSpecRepository,
|
||||||
installedTilesComponentRepository = installedTilesPackageRepository,
|
installedTilesComponentRepository = installedTilesPackageRepository,
|
||||||
userRepository = userRepository,
|
userRepository = userRepository,
|
||||||
@@ -651,11 +648,6 @@ class CurrentTilesInteractorImplTest : SysuiTestCase() {
|
|||||||
assertThat(tiles!![1].spec).isEqualTo(CUSTOM_TILE_SPEC)
|
assertThat(tiles!![1].spec).isEqualTo(CUSTOM_TILE_SPEC)
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
|
||||||
fun autoAddInteractor_initted() {
|
|
||||||
verify(autoAddInteractor).init(underTest)
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun QSTile.State.fillIn(state: Int, label: CharSequence, secondaryLabel: CharSequence) {
|
private fun QSTile.State.fillIn(state: Int, label: CharSequence, secondaryLabel: CharSequence) {
|
||||||
this.state = state
|
this.state = state
|
||||||
this.label = label
|
this.label = label
|
||||||
|
|||||||
Reference in New Issue
Block a user