Merge "Localization clarifications"
diff --git a/res/drawable/preference_highlight.xml b/res/drawable/preference_highlight.xml
index 20c1a0f..105ff18 100644
--- a/res/drawable/preference_highlight.xml
+++ b/res/drawable/preference_highlight.xml
@@ -19,4 +19,3 @@
     <item android:id="@android:id/mask"
           android:drawable="@android:color/white" />
 </ripple>
-
diff --git a/src/com/android/settings/SettingsActivity.java b/src/com/android/settings/SettingsActivity.java
index f98d2a6..94379b3 100644
--- a/src/com/android/settings/SettingsActivity.java
+++ b/src/com/android/settings/SettingsActivity.java
@@ -375,7 +375,7 @@
         if (pref.getFragment().equals(WallpaperTypeSettings.class.getName())) {
             title = getString(R.string.wallpaper_settings_fragment_title);
         }
-        startPreferencePanel(pref.getFragment(), pref.getExtras(), 0, title,
+        startPreferencePanel(pref.getFragment(), pref.getExtras(), -1, title,
                 null, 0);
         return true;
     }
diff --git a/src/com/android/settings/SettingsPreferenceFragment.java b/src/com/android/settings/SettingsPreferenceFragment.java
index 34c773a..f79def9 100644
--- a/src/com/android/settings/SettingsPreferenceFragment.java
+++ b/src/com/android/settings/SettingsPreferenceFragment.java
@@ -27,8 +27,11 @@
 import android.graphics.drawable.Drawable;
 import android.os.Bundle;
 import android.support.v7.preference.Preference;
+import android.support.v7.preference.PreferenceGroup;
 import android.support.v7.preference.PreferenceGroupAdapter;
 import android.support.v7.preference.PreferenceScreen;
+import android.support.v7.preference.PreferenceViewHolder;
+import android.support.v7.widget.LinearLayoutManager;
 import android.support.v7.widget.RecyclerView;
 import android.text.TextUtils;
 import android.util.Log;
@@ -38,7 +41,6 @@
 import android.view.View;
 import android.view.ViewGroup;
 import android.widget.Button;
-
 import com.android.settings.applications.LayoutPreference;
 import com.android.settings.widget.FloatingActionButton;
 
@@ -50,7 +52,7 @@
 public abstract class SettingsPreferenceFragment extends InstrumentedPreferenceFragment
         implements DialogCreatable {
 
-    private static final String TAG = "SettingsPreferenceFragment";
+    private static final String TAG = "SettingsPreference";
 
     private static final int DELAY_HIGHLIGHT_DURATION_MILLIS = 600;
 
@@ -65,7 +67,6 @@
 
     private String mPreferenceKey;
     private boolean mPreferenceHighlighted = false;
-    private Drawable mHighlightDrawable;
 
     private RecyclerView.Adapter mCurrentRootAdapter;
     private boolean mIsDataSetObserverRegistered = false;
@@ -85,6 +86,8 @@
 
     private LayoutPreference mFooter;
     private View mEmptyView;
+    private LinearLayoutManager mLayoutManager;
+    private HighlightablePreferenceGroupAdapter mAdapter;
 
     @Override
     public void onCreate(Bundle icicle) {
@@ -216,13 +219,6 @@
         updateEmptyView();
     }
 
-    private Drawable getHighlightDrawable() {
-        if (mHighlightDrawable == null) {
-            mHighlightDrawable = getActivity().getDrawable(R.drawable.preference_highlight);
-        }
-        return mHighlightDrawable;
-    }
-
     public LayoutPreference getHeaderView() {
         return mHeader;
     }
@@ -314,41 +310,30 @@
         return -1;
     }
 
-    private void highlightPreference(String key) {
-        final Drawable highlight = getHighlightDrawable();
+    @Override
+    public RecyclerView.LayoutManager onCreateLayoutManager() {
+        mLayoutManager = new LinearLayoutManager(getContext());
+        return mLayoutManager;
+    }
 
+    @Override
+    protected RecyclerView.Adapter onCreateAdapter(PreferenceScreen preferenceScreen) {
+        mAdapter = new HighlightablePreferenceGroupAdapter(preferenceScreen);
+        return mAdapter;
+    }
+
+    private void highlightPreference(String key) {
         final int position = canUseListViewForHighLighting(key);
         if (position >= 0) {
             mPreferenceHighlighted = true;
+            mLayoutManager.scrollToPosition(position);
 
-            // TODO: Need to find a way to scroll to and highlight search items now
-            // that we are using RecyclerView instead.
-//            final RecyclerView listView = getListView();
-//            final RecyclerView.Adapter adapter = listView.getAdapter();
-//
-////            ((PreferenceGroupAdapter) adapter).setHighlightedDrawable(highlight);
-////            ((PreferenceGroupAdapter) adapter).setHighlighted(position);
-//
-//            listView.post(new Runnable() {
-//                @Override
-//                public void run() {
-//                    listView.setSelection(position);
-//                    listView.postDelayed(new Runnable() {
-//                        @Override
-//                        public void run() {
-//                            final int index = position - listView.getFirstVisiblePosition();
-//                            if (index >= 0 && index < listView.getChildCount()) {
-//                                final View v = listView.getChildAt(index);
-//                                final int centerX = v.getWidth() / 2;
-//                                final int centerY = v.getHeight() / 2;
-//                                highlight.setHotspot(centerX, centerY);
-//                                v.setPressed(true);
-//                                v.setPressed(false);
-//                            }
-//                        }
-//                    }, DELAY_HIGHLIGHT_DURATION_MILLIS);
-//                }
-//            });
+            getView().postDelayed(new Runnable() {
+                @Override
+                public void run() {
+                    mAdapter.highlight(position);
+                }
+            }, DELAY_HIGHLIGHT_DURATION_MILLIS);
         }
     }
 
@@ -647,4 +632,34 @@
             return false;
         }
     }
+
+    public static class HighlightablePreferenceGroupAdapter extends PreferenceGroupAdapter {
+
+        private int mHighlightPosition = -1;
+
+        public HighlightablePreferenceGroupAdapter(PreferenceGroup preferenceGroup) {
+            super(preferenceGroup);
+        }
+
+        public void highlight(int position) {
+            mHighlightPosition = position;
+            notifyDataSetChanged();
+        }
+
+        @Override
+        public void onBindViewHolder(PreferenceViewHolder holder, int position) {
+            super.onBindViewHolder(holder, position);
+            if (position == mHighlightPosition) {
+                View v = holder.itemView;
+                if (v.getBackground() != null) {
+                    final int centerX = v.getWidth() / 2;
+                    final int centerY = v.getHeight() / 2;
+                    v.getBackground().setHotspot(centerX, centerY);
+                }
+                v.setPressed(true);
+                v.setPressed(false);
+                mHighlightPosition = -1;
+            }
+        }
+    }
 }
diff --git a/src/com/android/settings/dashboard/DashboardAdapter.java b/src/com/android/settings/dashboard/DashboardAdapter.java
index 3e0b9dd..a53d8b6 100644
--- a/src/com/android/settings/dashboard/DashboardAdapter.java
+++ b/src/com/android/settings/dashboard/DashboardAdapter.java
@@ -91,12 +91,7 @@
     }
 
     public void notifyChanged(DashboardTile tile) {
-        for (int i = 0; i < mItems.size(); i++) {
-            if (mItems.get(i) == tile) {
-                notifyItemChanged(i);
-                return;
-            }
-        }
+        notifyDataSetChanged();
     }
 
     public void setShowingAll(boolean showingAll) {
diff --git a/src/com/android/settings/dashboard/conditional/AirplaneModeCondition.java b/src/com/android/settings/dashboard/conditional/AirplaneModeCondition.java
index 688e197..5b9bb40 100644
--- a/src/com/android/settings/dashboard/conditional/AirplaneModeCondition.java
+++ b/src/com/android/settings/dashboard/conditional/AirplaneModeCondition.java
@@ -63,7 +63,7 @@
     @Override
     public void onPrimaryClick() {
         mManager.getContext().startActivity(new Intent(mManager.getContext(),
-                Settings.WirelessSettings.class));
+                Settings.WirelessSettingsActivity.class));
     }
 
     @Override
diff --git a/src/com/android/settings/notification/ZenModeAutomationSettings.java b/src/com/android/settings/notification/ZenModeAutomationSettings.java
index dbbd9a9..c2473ad 100644
--- a/src/com/android/settings/notification/ZenModeAutomationSettings.java
+++ b/src/com/android/settings/notification/ZenModeAutomationSettings.java
@@ -156,7 +156,10 @@
         root.removeAll();
         final AutomaticZenRule[] sortedRules = sortedRules();
         for (AutomaticZenRule sortedRule : sortedRules) {
-            root.addPreference(new ZenRulePreference(getPrefContext(), sortedRule));
+            ZenRulePreference pref = new ZenRulePreference(getPrefContext(), sortedRule);
+            if (pref.appExists) {
+                root.addPreference(pref);
+            }
         }
         final Preference p = new Preference(getPrefContext());
         p.setIcon(R.drawable.ic_add);
@@ -264,6 +267,7 @@
     private class ZenRulePreference extends Preference {
         final String mName;
         final String mId;
+        final boolean appExists;
 
         public ZenRulePreference(Context context, final AutomaticZenRule rule) {
             super(context);
@@ -283,8 +287,11 @@
                 setSummary(computeRuleSummary(rule, isSystemRule, info.loadLabel(mPm)));
             } catch (PackageManager.NameNotFoundException e) {
                 setIcon(R.drawable.ic_label);
+                appExists = false;
+                return;
             }
 
+            appExists = true;
             setTitle(rule.getName());
             setPersistent(false);