Merge "Position fingerprint progress in the center on landscape" into nyc-mr1-dev
diff --git a/res/layout/dashboard.xml b/res/layout/dashboard.xml
index f1bf259..73a7255 100644
--- a/res/layout/dashboard.xml
+++ b/res/layout/dashboard.xml
@@ -25,4 +25,5 @@
     android:paddingStart="@dimen/dashboard_padding_start"
     android:paddingEnd="@dimen/dashboard_padding_end"
     android:paddingTop="@dimen/dashboard_padding_top"
-    android:paddingBottom="@dimen/dashboard_padding_bottom"/>
+    android:paddingBottom="@dimen/dashboard_padding_bottom"
+    android:scrollbars="vertical"/>
diff --git a/res/layout/support_offline_escalation_options.xml b/res/layout/support_offline_escalation_options.xml
index 08c52aa..18d8f98 100644
--- a/res/layout/support_offline_escalation_options.xml
+++ b/res/layout/support_offline_escalation_options.xml
@@ -59,7 +59,8 @@
         style="@style/SupportPrimaryButton"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
-        android:layout_margin="8dp"/>
+        android:layout_margin="8dp"
+        android:layoutDirection="ltr"/>
     <Button
         android:id="@android:id/text2"
         style="@style/SupportSecondaryButton"
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 9b8614a..cc3ee44 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -833,11 +833,6 @@
     <!-- Text shown in fingerprint enroll when we didn't observe progress for a few seconds. [CHAR LIMIT=100] -->
     <string name="security_settings_fingerprint_enroll_lift_touch_again">Lift finger, then touch sensor again</string>
 
-    <!-- Message shown in fingerprint enrollment during setup wizard once enrollment is complete. [CHAR LIMIT=NONE] -->
-    <string name="setup_fingerprint_enroll_finish_message">Whenever you see this icon, you can use your fingerprint.</string>
-    <!-- Secondary message shown in fingerprint enrollment during setup wizard once enrollment is complete, telling the user how to change the settings after they are done with setup. [CHAR LIMIT=NONE] -->
-    <string name="setup_fingerprint_enroll_finish_secondary_message">To change your settings, go to Settings &gt; Security &gt; Fingerprint.</string>
-
     <!-- Text shown when "Add fingerprint" button is disabled -->
     <string name="fingerprint_add_max">You can add up to <xliff:g id="count" example="5">%d</xliff:g> fingerprints</string>
 
diff --git a/res/values/themes.xml b/res/values/themes.xml
index e861113..0009bed 100644
--- a/res/values/themes.xml
+++ b/res/values/themes.xml
@@ -99,6 +99,7 @@
         <item name="@dropdownPreferenceStyle">@style/Preference.DropDown.Material</item>
         <item name="@android:preferenceFragmentStyle">@style/PreferenceFragmentStyle</item>
         <item name="apnPreferenceStyle">@style/ApnPreference</item>
+        <item name="android:scrollbars">vertical</item>
     </style>
 
     <style name="PreferenceTheme.SetupWizard" parent="SetupWizardTheme">
diff --git a/src/com/android/settings/dashboard/DashboardSummary.java b/src/com/android/settings/dashboard/DashboardSummary.java
index 1c7e22d..12f036a 100644
--- a/src/com/android/settings/dashboard/DashboardSummary.java
+++ b/src/com/android/settings/dashboard/DashboardSummary.java
@@ -42,6 +42,7 @@
 import com.android.settingslib.drawer.SettingsDrawerActivity;
 import com.android.settingslib.drawer.Tile;
 
+import java.util.ArrayList;
 import java.util.List;
 
 public class DashboardSummary extends InstrumentedFragment
@@ -63,6 +64,8 @@
     private static final String SUGGESTIONS = "suggestions";
 
     private static final String EXTRA_SCROLL_POSITION = "scroll_position";
+    private static final String EXTRA_SUGGESTION_SHOWN_LOGGED = "suggestions_shown_logged";
+    private static final String EXTRA_SUGGESTION_HIDDEN_LOGGED = "suggestions_hidden_logged";
 
     private FocusRecyclerView mDashboard;
     private DashboardAdapter mAdapter;
@@ -71,6 +74,8 @@
     private SuggestionParser mSuggestionParser;
     private LinearLayoutManager mLayoutManager;
     private SuggestionsChecks mSuggestionsChecks;
+    private ArrayList<String> mSuggestionsShownLogged;
+    private ArrayList<String> mSuggestionsHiddenLogged;
 
     @Override
     protected int getMetricsCategory() {
@@ -90,6 +95,15 @@
         mSuggestionParser = new SuggestionParser(context,
                 context.getSharedPreferences(SUGGESTIONS, 0), R.xml.suggestion_ordering);
         mSuggestionsChecks = new SuggestionsChecks(getContext());
+        if (savedInstanceState == null) {
+            mSuggestionsShownLogged = new ArrayList<>();
+            mSuggestionsHiddenLogged = new ArrayList<>();
+        } else {
+            mSuggestionsShownLogged =
+                    savedInstanceState.getStringArrayList(EXTRA_SUGGESTION_SHOWN_LOGGED);
+            mSuggestionsHiddenLogged =
+                    savedInstanceState.getStringArrayList(EXTRA_SUGGESTION_HIDDEN_LOGGED);
+        }
         if (DEBUG_TIMING) Log.d(TAG, "onCreate took " + (System.currentTimeMillis() - startTime)
                 + " ms");
     }
@@ -112,12 +126,6 @@
                 MetricsLogger.visible(getContext(), c.getMetricsConstant());
             }
         }
-        if (mAdapter.getSuggestions() != null) {
-            for (Tile suggestion : mAdapter.getSuggestions()) {
-                MetricsLogger.action(getContext(), MetricsEvent.ACTION_SHOW_SETTINGS_SUGGESTION,
-                        DashboardAdapter.getSuggestionIdentifier(getContext(), suggestion));
-            }
-        }
         if (DEBUG_TIMING) Log.d(TAG, "onStart took " + (System.currentTimeMillis() - startTime)
                 + " ms");
     }
@@ -136,9 +144,15 @@
         if (mAdapter.getSuggestions() == null) {
             return;
         }
-        for (Tile suggestion : mAdapter.getSuggestions()) {
-            MetricsLogger.action(getContext(), MetricsEvent.ACTION_HIDE_SETTINGS_SUGGESTION,
-                    DashboardAdapter.getSuggestionIdentifier(getContext(), suggestion));
+        if (!getActivity().isChangingConfigurations()) {
+            for (Tile suggestion : mAdapter.getSuggestions()) {
+                String id = DashboardAdapter.getSuggestionIdentifier(getContext(), suggestion);
+                if (!mSuggestionsHiddenLogged.contains(id)) {
+                    mSuggestionsHiddenLogged.add(id);
+                    MetricsLogger.action(getContext(),
+                            MetricsEvent.ACTION_HIDE_SETTINGS_SUGGESTION, id);
+                }
+            }
         }
     }
 
@@ -169,6 +183,8 @@
         if (mAdapter != null) {
             mAdapter.onSaveInstanceState(outState);
         }
+        outState.putStringArrayList(EXTRA_SUGGESTION_HIDDEN_LOGGED, mSuggestionsHiddenLogged);
+        outState.putStringArrayList(EXTRA_SUGGESTION_SHOWN_LOGGED, mSuggestionsShownLogged);
     }
 
     @Override
@@ -222,9 +238,17 @@
         protected List<Tile> doInBackground(Void... params) {
             List<Tile> suggestions = mSuggestionParser.getSuggestions();
             for (int i = 0; i < suggestions.size(); i++) {
-                if (mSuggestionsChecks.isSuggestionComplete(suggestions.get(i))) {
-                    mAdapter.disableSuggestion(suggestions.get(i));
+                Tile suggestion = suggestions.get(i);
+                if (mSuggestionsChecks.isSuggestionComplete(suggestion)) {
+                    mAdapter.disableSuggestion(suggestion);
                     suggestions.remove(i--);
+                } else {
+                    String id = DashboardAdapter.getSuggestionIdentifier(getContext(), suggestion);
+                    if (!mSuggestionsShownLogged.contains(id)) {
+                        mSuggestionsShownLogged.add(id);
+                        MetricsLogger.action(getContext(),
+                                MetricsEvent.ACTION_SHOW_SETTINGS_SUGGESTION, id);
+                    }
                 }
             }
             return suggestions;