Distinct OSS lib models by their names (#3266)

* Mark ossLibraries non-null

* Distinct oss lib models

* Cleanup
This commit is contained in:
Goooler
2023-01-20 10:16:31 +08:00
committed by GitHub
parent 6803d8b2a0
commit 08cfd742a0
3 changed files with 8 additions and 5 deletions
@@ -20,7 +20,7 @@ import app.lawnchair.ossnotices.OssLibrary
import kotlinx.coroutines.flow.StateFlow
sealed interface PreferenceInteractor {
val ossLibraries: StateFlow<List<OssLibrary>?>
val ossLibraries: StateFlow<List<OssLibrary>>
val iconPacks: StateFlow<List<IconPackInfo>>
val themedIconPacks: StateFlow<List<IconPackInfo>>
}
@@ -22,6 +22,7 @@ import androidx.core.content.ContextCompat
import androidx.lifecycle.AndroidViewModel
import androidx.lifecycle.viewModelScope
import app.lawnchair.icons.CustomAdaptiveIconDrawable
import app.lawnchair.ossnotices.OssLibrary
import app.lawnchair.ossnotices.getOssLibraries
import com.android.launcher3.R
import kotlinx.coroutines.Dispatchers
@@ -31,6 +32,7 @@ import kotlinx.coroutines.flow.flowOn
import kotlinx.coroutines.flow.stateIn
import app.lawnchair.util.getPackageVersionCode
import app.lawnchair.util.Constants.LAWNICONS_PACKAGE_NAME
import kotlinx.coroutines.flow.StateFlow
private val iconPackIntents = listOf(
Intent("com.novalauncher.THEME"),
@@ -106,10 +108,11 @@ class PreferenceViewModel(private val app: Application) : AndroidViewModel(app),
.flowOn(Dispatchers.Default)
.stateIn(viewModelScope, SharingStarted.Lazily, listOf())
override val ossLibraries = flow {
val ossLibraries = app.getOssLibraries(thirdPartyLicenseMetadataId = R.raw.third_party_license_metadata)
override val ossLibraries: StateFlow<List<OssLibrary>> = flow {
val ossLibraries = app.getOssLibraries(R.raw.third_party_license_metadata)
.distinctBy { it.name }
emit(ossLibraries)
}
.flowOn(Dispatchers.Default)
.stateIn(viewModelScope, SharingStarted.Lazily, null)
.stateIn(viewModelScope, SharingStarted.Lazily, emptyList())
}
@@ -96,7 +96,7 @@ fun OssLibraryItem(ossLibrary: OssLibrary, index: Int) {
@Composable
fun NoticePage(index: Int) {
val ossLibraries by LocalPreferenceInteractor.current.ossLibraries.collectAsState()
val ossLibrary = ossLibraries?.get(index)
val ossLibrary = ossLibraries.getOrNull(index)
val dataState = ossLibrary?.let { loadNotice(ossLibrary = it) }
val data = dataState?.value