Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ed729ab9 authored by Nate Myren's avatar Nate Myren
Browse files

Check destination before navigating

When navigating, check that the destination exists in the given
navigation controller

Fixes: 148966996
Test: No reproduction yet
Change-Id: I6fc5358f7ebd96b6812840d8879db1f32a26ea4b
parent 0d78f1dd
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@ package com.android.permissioncontroller.permission.ui.handheld;
import static com.android.permissioncontroller.Constants.EXTRA_SESSION_ID;
import static com.android.permissioncontroller.permission.ui.ManagePermissionsActivity.EXTRA_CALLER_NAME;
import static com.android.permissioncontroller.permission.ui.handheld.AppPermissionFragment.GRANT_CATEGORY;
import static com.android.permissioncontroller.permission.utils.KotlinUtilsKt.navigateSafe;

import android.content.Context;
import android.content.Intent;
@@ -203,7 +204,7 @@ public class PermissionControlPreference extends Preference {
                args.putString(EXTRA_CALLER_NAME, mCaller);
                args.putLong(EXTRA_SESSION_ID, mSessionId);
                args.putString(GRANT_CATEGORY, mGranted);
                Navigation.findNavController(holder.itemView).navigate(R.id.perm_groups_to_app,
                navigateSafe(Navigation.findNavController(holder.itemView), R.id.perm_groups_to_app,
                        args);
            } else {
                // TODO ntmyren, yianyliu: Remove once Auto has been adapted to new permission model
+3 −2
Original line number Diff line number Diff line
@@ -42,6 +42,7 @@ import com.android.permissioncontroller.permission.ui.Category
import com.android.permissioncontroller.permission.utils.IPC
import com.android.permissioncontroller.permission.utils.KotlinUtils
import com.android.permissioncontroller.permission.utils.Utils
import com.android.permissioncontroller.permission.utils.navigateSafe
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.launch

@@ -194,11 +195,11 @@ class AppPermissionGroupsViewModel(
    }

    fun showExtraPerms(fragment: Fragment, args: Bundle) {
        fragment.findNavController().navigate(R.id.perm_groups_to_extra, args)
        fragment.findNavController().navigateSafe(R.id.perm_groups_to_extra, args)
    }

    fun showAllPermissions(fragment: Fragment, args: Bundle) {
        fragment.findNavController().navigate(R.id.perm_groups_to_all_perms, args)
        fragment.findNavController().navigateSafe(R.id.perm_groups_to_all_perms, args)
    }
}

+3 −2
Original line number Diff line number Diff line
@@ -58,6 +58,7 @@ import com.android.permissioncontroller.permission.ui.model.AppPermissionViewMod
import com.android.permissioncontroller.permission.ui.model.AppPermissionViewModel.ButtonType.DENY
import com.android.permissioncontroller.permission.ui.model.AppPermissionViewModel.ButtonType.DENY_FOREGROUND
import com.android.permissioncontroller.permission.utils.Utils
import com.android.permissioncontroller.permission.utils.navigateSafe
import com.android.settingslib.RestrictedLockUtils
import java.util.Random
import kotlin.collections.component1
@@ -415,7 +416,7 @@ class AppPermissionViewModel(
            actionId = R.id.app_to_perm_apps
        }

        fragment.findNavController().navigate(actionId, args)
        fragment.findNavController().navigateSafe(actionId, args)
    }

    /**
@@ -600,7 +601,7 @@ class AppPermissionViewModel(
     * @param fragment The current fragment we wish to transition from
     */
    fun showAllPermissions(fragment: Fragment, args: Bundle) {
        fragment.findNavController().navigate(R.id.app_to_all_perms, args)
        fragment.findNavController().navigateSafe(R.id.app_to_all_perms, args)
    }

    private fun getIndividualPermissionDetailResId(group: LightAppPermGroup): Pair<Int, Int> {
+2 −1
Original line number Diff line number Diff line
@@ -33,6 +33,7 @@ import com.android.permissioncontroller.R
import com.android.permissioncontroller.permission.data.AllPackageInfosLiveData
import com.android.permissioncontroller.permission.data.SmartAsyncMediatorLiveData
import com.android.permissioncontroller.permission.data.UsageStatsLiveData
import com.android.permissioncontroller.permission.utils.navigateSafe
import kotlinx.coroutines.Job
import java.util.concurrent.TimeUnit.DAYS

@@ -161,7 +162,7 @@ class AutoRevokeViewModel(private val app: Application) : ViewModel() {
    }

    fun navigateToAppPermissions(fragment: Fragment, args: Bundle) {
        fragment.findNavController().navigate(R.id.auto_revoke_to_app_perms, args)
        fragment.findNavController().navigateSafe(R.id.auto_revoke_to_app_perms, args)
    }

    fun openApp(packageName: String, user: UserHandle) {
+2 −1
Original line number Diff line number Diff line
@@ -27,6 +27,7 @@ import com.android.permissioncontroller.R
import com.android.permissioncontroller.permission.data.PermGroupsPackagesLiveData
import com.android.permissioncontroller.permission.data.PermGroupsPackagesUiInfoLiveData
import com.android.permissioncontroller.permission.data.SmartUpdateMediatorLiveData
import com.android.permissioncontroller.permission.utils.navigateSafe

/**
 * A ViewModel for the ManageCustomPermissionsFragment. Provides a LiveData which watches over all
@@ -48,7 +49,7 @@ class ManageCustomPermissionsViewModel(
     * @param args The args to pass to the new fragment
     */
    fun showPermissionApps(fragment: Fragment, args: Bundle) {
        fragment.findNavController().navigate(R.id.manage_to_perm_apps, args)
        fragment.findNavController().navigateSafe(R.id.manage_to_perm_apps, args)
    }
}

Loading