Merge branch 'security-aosp-qt-release' into int/10/fp2

* security-aosp-qt-release:
  Open all files with O_NOFOLLOW.

Change-Id: Idbf2c805f7310d9b0eb736c6e85c72a31b88f969
diff --git a/res/values-eu/strings.xml b/res/values-eu/strings.xml
index 704628f..0f62abc 100644
--- a/res/values-eu/strings.xml
+++ b/res/values-eu/strings.xml
@@ -28,9 +28,9 @@
     <string name="root_audio" msgid="3505830755201326018">"Audioa"</string>
     <string name="permission_required" msgid="1460820436132943754">"Baimena behar da elementu hau aldatu edo ezabatzeko."</string>
     <string name="permission_required_action" msgid="706370952366113539">"Egin aurrera"</string>
-    <string name="permission_audio" msgid="344061911159388398"><b>"<xliff:g id="APP_NAME">^1</xliff:g>"</b>" aplikazioari musika hau aldatzeko edo ezabatzeko baimena eman nahi diozu?"</string>
-    <string name="permission_video" msgid="8188037202573267740"><b>"<xliff:g id="APP_NAME">^1</xliff:g>"</b>" aplikazioari bideo hau aldatzeko edo ezabatzeko baimena eman nahi diozu?"</string>
-    <string name="permission_images" msgid="6711726334380945124"><b>"<xliff:g id="APP_NAME">^1</xliff:g>"</b>" aplikazioari irudi hau aldatzeko edo ezabatzeko baimena eman nahi diozu?"</string>
+    <string name="permission_audio" msgid="344061911159388398">"Musika hau aldatzeko edo ezabatzeko baimena eman nahi diozu "<b>"<xliff:g id="APP_NAME">^1</xliff:g>"</b>" aplikazioari?"</string>
+    <string name="permission_video" msgid="8188037202573267740">"Bideo hau aldatzeko edo ezabatzeko baimena eman nahi diozu "<b>"<xliff:g id="APP_NAME">^1</xliff:g>"</b>" aplikazioari?"</string>
+    <string name="permission_images" msgid="6711726334380945124">"Irudi hau aldatzeko edo ezabatzeko baimena eman nahi diozu "<b>"<xliff:g id="APP_NAME">^1</xliff:g>"</b>" aplikazioari?"</string>
     <string name="grant_dialog_button_allow" msgid="1644287024501033471">"Baimendu"</string>
     <string name="grant_dialog_button_deny" msgid="6190589471415815741">"Ukatu"</string>
     <string name="sound_name_awaken" msgid="5266892392848526147">"Esnatu"</string>
diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml
index c73e53a..7aed3cc 100644
--- a/res/values-fr/strings.xml
+++ b/res/values-fr/strings.xml
@@ -21,7 +21,7 @@
     <string name="app_label" msgid="9035307001052716210">"Stockage multimédia"</string>
     <string name="artist_label" msgid="8105600993099120273">"Artiste"</string>
     <string name="ringtone_default" msgid="1744846699922263043">"Sonnerie par défaut"</string>
-    <string name="notification_sound_default" msgid="6541609166469990135">"Son notif. par défaut"</string>
+    <string name="notification_sound_default" msgid="6541609166469990135">"Son des notifications par défaut"</string>
     <string name="alarm_sound_default" msgid="5488847775252870314">"Son de l\'alarme par défaut"</string>
     <string name="root_images" msgid="5861633549189045666">"Images"</string>
     <string name="root_videos" msgid="8792703517064649453">"Vidéos"</string>
diff --git a/res/values-ky/strings.xml b/res/values-ky/strings.xml
index e4838b5..f96759b 100644
--- a/res/values-ky/strings.xml
+++ b/res/values-ky/strings.xml
@@ -32,7 +32,7 @@
     <string name="permission_video" msgid="8188037202573267740"><b>"<xliff:g id="APP_NAME">^1</xliff:g>"</b>" колдонмосуна бул музыканы өзгөртүп же өчүрүүгө уруксат берилсинби?"</string>
     <string name="permission_images" msgid="6711726334380945124"><b>"<xliff:g id="APP_NAME">^1</xliff:g>"</b>" колдонмосуна бул музыканы өзгөртүүгө же өчүрүүгө уруксат берилсинби?"</string>
     <string name="grant_dialog_button_allow" msgid="1644287024501033471">"Уруксат берүү"</string>
-    <string name="grant_dialog_button_deny" msgid="6190589471415815741">"Жок"</string>
+    <string name="grant_dialog_button_deny" msgid="6190589471415815741">"Тыюу салынат"</string>
     <string name="sound_name_awaken" msgid="5266892392848526147">"Awaken"</string>
     <string name="sound_name_bounce" msgid="8771447635446665231">"Bounce"</string>
     <string name="sound_name_drip" msgid="1744684469020662152">"Drip"</string>
diff --git a/src/com/android/providers/media/MediaDocumentsProvider.java b/src/com/android/providers/media/MediaDocumentsProvider.java
index 54f5dab..6c593f2 100644
--- a/src/com/android/providers/media/MediaDocumentsProvider.java
+++ b/src/com/android/providers/media/MediaDocumentsProvider.java
@@ -1179,13 +1179,13 @@
     private interface SongQuery {
         final String[] PROJECTION = new String[] {
                 AudioColumns._ID,
-                AudioColumns.TITLE,
+                AudioColumns.DISPLAY_NAME,
                 AudioColumns.MIME_TYPE,
                 AudioColumns.SIZE,
                 AudioColumns.DATE_MODIFIED };
 
         final int _ID = 0;
-        final int TITLE = 1;
+        final int DISPLAY_NAME = 1;
         final int MIME_TYPE = 2;
         final int SIZE = 3;
         final int DATE_MODIFIED = 4;
@@ -1197,7 +1197,7 @@
 
         final RowBuilder row = result.newRow();
         row.add(Document.COLUMN_DOCUMENT_ID, docId);
-        row.add(Document.COLUMN_DISPLAY_NAME, cursor.getString(SongQuery.TITLE));
+        row.add(Document.COLUMN_DISPLAY_NAME, cursor.getString(SongQuery.DISPLAY_NAME));
         row.add(Document.COLUMN_SIZE, cursor.getLong(SongQuery.SIZE));
         row.add(Document.COLUMN_MIME_TYPE, cursor.getString(SongQuery.MIME_TYPE));
         row.add(Document.COLUMN_LAST_MODIFIED,
diff --git a/src/com/android/providers/media/MediaProvider.java b/src/com/android/providers/media/MediaProvider.java
index 7f0dd92..fa41353 100644
--- a/src/com/android/providers/media/MediaProvider.java
+++ b/src/com/android/providers/media/MediaProvider.java
@@ -4507,7 +4507,10 @@
 
     private int updateInternal(Uri uri, ContentValues initialValues, String userWhere,
             String[] userWhereArgs) {
-        if ("com.google.android.GoogleCamera".equals(getCallingPackageOrSelf())) {
+        // Limit the hacky workaround to camera targeting Q and below, to allow newer versions
+        // of camera that does the right thing to work correctly.
+        if ("com.google.android.GoogleCamera".equals(getCallingPackageOrSelf())
+                && getCallingPackageTargetSdkVersion() <= Build.VERSION_CODES.Q) {
             if (matchUri(uri, false) == IMAGES_MEDIA_ID) {
                 Log.w(TAG, "Working around app bug in b/111966296");
                 uri = MediaStore.Files.getContentUri("external", ContentUris.parseId(uri));
diff --git a/src/com/android/providers/media/RingtonePickerActivity.java b/src/com/android/providers/media/RingtonePickerActivity.java
index 3b35140..f1d0e7e 100644
--- a/src/com/android/providers/media/RingtonePickerActivity.java
+++ b/src/com/android/providers/media/RingtonePickerActivity.java
@@ -154,10 +154,7 @@
             if (which == mCursor.getCount() + mStaticItemCount) {
                 // The "Add new ringtone" item was clicked. Start a file picker intent to select
                 // only audio files (MIME type "audio/*")
-                final Intent chooseFile = new Intent(Intent.ACTION_GET_CONTENT);
-                chooseFile.setType("audio/*");
-                chooseFile.putExtra(Intent.EXTRA_MIME_TYPES,
-                        new String[] { "audio/*", "application/ogg" });
+                final Intent chooseFile = getMediaFilePickerIntent();
                 startActivityForResult(chooseFile, ADD_FILE_REQUEST_CODE);
                 return;
             }
@@ -375,7 +372,8 @@
             setSuccessResultWithRingtone(getCurrentlySelectedRingtoneUri());
         }
         // If external storage is available, add a button to install sounds from storage.
-        if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
+        if(resolvesMediaFilePicker()
+                && Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
             addNewSoundItem(listView);
         }
 
@@ -633,6 +631,18 @@
         return ringtoneManagerPos + mStaticItemCount;
     }
 
+    private Intent getMediaFilePickerIntent() {
+        final Intent chooseFile = new Intent(Intent.ACTION_GET_CONTENT);
+        chooseFile.setType("audio/*");
+        chooseFile.putExtra(Intent.EXTRA_MIME_TYPES,
+                new String[] { "audio/*", "application/ogg" });
+        return chooseFile;
+    }
+
+    private boolean resolvesMediaFilePicker() {
+        return getMediaFilePickerIntent().resolveActivity(getPackageManager()) != null;
+    }
+
     private static class LocalizedCursor extends CursorWrapper {
 
         final int mTitleIndex;