Loading aconfig/launcher.aconfig +7 −1 Original line number Diff line number Diff line Loading @@ -323,3 +323,9 @@ flag { description: "Menu in Taskbar with options to launch and manage multiple instances of the same app" bug: "355237285" } flag { name: "navigate_to_child_preference" namespace: "launcher" description: "Settings screen supports navigating to child preference if the key is not on the screen" bug: "293390881" } src/com/android/launcher3/settings/SettingsActivity.java +54 −0 Original line number Diff line number Diff line Loading @@ -44,11 +44,13 @@ import androidx.preference.Preference; import androidx.preference.PreferenceFragmentCompat; import androidx.preference.PreferenceFragmentCompat.OnPreferenceStartFragmentCallback; import androidx.preference.PreferenceFragmentCompat.OnPreferenceStartScreenCallback; import androidx.preference.PreferenceGroup; import androidx.preference.PreferenceGroup.PreferencePositionCallback; import androidx.preference.PreferenceScreen; import androidx.recyclerview.widget.RecyclerView; import com.android.launcher3.BuildConfig; import com.android.launcher3.Flags; import com.android.launcher3.LauncherFiles; import com.android.launcher3.R; import com.android.launcher3.states.RotationHelper; Loading Loading @@ -165,6 +167,7 @@ public class SettingsActivity extends FragmentActivity private boolean mRestartOnResume = false; private String mHighLightKey; private boolean mPreferenceHighlighted = false; @Override Loading Loading @@ -198,11 +201,62 @@ public class SettingsActivity extends FragmentActivity } } // If the target preference is not in the current preference screen, find the parent // preference screen that contains the target preference and set it as the preference // screen. if (Flags.navigateToChildPreference() && mHighLightKey != null && !isKeyInPreferenceGroup(mHighLightKey, screen)) { final PreferenceScreen parentPreferenceScreen = findParentPreference(screen, mHighLightKey); if (parentPreferenceScreen != null && getActivity() != null) { if (!TextUtils.isEmpty(parentPreferenceScreen.getTitle())) { getActivity().setTitle(parentPreferenceScreen.getTitle()); } setPreferenceScreen(parentPreferenceScreen); return; } } if (getActivity() != null && !TextUtils.isEmpty(getPreferenceScreen().getTitle())) { getActivity().setTitle(getPreferenceScreen().getTitle()); } } private boolean isKeyInPreferenceGroup(String targetKey, PreferenceGroup parent) { for (int i = 0; i < parent.getPreferenceCount(); i++) { Preference pref = parent.getPreference(i); if (pref.getKey() != null && pref.getKey().equals(targetKey)) { return true; } } return false; } /** * Finds the parent preference screen for the given target key. * * @param parent the parent preference screen * @param targetKey the key of the preference to find * @return the parent preference screen that contains the target preference */ @Nullable private PreferenceScreen findParentPreference(PreferenceScreen parent, String targetKey) { for (int i = 0; i < parent.getPreferenceCount(); i++) { Preference pref = parent.getPreference(i); if (pref instanceof PreferenceScreen) { PreferenceScreen foundKey = findParentPreference((PreferenceScreen) pref, targetKey); if (foundKey != null) { return foundKey; } } else if (pref.getKey() != null && pref.getKey().equals(targetKey)) { return parent; } } return null; } @Override public void onViewCreated(View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); Loading Loading
aconfig/launcher.aconfig +7 −1 Original line number Diff line number Diff line Loading @@ -323,3 +323,9 @@ flag { description: "Menu in Taskbar with options to launch and manage multiple instances of the same app" bug: "355237285" } flag { name: "navigate_to_child_preference" namespace: "launcher" description: "Settings screen supports navigating to child preference if the key is not on the screen" bug: "293390881" }
src/com/android/launcher3/settings/SettingsActivity.java +54 −0 Original line number Diff line number Diff line Loading @@ -44,11 +44,13 @@ import androidx.preference.Preference; import androidx.preference.PreferenceFragmentCompat; import androidx.preference.PreferenceFragmentCompat.OnPreferenceStartFragmentCallback; import androidx.preference.PreferenceFragmentCompat.OnPreferenceStartScreenCallback; import androidx.preference.PreferenceGroup; import androidx.preference.PreferenceGroup.PreferencePositionCallback; import androidx.preference.PreferenceScreen; import androidx.recyclerview.widget.RecyclerView; import com.android.launcher3.BuildConfig; import com.android.launcher3.Flags; import com.android.launcher3.LauncherFiles; import com.android.launcher3.R; import com.android.launcher3.states.RotationHelper; Loading Loading @@ -165,6 +167,7 @@ public class SettingsActivity extends FragmentActivity private boolean mRestartOnResume = false; private String mHighLightKey; private boolean mPreferenceHighlighted = false; @Override Loading Loading @@ -198,11 +201,62 @@ public class SettingsActivity extends FragmentActivity } } // If the target preference is not in the current preference screen, find the parent // preference screen that contains the target preference and set it as the preference // screen. if (Flags.navigateToChildPreference() && mHighLightKey != null && !isKeyInPreferenceGroup(mHighLightKey, screen)) { final PreferenceScreen parentPreferenceScreen = findParentPreference(screen, mHighLightKey); if (parentPreferenceScreen != null && getActivity() != null) { if (!TextUtils.isEmpty(parentPreferenceScreen.getTitle())) { getActivity().setTitle(parentPreferenceScreen.getTitle()); } setPreferenceScreen(parentPreferenceScreen); return; } } if (getActivity() != null && !TextUtils.isEmpty(getPreferenceScreen().getTitle())) { getActivity().setTitle(getPreferenceScreen().getTitle()); } } private boolean isKeyInPreferenceGroup(String targetKey, PreferenceGroup parent) { for (int i = 0; i < parent.getPreferenceCount(); i++) { Preference pref = parent.getPreference(i); if (pref.getKey() != null && pref.getKey().equals(targetKey)) { return true; } } return false; } /** * Finds the parent preference screen for the given target key. * * @param parent the parent preference screen * @param targetKey the key of the preference to find * @return the parent preference screen that contains the target preference */ @Nullable private PreferenceScreen findParentPreference(PreferenceScreen parent, String targetKey) { for (int i = 0; i < parent.getPreferenceCount(); i++) { Preference pref = parent.getPreference(i); if (pref instanceof PreferenceScreen) { PreferenceScreen foundKey = findParentPreference((PreferenceScreen) pref, targetKey); if (foundKey != null) { return foundKey; } } else if (pref.getKey() != null && pref.getKey().equals(targetKey)) { return parent; } } return null; } @Override public void onViewCreated(View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); Loading