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;
     }