Fix source incompatibility issues in multiple permission classes
Add fixes to fix the source incompatibility issue
Bug: 272780399
Change-Id: Iaf7825a65d65ad6bc97b1f89e9fe3372e017b5f9
Merged-In: Iaf7825a65d65ad6bc97b1f89e9fe3372e017b5f9
Test: Build
(cherry picked from commit 2d4954494e3056d42aa76c551b8f8f6de241a76c)
diff --git a/PermissionController/src/com/android/permissioncontroller/permission/data/PermGroupsPackagesLiveData.kt b/PermissionController/src/com/android/permissioncontroller/permission/data/PermGroupsPackagesLiveData.kt
index c44c2b4..e4fa75b 100644
--- a/PermissionController/src/com/android/permissioncontroller/permission/data/PermGroupsPackagesLiveData.kt
+++ b/PermissionController/src/com/android/permissioncontroller/permission/data/PermGroupsPackagesLiveData.kt
@@ -43,7 +43,7 @@
init {
addSource(groupNamesLiveData) {
- groupNames = it ?: emptyList()
+ groupNames = it
val getLiveData = { groupName: String -> PermGroupLiveData[groupName] }
setSourcesToDifference(groupNames, permGroupLiveDatas, getLiveData) {
diff --git a/PermissionController/src/com/android/permissioncontroller/permission/data/PermGroupsPackagesUiInfoLiveData.kt b/PermissionController/src/com/android/permissioncontroller/permission/data/PermGroupsPackagesUiInfoLiveData.kt
index 5d91ebf..3796784 100644
--- a/PermissionController/src/com/android/permissioncontroller/permission/data/PermGroupsPackagesUiInfoLiveData.kt
+++ b/PermissionController/src/com/android/permissioncontroller/permission/data/PermGroupsPackagesUiInfoLiveData.kt
@@ -65,7 +65,7 @@
init {
addSource(groupNamesLiveData) {
- groupNames = it ?: emptyList()
+ groupNames = it
update()
getPermGroupPackageLiveDatas()
}
diff --git a/PermissionController/src/com/android/permissioncontroller/permission/data/SmartUpdateMediatorLiveData.kt b/PermissionController/src/com/android/permissioncontroller/permission/data/SmartUpdateMediatorLiveData.kt
index d7fe4fb..7c3ebe0 100644
--- a/PermissionController/src/com/android/permissioncontroller/permission/data/SmartUpdateMediatorLiveData.kt
+++ b/PermissionController/src/com/android/permissioncontroller/permission/data/SmartUpdateMediatorLiveData.kt
@@ -45,14 +45,6 @@
}
/**
- * Boolean, whether or not the value of this uiDataLiveData has been explicitly set yet.
- * Differentiates between "null value because liveData is new" and "null value because
- * liveData is invalid"
- */
- var isInitialized = false
- private set
-
- /**
* Boolean, whether or not this liveData has a stale value or not. Every time the liveData goes
* inactive, its data becomes stale, until it goes active again, and is explicitly set.
*/
@@ -66,7 +58,6 @@
ensureMainThread()
if (!isInitialized) {
- isInitialized = true
// If we have received an invalid value, and this is the first time we are set,
// notify observers.
if (newValue == null) {
@@ -247,6 +238,6 @@
update()
}
},
- isInitialized = { isInitialized && (staleOk || !isStale) })
+ isValueInitialized = { isInitialized && (staleOk || !isStale) })
}
}
diff --git a/PermissionController/src/com/android/permissioncontroller/permission/service/PermissionControllerServiceModel.kt b/PermissionController/src/com/android/permissioncontroller/permission/service/PermissionControllerServiceModel.kt
index 49a4658..b24b912 100644
--- a/PermissionController/src/com/android/permissioncontroller/permission/service/PermissionControllerServiceModel.kt
+++ b/PermissionController/src/com/android/permissioncontroller/permission/service/PermissionControllerServiceModel.kt
@@ -25,7 +25,7 @@
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.LiveData
import androidx.lifecycle.Observer
-import androidx.lifecycle.Transformations
+import androidx.lifecycle.map
import com.android.permissioncontroller.DumpableLog
import com.android.permissioncontroller.PermissionControllerProto.PermissionControllerDumpProto
import com.android.permissioncontroller.permission.utils.PermissionMapping
@@ -88,13 +88,13 @@
var updated = false
val observer = object : Observer<T> {
- override fun onChanged(data: T) {
+ override fun onChanged(value: T) {
if (updated) {
return
}
if ((liveData is SmartUpdateMediatorLiveData<T> && !liveData.isStale) ||
liveData !is SmartUpdateMediatorLiveData<T>) {
- onChangedFun(data)
+ onChangedFun(value)
liveData.removeObserver(this)
updated = true
}
@@ -288,9 +288,7 @@
fun onCountUnusedApps(
callback: IntConsumer
) {
- val unusedAppsCount = Transformations.map(getUnusedPackages()) {
- it?.size ?: 0
- }
+ val unusedAppsCount = getUnusedPackages().map { it?.size ?: 0 }
observeAndCheckForLifecycleState(unusedAppsCount) { count -> callback.accept(count ?: 0) }
}
diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/model/ManageStandardPermissionsViewModel.kt b/PermissionController/src/com/android/permissioncontroller/permission/ui/model/ManageStandardPermissionsViewModel.kt
index e529f1c..e3ddab9 100644
--- a/PermissionController/src/com/android/permissioncontroller/permission/ui/model/ManageStandardPermissionsViewModel.kt
+++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/model/ManageStandardPermissionsViewModel.kt
@@ -23,7 +23,7 @@
import android.os.Bundle
import androidx.fragment.app.Fragment
import androidx.lifecycle.AndroidViewModel
-import androidx.lifecycle.Transformations
+import androidx.lifecycle.map
import androidx.navigation.fragment.findNavController
import com.android.permissioncontroller.R
import com.android.permissioncontroller.permission.data.PermGroupsPackagesLiveData
@@ -48,9 +48,7 @@
val uiDataLiveData = PermGroupsPackagesUiInfoLiveData(app,
StandardPermGroupNamesLiveData)
val numCustomPermGroups = NumCustomPermGroupsWithPackagesLiveData()
- val numAutoRevoked = Transformations.map(unusedAutoRevokePackagesLiveData) {
- it?.size ?: 0
- }
+ val numAutoRevoked = unusedAutoRevokePackagesLiveData.map { it?.size ?: 0 }
/**
* Navigate to the Custom Permissions screen
diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/model/PermissionAppsViewModel.kt b/PermissionController/src/com/android/permissioncontroller/permission/ui/model/PermissionAppsViewModel.kt
index 1b17041..114b8e0 100644
--- a/PermissionController/src/com/android/permissioncontroller/permission/ui/model/PermissionAppsViewModel.kt
+++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/model/PermissionAppsViewModel.kt
@@ -464,13 +464,16 @@
owner: SavedStateRegistryOwner,
defaultArgs: Bundle
) : AbstractSavedStateViewModelFactory(owner, defaultArgs) {
-
- override fun <T : ViewModel> create(p0: String, p1: Class<T>, state: SavedStateHandle): T {
- state.set(SHOULD_SHOW_SYSTEM_KEY, state.get<Boolean>(SHOULD_SHOW_SYSTEM_KEY) ?: false)
- state.set(HAS_SYSTEM_APPS_KEY, state.get<Boolean>(HAS_SYSTEM_APPS_KEY) ?: true)
- state.set(SHOW_ALWAYS_ALLOWED, state.get<Boolean>(SHOW_ALWAYS_ALLOWED) ?: false)
- state.set(CREATION_LOGGED_KEY, state.get<Boolean>(CREATION_LOGGED_KEY) ?: false)
+ override fun <T : ViewModel> create(
+ key: String,
+ modelClass: Class<T>,
+ handle: SavedStateHandle
+ ): T {
+ handle.set(SHOULD_SHOW_SYSTEM_KEY, handle.get<Boolean>(SHOULD_SHOW_SYSTEM_KEY) ?: false)
+ handle.set(HAS_SYSTEM_APPS_KEY, handle.get<Boolean>(HAS_SYSTEM_APPS_KEY) ?: true)
+ handle.set(SHOW_ALWAYS_ALLOWED, handle.get<Boolean>(SHOW_ALWAYS_ALLOWED) ?: false)
+ handle.set(CREATION_LOGGED_KEY, handle.get<Boolean>(CREATION_LOGGED_KEY) ?: false)
@Suppress("UNCHECKED_CAST")
- return PermissionAppsViewModel(state, app, groupName) as T
+ return PermissionAppsViewModel(handle, app, groupName) as T
}
}
diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/model/v31/ReviewOngoingUsageViewModel.kt b/PermissionController/src/com/android/permissioncontroller/permission/ui/model/v31/ReviewOngoingUsageViewModel.kt
index 9c9a555..d6efd38 100644
--- a/PermissionController/src/com/android/permissioncontroller/permission/ui/model/v31/ReviewOngoingUsageViewModel.kt
+++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/model/v31/ReviewOngoingUsageViewModel.kt
@@ -551,10 +551,14 @@
owner: SavedStateRegistryOwner,
defaultArgs: Bundle
) : AbstractSavedStateViewModelFactory(owner, defaultArgs) {
- override fun <T : ViewModel> create(p0: String, p1: Class<T>, state: SavedStateHandle): T {
- state.set(FIRST_OPENED_KEY, state.get<Long>(FIRST_OPENED_KEY)
+ override fun <T : ViewModel> create(
+ key: String,
+ modelClass: Class<T>,
+ handle: SavedStateHandle
+ ): T {
+ handle.set(FIRST_OPENED_KEY, handle.get<Long>(FIRST_OPENED_KEY)
?: System.currentTimeMillis())
@Suppress("UNCHECKED_CAST")
- return ReviewOngoingUsageViewModel(state, extraDurationMillis) as T
+ return ReviewOngoingUsageViewModel(handle, extraDurationMillis) as T
}
}
diff --git a/PermissionController/src/com/android/permissioncontroller/permission/utils/KotlinUtils.kt b/PermissionController/src/com/android/permissioncontroller/permission/utils/KotlinUtils.kt
index f9345ef..7db6e86 100644
--- a/PermissionController/src/com/android/permissioncontroller/permission/utils/KotlinUtils.kt
+++ b/PermissionController/src/com/android/permissioncontroller/permission/utils/KotlinUtils.kt
@@ -1543,15 +1543,16 @@
*/
suspend fun <T, LD : LiveData<T>> LD.getInitializedValue(
observe: LD.(Observer<T>) -> Unit = { observeForever(it) },
- isInitialized: LD.() -> Boolean = { value != null }
+ isValueInitialized: LD.() -> Boolean = { value != null }
): T {
- return if (isInitialized()) {
- value!!
+ return if (isValueInitialized()) {
+ @Suppress("UNCHECKED_CAST")
+ value as T
} else {
suspendCoroutine { continuation: Continuation<T> ->
val observer = AtomicReference<Observer<T>>()
observer.set(Observer { newValue ->
- if (isInitialized()) {
+ if (isValueInitialized()) {
GlobalScope.launch(Dispatchers.Main) {
observer.getAndSet(null)?.let { observerSnapshot ->
removeObserver(observerSnapshot)
diff --git a/PermissionController/src/com/android/permissioncontroller/role/ui/RoleListSortFunction.java b/PermissionController/src/com/android/permissioncontroller/role/ui/RoleListSortFunction.java
index b3e3423..ca059aa 100644
--- a/PermissionController/src/com/android/permissioncontroller/role/ui/RoleListSortFunction.java
+++ b/PermissionController/src/com/android/permissioncontroller/role/ui/RoleListSortFunction.java
@@ -20,17 +20,18 @@
import android.icu.text.Collator;
import androidx.annotation.NonNull;
-import androidx.arch.core.util.Function;
+
+import kotlin.jvm.functions.Function1;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
/**
- * A function for {@link androidx.lifecycle.Transformations#map(androidx.lifecycle.LiveData,
- * Function)} that sorts a live data for role list.
+ * A function for {@link androidx.lifecycle#map(androidx.lifecycle.LiveData, Function1)}
+ * that sorts a live data for role list.
*/
-public class RoleListSortFunction implements Function<List<RoleItem>, List<RoleItem>> {
+public class RoleListSortFunction implements Function1<List<RoleItem>, List<RoleItem>> {
@NonNull
private final Comparator<RoleItem> mComparator;
@@ -42,10 +43,9 @@
roleItem.getRole().getShortLabelResource()), collator);
}
- @NonNull
@Override
- public List<RoleItem> apply(@NonNull List<RoleItem> input) {
- List<RoleItem> sorted = new ArrayList<>(input);
+ public List<RoleItem> invoke(List<RoleItem> p1) {
+ List<RoleItem> sorted = new ArrayList<>(p1);
sorted.sort(mComparator);
return sorted;
}
diff --git a/PermissionController/src/com/android/permissioncontroller/role/ui/RoleSortFunction.java b/PermissionController/src/com/android/permissioncontroller/role/ui/RoleSortFunction.java
index 5e74d5e..10db9db 100644
--- a/PermissionController/src/com/android/permissioncontroller/role/ui/RoleSortFunction.java
+++ b/PermissionController/src/com/android/permissioncontroller/role/ui/RoleSortFunction.java
@@ -23,19 +23,20 @@
import android.util.Pair;
import androidx.annotation.NonNull;
-import androidx.arch.core.util.Function;
import com.android.permissioncontroller.permission.utils.Utils;
+import kotlin.jvm.functions.Function1;
+
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
/**
- * A function for {@link androidx.lifecycle.Transformations#map(androidx.lifecycle.LiveData,
- * Function)} that sorts a live data for role.
+ * A function for {@link androidx.lifecycle#map(androidx.lifecycle.LiveData, Function1)}
+ * that sorts a live data for role.
*/
-public class RoleSortFunction implements Function<List<Pair<ApplicationInfo, Boolean>>,
+public class RoleSortFunction implements Function1<List<Pair<ApplicationInfo, Boolean>>,
List<Pair<ApplicationInfo, Boolean>>> {
@NonNull
@@ -51,11 +52,9 @@
mComparator = labelComparator.thenComparing(userIdComparator);
}
- @NonNull
@Override
- public List<Pair<ApplicationInfo, Boolean>> apply(
- @NonNull List<Pair<ApplicationInfo, Boolean>> input) {
- List<Pair<ApplicationInfo, Boolean>> sorted = new ArrayList<>(input);
+ public List<Pair<ApplicationInfo, Boolean>> invoke(List<Pair<ApplicationInfo, Boolean>> p1) {
+ List<Pair<ApplicationInfo, Boolean>> sorted = new ArrayList<>(p1);
sorted.sort(mComparator);
return sorted;
}