Add fake app repository to simulate lots of installed apps
This commit is contained in:
parent
df1aa8c119
commit
8043d90cb5
@ -0,0 +1,68 @@
|
||||
package de.mm20.launcher2.applications
|
||||
|
||||
import android.content.ComponentName
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import android.content.pm.LauncherApps
|
||||
import android.os.Process
|
||||
import androidx.core.content.getSystemService
|
||||
import de.mm20.launcher2.ktx.getSerialNumber
|
||||
import de.mm20.launcher2.search.data.LauncherApp
|
||||
import kotlinx.collections.immutable.ImmutableList
|
||||
import kotlinx.collections.immutable.persistentListOf
|
||||
import kotlinx.collections.immutable.toImmutableList
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
import kotlinx.coroutines.flow.flowOf
|
||||
import kotlinx.coroutines.flow.map
|
||||
|
||||
/**
|
||||
* A fake implementation of [AppRepository] to simulate many installed apps.
|
||||
*/
|
||||
class FakeAppRepository(private val context: Context, private val fakePackages: Int) : AppRepository {
|
||||
|
||||
|
||||
private val fakeApp: LauncherApp
|
||||
|
||||
init {
|
||||
val launcherApps = context.getSystemService<LauncherApps>()!!
|
||||
fakeApp = LauncherApp(
|
||||
context,
|
||||
launcherApps.resolveActivity(
|
||||
Intent().apply {
|
||||
component = ComponentName(
|
||||
context.packageName,
|
||||
"de.mm20.launcher2.ui.launcher.LauncherActivity"
|
||||
)
|
||||
},
|
||||
Process.myUserHandle()
|
||||
),
|
||||
)
|
||||
}
|
||||
|
||||
private fun randomString(): String {
|
||||
val charset = "abcdefghijklmnopqrstuvwxyz"
|
||||
return (1..10)
|
||||
.map { charset.random() }
|
||||
.joinToString("")
|
||||
}
|
||||
|
||||
override fun getAllInstalledApps(): Flow<List<LauncherApp>> {
|
||||
return flowOf(buildList {
|
||||
repeat(fakePackages) {
|
||||
add(fakeApp.copy(`package` = randomString(), activity = randomString()))
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
override fun getSuspendedPackages(): Flow<List<String>> {
|
||||
return flowOf(emptyList())
|
||||
}
|
||||
|
||||
override fun search(query: String): Flow<ImmutableList<LauncherApp>> {
|
||||
return if (query.isEmpty()) {
|
||||
getAllInstalledApps().map { it.toImmutableList() }
|
||||
} else {
|
||||
flowOf(persistentListOf())
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user