Merge "Make number in dialog highlighted"
diff --git a/res/layout/condition_card.xml b/res/layout/condition_card.xml
index c911f03..c9d4829 100644
--- a/res/layout/condition_card.xml
+++ b/res/layout/condition_card.xml
@@ -25,7 +25,6 @@
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:orientation="vertical"
-        android:paddingStart="16dp"
         android:background="?android:attr/colorAccent"
         android:elevation="2dp"
         android:clickable="true"
@@ -35,6 +34,7 @@
             android:id="@+id/collapsed_group"
             android:layout_width="match_parent"
             android:layout_height="56dp"
+            android:background="?android:attr/selectableItemBackground"
             android:orientation="horizontal"
             android:gravity="center">
 
@@ -42,6 +42,7 @@
                 android:id="@android:id/icon"
                 android:layout_width="24dp"
                 android:layout_height="wrap_content"
+                android:layout_marginStart="16dp"
                 android:layout_marginEnd="32dp"
                 android:tint="?android:attr/textColorPrimaryInverse" />
 
@@ -58,10 +59,7 @@
                 android:layout_width="wrap_content"
                 android:layout_height="match_parent"
                 android:padding="16dp"
-                android:tint="?android:attr/textColorPrimaryInverse"
-                android:clickable="true"
-                android:focusable="true"
-                android:background="?android:attr/selectableItemBackground" />
+                android:tint="?android:attr/textColorPrimaryInverse"/>
 
         </LinearLayout>
 
@@ -69,7 +67,7 @@
             android:id="@+id/detail_group"
             android:layout_width="match_parent"
             android:layout_height="0dp"
-            android:paddingStart="56dp"
+            android:paddingStart="72dp"
             android:visibility="gone"
             android:orientation="vertical">
 
diff --git a/res/layout/enable_accessibility_service_dialog_content.xml b/res/layout/enable_accessibility_service_dialog_content.xml
index 25c6ba2..3ca40ac 100644
--- a/res/layout/enable_accessibility_service_dialog_content.xml
+++ b/res/layout/enable_accessibility_service_dialog_content.xml
@@ -26,25 +26,30 @@
         android:layout_height="wrap_content"
         android:orientation="vertical"
         android:paddingStart="16dip"
-        android:paddingEnd="16dip" >
+        android:paddingEnd="16dip">
 
-        <TextView android:id="@+id/encryption_warning"
+        <TextView
+            android:id="@+id/encryption_warning"
             android:layout_width="fill_parent"
             android:layout_height="wrap_content"
             android:padding="10dip"
+            android:textAlignment="viewStart"
             android:textAppearance="?android:attr/textAppearanceMedium"/>
 
-        <TextView android:id="@+id/capabilities_header"
+        <TextView
+            android:id="@+id/capabilities_header"
             android:layout_width="fill_parent"
             android:layout_height="wrap_content"
             android:padding="10dip"
-            android:textAppearance="?android:attr/textAppearanceMedium" />
+            android:textAlignment="viewStart"
+            android:textAppearance="?android:attr/textAppearanceMedium"/>
 
-        <LinearLayout android:id="@+id/capabilities"
+        <LinearLayout
+            android:id="@+id/capabilities"
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
             android:orientation="vertical"
-            android:padding="10dip" />
+            android:padding="10dip"/>
 
     </LinearLayout>
 
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 247dcc0..b4abee7 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -1503,6 +1503,10 @@
     <string name="nfc_quick_toggle_summary" product="tablet">Allow data exchange when the tablet touches another device</string>
     <!-- Description of NFC in the 1st level settings screen, for a phone. [CHAR LIMIT=NONE] -->
     <string name="nfc_quick_toggle_summary" product="default">Allow data exchange when the phone touches another device</string>
+    <!-- Dialog title for NFC disclaimr [CHAR_LIMIT=40]-->
+    <string name="nfc_disclaimer_title">Turn on NFC</string>
+    <!-- Dialog title for NFC disclaimr [CHAR_LIMIT=NONE]-->
+    <string name="nfc_disclaimer_content">NFC exchanges data between this device and other nearby devices or targets, such as payment terminals, access readers, and interactive ads or tags.</string>
 
     <!-- Used to enter the Android Beam sharing preferences screen. This phrase is a trademark. [CHAR LIMIT=32] -->
     <string name="android_beam_settings_title">Android Beam</string>
@@ -6958,6 +6962,11 @@
     <!-- Summary for the "screenshot" preference to determine whether assist can access the screenshot of your screen [CHAR LIMIT=NONE] -->
     <string name="assist_access_screenshot_summary">Allow the assist app to access an image of the screen</string>
 
+    <!-- Title for the "flash" preference to determine whether a flash is shown on screen when an assistant accesses the contents of the screeen. [CHAR LIMIT=40] -->
+    <string name="assist_flash_title">Flash screen</string>
+
+    <!-- Summary for the "flash" preference to determine whether a flash is shown on screen when an assistant accesses the contents of the screeen. [CHAR LIMIT=NONE] -->
+    <string name="assist_flash_summary">Flash edges of screen when assist app accesses text from screen or screenshot</string>
 
     <!-- Footer text in the manage assist screen. [CHAR LIMIT=NONE] -->
     <string name="assist_footer">Assist apps can help you based on information from the screen you\u2019re viewing. Some apps support both launcher and voice input services to give you integrated assistance.</string>
diff --git a/res/xml/manage_assist.xml b/res/xml/manage_assist.xml
index 6984f88..7d4928d 100644
--- a/res/xml/manage_assist.xml
+++ b/res/xml/manage_assist.xml
@@ -36,6 +36,12 @@
         android:title="@string/assist_access_screenshot_title"
         android:summary="@string/assist_access_screenshot_summary"/>
 
+    <SwitchPreference
+            android:key="flash"
+            android:title="@string/assist_flash_title"
+            android:summary="@string/assist_flash_summary"
+    />
+
     <com.android.settings.voice.VoiceInputListPreference
             android:key="voice_input_settings"
             android:title="@string/voice_input_settings_title"
diff --git a/src/com/android/settings/applications/ManageAssist.java b/src/com/android/settings/applications/ManageAssist.java
index 02875b6..9947aa2 100644
--- a/src/com/android/settings/applications/ManageAssist.java
+++ b/src/com/android/settings/applications/ManageAssist.java
@@ -24,6 +24,8 @@
 import android.provider.Settings;
 import android.support.v14.preference.SwitchPreference;
 import android.support.v7.preference.Preference;
+
+import com.android.internal.app.AssistUtils;
 import com.android.internal.logging.MetricsProto.MetricsEvent;
 import com.android.settings.R;
 import com.android.settings.SettingsPreferenceFragment;
@@ -39,10 +41,12 @@
     private static final String KEY_CONTEXT = "context";
     private static final String KEY_SCREENSHOT = "screenshot";
     private static final String KEY_VOICE_INPUT = "voice_input_settings";
+    private static final String KEY_FLASH = "flash";
 
     private DefaultAssistPreference mDefaultAssitPref;
     private SwitchPreference mContextPref;
     private SwitchPreference mScreenshotPref;
+    private SwitchPreference mFlashPref;
     private VoiceInputListPreference mVoiceInputPref;
     private Handler mHandler = new Handler();
 
@@ -62,6 +66,9 @@
         mScreenshotPref = (SwitchPreference) findPreference(KEY_SCREENSHOT);
         mScreenshotPref.setOnPreferenceChangeListener(this);
 
+        mFlashPref = (SwitchPreference) findPreference(KEY_FLASH);
+        mFlashPref.setOnPreferenceChangeListener(this);
+
         mVoiceInputPref = (VoiceInputListPreference) findPreference(KEY_VOICE_INPUT);
         updateUi();
     }
@@ -76,7 +83,10 @@
         if (preference == mContextPref) {
             Settings.Secure.putInt(getContentResolver(), Settings.Secure.ASSIST_STRUCTURE_ENABLED,
                     (boolean) newValue ? 1 : 0);
-            postGuardScreenshotPref();
+            mHandler.post(() -> {
+                guardScreenshotPref();
+                guardFlashPref();
+            });
             return true;
         }
         if (preference == mScreenshotPref) {
@@ -84,6 +94,11 @@
                     (boolean) newValue ? 1 : 0);
             return true;
         }
+        if (preference == mFlashPref) {
+            Settings.Secure.putInt(getContentResolver(), Settings.Secure.ASSIST_DISCLOSURE_ENABLED,
+                    (boolean) newValue ? 1 : 0);
+            return true;
+        }
         if (preference == mDefaultAssitPref) {
             String newAssitPackage = (String)newValue;
             if (newAssitPackage == null ||
@@ -101,15 +116,6 @@
         return false;
     }
 
-    private void postGuardScreenshotPref() {
-        mHandler.post(new Runnable() {
-            @Override
-            public void run() {
-                guardScreenshotPref();
-            }
-        });
-    }
-
     private void guardScreenshotPref() {
         boolean isChecked = mContextPref.isChecked();
         boolean screenshotPrefWasSet = Settings.Secure.getInt(
@@ -118,6 +124,17 @@
         mScreenshotPref.setChecked(isChecked && screenshotPrefWasSet);
     }
 
+    private void guardFlashPref() {
+        ComponentName assistant = mDefaultAssitPref.getCurrentAssist();
+
+        boolean isContextChecked = mContextPref.isChecked();
+        boolean willShowFlash = AssistUtils.shouldDisclose(getContext(), assistant);
+        boolean isSystemAssistant = AssistUtils.isPreinstalledAssistant(getContext(), assistant);
+
+        mFlashPref.setEnabled(isContextChecked && isSystemAssistant);
+        mFlashPref.setChecked(willShowFlash);
+    }
+
     private void updateUi() {
         mDefaultAssitPref.refreshAssistApps();
         mVoiceInputPref.refreshVoiceInputs();
@@ -130,6 +147,13 @@
         } else {
             getPreferenceScreen().removePreference(mContextPref);
             getPreferenceScreen().removePreference(mScreenshotPref);
+            getPreferenceScreen().removePreference(mFlashPref);
+        }
+
+        if (hasAssistant && AssistUtils.allowDisablingAssistDisclosure(getContext())) {
+            getPreferenceScreen().addPreference(mFlashPref);
+        } else {
+            getPreferenceScreen().removePreference(mFlashPref);
         }
 
         if (isCurrentAssistVoiceService()) {
@@ -140,6 +164,7 @@
         }
 
         guardScreenshotPref();
+        guardFlashPref();
     }
 
     private boolean isCurrentAssistVoiceService() {
diff --git a/src/com/android/settings/applications/ProcStatsEntry.java b/src/com/android/settings/applications/ProcStatsEntry.java
index 36d397e..90ef5d7 100644
--- a/src/com/android/settings/applications/ProcStatsEntry.java
+++ b/src/com/android/settings/applications/ProcStatsEntry.java
@@ -20,12 +20,13 @@
 import android.content.pm.PackageManager;
 import android.os.Parcel;
 import android.os.Parcelable;
+import android.text.TextUtils;
 import android.util.ArrayMap;
 import android.util.Log;
 import android.util.SparseArray;
 
-import com.android.internal.app.procstats.ProcessStats;
 import com.android.internal.app.procstats.ProcessState;
+import com.android.internal.app.procstats.ProcessStats;
 import com.android.internal.app.procstats.ServiceState;
 
 import java.util.ArrayList;
@@ -33,6 +34,7 @@
 import java.util.Comparator;
 
 public final class ProcStatsEntry implements Parcelable {
+
     private static final String TAG = "ProcStatsEntry";
     private static boolean DEBUG = ProcessStatsUi.DEBUG;
 
@@ -40,7 +42,7 @@
     final int mUid;
     final String mName;
     public CharSequence mLabel;
-    final ArrayList<String> mPackages = new ArrayList<String>();
+    final ArrayList<String> mPackages = new ArrayList<>();
     final long mBgDuration;
     final long mAvgBgMem;
     final long mMaxBgMem;
@@ -52,7 +54,7 @@
 
     String mBestTargetPackage;
 
-    ArrayMap<String, ArrayList<Service>> mServices = new ArrayMap<String, ArrayList<Service>>(1);
+    ArrayMap<String, ArrayList<Service>> mServices = new ArrayMap<>(1);
 
     public ProcStatsEntry(ProcessState proc, String packageName,
             ProcessStats.ProcessDataCollection tmpBgTotals,
@@ -249,6 +251,10 @@
                             + " not as good as last " + bestRunTime);
                 }
             }
+            // Final fallback, just pick the first subProc.
+            if (TextUtils.isEmpty(mBestTargetPackage)) {
+                mBestTargetPackage = subProcs.get(0).mPackage;
+            }
         } else if (subProcs.size() == 1) {
             mBestTargetPackage = subProcs.get(0).mPackage;
         }
diff --git a/src/com/android/settings/dashboard/conditional/ConditionAdapterUtils.java b/src/com/android/settings/dashboard/conditional/ConditionAdapterUtils.java
index 51fd132..a16de50 100644
--- a/src/com/android/settings/dashboard/conditional/ConditionAdapterUtils.java
+++ b/src/com/android/settings/dashboard/conditional/ConditionAdapterUtils.java
@@ -68,12 +68,13 @@
         card.setOnClickListener(onClickListener);
         view.icon.setImageIcon(condition.getIcon());
         view.title.setText(condition.getTitle());
-        ImageView expand = (ImageView) view.itemView.findViewById(R.id.expand_indicator);
-        expand.setTag(condition);
+        final View collapsedGroup = view.itemView.findViewById(R.id.collapsed_group);
+        collapsedGroup.setTag(condition);
+        final ImageView expand = (ImageView) view.itemView.findViewById(R.id.expand_indicator);
         expand.setImageResource(isExpanded ? R.drawable.ic_expand_less : R.drawable.ic_expand_more);
         expand.setContentDescription(expand.getContext().getString(isExpanded
                 ? R.string.condition_expand_hide : R.string.condition_expand_show));
-        expand.setOnClickListener(onExpandListener);
+        collapsedGroup.setOnClickListener(onExpandListener);
 
         View detailGroup = view.itemView.findViewById(R.id.detail_group);
         CharSequence[] actions = condition.getActions();