Add support for saving and using the Preference's key value
- modify the SQlite data model
- update Index code for managing the key value
- pass the key when launching a Fragment or and Activity
- implement a small animation for highlighting the Preference
from a Search result
Change-Id: I617643a4e5e3b752ece8f45ce7d5429037e479da
diff --git a/src/com/android/settings/SettingsPreferenceFragment.java b/src/com/android/settings/SettingsPreferenceFragment.java
index 35893ff..d575153 100644
--- a/src/com/android/settings/SettingsPreferenceFragment.java
+++ b/src/com/android/settings/SettingsPreferenceFragment.java
@@ -26,12 +26,15 @@
import android.os.Bundle;
import android.preference.Preference;
import android.preference.PreferenceFragment;
+import android.preference.PreferenceGroup;
+import android.preference.PreferenceGroupAdapter;
import android.text.TextUtils;
import android.util.Log;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.widget.Button;
+import android.widget.ListAdapter;
/**
* Base class for Settings fragments, with some helper functions and dialog management.
@@ -41,6 +44,7 @@
private static final String TAG = "SettingsPreferenceFragment";
private static final int MENU_HELP = Menu.FIRST + 100;
+ private static final int HIGHLIGHT_DURATION_MILLIS = 750;
private SettingsDialogFragment mDialogFragment;
@@ -66,6 +70,47 @@
if (!TextUtils.isEmpty(mHelpUrl)) {
setHasOptionsMenu(true);
}
+
+ final Bundle args = getArguments();
+ if (args != null) {
+ final String key = args.getString(SettingsActivity.EXTRA_FRAGMENT_ARG_KEY);
+ final int position = findPositionFromKey(getPreferenceScreen(), key);
+ if (position >= 0) {
+ final ListAdapter adapter = getListView().getAdapter();
+ if (adapter instanceof PreferenceGroupAdapter) {
+ ((PreferenceGroupAdapter) adapter).setActivated(position);
+
+ getListView().postDelayed(new Runnable() {
+ @Override
+ public void run() {
+ ((PreferenceGroupAdapter) adapter).setActivated(-1);
+ ((PreferenceGroupAdapter) adapter).notifyDataSetChanged();
+ }
+ }, HIGHLIGHT_DURATION_MILLIS);
+ }
+ }
+ }
+ }
+
+ private int findPositionFromKey(PreferenceGroup group, String key) {
+ if (group != null) {
+ int count = group.getPreferenceCount();
+ for (int n = 0; n < count; n++) {
+ final Preference preference = group.getPreference(n);
+ final String preferenceKey = preference.getKey();
+ if (preferenceKey != null && preferenceKey.equals(key)) {
+ return n;
+ }
+ if (preference instanceof PreferenceGroup) {
+ PreferenceGroup nestedGroup = (PreferenceGroup) preference;
+ final int nestedPosition = findPositionFromKey(nestedGroup, key);
+ if (nestedPosition >= 0) {
+ return n + 1 + nestedPosition;
+ }
+ }
+ }
+ }
+ return -1;
}
protected void removePreference(String key) {