From c38978f3e14490d1a87f40b03445b4b2f4db8a18 Mon Sep 17 00:00:00 2001 From: Jason Chiu Date: Tue, 29 Jun 2021 21:10:32 +0800 Subject: [PATCH] Guard against the exceptions when launching a non-existing fragment Test: robotest Bug: 190371550 Change-Id: I2bb7d4bdb23756634526db7e272563a1587c9640 --- src/com/android/settings/SettingsActivity.java | 6 ++++-- src/com/android/settings/Utils.java | 18 +++++++++++------- 2 files changed, 15 insertions(+), 9 deletions(-) diff --git a/src/com/android/settings/SettingsActivity.java b/src/com/android/settings/SettingsActivity.java index 12f63ea226f..f3cdd6c1640 100644 --- a/src/com/android/settings/SettingsActivity.java +++ b/src/com/android/settings/SettingsActivity.java @@ -574,7 +574,7 @@ public class SettingsActivity extends SettingsBaseActivity /** * Switch to a specific Fragment with taking care of validation, Title and BackStack */ - private Fragment switchToFragment(String fragmentName, Bundle args, boolean validate, + private void switchToFragment(String fragmentName, Bundle args, boolean validate, int titleResId, CharSequence title) { Log.d(LOG_TAG, "Switching to fragment " + fragmentName); if (validate && !isValidFragment(fragmentName)) { @@ -582,6 +582,9 @@ public class SettingsActivity extends SettingsBaseActivity + fragmentName); } Fragment f = Utils.getTargetFragment(this, fragmentName, args); + if (f == null) { + return; + } FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); transaction.replace(R.id.main_content, f); if (titleResId > 0) { @@ -592,7 +595,6 @@ public class SettingsActivity extends SettingsBaseActivity transaction.commitAllowingStateLoss(); getSupportFragmentManager().executePendingTransactions(); Log.d(LOG_TAG, "Executed frag manager pendingTransactions"); - return f; } private void updateTilesList() { diff --git a/src/com/android/settings/Utils.java b/src/com/android/settings/Utils.java index 708dbeddecd..e79852bf7ef 100644 --- a/src/com/android/settings/Utils.java +++ b/src/com/android/settings/Utils.java @@ -1158,13 +1158,17 @@ public final class Utils extends com.android.settingslib.Utils { == ProfileSelectFragment.ProfileType.PERSONAL : false; final boolean isWork = args != null ? args.getInt(ProfileSelectFragment.EXTRA_PROFILE) == ProfileSelectFragment.ProfileType.WORK : false; - if (activity.getSystemService(UserManager.class).getUserProfiles().size() > 1 - && ProfileFragmentBridge.FRAGMENT_MAP.get(fragmentName) != null - && !isWork && !isPersonal) { - f = Fragment.instantiate(activity, ProfileFragmentBridge.FRAGMENT_MAP.get(fragmentName), - args); - } else { - f = Fragment.instantiate(activity, fragmentName, args); + try { + if (activity.getSystemService(UserManager.class).getUserProfiles().size() > 1 + && ProfileFragmentBridge.FRAGMENT_MAP.get(fragmentName) != null + && !isWork && !isPersonal) { + f = Fragment.instantiate(activity, + ProfileFragmentBridge.FRAGMENT_MAP.get(fragmentName), args); + } else { + f = Fragment.instantiate(activity, fragmentName, args); + } + } catch (Exception e) { + Log.e(TAG, "Unable to get target fragment", e); } return f; }