am aabc9869: am 03850591: Handle outsets when resized is called due to rotation.
* commit 'aabc9869a95928660271b7022e2756fff2654013':
Handle outsets when resized is called due to rotation.
diff --git a/Android.mk b/Android.mk
index 2f97809..67d8ab6 100644
--- a/Android.mk
+++ b/Android.mk
@@ -11,3 +11,5 @@
LOCAL_CERTIFICATE := platform
include $(BUILD_PACKAGE)
+
+include $(LOCAL_PATH)/tests/Android.mk
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index e95e5ec..382b2d0 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -40,12 +40,17 @@
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="vnd.android.document/root" />
</intent-filter>
+ <intent-filter>
+ <action android:name="android.provider.action.BROWSE_DOCUMENT_ROOT" />
+ <category android:name="android.intent.category.DEFAULT" />
+ <data android:mimeType="vnd.android.document/root" />
+ </intent-filter>
</activity>
<provider
android:name=".RecentsProvider"
android:authorities="com.android.documentsui.recents"
- android:exported="false" />
+ android:exported="false"/>
<receiver android:name=".PackageReceiver">
<intent-filter>
@@ -54,5 +59,10 @@
<data android:scheme="package" />
</intent-filter>
</receiver>
+
+ <service
+ android:name=".CopyService"
+ android:exported="false">
+ </service>
</application>
</manifest>
diff --git a/res/color/item_doc_grid_overlay.xml b/res/color/item_doc_grid_overlay.xml
new file mode 100644
index 0000000..6959c65
--- /dev/null
+++ b/res/color/item_doc_grid_overlay.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2015 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+ <item
+ android:state_activated="true"
+ android:color="?android:attr/colorControlHighlight" />
+ <item
+ android:state_enabled="false"
+ android:color="?android:attr/colorBackground"
+ android:alpha="0.5" />
+ <item
+ android:color="@android:color/transparent" />
+</selector>
\ No newline at end of file
diff --git a/res/color/item_doc_list_background_activated.xml b/res/color/item_doc_list_background_activated.xml
new file mode 100644
index 0000000..7d7a110
--- /dev/null
+++ b/res/color/item_doc_list_background_activated.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2015 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+ <item
+ android:state_activated="true"
+ android:color="?android:attr/colorAccent"
+ android:alpha="0.1" />
+ <item
+ android:color="@android:color/transparent" />
+</selector>
diff --git a/res/color/item_root_icon.xml b/res/color/item_root_icon.xml
index 1374e61..0aa2c13 100644
--- a/res/color/item_root_icon.xml
+++ b/res/color/item_root_icon.xml
@@ -15,7 +15,5 @@
-->
<selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:state_focused="true" android:state_activated="true" android:color="@*android:color/primary_text_default_material_dark" />
- <item android:state_focused="false" android:state_activated="true" android:color="@*android:color/primary_text_default_material_dark" />
<item android:color="@*android:color/secondary_text_material_light" />
</selector>
diff --git a/res/color/item_root_primary_text.xml b/res/color/item_root_primary_text.xml
index 7e703fa..551245f 100644
--- a/res/color/item_root_primary_text.xml
+++ b/res/color/item_root_primary_text.xml
@@ -15,8 +15,8 @@
-->
<selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:state_focused="true" android:state_activated="true" android:color="@*android:color/primary_text_default_material_dark" />
- <item android:state_focused="false" android:state_activated="true" android:color="@*android:color/primary_text_default_material_dark" />
+ <item android:state_focused="true" android:state_activated="true" android:color="?android:colorAccent" />
+ <item android:state_focused="false" android:state_activated="true" android:color="?android:colorAccent" />
<item android:state_enabled="false" android:alpha="@*android:dimen/disabled_alpha_material_light" android:color="@*android:color/primary_text_default_material_light" />
<item android:color="@*android:color/primary_text_default_material_light" />
</selector>
diff --git a/res/drawable-hdpi/ic_breadcrumb_arrow_am_alpha.png b/res/drawable-hdpi/ic_breadcrumb_arrow_am_alpha.png
index 95b2b6d..67f890c 100644
--- a/res/drawable-hdpi/ic_breadcrumb_arrow_am_alpha.png
+++ b/res/drawable-hdpi/ic_breadcrumb_arrow_am_alpha.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_cab_accept_alpha.png b/res/drawable-hdpi/ic_cab_accept_alpha.png
deleted file mode 100644
index ddf9a80..0000000
--- a/res/drawable-hdpi/ic_cab_accept_alpha.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_cab_cancel_alpha.png b/res/drawable-hdpi/ic_cab_cancel_alpha.png
index 7168197..1a9cd75 100644
--- a/res/drawable-hdpi/ic_cab_cancel_alpha.png
+++ b/res/drawable-hdpi/ic_cab_cancel_alpha.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_cab_select_item_alpha.png b/res/drawable-hdpi/ic_cab_select_item_alpha.png
deleted file mode 100644
index 1c6ec6a..0000000
--- a/res/drawable-hdpi/ic_cab_select_item_alpha.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_dialog_alert_alpha.png b/res/drawable-hdpi/ic_dialog_alert_alpha.png
index 11546a7..4c3d9a4 100644
--- a/res/drawable-hdpi/ic_dialog_alert_alpha.png
+++ b/res/drawable-hdpi/ic_dialog_alert_alpha.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_dialog_info_alpha.png b/res/drawable-hdpi/ic_dialog_info_alpha.png
index de5c113..da56077 100644
--- a/res/drawable-hdpi/ic_dialog_info_alpha.png
+++ b/res/drawable-hdpi/ic_dialog_info_alpha.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_doc_album_alpha.png b/res/drawable-hdpi/ic_doc_album_alpha.png
index 769144a..2b21c12 100644
--- a/res/drawable-hdpi/ic_doc_album_alpha.png
+++ b/res/drawable-hdpi/ic_doc_album_alpha.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_doc_apk_alpha.png b/res/drawable-hdpi/ic_doc_apk_alpha.png
index 22f95b9..ed3ee45 100644
--- a/res/drawable-hdpi/ic_doc_apk_alpha.png
+++ b/res/drawable-hdpi/ic_doc_apk_alpha.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_doc_audio_alpha.png b/res/drawable-hdpi/ic_doc_audio_alpha.png
index c5152f4..1a3ebc4 100644
--- a/res/drawable-hdpi/ic_doc_audio_alpha.png
+++ b/res/drawable-hdpi/ic_doc_audio_alpha.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_folder_alpha.png b/res/drawable-hdpi/ic_folder_alpha.png
deleted file mode 100644
index eb71f81..0000000
--- a/res/drawable-hdpi/ic_folder_alpha.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_hamburger_alpha.png b/res/drawable-hdpi/ic_hamburger_alpha.png
index b38e5ee..3f8ebd6 100644
--- a/res/drawable-hdpi/ic_hamburger_alpha.png
+++ b/res/drawable-hdpi/ic_hamburger_alpha.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_menu_copy_alpha.png b/res/drawable-hdpi/ic_menu_copy_alpha.png
index 4997173..9a9e570 100644
--- a/res/drawable-hdpi/ic_menu_copy_alpha.png
+++ b/res/drawable-hdpi/ic_menu_copy_alpha.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_menu_delete_alpha.png b/res/drawable-hdpi/ic_menu_delete_alpha.png
index b63eecd..dbbb602 100644
--- a/res/drawable-hdpi/ic_menu_delete_alpha.png
+++ b/res/drawable-hdpi/ic_menu_delete_alpha.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_menu_disconnect_am_alpha.png b/res/drawable-hdpi/ic_menu_disconnect_am_alpha.png
deleted file mode 100644
index 59eef4d..0000000
--- a/res/drawable-hdpi/ic_menu_disconnect_am_alpha.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_menu_new_folder_am_alpha.png b/res/drawable-hdpi/ic_menu_new_folder_am_alpha.png
index cd8987a..1d25a2d 100644
--- a/res/drawable-hdpi/ic_menu_new_folder_am_alpha.png
+++ b/res/drawable-hdpi/ic_menu_new_folder_am_alpha.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_menu_overflow_alpha.png b/res/drawable-hdpi/ic_menu_overflow_alpha.png
deleted file mode 100644
index 95716b3..0000000
--- a/res/drawable-hdpi/ic_menu_overflow_alpha.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_menu_rename_am_alpha.png b/res/drawable-hdpi/ic_menu_rename_am_alpha.png
deleted file mode 100644
index 76394c4..0000000
--- a/res/drawable-hdpi/ic_menu_rename_am_alpha.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_menu_search_alpha.png b/res/drawable-hdpi/ic_menu_search_alpha.png
index 941b93c..c593e7a 100644
--- a/res/drawable-hdpi/ic_menu_search_alpha.png
+++ b/res/drawable-hdpi/ic_menu_search_alpha.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_menu_settings_alpha.png b/res/drawable-hdpi/ic_menu_settings_alpha.png
deleted file mode 100644
index 4f5bcea..0000000
--- a/res/drawable-hdpi/ic_menu_settings_alpha.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_menu_share_alpha.png b/res/drawable-hdpi/ic_menu_share_alpha.png
index b7093a0..20ba480 100644
--- a/res/drawable-hdpi/ic_menu_share_alpha.png
+++ b/res/drawable-hdpi/ic_menu_share_alpha.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_menu_sortby_am_alpha.png b/res/drawable-hdpi/ic_menu_sortby_am_alpha.png
index fad19c1..5e66488 100644
--- a/res/drawable-hdpi/ic_menu_sortby_am_alpha.png
+++ b/res/drawable-hdpi/ic_menu_sortby_am_alpha.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_menu_undo_am_alpha.png b/res/drawable-hdpi/ic_menu_undo_am_alpha.png
deleted file mode 100644
index df94033..0000000
--- a/res/drawable-hdpi/ic_menu_undo_am_alpha.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_menu_view_grid_alpha.png b/res/drawable-hdpi/ic_menu_view_grid_alpha.png
index 87154ad..7e15a8c 100644
--- a/res/drawable-hdpi/ic_menu_view_grid_alpha.png
+++ b/res/drawable-hdpi/ic_menu_view_grid_alpha.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_menu_view_list_alpha.png b/res/drawable-hdpi/ic_menu_view_list_alpha.png
index 9b40dae..c15537a 100644
--- a/res/drawable-hdpi/ic_menu_view_list_alpha.png
+++ b/res/drawable-hdpi/ic_menu_view_list_alpha.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_open_am_alpha.png b/res/drawable-hdpi/ic_open_am_alpha.png
deleted file mode 100644
index 6b0d909..0000000
--- a/res/drawable-hdpi/ic_open_am_alpha.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_popout_am_alpha.png b/res/drawable-hdpi/ic_popout_am_alpha.png
deleted file mode 100644
index e1c39f8..0000000
--- a/res/drawable-hdpi/ic_popout_am_alpha.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_root_download_alpha.png b/res/drawable-hdpi/ic_root_download_alpha.png
index 092556a..d9aacea 100644
--- a/res/drawable-hdpi/ic_root_download_alpha.png
+++ b/res/drawable-hdpi/ic_root_download_alpha.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_root_folder_am_alpha.png b/res/drawable-hdpi/ic_root_folder_am_alpha.png
deleted file mode 100644
index 223e619..0000000
--- a/res/drawable-hdpi/ic_root_folder_am_alpha.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_root_recent_alpha.png b/res/drawable-hdpi/ic_root_recent_alpha.png
index 37fbdf7..9e003f0 100644
--- a/res/drawable-hdpi/ic_root_recent_alpha.png
+++ b/res/drawable-hdpi/ic_root_recent_alpha.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_root_sdcard_alpha.png b/res/drawable-hdpi/ic_root_sdcard_alpha.png
index 0929f93..65e42aa 100644
--- a/res/drawable-hdpi/ic_root_sdcard_alpha.png
+++ b/res/drawable-hdpi/ic_root_sdcard_alpha.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_root_usb_light_alpha.png b/res/drawable-hdpi/ic_root_usb_light_alpha.png
deleted file mode 100644
index 738ef84..0000000
--- a/res/drawable-hdpi/ic_root_usb_light_alpha.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_breadcrumb_arrow_am_alpha.png b/res/drawable-mdpi/ic_breadcrumb_arrow_am_alpha.png
index 897f7a9..9a048f1 100644
--- a/res/drawable-mdpi/ic_breadcrumb_arrow_am_alpha.png
+++ b/res/drawable-mdpi/ic_breadcrumb_arrow_am_alpha.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_cab_accept_alpha.png b/res/drawable-mdpi/ic_cab_accept_alpha.png
deleted file mode 100644
index c9224a6..0000000
--- a/res/drawable-mdpi/ic_cab_accept_alpha.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_cab_cancel_alpha.png b/res/drawable-mdpi/ic_cab_cancel_alpha.png
index 3bb74f9..40a1a84 100644
--- a/res/drawable-mdpi/ic_cab_cancel_alpha.png
+++ b/res/drawable-mdpi/ic_cab_cancel_alpha.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_cab_select_item_alpha.png b/res/drawable-mdpi/ic_cab_select_item_alpha.png
deleted file mode 100644
index 2d47376..0000000
--- a/res/drawable-mdpi/ic_cab_select_item_alpha.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_dialog_alert_alpha.png b/res/drawable-mdpi/ic_dialog_alert_alpha.png
index 3868210..e768d11 100644
--- a/res/drawable-mdpi/ic_dialog_alert_alpha.png
+++ b/res/drawable-mdpi/ic_dialog_alert_alpha.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_dialog_info_alpha.png b/res/drawable-mdpi/ic_dialog_info_alpha.png
index a74854d..5ef3dc0 100644
--- a/res/drawable-mdpi/ic_dialog_info_alpha.png
+++ b/res/drawable-mdpi/ic_dialog_info_alpha.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_doc_album_alpha.png b/res/drawable-mdpi/ic_doc_album_alpha.png
index f5e45a7..ac27eea 100644
--- a/res/drawable-mdpi/ic_doc_album_alpha.png
+++ b/res/drawable-mdpi/ic_doc_album_alpha.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_doc_apk_alpha.png b/res/drawable-mdpi/ic_doc_apk_alpha.png
index 67e33ce..a4add51 100644
--- a/res/drawable-mdpi/ic_doc_apk_alpha.png
+++ b/res/drawable-mdpi/ic_doc_apk_alpha.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_doc_audio_alpha.png b/res/drawable-mdpi/ic_doc_audio_alpha.png
index 34093d0..a9a7f20 100644
--- a/res/drawable-mdpi/ic_doc_audio_alpha.png
+++ b/res/drawable-mdpi/ic_doc_audio_alpha.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_folder_alpha.png b/res/drawable-mdpi/ic_folder_alpha.png
deleted file mode 100644
index 5ecddc5..0000000
--- a/res/drawable-mdpi/ic_folder_alpha.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_hamburger_alpha.png b/res/drawable-mdpi/ic_hamburger_alpha.png
index d4f9222..ef2a48c 100644
--- a/res/drawable-mdpi/ic_hamburger_alpha.png
+++ b/res/drawable-mdpi/ic_hamburger_alpha.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_menu_copy_alpha.png b/res/drawable-mdpi/ic_menu_copy_alpha.png
index f8a5262..c94cc28 100644
--- a/res/drawable-mdpi/ic_menu_copy_alpha.png
+++ b/res/drawable-mdpi/ic_menu_copy_alpha.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_menu_delete_alpha.png b/res/drawable-mdpi/ic_menu_delete_alpha.png
index 29c9990..999aa4c 100644
--- a/res/drawable-mdpi/ic_menu_delete_alpha.png
+++ b/res/drawable-mdpi/ic_menu_delete_alpha.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_menu_disconnect_am_alpha.png b/res/drawable-mdpi/ic_menu_disconnect_am_alpha.png
deleted file mode 100644
index d8ebf49..0000000
--- a/res/drawable-mdpi/ic_menu_disconnect_am_alpha.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_menu_new_folder_am_alpha.png b/res/drawable-mdpi/ic_menu_new_folder_am_alpha.png
index 62c47d5..6e6b870 100644
--- a/res/drawable-mdpi/ic_menu_new_folder_am_alpha.png
+++ b/res/drawable-mdpi/ic_menu_new_folder_am_alpha.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_menu_overflow_alpha.png b/res/drawable-mdpi/ic_menu_overflow_alpha.png
deleted file mode 100644
index 0825647..0000000
--- a/res/drawable-mdpi/ic_menu_overflow_alpha.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_menu_rename_am_alpha.png b/res/drawable-mdpi/ic_menu_rename_am_alpha.png
deleted file mode 100644
index 9d9e3d7..0000000
--- a/res/drawable-mdpi/ic_menu_rename_am_alpha.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_menu_search_alpha.png b/res/drawable-mdpi/ic_menu_search_alpha.png
index 9fc1df6..6b16343 100644
--- a/res/drawable-mdpi/ic_menu_search_alpha.png
+++ b/res/drawable-mdpi/ic_menu_search_alpha.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_menu_settings_alpha.png b/res/drawable-mdpi/ic_menu_settings_alpha.png
deleted file mode 100644
index c95381b..0000000
--- a/res/drawable-mdpi/ic_menu_settings_alpha.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_menu_share_alpha.png b/res/drawable-mdpi/ic_menu_share_alpha.png
index 7008f67..f02d360 100644
--- a/res/drawable-mdpi/ic_menu_share_alpha.png
+++ b/res/drawable-mdpi/ic_menu_share_alpha.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_menu_sortby_am_alpha.png b/res/drawable-mdpi/ic_menu_sortby_am_alpha.png
index f95d30d..04a12a4 100644
--- a/res/drawable-mdpi/ic_menu_sortby_am_alpha.png
+++ b/res/drawable-mdpi/ic_menu_sortby_am_alpha.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_menu_undo_am_alpha.png b/res/drawable-mdpi/ic_menu_undo_am_alpha.png
deleted file mode 100644
index 47c00dd..0000000
--- a/res/drawable-mdpi/ic_menu_undo_am_alpha.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_menu_view_grid_alpha.png b/res/drawable-mdpi/ic_menu_view_grid_alpha.png
index fe2c78c..5f968d5 100644
--- a/res/drawable-mdpi/ic_menu_view_grid_alpha.png
+++ b/res/drawable-mdpi/ic_menu_view_grid_alpha.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_menu_view_list_alpha.png b/res/drawable-mdpi/ic_menu_view_list_alpha.png
index 8b3a303..7a8eae9 100644
--- a/res/drawable-mdpi/ic_menu_view_list_alpha.png
+++ b/res/drawable-mdpi/ic_menu_view_list_alpha.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_open_am_alpha.png b/res/drawable-mdpi/ic_open_am_alpha.png
deleted file mode 100644
index 5923c08..0000000
--- a/res/drawable-mdpi/ic_open_am_alpha.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_popout_am_alpha.png b/res/drawable-mdpi/ic_popout_am_alpha.png
deleted file mode 100644
index 0e45037..0000000
--- a/res/drawable-mdpi/ic_popout_am_alpha.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_root_download_alpha.png b/res/drawable-mdpi/ic_root_download_alpha.png
index a55f4ca..c2c845e 100644
--- a/res/drawable-mdpi/ic_root_download_alpha.png
+++ b/res/drawable-mdpi/ic_root_download_alpha.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_root_folder_am_alpha.png b/res/drawable-mdpi/ic_root_folder_am_alpha.png
deleted file mode 100644
index 993e060..0000000
--- a/res/drawable-mdpi/ic_root_folder_am_alpha.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_root_recent_alpha.png b/res/drawable-mdpi/ic_root_recent_alpha.png
index f359c4b..f500d58 100644
--- a/res/drawable-mdpi/ic_root_recent_alpha.png
+++ b/res/drawable-mdpi/ic_root_recent_alpha.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_root_sdcard_alpha.png b/res/drawable-mdpi/ic_root_sdcard_alpha.png
index dd76d07..1de8292 100644
--- a/res/drawable-mdpi/ic_root_sdcard_alpha.png
+++ b/res/drawable-mdpi/ic_root_sdcard_alpha.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_root_usb_light_alpha.png b/res/drawable-mdpi/ic_root_usb_light_alpha.png
deleted file mode 100644
index fccd45e..0000000
--- a/res/drawable-mdpi/ic_root_usb_light_alpha.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_breadcrumb_arrow_am_alpha.png b/res/drawable-xhdpi/ic_breadcrumb_arrow_am_alpha.png
index 5d0805e..073583e 100644
--- a/res/drawable-xhdpi/ic_breadcrumb_arrow_am_alpha.png
+++ b/res/drawable-xhdpi/ic_breadcrumb_arrow_am_alpha.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_cab_accept_alpha.png b/res/drawable-xhdpi/ic_cab_accept_alpha.png
deleted file mode 100644
index 1a3d7c4..0000000
--- a/res/drawable-xhdpi/ic_cab_accept_alpha.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_cab_cancel_alpha.png b/res/drawable-xhdpi/ic_cab_cancel_alpha.png
index 14b9aef..6bc4372 100644
--- a/res/drawable-xhdpi/ic_cab_cancel_alpha.png
+++ b/res/drawable-xhdpi/ic_cab_cancel_alpha.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_cab_select_item_alpha.png b/res/drawable-xhdpi/ic_cab_select_item_alpha.png
deleted file mode 100644
index 953ab62..0000000
--- a/res/drawable-xhdpi/ic_cab_select_item_alpha.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_dialog_alert_alpha.png b/res/drawable-xhdpi/ic_dialog_alert_alpha.png
index 5198b84..2ea6164 100644
--- a/res/drawable-xhdpi/ic_dialog_alert_alpha.png
+++ b/res/drawable-xhdpi/ic_dialog_alert_alpha.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_dialog_info_alpha.png b/res/drawable-xhdpi/ic_dialog_info_alpha.png
index cdf8c95..46ed12a 100644
--- a/res/drawable-xhdpi/ic_dialog_info_alpha.png
+++ b/res/drawable-xhdpi/ic_dialog_info_alpha.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_doc_album_alpha.png b/res/drawable-xhdpi/ic_doc_album_alpha.png
index aecd4cf..4203d35 100644
--- a/res/drawable-xhdpi/ic_doc_album_alpha.png
+++ b/res/drawable-xhdpi/ic_doc_album_alpha.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_doc_apk_alpha.png b/res/drawable-xhdpi/ic_doc_apk_alpha.png
index 24ad2dd..41558f2 100644
--- a/res/drawable-xhdpi/ic_doc_apk_alpha.png
+++ b/res/drawable-xhdpi/ic_doc_apk_alpha.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_doc_audio_alpha.png b/res/drawable-xhdpi/ic_doc_audio_alpha.png
index bf9dbde..e190c4d 100644
--- a/res/drawable-xhdpi/ic_doc_audio_alpha.png
+++ b/res/drawable-xhdpi/ic_doc_audio_alpha.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_folder_alpha.png b/res/drawable-xhdpi/ic_folder_alpha.png
deleted file mode 100644
index cd24dfe..0000000
--- a/res/drawable-xhdpi/ic_folder_alpha.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_hamburger_alpha.png b/res/drawable-xhdpi/ic_hamburger_alpha.png
index aec4d00..4e0286b 100644
--- a/res/drawable-xhdpi/ic_hamburger_alpha.png
+++ b/res/drawable-xhdpi/ic_hamburger_alpha.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_menu_copy_alpha.png b/res/drawable-xhdpi/ic_menu_copy_alpha.png
index 9afd1a1..1cf76a9 100644
--- a/res/drawable-xhdpi/ic_menu_copy_alpha.png
+++ b/res/drawable-xhdpi/ic_menu_copy_alpha.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_menu_delete_alpha.png b/res/drawable-xhdpi/ic_menu_delete_alpha.png
index 2c81000..796ccd2 100644
--- a/res/drawable-xhdpi/ic_menu_delete_alpha.png
+++ b/res/drawable-xhdpi/ic_menu_delete_alpha.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_menu_disconnect_am_alpha.png b/res/drawable-xhdpi/ic_menu_disconnect_am_alpha.png
deleted file mode 100644
index 95b0bb8..0000000
--- a/res/drawable-xhdpi/ic_menu_disconnect_am_alpha.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_menu_new_folder_am_alpha.png b/res/drawable-xhdpi/ic_menu_new_folder_am_alpha.png
index 14e96e2..49272b0 100644
--- a/res/drawable-xhdpi/ic_menu_new_folder_am_alpha.png
+++ b/res/drawable-xhdpi/ic_menu_new_folder_am_alpha.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_menu_overflow_alpha.png b/res/drawable-xhdpi/ic_menu_overflow_alpha.png
deleted file mode 100644
index 311e4dc..0000000
--- a/res/drawable-xhdpi/ic_menu_overflow_alpha.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_menu_rename_am_alpha.png b/res/drawable-xhdpi/ic_menu_rename_am_alpha.png
deleted file mode 100644
index e2e3925..0000000
--- a/res/drawable-xhdpi/ic_menu_rename_am_alpha.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_menu_search_alpha.png b/res/drawable-xhdpi/ic_menu_search_alpha.png
index 6b2ddad..6381902 100644
--- a/res/drawable-xhdpi/ic_menu_search_alpha.png
+++ b/res/drawable-xhdpi/ic_menu_search_alpha.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_menu_settings_alpha.png b/res/drawable-xhdpi/ic_menu_settings_alpha.png
deleted file mode 100644
index 304435a..0000000
--- a/res/drawable-xhdpi/ic_menu_settings_alpha.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_menu_share_alpha.png b/res/drawable-xhdpi/ic_menu_share_alpha.png
index afb2f3d..81c80b7 100644
--- a/res/drawable-xhdpi/ic_menu_share_alpha.png
+++ b/res/drawable-xhdpi/ic_menu_share_alpha.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_menu_sortby_am_alpha.png b/res/drawable-xhdpi/ic_menu_sortby_am_alpha.png
index 27e6acf..9e4fd61 100644
--- a/res/drawable-xhdpi/ic_menu_sortby_am_alpha.png
+++ b/res/drawable-xhdpi/ic_menu_sortby_am_alpha.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_menu_undo_am_alpha.png b/res/drawable-xhdpi/ic_menu_undo_am_alpha.png
deleted file mode 100644
index 146b196..0000000
--- a/res/drawable-xhdpi/ic_menu_undo_am_alpha.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_menu_view_grid_alpha.png b/res/drawable-xhdpi/ic_menu_view_grid_alpha.png
index cc4d40c..630188c 100644
--- a/res/drawable-xhdpi/ic_menu_view_grid_alpha.png
+++ b/res/drawable-xhdpi/ic_menu_view_grid_alpha.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_menu_view_list_alpha.png b/res/drawable-xhdpi/ic_menu_view_list_alpha.png
index 6c897c4..73372f4 100644
--- a/res/drawable-xhdpi/ic_menu_view_list_alpha.png
+++ b/res/drawable-xhdpi/ic_menu_view_list_alpha.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_open_am_alpha.png b/res/drawable-xhdpi/ic_open_am_alpha.png
deleted file mode 100644
index be6fb5d..0000000
--- a/res/drawable-xhdpi/ic_open_am_alpha.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_popout_am_alpha.png b/res/drawable-xhdpi/ic_popout_am_alpha.png
deleted file mode 100644
index 7ba284f..0000000
--- a/res/drawable-xhdpi/ic_popout_am_alpha.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_root_download_alpha.png b/res/drawable-xhdpi/ic_root_download_alpha.png
index 9bda62c..f5afb24 100644
--- a/res/drawable-xhdpi/ic_root_download_alpha.png
+++ b/res/drawable-xhdpi/ic_root_download_alpha.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_root_folder_am_alpha.png b/res/drawable-xhdpi/ic_root_folder_am_alpha.png
deleted file mode 100644
index 24dce60..0000000
--- a/res/drawable-xhdpi/ic_root_folder_am_alpha.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_root_recent_alpha.png b/res/drawable-xhdpi/ic_root_recent_alpha.png
index 5ef3288..fe71c25 100644
--- a/res/drawable-xhdpi/ic_root_recent_alpha.png
+++ b/res/drawable-xhdpi/ic_root_recent_alpha.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_root_sdcard_alpha.png b/res/drawable-xhdpi/ic_root_sdcard_alpha.png
index 99b8054..00b8a8b 100644
--- a/res/drawable-xhdpi/ic_root_sdcard_alpha.png
+++ b/res/drawable-xhdpi/ic_root_sdcard_alpha.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_root_usb_light_alpha.png b/res/drawable-xhdpi/ic_root_usb_light_alpha.png
deleted file mode 100644
index 80717e4..0000000
--- a/res/drawable-xhdpi/ic_root_usb_light_alpha.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_breadcrumb_arrow_am_alpha.png b/res/drawable-xxhdpi/ic_breadcrumb_arrow_am_alpha.png
index 02a988b..b96cfd1 100644
--- a/res/drawable-xxhdpi/ic_breadcrumb_arrow_am_alpha.png
+++ b/res/drawable-xxhdpi/ic_breadcrumb_arrow_am_alpha.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_cab_accept_alpha.png b/res/drawable-xxhdpi/ic_cab_accept_alpha.png
deleted file mode 100644
index a23a9ae..0000000
--- a/res/drawable-xxhdpi/ic_cab_accept_alpha.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_cab_cancel_alpha.png b/res/drawable-xxhdpi/ic_cab_cancel_alpha.png
index b10db3e..51b4401 100644
--- a/res/drawable-xxhdpi/ic_cab_cancel_alpha.png
+++ b/res/drawable-xxhdpi/ic_cab_cancel_alpha.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_cab_select_item_alpha.png b/res/drawable-xxhdpi/ic_cab_select_item_alpha.png
deleted file mode 100644
index 3606fb3..0000000
--- a/res/drawable-xxhdpi/ic_cab_select_item_alpha.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_dialog_alert_alpha.png b/res/drawable-xxhdpi/ic_dialog_alert_alpha.png
index 0a54598..ed36f70 100644
--- a/res/drawable-xxhdpi/ic_dialog_alert_alpha.png
+++ b/res/drawable-xxhdpi/ic_dialog_alert_alpha.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_dialog_info_alpha.png b/res/drawable-xxhdpi/ic_dialog_info_alpha.png
index 6d3260c..a81eeb9 100644
--- a/res/drawable-xxhdpi/ic_dialog_info_alpha.png
+++ b/res/drawable-xxhdpi/ic_dialog_info_alpha.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_doc_album_alpha.png b/res/drawable-xxhdpi/ic_doc_album_alpha.png
index 31dc7a4..60f59f5 100644
--- a/res/drawable-xxhdpi/ic_doc_album_alpha.png
+++ b/res/drawable-xxhdpi/ic_doc_album_alpha.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_doc_apk_alpha.png b/res/drawable-xxhdpi/ic_doc_apk_alpha.png
index 5d0f0db..6006b12 100644
--- a/res/drawable-xxhdpi/ic_doc_apk_alpha.png
+++ b/res/drawable-xxhdpi/ic_doc_apk_alpha.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_doc_audio_alpha.png b/res/drawable-xxhdpi/ic_doc_audio_alpha.png
index 8116b62..7926188 100644
--- a/res/drawable-xxhdpi/ic_doc_audio_alpha.png
+++ b/res/drawable-xxhdpi/ic_doc_audio_alpha.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_folder_alpha.png b/res/drawable-xxhdpi/ic_folder_alpha.png
deleted file mode 100644
index 02249d2..0000000
--- a/res/drawable-xxhdpi/ic_folder_alpha.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_hamburger_alpha.png b/res/drawable-xxhdpi/ic_hamburger_alpha.png
index 6891749..7dae60b 100644
--- a/res/drawable-xxhdpi/ic_hamburger_alpha.png
+++ b/res/drawable-xxhdpi/ic_hamburger_alpha.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_menu_copy_alpha.png b/res/drawable-xxhdpi/ic_menu_copy_alpha.png
index 90d1a09..074ea88 100644
--- a/res/drawable-xxhdpi/ic_menu_copy_alpha.png
+++ b/res/drawable-xxhdpi/ic_menu_copy_alpha.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_menu_delete_alpha.png b/res/drawable-xxhdpi/ic_menu_delete_alpha.png
index c2fbdc4..6d7cb81 100644
--- a/res/drawable-xxhdpi/ic_menu_delete_alpha.png
+++ b/res/drawable-xxhdpi/ic_menu_delete_alpha.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_menu_disconnect_am_alpha.png b/res/drawable-xxhdpi/ic_menu_disconnect_am_alpha.png
deleted file mode 100644
index 7a993b9..0000000
--- a/res/drawable-xxhdpi/ic_menu_disconnect_am_alpha.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_menu_new_folder_am_alpha.png b/res/drawable-xxhdpi/ic_menu_new_folder_am_alpha.png
index 12d279b..5c4360a 100644
--- a/res/drawable-xxhdpi/ic_menu_new_folder_am_alpha.png
+++ b/res/drawable-xxhdpi/ic_menu_new_folder_am_alpha.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_menu_overflow_alpha.png b/res/drawable-xxhdpi/ic_menu_overflow_alpha.png
deleted file mode 100644
index 325c48a..0000000
--- a/res/drawable-xxhdpi/ic_menu_overflow_alpha.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_menu_rename_am_alpha.png b/res/drawable-xxhdpi/ic_menu_rename_am_alpha.png
deleted file mode 100644
index ee2465d..0000000
--- a/res/drawable-xxhdpi/ic_menu_rename_am_alpha.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_menu_search_alpha.png b/res/drawable-xxhdpi/ic_menu_search_alpha.png
index 538fbe5..3ae490e 100644
--- a/res/drawable-xxhdpi/ic_menu_search_alpha.png
+++ b/res/drawable-xxhdpi/ic_menu_search_alpha.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_menu_settings_alpha.png b/res/drawable-xxhdpi/ic_menu_settings_alpha.png
deleted file mode 100644
index d99206c..0000000
--- a/res/drawable-xxhdpi/ic_menu_settings_alpha.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_menu_share_alpha.png b/res/drawable-xxhdpi/ic_menu_share_alpha.png
index f8a5a1a..784933a 100644
--- a/res/drawable-xxhdpi/ic_menu_share_alpha.png
+++ b/res/drawable-xxhdpi/ic_menu_share_alpha.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_menu_sortby_am_alpha.png b/res/drawable-xxhdpi/ic_menu_sortby_am_alpha.png
index 4f1355c..cb9d196 100644
--- a/res/drawable-xxhdpi/ic_menu_sortby_am_alpha.png
+++ b/res/drawable-xxhdpi/ic_menu_sortby_am_alpha.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_menu_undo_am_alpha.png b/res/drawable-xxhdpi/ic_menu_undo_am_alpha.png
deleted file mode 100644
index d5cc56f..0000000
--- a/res/drawable-xxhdpi/ic_menu_undo_am_alpha.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_menu_view_grid_alpha.png b/res/drawable-xxhdpi/ic_menu_view_grid_alpha.png
index de96c3f..7560f62 100644
--- a/res/drawable-xxhdpi/ic_menu_view_grid_alpha.png
+++ b/res/drawable-xxhdpi/ic_menu_view_grid_alpha.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_menu_view_list_alpha.png b/res/drawable-xxhdpi/ic_menu_view_list_alpha.png
index 7805834..b9483c3 100644
--- a/res/drawable-xxhdpi/ic_menu_view_list_alpha.png
+++ b/res/drawable-xxhdpi/ic_menu_view_list_alpha.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_open_am_alpha.png b/res/drawable-xxhdpi/ic_open_am_alpha.png
deleted file mode 100644
index 7ed919c..0000000
--- a/res/drawable-xxhdpi/ic_open_am_alpha.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_popout_am_alpha.png b/res/drawable-xxhdpi/ic_popout_am_alpha.png
deleted file mode 100644
index 756b684..0000000
--- a/res/drawable-xxhdpi/ic_popout_am_alpha.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_root_download_alpha.png b/res/drawable-xxhdpi/ic_root_download_alpha.png
index ffb9841..ce97c85 100644
--- a/res/drawable-xxhdpi/ic_root_download_alpha.png
+++ b/res/drawable-xxhdpi/ic_root_download_alpha.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_root_folder_am_alpha.png b/res/drawable-xxhdpi/ic_root_folder_am_alpha.png
deleted file mode 100644
index 305a6b8..0000000
--- a/res/drawable-xxhdpi/ic_root_folder_am_alpha.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_root_recent_alpha.png b/res/drawable-xxhdpi/ic_root_recent_alpha.png
index dc1425d..1dad2a8 100644
--- a/res/drawable-xxhdpi/ic_root_recent_alpha.png
+++ b/res/drawable-xxhdpi/ic_root_recent_alpha.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_root_sdcard_alpha.png b/res/drawable-xxhdpi/ic_root_sdcard_alpha.png
index cea8ac0..5236774 100644
--- a/res/drawable-xxhdpi/ic_root_sdcard_alpha.png
+++ b/res/drawable-xxhdpi/ic_root_sdcard_alpha.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_root_usb_light_alpha.png b/res/drawable-xxhdpi/ic_root_usb_light_alpha.png
deleted file mode 100644
index e0a1d23..0000000
--- a/res/drawable-xxhdpi/ic_root_usb_light_alpha.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_breadcrumb_arrow_am_alpha.png b/res/drawable-xxxhdpi/ic_breadcrumb_arrow_am_alpha.png
index 84573f6..6f2dc5b 100644
--- a/res/drawable-xxxhdpi/ic_breadcrumb_arrow_am_alpha.png
+++ b/res/drawable-xxxhdpi/ic_breadcrumb_arrow_am_alpha.png
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_cab_accept_alpha.png b/res/drawable-xxxhdpi/ic_cab_accept_alpha.png
deleted file mode 100644
index 986d3fb..0000000
--- a/res/drawable-xxxhdpi/ic_cab_accept_alpha.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_cab_cancel_alpha.png b/res/drawable-xxxhdpi/ic_cab_cancel_alpha.png
index ce443f9..df42fee 100644
--- a/res/drawable-xxxhdpi/ic_cab_cancel_alpha.png
+++ b/res/drawable-xxxhdpi/ic_cab_cancel_alpha.png
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_cab_select_item_alpha.png b/res/drawable-xxxhdpi/ic_cab_select_item_alpha.png
deleted file mode 100644
index a54e0ea..0000000
--- a/res/drawable-xxxhdpi/ic_cab_select_item_alpha.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_dialog_alert_alpha.png b/res/drawable-xxxhdpi/ic_dialog_alert_alpha.png
index 6e65716..3f4d539 100644
--- a/res/drawable-xxxhdpi/ic_dialog_alert_alpha.png
+++ b/res/drawable-xxxhdpi/ic_dialog_alert_alpha.png
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_dialog_info_alpha.png b/res/drawable-xxxhdpi/ic_dialog_info_alpha.png
index 35bd56e..c8f86b9 100644
--- a/res/drawable-xxxhdpi/ic_dialog_info_alpha.png
+++ b/res/drawable-xxxhdpi/ic_dialog_info_alpha.png
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_doc_album_alpha.png b/res/drawable-xxxhdpi/ic_doc_album_alpha.png
index 64aa50b..d2dd494 100644
--- a/res/drawable-xxxhdpi/ic_doc_album_alpha.png
+++ b/res/drawable-xxxhdpi/ic_doc_album_alpha.png
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_doc_apk_alpha.png b/res/drawable-xxxhdpi/ic_doc_apk_alpha.png
index 7cbcb8b..4f935bf 100644
--- a/res/drawable-xxxhdpi/ic_doc_apk_alpha.png
+++ b/res/drawable-xxxhdpi/ic_doc_apk_alpha.png
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_doc_audio_alpha.png b/res/drawable-xxxhdpi/ic_doc_audio_alpha.png
index d6d79ec..7499cbc 100644
--- a/res/drawable-xxxhdpi/ic_doc_audio_alpha.png
+++ b/res/drawable-xxxhdpi/ic_doc_audio_alpha.png
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_folder_alpha.png b/res/drawable-xxxhdpi/ic_folder_alpha.png
deleted file mode 100644
index c0c27a2..0000000
--- a/res/drawable-xxxhdpi/ic_folder_alpha.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_hamburger_alpha.png b/res/drawable-xxxhdpi/ic_hamburger_alpha.png
index 13b20c6..5c747ed 100644
--- a/res/drawable-xxxhdpi/ic_hamburger_alpha.png
+++ b/res/drawable-xxxhdpi/ic_hamburger_alpha.png
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_menu_copy_alpha.png b/res/drawable-xxxhdpi/ic_menu_copy_alpha.png
index 2dcf03e..1f6af72 100644
--- a/res/drawable-xxxhdpi/ic_menu_copy_alpha.png
+++ b/res/drawable-xxxhdpi/ic_menu_copy_alpha.png
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_menu_delete_alpha.png b/res/drawable-xxxhdpi/ic_menu_delete_alpha.png
index 07a78ed..f2b75c3 100644
--- a/res/drawable-xxxhdpi/ic_menu_delete_alpha.png
+++ b/res/drawable-xxxhdpi/ic_menu_delete_alpha.png
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_menu_disconnect_am_alpha.png b/res/drawable-xxxhdpi/ic_menu_disconnect_am_alpha.png
deleted file mode 100644
index d7eb04f..0000000
--- a/res/drawable-xxxhdpi/ic_menu_disconnect_am_alpha.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_menu_new_folder_am_alpha.png b/res/drawable-xxxhdpi/ic_menu_new_folder_am_alpha.png
index 879bf45..073d853 100644
--- a/res/drawable-xxxhdpi/ic_menu_new_folder_am_alpha.png
+++ b/res/drawable-xxxhdpi/ic_menu_new_folder_am_alpha.png
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_menu_overflow_alpha.png b/res/drawable-xxxhdpi/ic_menu_overflow_alpha.png
deleted file mode 100644
index 2cd4137..0000000
--- a/res/drawable-xxxhdpi/ic_menu_overflow_alpha.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_menu_rename_am_alpha.png b/res/drawable-xxxhdpi/ic_menu_rename_am_alpha.png
deleted file mode 100644
index 268049e..0000000
--- a/res/drawable-xxxhdpi/ic_menu_rename_am_alpha.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_menu_search_alpha.png b/res/drawable-xxxhdpi/ic_menu_search_alpha.png
index 78fc61d..21be572 100644
--- a/res/drawable-xxxhdpi/ic_menu_search_alpha.png
+++ b/res/drawable-xxxhdpi/ic_menu_search_alpha.png
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_menu_settings_alpha.png b/res/drawable-xxxhdpi/ic_menu_settings_alpha.png
deleted file mode 100644
index 36e8e68..0000000
--- a/res/drawable-xxxhdpi/ic_menu_settings_alpha.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_menu_share_alpha.png b/res/drawable-xxxhdpi/ic_menu_share_alpha.png
index 68831f3..5a8544c 100644
--- a/res/drawable-xxxhdpi/ic_menu_share_alpha.png
+++ b/res/drawable-xxxhdpi/ic_menu_share_alpha.png
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_menu_sortby_am_alpha.png b/res/drawable-xxxhdpi/ic_menu_sortby_am_alpha.png
index 827a92c..631663a 100644
--- a/res/drawable-xxxhdpi/ic_menu_sortby_am_alpha.png
+++ b/res/drawable-xxxhdpi/ic_menu_sortby_am_alpha.png
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_menu_undo_am_alpha.png b/res/drawable-xxxhdpi/ic_menu_undo_am_alpha.png
deleted file mode 100644
index 0f12b7d..0000000
--- a/res/drawable-xxxhdpi/ic_menu_undo_am_alpha.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_menu_view_grid_alpha.png b/res/drawable-xxxhdpi/ic_menu_view_grid_alpha.png
index df1bac1..5d1e8d9 100644
--- a/res/drawable-xxxhdpi/ic_menu_view_grid_alpha.png
+++ b/res/drawable-xxxhdpi/ic_menu_view_grid_alpha.png
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_menu_view_list_alpha.png b/res/drawable-xxxhdpi/ic_menu_view_list_alpha.png
index 9420374..7c1506b 100644
--- a/res/drawable-xxxhdpi/ic_menu_view_list_alpha.png
+++ b/res/drawable-xxxhdpi/ic_menu_view_list_alpha.png
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_open_am_alpha.png b/res/drawable-xxxhdpi/ic_open_am_alpha.png
deleted file mode 100644
index 0394c5c..0000000
--- a/res/drawable-xxxhdpi/ic_open_am_alpha.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_popout_am_alpha.png b/res/drawable-xxxhdpi/ic_popout_am_alpha.png
deleted file mode 100644
index 325d374..0000000
--- a/res/drawable-xxxhdpi/ic_popout_am_alpha.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_root_download_alpha.png b/res/drawable-xxxhdpi/ic_root_download_alpha.png
index 87a5210..8c83bff 100644
--- a/res/drawable-xxxhdpi/ic_root_download_alpha.png
+++ b/res/drawable-xxxhdpi/ic_root_download_alpha.png
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_root_folder_am_alpha.png b/res/drawable-xxxhdpi/ic_root_folder_am_alpha.png
deleted file mode 100644
index bb41a91..0000000
--- a/res/drawable-xxxhdpi/ic_root_folder_am_alpha.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_root_recent_alpha.png b/res/drawable-xxxhdpi/ic_root_recent_alpha.png
index baa723d..68df974 100644
--- a/res/drawable-xxxhdpi/ic_root_recent_alpha.png
+++ b/res/drawable-xxxhdpi/ic_root_recent_alpha.png
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_root_sdcard_alpha.png b/res/drawable-xxxhdpi/ic_root_sdcard_alpha.png
index 39c737f..c7daa2a 100644
--- a/res/drawable-xxxhdpi/ic_root_sdcard_alpha.png
+++ b/res/drawable-xxxhdpi/ic_root_sdcard_alpha.png
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_root_usb_light_alpha.png b/res/drawable-xxxhdpi/ic_root_usb_light_alpha.png
deleted file mode 100644
index 88973e0..0000000
--- a/res/drawable-xxxhdpi/ic_root_usb_light_alpha.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable/ic_cab_accept.xml b/res/drawable/ic_cab_accept.xml
deleted file mode 100644
index cda2845..0000000
--- a/res/drawable/ic_cab_accept.xml
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
- android:src="@drawable/ic_cab_accept_alpha"
- android:tint="?android:attr/colorControlNormal" />
diff --git a/res/drawable/ic_cab_select_item.xml b/res/drawable/ic_cab_select_item.xml
deleted file mode 100644
index e440ee9..0000000
--- a/res/drawable/ic_cab_select_item.xml
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
- android:src="@drawable/ic_cab_select_item_alpha"
- android:tint="?android:attr/colorControlNormal" />
diff --git a/res/drawable/ic_doc_album.xml b/res/drawable/ic_doc_album.xml
index 6b80a33..e7965e6 100644
--- a/res/drawable/ic_doc_album.xml
+++ b/res/drawable/ic_doc_album.xml
@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
android:src="@drawable/ic_doc_album_alpha"
- android:tint="@*android:color/secondary_text_material_light" />
+ android:tint="?android:attr/colorControlNormal" />
diff --git a/res/drawable/ic_doc_apk.xml b/res/drawable/ic_doc_apk.xml
index d1ba313..4f8f06e 100644
--- a/res/drawable/ic_doc_apk.xml
+++ b/res/drawable/ic_doc_apk.xml
@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
android:src="@drawable/ic_doc_apk_alpha"
- android:tint="@*android:color/secondary_text_material_light" />
+ android:tint="?android:attr/colorControlNormal" />
diff --git a/res/drawable/ic_doc_audio.xml b/res/drawable/ic_doc_audio.xml
index 24bd9fa..cf18b4f 100644
--- a/res/drawable/ic_doc_audio.xml
+++ b/res/drawable/ic_doc_audio.xml
@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
android:src="@drawable/ic_doc_audio_alpha"
- android:tint="@*android:color/secondary_text_material_light" />
+ android:tint="?android:attr/colorControlNormal" />
diff --git a/res/drawable/ic_doc_certificate.xml b/res/drawable/ic_doc_certificate.xml
index 3e5b9e6..c28ed4f 100644
--- a/res/drawable/ic_doc_certificate.xml
+++ b/res/drawable/ic_doc_certificate.xml
@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
android:src="@drawable/ic_doc_certificate_alpha"
- android:tint="@*android:color/secondary_text_material_light" />
+ android:tint="?android:attr/colorControlNormal" />
diff --git a/res/drawable/ic_doc_codes.xml b/res/drawable/ic_doc_codes.xml
index 441c669..0de721a 100644
--- a/res/drawable/ic_doc_codes.xml
+++ b/res/drawable/ic_doc_codes.xml
@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
android:src="@drawable/ic_doc_codes_alpha"
- android:tint="@*android:color/secondary_text_material_light" />
+ android:tint="?android:attr/colorControlNormal" />
diff --git a/res/drawable/ic_doc_compressed.xml b/res/drawable/ic_doc_compressed.xml
index 15ecb6b..a49cfa4 100644
--- a/res/drawable/ic_doc_compressed.xml
+++ b/res/drawable/ic_doc_compressed.xml
@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
android:src="@drawable/ic_doc_compressed_alpha"
- android:tint="@*android:color/secondary_text_material_light" />
+ android:tint="?android:attr/colorControlNormal" />
diff --git a/res/drawable/ic_doc_contact.xml b/res/drawable/ic_doc_contact.xml
index 361666a..bf550cb 100644
--- a/res/drawable/ic_doc_contact.xml
+++ b/res/drawable/ic_doc_contact.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
android:src="@drawable/ic_doc_contact_am_alpha"
- android:tint="@*android:color/secondary_text_material_light"
+ android:tint="?android:attr/colorControlNormal"
android:autoMirrored="true" />
diff --git a/res/drawable/ic_doc_event.xml b/res/drawable/ic_doc_event.xml
index a17018b..25cf0f3 100644
--- a/res/drawable/ic_doc_event.xml
+++ b/res/drawable/ic_doc_event.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
android:src="@drawable/ic_doc_event_am_alpha"
- android:tint="@*android:color/secondary_text_material_light"
+ android:tint="?android:attr/colorControlNormal"
android:autoMirrored="true" />
diff --git a/res/drawable/ic_doc_excel.xml b/res/drawable/ic_doc_excel.xml
index 7d05361..3354725 100644
--- a/res/drawable/ic_doc_excel.xml
+++ b/res/drawable/ic_doc_excel.xml
@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
android:src="@drawable/ic_doc_excel_alpha"
- android:tint="@*android:color/secondary_text_material_light" />
+ android:tint="?android:attr/colorControlNormal" />
diff --git a/res/drawable/ic_doc_folder.xml b/res/drawable/ic_doc_folder.xml
index 85f5e7c..73de60e 100644
--- a/res/drawable/ic_doc_folder.xml
+++ b/res/drawable/ic_doc_folder.xml
@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
android:src="@drawable/ic_doc_folder_alpha"
- android:tint="@*android:color/secondary_text_material_light" />
+ android:tint="?android:attr/colorControlNormal" />
diff --git a/res/drawable/ic_doc_font.xml b/res/drawable/ic_doc_font.xml
index e79ed0c..c74cb9c 100644
--- a/res/drawable/ic_doc_font.xml
+++ b/res/drawable/ic_doc_font.xml
@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
android:src="@drawable/ic_doc_font_alpha"
- android:tint="@*android:color/secondary_text_material_light" />
+ android:tint="?android:attr/colorControlNormal" />
diff --git a/res/drawable/ic_doc_generic.xml b/res/drawable/ic_doc_generic.xml
index d0d999f..a4ee29d 100644
--- a/res/drawable/ic_doc_generic.xml
+++ b/res/drawable/ic_doc_generic.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
android:src="@drawable/ic_doc_generic_am_alpha"
- android:tint="@*android:color/secondary_text_material_light"
+ android:tint="?android:attr/colorControlNormal"
android:autoMirrored="true" />
diff --git a/res/drawable/ic_doc_image.xml b/res/drawable/ic_doc_image.xml
index fa949e0..9d4c359 100644
--- a/res/drawable/ic_doc_image.xml
+++ b/res/drawable/ic_doc_image.xml
@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
android:src="@drawable/ic_doc_image_alpha"
- android:tint="@*android:color/secondary_text_material_light" />
+ android:tint="?android:attr/colorControlNormal" />
diff --git a/res/drawable/ic_doc_pdf.xml b/res/drawable/ic_doc_pdf.xml
index 51620f5..5c37498 100644
--- a/res/drawable/ic_doc_pdf.xml
+++ b/res/drawable/ic_doc_pdf.xml
@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
android:src="@drawable/ic_doc_pdf_alpha"
- android:tint="@*android:color/secondary_text_material_light" />
+ android:tint="?android:attr/colorControlNormal" />
diff --git a/res/drawable/ic_doc_powerpoint.xml b/res/drawable/ic_doc_powerpoint.xml
index 2a048c8..f0a6c39 100644
--- a/res/drawable/ic_doc_powerpoint.xml
+++ b/res/drawable/ic_doc_powerpoint.xml
@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
android:src="@drawable/ic_doc_powerpoint_alpha"
- android:tint="@*android:color/secondary_text_material_light" />
+ android:tint="?android:attr/colorControlNormal" />
diff --git a/res/drawable/ic_doc_presentation.xml b/res/drawable/ic_doc_presentation.xml
index 71bb853..a14f866 100644
--- a/res/drawable/ic_doc_presentation.xml
+++ b/res/drawable/ic_doc_presentation.xml
@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
android:src="@drawable/ic_doc_presentation_alpha"
- android:tint="@*android:color/secondary_text_material_light" />
+ android:tint="?android:attr/colorControlNormal" />
diff --git a/res/drawable/ic_doc_spreadsheet.xml b/res/drawable/ic_doc_spreadsheet.xml
index 4b4cd99..40f2515 100644
--- a/res/drawable/ic_doc_spreadsheet.xml
+++ b/res/drawable/ic_doc_spreadsheet.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
android:src="@drawable/ic_doc_spreadsheet_am_alpha"
- android:tint="@*android:color/secondary_text_material_light"
+ android:tint="?android:attr/colorControlNormal"
android:autoMirrored="true" />
diff --git a/res/drawable/ic_doc_text.xml b/res/drawable/ic_doc_text.xml
index 8224a21..ffa9e70 100644
--- a/res/drawable/ic_doc_text.xml
+++ b/res/drawable/ic_doc_text.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
android:src="@drawable/ic_doc_text_am_alpha"
- android:tint="@*android:color/secondary_text_material_light"
+ android:tint="?android:attr/colorControlNormal"
android:autoMirrored="true" />
diff --git a/res/drawable/ic_doc_video.xml b/res/drawable/ic_doc_video.xml
index 1fed041..2d048c2 100644
--- a/res/drawable/ic_doc_video.xml
+++ b/res/drawable/ic_doc_video.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
android:src="@drawable/ic_doc_video_am_alpha"
- android:tint="@*android:color/secondary_text_material_light"
+ android:tint="?android:attr/colorControlNormal"
android:autoMirrored="true" />
diff --git a/res/drawable/ic_doc_word.xml b/res/drawable/ic_doc_word.xml
index addfb47..afcc533 100644
--- a/res/drawable/ic_doc_word.xml
+++ b/res/drawable/ic_doc_word.xml
@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
android:src="@drawable/ic_doc_word_alpha"
- android:tint="@*android:color/secondary_text_material_light" />
+ android:tint="?android:attr/colorControlNormal" />
diff --git a/res/drawable/ic_folder.xml b/res/drawable/ic_folder.xml
deleted file mode 100644
index 8adaf3b..0000000
--- a/res/drawable/ic_folder.xml
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
- android:src="@drawable/ic_folder_alpha"
- android:tint="?android:attr/colorControlNormal" />
diff --git a/res/drawable/ic_grid_folder.xml b/res/drawable/ic_grid_folder.xml
index 344d558..0c87869 100644
--- a/res/drawable/ic_grid_folder.xml
+++ b/res/drawable/ic_grid_folder.xml
@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
android:src="@drawable/ic_grid_folder_alpha"
- android:tint="@*android:color/secondary_text_material_light" />
+ android:tint="?android:attr/colorControlNormal" />
diff --git a/res/drawable/ic_menu_disconnect.xml b/res/drawable/ic_menu_disconnect.xml
deleted file mode 100644
index 15c5c39..0000000
--- a/res/drawable/ic_menu_disconnect.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
- android:src="@drawable/ic_menu_disconnect_am_alpha"
- android:tint="?android:attr/colorControlNormal"
- android:autoMirrored="true" />
diff --git a/res/drawable/ic_menu_overflow.xml b/res/drawable/ic_menu_overflow.xml
deleted file mode 100644
index a579b60..0000000
--- a/res/drawable/ic_menu_overflow.xml
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
- android:src="@drawable/ic_menu_overflow_alpha"
- android:tint="?android:attr/colorControlNormal" />
diff --git a/res/drawable/ic_menu_rename.xml b/res/drawable/ic_menu_rename.xml
deleted file mode 100644
index b5ba30c..0000000
--- a/res/drawable/ic_menu_rename.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
- android:src="@drawable/ic_menu_rename_am_alpha"
- android:tint="?android:attr/colorControlNormal"
- android:autoMirrored="true" />
diff --git a/res/drawable/ic_menu_settings.xml b/res/drawable/ic_menu_settings.xml
deleted file mode 100644
index 7606e75..0000000
--- a/res/drawable/ic_menu_settings.xml
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
- android:src="@drawable/ic_menu_settings_alpha"
- android:tint="?android:attr/colorControlNormal" />
diff --git a/res/drawable/ic_menu_undo.xml b/res/drawable/ic_menu_undo.xml
deleted file mode 100644
index d66ba6d..0000000
--- a/res/drawable/ic_menu_undo.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
- android:src="@drawable/ic_menu_undo_am_alpha"
- android:tint="?android:attr/colorControlNormal"
- android:autoMirrored="true" />
diff --git a/res/drawable/ic_open.xml b/res/drawable/ic_open.xml
deleted file mode 100644
index e3f1faf..0000000
--- a/res/drawable/ic_open.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
- android:src="@drawable/ic_open_am_alpha"
- android:tint="?android:attr/colorControlNormal"
- android:autoMirrored="true" />
diff --git a/res/drawable/ic_popout.xml b/res/drawable/ic_popout.xml
deleted file mode 100644
index e7d0f75..0000000
--- a/res/drawable/ic_popout.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
- android:src="@drawable/ic_popout_am_alpha"
- android:tint="?android:attr/colorControlNormal"
- android:autoMirrored="true" />
diff --git a/res/drawable/ic_root_download.xml b/res/drawable/ic_root_download.xml
index a7642f9..f07d8f0 100644
--- a/res/drawable/ic_root_download.xml
+++ b/res/drawable/ic_root_download.xml
@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
android:src="@drawable/ic_root_download_alpha"
- android:tint="@*android:color/secondary_text_material_light" />
+ android:tint="?android:attr/colorControlNormal" />
diff --git a/res/drawable/ic_root_folder.xml b/res/drawable/ic_root_folder.xml
deleted file mode 100644
index cda9db8..0000000
--- a/res/drawable/ic_root_folder.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
- android:src="@drawable/ic_root_folder_am_alpha"
- android:tint="@*android:color/secondary_text_material_light"
- android:autoMirrored="true" />
diff --git a/res/drawable/ic_root_recent.xml b/res/drawable/ic_root_recent.xml
index d6b33c9..41e6a5e 100644
--- a/res/drawable/ic_root_recent.xml
+++ b/res/drawable/ic_root_recent.xml
@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
android:src="@drawable/ic_root_recent_alpha"
- android:tint="@*android:color/secondary_text_material_light" />
+ android:tint="?android:attr/colorControlNormal" />
diff --git a/res/drawable/ic_root_sdcard.xml b/res/drawable/ic_root_sdcard.xml
index 0b9523b..27cfa81 100644
--- a/res/drawable/ic_root_sdcard.xml
+++ b/res/drawable/ic_root_sdcard.xml
@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
android:src="@drawable/ic_root_sdcard_alpha"
- android:tint="@*android:color/secondary_text_material_light" />
+ android:tint="?android:attr/colorControlNormal" />
diff --git a/res/drawable/ic_root_usb_light.xml b/res/drawable/ic_root_usb_light.xml
deleted file mode 100644
index ff2b197..0000000
--- a/res/drawable/ic_root_usb_light.xml
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
- android:src="@drawable/ic_root_usb_light_alpha"
- android:tint="@*android:color/secondary_text_material_light" />
diff --git a/res/drawable/item_doc_grid_overlay.xml b/res/drawable/item_doc_grid_overlay.xml
index 3fbd25e..3f50fb9 100644
--- a/res/drawable/item_doc_grid_overlay.xml
+++ b/res/drawable/item_doc_grid_overlay.xml
@@ -14,9 +14,7 @@
limitations under the License.
-->
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:state_focused="true" android:state_activated="true" android:drawable="@color/item_doc_grid_overlay_activated" />
- <item android:state_focused="false" android:state_activated="true" android:drawable="@color/item_doc_grid_overlay_activated" />
- <item android:state_enabled="false" android:drawable="@color/item_doc_grid_overlay_disabled" />
- <item android:drawable="@android:color/transparent" />
-</selector>
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+ android:shape="rectangle">
+ <solid android:color="@color/item_doc_grid_overlay" />
+</shape>
diff --git a/res/drawable/item_doc_list_background.xml b/res/drawable/item_doc_list_background.xml
index b879542..13910bb 100644
--- a/res/drawable/item_doc_list_background.xml
+++ b/res/drawable/item_doc_list_background.xml
@@ -14,8 +14,7 @@
limitations under the License.
-->
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:state_focused="true" android:state_activated="true" android:drawable="@color/item_doc_list_background_activated" />
- <item android:state_focused="false" android:state_activated="true" android:drawable="@color/item_doc_list_background_activated" />
- <item android:drawable="@android:color/transparent" />
-</selector>
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+ android:shape="rectangle">
+ <solid android:color="@color/item_doc_list_background_activated" />
+</shape>
diff --git a/res/drawable/item_root_background.xml b/res/drawable/item_root_background.xml
index 1b3f44a..93c965f 100644
--- a/res/drawable/item_root_background.xml
+++ b/res/drawable/item_root_background.xml
@@ -16,10 +16,10 @@
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_focused="true" android:state_activated="true">
- <color android:color="?android:attr/colorAccent" />
+ <color android:color="@color/material_grey_300" />
</item>
<item android:state_focused="false" android:state_activated="true">
- <color android:color="?android:attr/colorAccent" />
+ <color android:color="@color/material_grey_300" />
</item>
<item android:drawable="@android:color/transparent" />
</selector>
diff --git a/res/layout-sw720dp/activity.xml b/res/layout-sw720dp/activity.xml
index 1cffd17..2a273f4 100644
--- a/res/layout-sw720dp/activity.xml
+++ b/res/layout-sw720dp/activity.xml
@@ -19,7 +19,7 @@
android:layout_height="match_parent"
android:orientation="vertical">
- <Toolbar
+ <com.android.documentsui.DocumentsToolBar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?android:attr/actionBarSize"
@@ -34,14 +34,16 @@
android:layout_marginStart="4dp"
android:overlapAnchor="true" />
- </Toolbar>
+ </com.android.documentsui.DocumentsToolBar>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:orientation="horizontal"
- android:baselineAligned="false">
+ android:baselineAligned="false"
+ android:divider="?android:attr/dividerVertical"
+ android:showDividers="middle">
<FrameLayout
android:id="@+id/container_roots"
@@ -53,8 +55,7 @@
android:layout_height="match_parent"
android:layout_weight="1"
android:orientation="vertical"
- android:elevation="8dp"
- android:background="@color/material_grey_50">
+ android:elevation="8dp">
<com.android.documentsui.DirectoryContainerView
android:id="@+id/container_directory"
@@ -66,7 +67,6 @@
android:id="@+id/container_save"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:background="@color/material_grey_50"
android:elevation="8dp" />
</LinearLayout>
diff --git a/res/layout/activity.xml b/res/layout/activity.xml
index 120168e..43fdaf2 100644
--- a/res/layout/activity.xml
+++ b/res/layout/activity.xml
@@ -24,7 +24,7 @@
android:layout_height="match_parent"
android:orientation="vertical">
- <Toolbar
+ <com.android.documentsui.DocumentsToolBar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?android:attr/actionBarSize"
@@ -39,7 +39,7 @@
android:layout_marginStart="4dp"
android:overlapAnchor="true" />
- </Toolbar>
+ </com.android.documentsui.DocumentsToolBar>
<com.android.documentsui.DirectoryContainerView
android:id="@+id/container_directory"
@@ -51,7 +51,6 @@
android:id="@+id/container_save"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:background="@color/material_grey_50"
android:elevation="8dp" />
</LinearLayout>
diff --git a/res/layout/dialog_create_dir.xml b/res/layout/dialog_create_dir.xml
index 54e26b4..5ed476f 100644
--- a/res/layout/dialog_create_dir.xml
+++ b/res/layout/dialog_create_dir.xml
@@ -22,6 +22,7 @@
<EditText
android:id="@android:id/text1"
android:layout_width="match_parent"
- android:layout_height="wrap_content" />
+ android:layout_height="wrap_content"
+ android:inputType="text" />
</FrameLayout>
diff --git a/res/layout/fragment_directory.xml b/res/layout/fragment_directory.xml
index 4717839..2c08e72 100644
--- a/res/layout/fragment_directory.xml
+++ b/res/layout/fragment_directory.xml
@@ -16,8 +16,7 @@
<com.android.documentsui.DirectoryView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:background="@color/material_grey_50">
+ android:layout_height="match_parent">
<TextView
android:id="@android:id/empty"
diff --git a/res/layout/fragment_pick.xml b/res/layout/fragment_pick.xml
index 5735871..40d4eb5 100644
--- a/res/layout/fragment_pick.xml
+++ b/res/layout/fragment_pick.xml
@@ -19,14 +19,19 @@
android:layout_height="wrap_content"
android:orientation="horizontal"
android:baselineAligned="false"
- android:gravity="center_vertical"
+ android:gravity="end"
+ android:paddingEnd="8dp"
android:minHeight="?android:attr/listPreferredItemHeightSmall">
-
+ <Button
+ android:id="@android:id/button2"
+ android:layout_width="wrap_content"
+ android:layout_height="match_parent"
+ android:text="@android:string/cancel"
+ android:visibility="gone"
+ style="?android:attr/buttonBarNegativeButtonStyle" />
<Button
android:id="@android:id/button1"
- android:layout_width="match_parent"
+ android:layout_width="wrap_content"
android:layout_height="match_parent"
- android:textAllCaps="false"
style="?android:attr/buttonBarPositiveButtonStyle" />
-
</LinearLayout>
diff --git a/res/menu/activity.xml b/res/menu/activity.xml
index b9b8054..5b944ab 100644
--- a/res/menu/activity.xml
+++ b/res/menu/activity.xml
@@ -60,4 +60,8 @@
<item
android:id="@+id/menu_file_size"
android:showAsAction="never" />
+ <item
+ android:id="@+id/menu_settings"
+ android:title="@string/menu_settings"
+ android:showAsAction="never" />
</menu>
diff --git a/res/menu/mode_directory.xml b/res/menu/mode_directory.xml
index 0a3645f..4b89823 100644
--- a/res/menu/mode_directory.xml
+++ b/res/menu/mode_directory.xml
@@ -29,4 +29,12 @@
android:icon="@drawable/ic_menu_delete"
android:title="@string/menu_delete"
android:showAsAction="always" />
+ <item
+ android:id="@+id/menu_select_all"
+ android:title="@string/menu_select_all"
+ android:showAsAction="never" />
+ <item
+ android:id="@+id/menu_copy"
+ android:title="@string/menu_copy"
+ android:showAsAction="never" />
</menu>
diff --git a/res/values-af/strings.xml b/res/values-af/strings.xml
index ca76a7d..0608d27 100644
--- a/res/values-af/strings.xml
+++ b/res/values-af/strings.xml
@@ -17,7 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="2783841764617238354">"Dokumente"</string>
- <string name="title_open" msgid="4353228937663917801">"Maak oop vanaf"</string>
+ <string name="title_open" msgid="4353228937663917801">"Maak oop vanuit"</string>
<string name="title_save" msgid="2433679664882857999">"Stoor na"</string>
<string name="menu_create_dir" msgid="5947289605844398389">"Skep vouer"</string>
<string name="menu_grid" msgid="6878021334497835259">"Roosteraansig"</string>
@@ -29,8 +29,16 @@
<string name="menu_save" msgid="2394743337684426338">"Stoor"</string>
<string name="menu_share" msgid="3075149983979628146">"Deel"</string>
<string name="menu_delete" msgid="8138799623850614177">"Vee uit"</string>
- <string name="menu_select" msgid="8711270657353563424">"Kies \"<xliff:g id="DIRECTORY">^1</xliff:g>\""</string>
- <string name="mode_selected_count" msgid="459111894725594625">"<xliff:g id="COUNT">%1$d</xliff:g> gekies"</string>
+ <string name="menu_select_all" msgid="8323579667348729928">"Kies alles"</string>
+ <string name="menu_copy" msgid="3612326052677229148">"Kopieer na …"</string>
+ <string name="menu_advanced_show" product="nosdcard" msgid="4693652895715631401">"Wys interne berging"</string>
+ <string name="menu_advanced_show" product="default" msgid="5792182900084144261">"Wys SD-kaart"</string>
+ <string name="menu_advanced_hide" product="nosdcard" msgid="4218809952721972589">"Versteek interne berging"</string>
+ <string name="menu_advanced_hide" product="default" msgid="4845869969015718848">"Versteek SD-kaart"</string>
+ <string name="menu_file_size_show" msgid="3240323619260823076">"Wys lêergrootte"</string>
+ <string name="menu_file_size_hide" msgid="8881975928502581042">"Versteek lêergrootte"</string>
+ <string name="button_select" msgid="527196987259139214">"Kies"</string>
+ <string name="button_copy" msgid="8706475544635021302">"Kopieer"</string>
<string name="sort_name" msgid="9183560467917256779">"Volgens naam"</string>
<string name="sort_date" msgid="586080032956151448">"Volgens datum gewysig"</string>
<string name="sort_size" msgid="3350681319735474741">"Volgens grootte"</string>
@@ -45,11 +53,22 @@
<string name="root_type_shortcut" msgid="3318760609471618093">"Kortpaaie"</string>
<string name="root_type_device" msgid="7121342474653483538">"Toestelle"</string>
<string name="root_type_apps" msgid="8838065367985945189">"Nog programme"</string>
- <string name="pref_advanced_devices" msgid="903257239609301276">"Wys gevorderde toestelle"</string>
- <string name="pref_file_size" msgid="2826879315743961459">"Wys lêergrootte"</string>
- <string name="pref_device_size" msgid="3542106883278997222">"Wys toestelgrootte"</string>
<string name="empty" msgid="7858882803708117596">"Geen items nie"</string>
<string name="toast_no_application" msgid="1339885974067891667">"Kan lêer nie oopmaak nie"</string>
<string name="toast_failed_delete" msgid="2180678019407244069">"Kan sommige dokumente nie uitvee nie"</string>
<string name="share_via" msgid="8966594246261344259">"Deel via"</string>
+ <string name="copy_notification_title" msgid="6374299806748219777">"Kopieer tans lêers"</string>
+ <string name="copy_remaining" msgid="6283790937387975095">"<xliff:g id="DURATION">%s</xliff:g> oor"</string>
+ <plurals name="copy_begin" formatted="false" msgid="9071199452634086365">
+ <item quantity="other">Kopieer tans <xliff:g id="COUNT_1">%1$d</xliff:g> lêers.</item>
+ <item quantity="one">Kopieer tans <xliff:g id="COUNT_0">%1$d</xliff:g> lêer.</item>
+ </plurals>
+ <string name="copy_preparing" msgid="3896202461003039386">"Maak tans gereed vir kopieer …"</string>
+ <plurals name="copy_error_notification_title" formatted="false" msgid="5267616889076217261">
+ <item quantity="other">Kon <xliff:g id="COUNT_1">%1$d</xliff:g> lêers nie kopieer nie</item>
+ <item quantity="one">Kon <xliff:g id="COUNT_0">%1$d</xliff:g> lêer nie kopieer nie</item>
+ </plurals>
+ <string name="notification_touch_for_details" msgid="4483108577842961665">"Raak om besonderhede te bekyk"</string>
+ <string name="retry" msgid="7564024179122207376">"Herprobeer"</string>
+ <string name="copy_failure_alert_content" msgid="3715575000297709082">"Hierdie lêers is nie gekopieer nie: <xliff:g id="LIST">%1$s</xliff:g>"</string>
</resources>
diff --git a/res/values-am/strings.xml b/res/values-am/strings.xml
index 84879d5..609ad0f 100644
--- a/res/values-am/strings.xml
+++ b/res/values-am/strings.xml
@@ -29,8 +29,16 @@
<string name="menu_save" msgid="2394743337684426338">"አስቀምጥ"</string>
<string name="menu_share" msgid="3075149983979628146">"አጋራ"</string>
<string name="menu_delete" msgid="8138799623850614177">"ሰርዝ"</string>
- <string name="menu_select" msgid="8711270657353563424">"«<xliff:g id="DIRECTORY">^1</xliff:g>»ን ይምረጡ"</string>
- <string name="mode_selected_count" msgid="459111894725594625">"<xliff:g id="COUNT">%1$d</xliff:g> ተመርጠዋል"</string>
+ <string name="menu_select_all" msgid="8323579667348729928">"ሁሉንም ምረጥ"</string>
+ <string name="menu_copy" msgid="3612326052677229148">"ቅዳ ወደ…"</string>
+ <string name="menu_advanced_show" product="nosdcard" msgid="4693652895715631401">"ውስጣዊ ማከማቻ አሳይ"</string>
+ <string name="menu_advanced_show" product="default" msgid="5792182900084144261">"SD ካርድ አሳይ"</string>
+ <string name="menu_advanced_hide" product="nosdcard" msgid="4218809952721972589">"ውስጣዊ ማከማቻ ደብቅ"</string>
+ <string name="menu_advanced_hide" product="default" msgid="4845869969015718848">"SD ካርድ ደብቅ"</string>
+ <string name="menu_file_size_show" msgid="3240323619260823076">"የፋይል መጠን አሳይ"</string>
+ <string name="menu_file_size_hide" msgid="8881975928502581042">"የፋይል መጠን ደብቅ"</string>
+ <string name="button_select" msgid="527196987259139214">"ምረጥ"</string>
+ <string name="button_copy" msgid="8706475544635021302">"ቅዳ"</string>
<string name="sort_name" msgid="9183560467917256779">"በስም"</string>
<string name="sort_date" msgid="586080032956151448">"በተለወጠበት ቀን"</string>
<string name="sort_size" msgid="3350681319735474741">"በመጠን"</string>
@@ -45,11 +53,22 @@
<string name="root_type_shortcut" msgid="3318760609471618093">"አቋራጮች"</string>
<string name="root_type_device" msgid="7121342474653483538">"መሣሪያዎች"</string>
<string name="root_type_apps" msgid="8838065367985945189">"ተጨማሪ መተግበሪያዎች"</string>
- <string name="pref_advanced_devices" msgid="903257239609301276">"የላቁ መሳሪያዎችን አሳይ"</string>
- <string name="pref_file_size" msgid="2826879315743961459">"የፋይል መጠን አሳይ"</string>
- <string name="pref_device_size" msgid="3542106883278997222">"የመሳሪያ መጠን አሳይ"</string>
<string name="empty" msgid="7858882803708117596">"ምንም ንጥሎች የሉም"</string>
<string name="toast_no_application" msgid="1339885974067891667">"ፋይል መክፈት አይቻልም"</string>
<string name="toast_failed_delete" msgid="2180678019407244069">"አንዳንድ ሰነዶችን መሰረዝ አልተቻለም"</string>
<string name="share_via" msgid="8966594246261344259">"በሚከተለው በኩል ያጋሩ"</string>
+ <string name="copy_notification_title" msgid="6374299806748219777">"ፋይሎች በመገልበጥ ላይ"</string>
+ <string name="copy_remaining" msgid="6283790937387975095">"<xliff:g id="DURATION">%s</xliff:g> ቀርቷል"</string>
+ <plurals name="copy_begin" formatted="false" msgid="9071199452634086365">
+ <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> ፋይሎች በመቅዳት ላይ።</item>
+ <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> ፋይሎች በመቅዳት ላይ።</item>
+ </plurals>
+ <string name="copy_preparing" msgid="3896202461003039386">"ቅጂ በማዘጋጀት ላይ…"</string>
+ <plurals name="copy_error_notification_title" formatted="false" msgid="5267616889076217261">
+ <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> ፋይሎችን መቅዳት አልተቻለም</item>
+ <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> ፋይሎችን መቅዳት አልተቻለም</item>
+ </plurals>
+ <string name="notification_touch_for_details" msgid="4483108577842961665">"ዝርዝሮችን ለመመልከት ይንኩ።"</string>
+ <string name="retry" msgid="7564024179122207376">"እንደገና ይሞክሩ"</string>
+ <string name="copy_failure_alert_content" msgid="3715575000297709082">"እነዚህ ፋይሎች አልተቀዱም፦ <xliff:g id="LIST">%1$s</xliff:g>"</string>
</resources>
diff --git a/res/values-ar/strings.xml b/res/values-ar/strings.xml
index 5c5d863..eb2e2f2 100644
--- a/res/values-ar/strings.xml
+++ b/res/values-ar/strings.xml
@@ -29,8 +29,16 @@
<string name="menu_save" msgid="2394743337684426338">"حفظ"</string>
<string name="menu_share" msgid="3075149983979628146">"مشاركة"</string>
<string name="menu_delete" msgid="8138799623850614177">"حذف"</string>
- <string name="menu_select" msgid="8711270657353563424">"تحديد \"<xliff:g id="DIRECTORY">^1</xliff:g>\""</string>
- <string name="mode_selected_count" msgid="459111894725594625">"تم تحديد <xliff:g id="COUNT">%1$d</xliff:g>"</string>
+ <string name="menu_select_all" msgid="8323579667348729928">"تحديد الكل"</string>
+ <string name="menu_copy" msgid="3612326052677229148">"نسخ إلى…"</string>
+ <string name="menu_advanced_show" product="nosdcard" msgid="4693652895715631401">"إظهار وحدة التخزين الداخلية"</string>
+ <string name="menu_advanced_show" product="default" msgid="5792182900084144261">"إظهار بطاقة SD"</string>
+ <string name="menu_advanced_hide" product="nosdcard" msgid="4218809952721972589">"إخفاء وحدة التخزين الداخلية"</string>
+ <string name="menu_advanced_hide" product="default" msgid="4845869969015718848">"إخفاء بطاقة SD"</string>
+ <string name="menu_file_size_show" msgid="3240323619260823076">"إظهار حجم الملف"</string>
+ <string name="menu_file_size_hide" msgid="8881975928502581042">"إخفاء حجم الملف"</string>
+ <string name="button_select" msgid="527196987259139214">"تحديد"</string>
+ <string name="button_copy" msgid="8706475544635021302">"نسخ"</string>
<string name="sort_name" msgid="9183560467917256779">"بحسب الاسم"</string>
<string name="sort_date" msgid="586080032956151448">"بحسب تاريخ التعديل"</string>
<string name="sort_size" msgid="3350681319735474741">"بحسب الحجم"</string>
@@ -45,11 +53,30 @@
<string name="root_type_shortcut" msgid="3318760609471618093">"اختصارات"</string>
<string name="root_type_device" msgid="7121342474653483538">"أجهزة"</string>
<string name="root_type_apps" msgid="8838065367985945189">"المزيد من التطبيقات"</string>
- <string name="pref_advanced_devices" msgid="903257239609301276">"عرض الأجهزة المتقدمة"</string>
- <string name="pref_file_size" msgid="2826879315743961459">"عرض حجم الملف"</string>
- <string name="pref_device_size" msgid="3542106883278997222">"عرض حجم الجهاز"</string>
<string name="empty" msgid="7858882803708117596">"ليس هناك أي عناصر"</string>
<string name="toast_no_application" msgid="1339885974067891667">"لا يمكن فتح الملف"</string>
<string name="toast_failed_delete" msgid="2180678019407244069">"تعذر حذف بعض المستندات"</string>
<string name="share_via" msgid="8966594246261344259">"مشاركة عبر"</string>
+ <string name="copy_notification_title" msgid="6374299806748219777">"جارٍ نسخ الملفات"</string>
+ <string name="copy_remaining" msgid="6283790937387975095">"المدة المتبقية: <xliff:g id="DURATION">%s</xliff:g>"</string>
+ <plurals name="copy_begin" formatted="false" msgid="9071199452634086365">
+ <item quantity="zero">جارٍ نسخ <xliff:g id="COUNT_1">%1$d</xliff:g> ملفات.</item>
+ <item quantity="two">جارٍ نسخ ملفين (<xliff:g id="COUNT_1">%1$d</xliff:g>).</item>
+ <item quantity="few">جارٍ نسخ <xliff:g id="COUNT_1">%1$d</xliff:g> ملفات.</item>
+ <item quantity="many">جارٍ نسخ <xliff:g id="COUNT_1">%1$d</xliff:g> ملفًا.</item>
+ <item quantity="other">جارٍ نسخ <xliff:g id="COUNT_1">%1$d</xliff:g> من الملفات.</item>
+ <item quantity="one">جارٍ نسخ ملف واحد (<xliff:g id="COUNT_0">%1$d</xliff:g>).</item>
+ </plurals>
+ <string name="copy_preparing" msgid="3896202461003039386">"جارٍ التحضير للنسخ ..."</string>
+ <plurals name="copy_error_notification_title" formatted="false" msgid="5267616889076217261">
+ <item quantity="zero">لم يتعذر نسخ أية ملفات (<xliff:g id="COUNT_1">%1$d</xliff:g>)</item>
+ <item quantity="two">تعذر نسخ ملفين (<xliff:g id="COUNT_1">%1$d</xliff:g>)</item>
+ <item quantity="few"> تعذر نسخ <xliff:g id="COUNT_1">%1$d</xliff:g> ملفات</item>
+ <item quantity="many"> تعذر نسخ <xliff:g id="COUNT_1">%1$d</xliff:g> ملفًا</item>
+ <item quantity="other"> تعذر نسخ <xliff:g id="COUNT_1">%1$d</xliff:g> من الملفات</item>
+ <item quantity="one"> تعذر نسخ <xliff:g id="COUNT_0">%1$d</xliff:g> ملف</item>
+ </plurals>
+ <string name="notification_touch_for_details" msgid="4483108577842961665">"المس لعرض التفاصيل"</string>
+ <string name="retry" msgid="7564024179122207376">"إعادة المحاولة"</string>
+ <string name="copy_failure_alert_content" msgid="3715575000297709082">"لم يتم نسخ هذه الملفات: <xliff:g id="LIST">%1$s</xliff:g>"</string>
</resources>
diff --git a/res/values-az-rAZ/strings.xml b/res/values-az-rAZ/strings.xml
index 1374982..706b5b2 100644
--- a/res/values-az-rAZ/strings.xml
+++ b/res/values-az-rAZ/strings.xml
@@ -29,25 +29,46 @@
<string name="menu_save" msgid="2394743337684426338">"Yadda saxlayın"</string>
<string name="menu_share" msgid="3075149983979628146">"Paylaşın"</string>
<string name="menu_delete" msgid="8138799623850614177">"Sil"</string>
- <string name="mode_selected_count" msgid="459111894725594625">"<xliff:g id="COUNT">%1$d</xliff:g> seçilmiş"</string>
+ <string name="menu_select_all" msgid="8323579667348729928">"Hamısını seçin"</string>
+ <string name="menu_copy" msgid="3612326052677229148">"Buraya kopyalayın:"</string>
+ <string name="menu_advanced_show" product="nosdcard" msgid="4693652895715631401">"Daxili yaddaşı göstərin"</string>
+ <string name="menu_advanced_show" product="default" msgid="5792182900084144261">"SD kartı göstərin"</string>
+ <string name="menu_advanced_hide" product="nosdcard" msgid="4218809952721972589">"Daxili yaddaşı gizlədin"</string>
+ <string name="menu_advanced_hide" product="default" msgid="4845869969015718848">"SD kartı gizlədin"</string>
+ <string name="menu_file_size_show" msgid="3240323619260823076">"Fayl ölçüsünü göstərin"</string>
+ <string name="menu_file_size_hide" msgid="8881975928502581042">"Fayl ölçüsünü gizlədin"</string>
+ <string name="button_select" msgid="527196987259139214">"Seçin"</string>
+ <string name="button_copy" msgid="8706475544635021302">"Kopyala"</string>
<string name="sort_name" msgid="9183560467917256779">"Ad üzrə"</string>
<string name="sort_date" msgid="586080032956151448">"Tarix üzrə dəyişmiş"</string>
<string name="sort_size" msgid="3350681319735474741">"Ölçü üzrə"</string>
<string name="drawer_open" msgid="4545466532430226949">"Kökləri göstərin"</string>
<string name="drawer_close" msgid="7602734368552123318">"Kökləri gizlədin"</string>
<string name="save_error" msgid="6167009778003223664">"Sənədi yadda saxlaya bilmədi"</string>
+ <string name="create_error" msgid="3735649141335444215">"Qovluq yaradıla bilmədi"</string>
+ <string name="query_error" msgid="1222448261663503501">"Sənəd sorğusu alınmadı"</string>
<string name="root_recent" msgid="4470053704320518133">"Son"</string>
<string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> ödənişsiz"</string>
- <!-- no translation found for root_type_service (2178854894416775409) -->
- <skip />
+ <string name="root_type_service" msgid="2178854894416775409">"Saxlama xidmətləri"</string>
<string name="root_type_shortcut" msgid="3318760609471618093">"Qısa yollar"</string>
<string name="root_type_device" msgid="7121342474653483538">"Cihazlar"</string>
<string name="root_type_apps" msgid="8838065367985945189">"Daha çox tətbiq"</string>
- <string name="pref_advanced_devices" msgid="903257239609301276">"Qabaqcıl cihazları görüntüləyin"</string>
- <string name="pref_file_size" msgid="2826879315743961459">"Fayl ölçüsünü görüntüləyin"</string>
- <string name="pref_device_size" msgid="3542106883278997222">"Cihaz ölçüsünü görüntüləyin"</string>
<string name="empty" msgid="7858882803708117596">"Element yoxdur"</string>
<string name="toast_no_application" msgid="1339885974067891667">"Faylı aça bilmir"</string>
<string name="toast_failed_delete" msgid="2180678019407244069">"Bəzi sənədləri silə bilmir"</string>
<string name="share_via" msgid="8966594246261344259">"Bunun vasitəsilə paylaş:"</string>
+ <string name="copy_notification_title" msgid="6374299806748219777">"Fayllar kopyalanır"</string>
+ <string name="copy_remaining" msgid="6283790937387975095">"<xliff:g id="DURATION">%s</xliff:g> qalıb"</string>
+ <plurals name="copy_begin" formatted="false" msgid="9071199452634086365">
+ <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> fayl kopyalanır.</item>
+ <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> fayl kopyalanır.</item>
+ </plurals>
+ <string name="copy_preparing" msgid="3896202461003039386">"Kopyalanmaq üçün hazırlanır ..."</string>
+ <plurals name="copy_error_notification_title" formatted="false" msgid="5267616889076217261">
+ <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> fayl kopyalanmadı</item>
+ <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> fayl kopyalanmadı</item>
+ </plurals>
+ <string name="notification_touch_for_details" msgid="4483108577842961665">"Detallara baxmaq üçün toxunun"</string>
+ <string name="retry" msgid="7564024179122207376">"Yenidən cəhd edin"</string>
+ <string name="copy_failure_alert_content" msgid="3715575000297709082">"Bu fayllar kopyalanmadı: <xliff:g id="LIST">%1$s</xliff:g>"</string>
</resources>
diff --git a/res/values-bg/strings.xml b/res/values-bg/strings.xml
index d1da879..8f6c022 100644
--- a/res/values-bg/strings.xml
+++ b/res/values-bg/strings.xml
@@ -18,7 +18,7 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="2783841764617238354">"Документи"</string>
<string name="title_open" msgid="4353228937663917801">"Отваряне от"</string>
- <string name="title_save" msgid="2433679664882857999">"Запазване в/ъв"</string>
+ <string name="title_save" msgid="2433679664882857999">"Запазване във:"</string>
<string name="menu_create_dir" msgid="5947289605844398389">"Създаване на папка"</string>
<string name="menu_grid" msgid="6878021334497835259">"Изглед в мрежа"</string>
<string name="menu_list" msgid="7279285939892417279">"Списъчен изглед"</string>
@@ -29,8 +29,16 @@
<string name="menu_save" msgid="2394743337684426338">"Запазване"</string>
<string name="menu_share" msgid="3075149983979628146">"Споделяне"</string>
<string name="menu_delete" msgid="8138799623850614177">"Изтриване"</string>
- <string name="menu_select" msgid="8711270657353563424">"Избиране на „<xliff:g id="DIRECTORY">^1</xliff:g>“"</string>
- <string name="mode_selected_count" msgid="459111894725594625">"Избрахте <xliff:g id="COUNT">%1$d</xliff:g>"</string>
+ <string name="menu_select_all" msgid="8323579667348729928">"Избиране на всичко"</string>
+ <string name="menu_copy" msgid="3612326052677229148">"Копиране във…"</string>
+ <string name="menu_advanced_show" product="nosdcard" msgid="4693652895715631401">"Вътр. хранилище: Показв."</string>
+ <string name="menu_advanced_show" product="default" msgid="5792182900084144261">"SD карта: Показване"</string>
+ <string name="menu_advanced_hide" product="nosdcard" msgid="4218809952721972589">"Вътр. хранилище: Скрив."</string>
+ <string name="menu_advanced_hide" product="default" msgid="4845869969015718848">"SD карта: Скриване"</string>
+ <string name="menu_file_size_show" msgid="3240323619260823076">"Размер на файла: Показв."</string>
+ <string name="menu_file_size_hide" msgid="8881975928502581042">"Размер на файла: Скрив."</string>
+ <string name="button_select" msgid="527196987259139214">"Избиране"</string>
+ <string name="button_copy" msgid="8706475544635021302">"Копиране"</string>
<string name="sort_name" msgid="9183560467917256779">"По име"</string>
<string name="sort_date" msgid="586080032956151448">"По дата на промяната"</string>
<string name="sort_size" msgid="3350681319735474741">"По размер"</string>
@@ -39,17 +47,28 @@
<string name="save_error" msgid="6167009778003223664">"Запазването на документа не бе успешно"</string>
<string name="create_error" msgid="3735649141335444215">"Създаването на папката не бе успешно"</string>
<string name="query_error" msgid="1222448261663503501">"Заявката за документи не бе успешна"</string>
- <string name="root_recent" msgid="4470053704320518133">"Скорошно"</string>
+ <string name="root_recent" msgid="4470053704320518133">"Скорошни"</string>
<string name="root_available_bytes" msgid="8568452858617033281">"Свободно: <xliff:g id="SIZE">%1$s</xliff:g>"</string>
<string name="root_type_service" msgid="2178854894416775409">"Услуги за съхранение"</string>
<string name="root_type_shortcut" msgid="3318760609471618093">"Преки пътища"</string>
<string name="root_type_device" msgid="7121342474653483538">"Устройства"</string>
<string name="root_type_apps" msgid="8838065367985945189">"Още приложения"</string>
- <string name="pref_advanced_devices" msgid="903257239609301276">"Устройства с разширени ф-ии"</string>
- <string name="pref_file_size" msgid="2826879315743961459">"Показване на файловия размер"</string>
- <string name="pref_device_size" msgid="3542106883278997222">"Показване на размера на устройството"</string>
<string name="empty" msgid="7858882803708117596">"Няма елементи"</string>
<string name="toast_no_application" msgid="1339885974067891667">"Файлът не може да се отвори"</string>
<string name="toast_failed_delete" msgid="2180678019407244069">"Някои документи не могат да бъдат изтрити"</string>
<string name="share_via" msgid="8966594246261344259">"Споделяне чрез"</string>
+ <string name="copy_notification_title" msgid="6374299806748219777">"Файловете се копират"</string>
+ <string name="copy_remaining" msgid="6283790937387975095">"Оставащо време: <xliff:g id="DURATION">%s</xliff:g>"</string>
+ <plurals name="copy_begin" formatted="false" msgid="9071199452634086365">
+ <item quantity="other">Копират се <xliff:g id="COUNT_1">%1$d</xliff:g> файла.</item>
+ <item quantity="one">Копира се <xliff:g id="COUNT_0">%1$d</xliff:g> файл.</item>
+ </plurals>
+ <string name="copy_preparing" msgid="3896202461003039386">"Подготвя се за копиране…"</string>
+ <plurals name="copy_error_notification_title" formatted="false" msgid="5267616889076217261">
+ <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> файла не можаха да се копират</item>
+ <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> файл не можа да се копира</item>
+ </plurals>
+ <string name="notification_touch_for_details" msgid="4483108577842961665">"Докоснете, за да видите подробностите"</string>
+ <string name="retry" msgid="7564024179122207376">"Нов опит"</string>
+ <string name="copy_failure_alert_content" msgid="3715575000297709082">"Следните файлове не бяха копирани: <xliff:g id="LIST">%1$s</xliff:g>"</string>
</resources>
diff --git a/res/values-bn-rBD/strings.xml b/res/values-bn-rBD/strings.xml
index 3fd50aa..4167194 100644
--- a/res/values-bn-rBD/strings.xml
+++ b/res/values-bn-rBD/strings.xml
@@ -22,15 +22,23 @@
<string name="menu_create_dir" msgid="5947289605844398389">"ফোল্ডার তৈরি করুন"</string>
<string name="menu_grid" msgid="6878021334497835259">"গ্রিড দৃশ্য"</string>
<string name="menu_list" msgid="7279285939892417279">"তালিকা দৃশ্য"</string>
- <string name="menu_sort" msgid="7677740407158414452">"এর দ্বারা সাজান"</string>
+ <string name="menu_sort" msgid="7677740407158414452">"এই অনুসারে বাছুন"</string>
<string name="menu_search" msgid="3816712084502856974">"অনুসন্ধান করুন"</string>
<string name="menu_settings" msgid="6008033148948428823">"সেটিংস"</string>
<string name="menu_open" msgid="432922957274920903">"খুলুন"</string>
<string name="menu_save" msgid="2394743337684426338">"সংরক্ষণ করুন"</string>
<string name="menu_share" msgid="3075149983979628146">"ভাগ করুন"</string>
<string name="menu_delete" msgid="8138799623850614177">"মুছুন"</string>
- <string name="menu_select" msgid="8711270657353563424">"\"<xliff:g id="DIRECTORY">^1</xliff:g>\" নির্বাচন করুন"</string>
- <string name="mode_selected_count" msgid="459111894725594625">"<xliff:g id="COUNT">%1$d</xliff:g> নির্বাচন করা হয়েছে"</string>
+ <string name="menu_select_all" msgid="8323579667348729928">"সবগুলি নির্বাচন করুন"</string>
+ <string name="menu_copy" msgid="3612326052677229148">"এতে অনুলিপি করুন…"</string>
+ <string name="menu_advanced_show" product="nosdcard" msgid="4693652895715631401">"অভ্যন্তরীণ সঞ্চয়স্থান দেখান"</string>
+ <string name="menu_advanced_show" product="default" msgid="5792182900084144261">"SD কার্ড দেখান"</string>
+ <string name="menu_advanced_hide" product="nosdcard" msgid="4218809952721972589">"অভ্যন্তরীণ সঞ্চয়স্থান লুকান"</string>
+ <string name="menu_advanced_hide" product="default" msgid="4845869969015718848">"SD কার্ড লুকান"</string>
+ <string name="menu_file_size_show" msgid="3240323619260823076">"ফাইলের আকার দেখান"</string>
+ <string name="menu_file_size_hide" msgid="8881975928502581042">"ফাইলের আকার লুকান"</string>
+ <string name="button_select" msgid="527196987259139214">"নির্বাচন করুন"</string>
+ <string name="button_copy" msgid="8706475544635021302">"অনুলিপি করুন"</string>
<string name="sort_name" msgid="9183560467917256779">"নামের দ্বারা"</string>
<string name="sort_date" msgid="586080032956151448">"পরিবর্তনের তারিখ দ্বারা"</string>
<string name="sort_size" msgid="3350681319735474741">"আকার অনুযায়ী"</string>
@@ -45,11 +53,22 @@
<string name="root_type_shortcut" msgid="3318760609471618093">"শর্টকাটগুলি"</string>
<string name="root_type_device" msgid="7121342474653483538">"ডিভাইসগুলি"</string>
<string name="root_type_apps" msgid="8838065367985945189">"আরো অ্যাপ্লিকেশান"</string>
- <string name="pref_advanced_devices" msgid="903257239609301276">"উন্নত ডিভাইসগুলি প্রদর্শন করে"</string>
- <string name="pref_file_size" msgid="2826879315743961459">"ফাইলের আকার প্রদর্শন করে"</string>
- <string name="pref_device_size" msgid="3542106883278997222">"ডিভাইসের মাপ প্রদর্শন করে"</string>
<string name="empty" msgid="7858882803708117596">"কোনো আইটেম নেই"</string>
<string name="toast_no_application" msgid="1339885974067891667">"ফাইল খোলা যাবে না"</string>
<string name="toast_failed_delete" msgid="2180678019407244069">"কিছু দস্তাবেজ মুছতে অসমর্থ"</string>
<string name="share_via" msgid="8966594246261344259">"এর মাধ্যমে ভাগ করুন"</string>
+ <string name="copy_notification_title" msgid="6374299806748219777">"ফাইলগুলি অনুলিপি করা হচ্ছে"</string>
+ <string name="copy_remaining" msgid="6283790937387975095">"<xliff:g id="DURATION">%s</xliff:g> বাকি"</string>
+ <plurals name="copy_begin" formatted="false" msgid="9071199452634086365">
+ <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g>টি ফাইল অনুলিপি করা হচ্ছে৷</item>
+ <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g>টি ফাইল অনুলিপি করা হচ্ছে৷</item>
+ </plurals>
+ <string name="copy_preparing" msgid="3896202461003039386">"অনুলিপি করার জন্য প্রস্তুত করা হচ্ছে..."</string>
+ <plurals name="copy_error_notification_title" formatted="false" msgid="5267616889076217261">
+ <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g>টি ফাইলের প্রতিলিপি করা যায়নি</item>
+ <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g>টি ফাইলের প্রতিলিপি করা যায়নি</item>
+ </plurals>
+ <string name="notification_touch_for_details" msgid="4483108577842961665">"বিশদ বিবরণ দেখতে স্পর্শ করুন"</string>
+ <string name="retry" msgid="7564024179122207376">"পুনরায় চেষ্টা করুন"</string>
+ <string name="copy_failure_alert_content" msgid="3715575000297709082">"এই ফাইলগুলির প্রতিলিপি করা হয় নি: <xliff:g id="LIST">%1$s</xliff:g>"</string>
</resources>
diff --git a/res/values-ca/strings.xml b/res/values-ca/strings.xml
index 23e7284..d4dfb2d 100644
--- a/res/values-ca/strings.xml
+++ b/res/values-ca/strings.xml
@@ -29,8 +29,16 @@
<string name="menu_save" msgid="2394743337684426338">"Desa"</string>
<string name="menu_share" msgid="3075149983979628146">"Comparteix"</string>
<string name="menu_delete" msgid="8138799623850614177">"Suprimeix"</string>
- <string name="menu_select" msgid="8711270657353563424">"Selecciona \"<xliff:g id="DIRECTORY">^1</xliff:g>\""</string>
- <string name="mode_selected_count" msgid="459111894725594625">"Seleccionats: <xliff:g id="COUNT">%1$d</xliff:g>"</string>
+ <string name="menu_select_all" msgid="8323579667348729928">"Selecciona-ho tot"</string>
+ <string name="menu_copy" msgid="3612326052677229148">"Copia a…"</string>
+ <string name="menu_advanced_show" product="nosdcard" msgid="4693652895715631401">"Mostra emmagatz. intern"</string>
+ <string name="menu_advanced_show" product="default" msgid="5792182900084144261">"Mostra la targeta SD"</string>
+ <string name="menu_advanced_hide" product="nosdcard" msgid="4218809952721972589">"Amaga emmagatz. intern"</string>
+ <string name="menu_advanced_hide" product="default" msgid="4845869969015718848">"Amaga la targeta SD"</string>
+ <string name="menu_file_size_show" msgid="3240323619260823076">"Mostra la mida del fitxer"</string>
+ <string name="menu_file_size_hide" msgid="8881975928502581042">"Amaga la mida del fitxer"</string>
+ <string name="button_select" msgid="527196987259139214">"Selecciona"</string>
+ <string name="button_copy" msgid="8706475544635021302">"Copia"</string>
<string name="sort_name" msgid="9183560467917256779">"Per nom"</string>
<string name="sort_date" msgid="586080032956151448">"Per data de modificació"</string>
<string name="sort_size" msgid="3350681319735474741">"Per mida"</string>
@@ -45,11 +53,22 @@
<string name="root_type_shortcut" msgid="3318760609471618093">"Dreceres"</string>
<string name="root_type_device" msgid="7121342474653483538">"Dispositius"</string>
<string name="root_type_apps" msgid="8838065367985945189">"Més aplicacions"</string>
- <string name="pref_advanced_devices" msgid="903257239609301276">"Mostra els dispositius avançats"</string>
- <string name="pref_file_size" msgid="2826879315743961459">"Mostra la mida del fitxer"</string>
- <string name="pref_device_size" msgid="3542106883278997222">"Mostra la mida del dispositiu"</string>
<string name="empty" msgid="7858882803708117596">"Sense elements"</string>
<string name="toast_no_application" msgid="1339885974067891667">"No es pot obrir el fitxer."</string>
<string name="toast_failed_delete" msgid="2180678019407244069">"No es poden suprimir alguns documents."</string>
<string name="share_via" msgid="8966594246261344259">"Comparteix mitjançant"</string>
+ <string name="copy_notification_title" msgid="6374299806748219777">"S\'estan copiant fitxers"</string>
+ <string name="copy_remaining" msgid="6283790937387975095">"Temps restant: <xliff:g id="DURATION">%s</xliff:g>"</string>
+ <plurals name="copy_begin" formatted="false" msgid="9071199452634086365">
+ <item quantity="other">S\'estan copiant <xliff:g id="COUNT_1">%1$d</xliff:g> fitxers.</item>
+ <item quantity="one">S\'està copiant <xliff:g id="COUNT_0">%1$d</xliff:g> fitxer.</item>
+ </plurals>
+ <string name="copy_preparing" msgid="3896202461003039386">"S\'està preparant una còpia…"</string>
+ <plurals name="copy_error_notification_title" formatted="false" msgid="5267616889076217261">
+ <item quantity="other">No s\'han pogut copiar <xliff:g id="COUNT_1">%1$d</xliff:g> fitxers</item>
+ <item quantity="one">No s\'ha pogut copiar <xliff:g id="COUNT_0">%1$d</xliff:g> fitxer</item>
+ </plurals>
+ <string name="notification_touch_for_details" msgid="4483108577842961665">"Toca per veure els detalls"</string>
+ <string name="retry" msgid="7564024179122207376">"Torna-ho a provar"</string>
+ <string name="copy_failure_alert_content" msgid="3715575000297709082">"Aquests fitxers no s\'han copiat: <xliff:g id="LIST">%1$s</xliff:g>"</string>
</resources>
diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml
index ad8897a..05da0b6 100644
--- a/res/values-cs/strings.xml
+++ b/res/values-cs/strings.xml
@@ -17,11 +17,11 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="2783841764617238354">"Dokumenty"</string>
- <string name="title_open" msgid="4353228937663917801">"Otevřít z"</string>
+ <string name="title_open" msgid="4353228937663917801">"Otevřít"</string>
<string name="title_save" msgid="2433679664882857999">"Uložit do"</string>
<string name="menu_create_dir" msgid="5947289605844398389">"Vytvořit složku"</string>
- <string name="menu_grid" msgid="6878021334497835259">"Mřížka"</string>
- <string name="menu_list" msgid="7279285939892417279">"Seznam"</string>
+ <string name="menu_grid" msgid="6878021334497835259">"Mřížkové zobrazení"</string>
+ <string name="menu_list" msgid="7279285939892417279">"Zobrazení seznamu"</string>
<string name="menu_sort" msgid="7677740407158414452">"Řadit podle"</string>
<string name="menu_search" msgid="3816712084502856974">"Hledat"</string>
<string name="menu_settings" msgid="6008033148948428823">"Nastavení"</string>
@@ -29,8 +29,16 @@
<string name="menu_save" msgid="2394743337684426338">"Uložit"</string>
<string name="menu_share" msgid="3075149983979628146">"Sdílet"</string>
<string name="menu_delete" msgid="8138799623850614177">"Smazat"</string>
- <string name="menu_select" msgid="8711270657353563424">"Vyberte adresář <xliff:g id="DIRECTORY">^1</xliff:g>"</string>
- <string name="mode_selected_count" msgid="459111894725594625">"Vybráno: <xliff:g id="COUNT">%1$d</xliff:g>"</string>
+ <string name="menu_select_all" msgid="8323579667348729928">"Vybrat vše"</string>
+ <string name="menu_copy" msgid="3612326052677229148">"Kopírovat do…"</string>
+ <string name="menu_advanced_show" product="nosdcard" msgid="4693652895715631401">"Zobrazit inter. úložiště"</string>
+ <string name="menu_advanced_show" product="default" msgid="5792182900084144261">"Zobrazit SD kartu"</string>
+ <string name="menu_advanced_hide" product="nosdcard" msgid="4218809952721972589">"Skrýt interní úložiště"</string>
+ <string name="menu_advanced_hide" product="default" msgid="4845869969015718848">"Skrýt SD kartu"</string>
+ <string name="menu_file_size_show" msgid="3240323619260823076">"Zobrazit velikost souboru"</string>
+ <string name="menu_file_size_hide" msgid="8881975928502581042">"Skrýt velikost souboru"</string>
+ <string name="button_select" msgid="527196987259139214">"Vybrat"</string>
+ <string name="button_copy" msgid="8706475544635021302">"Kopírovat"</string>
<string name="sort_name" msgid="9183560467917256779">"Podle názvu"</string>
<string name="sort_date" msgid="586080032956151448">"Podle data úpravy"</string>
<string name="sort_size" msgid="3350681319735474741">"Podle velikosti"</string>
@@ -39,17 +47,32 @@
<string name="save_error" msgid="6167009778003223664">"Uložení dokumentu se nezdařilo"</string>
<string name="create_error" msgid="3735649141335444215">"Složku se nepodařilo vytvořit"</string>
<string name="query_error" msgid="1222448261663503501">"Seznam dokumentů se nepodařilo načíst"</string>
- <string name="root_recent" msgid="4470053704320518133">"Poslední"</string>
- <string name="root_available_bytes" msgid="8568452858617033281">"Volný prostor: <xliff:g id="SIZE">%1$s</xliff:g>"</string>
+ <string name="root_recent" msgid="4470053704320518133">"Nedávné"</string>
+ <string name="root_available_bytes" msgid="8568452858617033281">"Volné místo: <xliff:g id="SIZE">%1$s</xliff:g>"</string>
<string name="root_type_service" msgid="2178854894416775409">"Služby úložiště"</string>
<string name="root_type_shortcut" msgid="3318760609471618093">"Klávesové zkratky"</string>
<string name="root_type_device" msgid="7121342474653483538">"Zařízení"</string>
<string name="root_type_apps" msgid="8838065367985945189">"Další aplikace"</string>
- <string name="pref_advanced_devices" msgid="903257239609301276">"Zobrazit pokročilá zařízení"</string>
- <string name="pref_file_size" msgid="2826879315743961459">"Zobrazit velikost souboru"</string>
- <string name="pref_device_size" msgid="3542106883278997222">"Zobrazit velikost zařízení"</string>
<string name="empty" msgid="7858882803708117596">"Žádné položky"</string>
<string name="toast_no_application" msgid="1339885974067891667">"Soubor nelze otevřít"</string>
<string name="toast_failed_delete" msgid="2180678019407244069">"Některé dokumenty nelze smazat"</string>
<string name="share_via" msgid="8966594246261344259">"Sdílet pomocí"</string>
+ <string name="copy_notification_title" msgid="6374299806748219777">"Kopírování souborů"</string>
+ <string name="copy_remaining" msgid="6283790937387975095">"Zbývající čas: <xliff:g id="DURATION">%s</xliff:g>"</string>
+ <plurals name="copy_begin" formatted="false" msgid="9071199452634086365">
+ <item quantity="few">Kopírování <xliff:g id="COUNT_1">%1$d</xliff:g> souborů</item>
+ <item quantity="many">Kopírování <xliff:g id="COUNT_1">%1$d</xliff:g> souboru</item>
+ <item quantity="other">Kopírování <xliff:g id="COUNT_1">%1$d</xliff:g> souborů</item>
+ <item quantity="one">Kopírování <xliff:g id="COUNT_0">%1$d</xliff:g> souboru</item>
+ </plurals>
+ <string name="copy_preparing" msgid="3896202461003039386">"Příprava na kopírování…"</string>
+ <plurals name="copy_error_notification_title" formatted="false" msgid="5267616889076217261">
+ <item quantity="few">Nepodařilo se zkopírovat <xliff:g id="COUNT_1">%1$d</xliff:g> soubory</item>
+ <item quantity="many">Nepodařilo se zkopírovat <xliff:g id="COUNT_1">%1$d</xliff:g> souboru</item>
+ <item quantity="other">Nepodařilo se zkopírovat <xliff:g id="COUNT_1">%1$d</xliff:g> souborů</item>
+ <item quantity="one">Nepodařilo se zkopírovat <xliff:g id="COUNT_0">%1$d</xliff:g> soubor</item>
+ </plurals>
+ <string name="notification_touch_for_details" msgid="4483108577842961665">"Podrobnosti zobrazíte klepnutím"</string>
+ <string name="retry" msgid="7564024179122207376">"Opakovat"</string>
+ <string name="copy_failure_alert_content" msgid="3715575000297709082">"Tyto soubory nebyly zkopírovány: <xliff:g id="LIST">%1$s</xliff:g>"</string>
</resources>
diff --git a/res/values-da/strings.xml b/res/values-da/strings.xml
index 7ae5d1e..5e26a3d 100644
--- a/res/values-da/strings.xml
+++ b/res/values-da/strings.xml
@@ -18,7 +18,7 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="2783841764617238354">"Dokumenter"</string>
<string name="title_open" msgid="4353228937663917801">"Åbn fra"</string>
- <string name="title_save" msgid="2433679664882857999">"Gem på"</string>
+ <string name="title_save" msgid="2433679664882857999">"Gem i"</string>
<string name="menu_create_dir" msgid="5947289605844398389">"Opret mappe"</string>
<string name="menu_grid" msgid="6878021334497835259">"Gittervisning"</string>
<string name="menu_list" msgid="7279285939892417279">"Listevisning"</string>
@@ -29,8 +29,16 @@
<string name="menu_save" msgid="2394743337684426338">"Gem"</string>
<string name="menu_share" msgid="3075149983979628146">"Del"</string>
<string name="menu_delete" msgid="8138799623850614177">"Slet"</string>
- <string name="menu_select" msgid="8711270657353563424">"Vælg \"<xliff:g id="DIRECTORY">^1</xliff:g>\""</string>
- <string name="mode_selected_count" msgid="459111894725594625">"<xliff:g id="COUNT">%1$d</xliff:g> er valgt"</string>
+ <string name="menu_select_all" msgid="8323579667348729928">"Markér alle"</string>
+ <string name="menu_copy" msgid="3612326052677229148">"Kopiér til…"</string>
+ <string name="menu_advanced_show" product="nosdcard" msgid="4693652895715631401">"Vis intern lagerplads"</string>
+ <string name="menu_advanced_show" product="default" msgid="5792182900084144261">"Vis SD-kort"</string>
+ <string name="menu_advanced_hide" product="nosdcard" msgid="4218809952721972589">"Skjul intern lagerplads"</string>
+ <string name="menu_advanced_hide" product="default" msgid="4845869969015718848">"Skjul SD-kort"</string>
+ <string name="menu_file_size_show" msgid="3240323619260823076">"Vis filstørrelse"</string>
+ <string name="menu_file_size_hide" msgid="8881975928502581042">"Skjul filstørrelse"</string>
+ <string name="button_select" msgid="527196987259139214">"Vælg"</string>
+ <string name="button_copy" msgid="8706475544635021302">"Kopiér"</string>
<string name="sort_name" msgid="9183560467917256779">"Efter navn"</string>
<string name="sort_date" msgid="586080032956151448">"Efter ændringsdato"</string>
<string name="sort_size" msgid="3350681319735474741">"Efter størrelse"</string>
@@ -45,11 +53,22 @@
<string name="root_type_shortcut" msgid="3318760609471618093">"Genveje"</string>
<string name="root_type_device" msgid="7121342474653483538">"Enheder"</string>
<string name="root_type_apps" msgid="8838065367985945189">"Flere apps"</string>
- <string name="pref_advanced_devices" msgid="903257239609301276">"Vis avancerede enheder"</string>
- <string name="pref_file_size" msgid="2826879315743961459">"Vis filstørrelse"</string>
- <string name="pref_device_size" msgid="3542106883278997222">"Vis enhedens størrelse"</string>
<string name="empty" msgid="7858882803708117596">"Ingen elementer"</string>
<string name="toast_no_application" msgid="1339885974067891667">"Filen kan ikke åbnes"</string>
<string name="toast_failed_delete" msgid="2180678019407244069">"Nogle dokumenter kan ikke slettes"</string>
<string name="share_via" msgid="8966594246261344259">"Del via"</string>
+ <string name="copy_notification_title" msgid="6374299806748219777">"Kopierer filer"</string>
+ <string name="copy_remaining" msgid="6283790937387975095">"<xliff:g id="DURATION">%s</xliff:g> tilbage"</string>
+ <plurals name="copy_begin" formatted="false" msgid="9071199452634086365">
+ <item quantity="one">Kopierer <xliff:g id="COUNT_1">%1$d</xliff:g> filer.</item>
+ <item quantity="other">Kopierer <xliff:g id="COUNT_1">%1$d</xliff:g> filer.</item>
+ </plurals>
+ <string name="copy_preparing" msgid="3896202461003039386">"Forbereder kopiering…"</string>
+ <plurals name="copy_error_notification_title" formatted="false" msgid="5267616889076217261">
+ <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> filer blev ikke kopieret</item>
+ <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> filer blev ikke kopieret</item>
+ </plurals>
+ <string name="notification_touch_for_details" msgid="4483108577842961665">"Tryk for at se yderligere oplysninger."</string>
+ <string name="retry" msgid="7564024179122207376">"Prøv igen"</string>
+ <string name="copy_failure_alert_content" msgid="3715575000297709082">"Disse filer blev ikke kopieret: <xliff:g id="LIST">%1$s</xliff:g>"</string>
</resources>
diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml
index 98c1787..80d0a35 100644
--- a/res/values-de/strings.xml
+++ b/res/values-de/strings.xml
@@ -29,8 +29,16 @@
<string name="menu_save" msgid="2394743337684426338">"Speichern"</string>
<string name="menu_share" msgid="3075149983979628146">"Teilen"</string>
<string name="menu_delete" msgid="8138799623850614177">"Löschen"</string>
- <string name="menu_select" msgid="8711270657353563424">"\"<xliff:g id="DIRECTORY">^1</xliff:g>\" auswählen"</string>
- <string name="mode_selected_count" msgid="459111894725594625">"<xliff:g id="COUNT">%1$d</xliff:g> ausgewählt"</string>
+ <string name="menu_select_all" msgid="8323579667348729928">"Alle auswählen"</string>
+ <string name="menu_copy" msgid="3612326052677229148">"Kopieren nach..."</string>
+ <string name="menu_advanced_show" product="nosdcard" msgid="4693652895715631401">"Int. Speicher anzeigen"</string>
+ <string name="menu_advanced_show" product="default" msgid="5792182900084144261">"SD-Karte anzeigen"</string>
+ <string name="menu_advanced_hide" product="nosdcard" msgid="4218809952721972589">"Int. Speicher ausblenden"</string>
+ <string name="menu_advanced_hide" product="default" msgid="4845869969015718848">"SD-Karte ausblenden"</string>
+ <string name="menu_file_size_show" msgid="3240323619260823076">"Dateigröße anzeigen"</string>
+ <string name="menu_file_size_hide" msgid="8881975928502581042">"Dateigröße ausblenden"</string>
+ <string name="button_select" msgid="527196987259139214">"Auswählen"</string>
+ <string name="button_copy" msgid="8706475544635021302">"Kopieren"</string>
<string name="sort_name" msgid="9183560467917256779">"Nach Name"</string>
<string name="sort_date" msgid="586080032956151448">"Nach Änderungsdatum"</string>
<string name="sort_size" msgid="3350681319735474741">"Nach Größe"</string>
@@ -45,11 +53,22 @@
<string name="root_type_shortcut" msgid="3318760609471618093">"Verknüpfungen"</string>
<string name="root_type_device" msgid="7121342474653483538">"Geräte"</string>
<string name="root_type_apps" msgid="8838065367985945189">"Weitere Apps"</string>
- <string name="pref_advanced_devices" msgid="903257239609301276">"Erweiterte Geräte anzeigen"</string>
- <string name="pref_file_size" msgid="2826879315743961459">"Dateigröße anzeigen"</string>
- <string name="pref_device_size" msgid="3542106883278997222">"Geräteabmessungen anzeigen"</string>
<string name="empty" msgid="7858882803708117596">"Keine Dokumente"</string>
<string name="toast_no_application" msgid="1339885974067891667">"Datei kann nicht geöffnet werden."</string>
<string name="toast_failed_delete" msgid="2180678019407244069">"Einige Dokumente konnten nicht gelöscht werden."</string>
<string name="share_via" msgid="8966594246261344259">"Teilen über"</string>
+ <string name="copy_notification_title" msgid="6374299806748219777">"Dateien werden kopiert"</string>
+ <string name="copy_remaining" msgid="6283790937387975095">"Noch <xliff:g id="DURATION">%s</xliff:g>"</string>
+ <plurals name="copy_begin" formatted="false" msgid="9071199452634086365">
+ <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> Dateien werden kopiert.</item>
+ <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> Datei wird kopiert.</item>
+ </plurals>
+ <string name="copy_preparing" msgid="3896202461003039386">"Kopieren wird vorbereitet…"</string>
+ <plurals name="copy_error_notification_title" formatted="false" msgid="5267616889076217261">
+ <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> Dateien konnten nicht kopiert werden.</item>
+ <item quantity="one"> <xliff:g id="COUNT_0">%1$d</xliff:g> Datei konnte nicht kopiert werden.</item>
+ </plurals>
+ <string name="notification_touch_for_details" msgid="4483108577842961665">"Zum Einblenden von Details tippen"</string>
+ <string name="retry" msgid="7564024179122207376">"Erneut versuchen"</string>
+ <string name="copy_failure_alert_content" msgid="3715575000297709082">"Diese Dateien wurden nicht kopiert: <xliff:g id="LIST">%1$s</xliff:g>."</string>
</resources>
diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml
index 24d66ce..352c748 100644
--- a/res/values-el/strings.xml
+++ b/res/values-el/strings.xml
@@ -29,8 +29,16 @@
<string name="menu_save" msgid="2394743337684426338">"Αποθήκευση"</string>
<string name="menu_share" msgid="3075149983979628146">"Κοινή χρήση"</string>
<string name="menu_delete" msgid="8138799623850614177">"Διαγραφή"</string>
- <string name="menu_select" msgid="8711270657353563424">"Επιλογή \"<xliff:g id="DIRECTORY">^1</xliff:g>\""</string>
- <string name="mode_selected_count" msgid="459111894725594625">"Επιλέχθηκαν <xliff:g id="COUNT">%1$d</xliff:g>"</string>
+ <string name="menu_select_all" msgid="8323579667348729928">"Επιλογή όλων"</string>
+ <string name="menu_copy" msgid="3612326052677229148">"Αντιγραφή σε…"</string>
+ <string name="menu_advanced_show" product="nosdcard" msgid="4693652895715631401">"Εμφ.εσωτ.χώρου αποθήκ."</string>
+ <string name="menu_advanced_show" product="default" msgid="5792182900084144261">"Εμφάνιση κάρτας SD"</string>
+ <string name="menu_advanced_hide" product="nosdcard" msgid="4218809952721972589">"Απόκρ.εσωτ.χώρου αποθήκ."</string>
+ <string name="menu_advanced_hide" product="default" msgid="4845869969015718848">"Απόκρυψη κάρτας SD"</string>
+ <string name="menu_file_size_show" msgid="3240323619260823076">"Εμφ. μεγέθους αρχείου"</string>
+ <string name="menu_file_size_hide" msgid="8881975928502581042">"Απόκρ. μεγέθους αρχείου"</string>
+ <string name="button_select" msgid="527196987259139214">"Επιλογή"</string>
+ <string name="button_copy" msgid="8706475544635021302">"Αντιγραφή"</string>
<string name="sort_name" msgid="9183560467917256779">"Κατά όνομα"</string>
<string name="sort_date" msgid="586080032956151448">"Κατά ημερομηνία τροποποίησης"</string>
<string name="sort_size" msgid="3350681319735474741">"Κατά μέγεθος"</string>
@@ -45,11 +53,22 @@
<string name="root_type_shortcut" msgid="3318760609471618093">"Συντομεύσεις"</string>
<string name="root_type_device" msgid="7121342474653483538">"Συσκευές"</string>
<string name="root_type_apps" msgid="8838065367985945189">"Περισσότερες εφαρμογές"</string>
- <string name="pref_advanced_devices" msgid="903257239609301276">"Εμφάνιση προηγμένων συσκευών"</string>
- <string name="pref_file_size" msgid="2826879315743961459">"Εμφάνιση μεγέθους αρχείου"</string>
- <string name="pref_device_size" msgid="3542106883278997222">"Εμφάνιση μεγέθους συσκευής"</string>
<string name="empty" msgid="7858882803708117596">"Δεν υπάρχουν στοιχεία"</string>
<string name="toast_no_application" msgid="1339885974067891667">"Δεν είναι δυνατό το άνοιγμα του αρχείου"</string>
<string name="toast_failed_delete" msgid="2180678019407244069">"Δεν είναι δυνατή η διαγραφή ορισμένων εγγράφων"</string>
<string name="share_via" msgid="8966594246261344259">"Κοινή χρήση μέσω"</string>
+ <string name="copy_notification_title" msgid="6374299806748219777">"Αντιγραφή αρχείων"</string>
+ <string name="copy_remaining" msgid="6283790937387975095">"Απομένουν <xliff:g id="DURATION">%s</xliff:g>"</string>
+ <plurals name="copy_begin" formatted="false" msgid="9071199452634086365">
+ <item quantity="other">Αντιγραφή <xliff:g id="COUNT_1">%1$d</xliff:g> αρχείων.</item>
+ <item quantity="one">Αντιγραφή <xliff:g id="COUNT_0">%1$d</xliff:g> αρχείου.</item>
+ </plurals>
+ <string name="copy_preparing" msgid="3896202461003039386">"Προετοιμασία για αντιγραφή…"</string>
+ <plurals name="copy_error_notification_title" formatted="false" msgid="5267616889076217261">
+ <item quantity="other">Δεν ήταν δυνατή η αντιγραφή <xliff:g id="COUNT_1">%1$d</xliff:g> αρχείων</item>
+ <item quantity="one">Δεν ήταν δυνατή η αντιγραφή <xliff:g id="COUNT_0">%1$d</xliff:g> αρχείου</item>
+ </plurals>
+ <string name="notification_touch_for_details" msgid="4483108577842961665">"Αγγίξτε για προβολή λεπτομερειών"</string>
+ <string name="retry" msgid="7564024179122207376">"Επανάληψη"</string>
+ <string name="copy_failure_alert_content" msgid="3715575000297709082">"Αυτά τα αρχεία δεν αντιγράφηκαν: <xliff:g id="LIST">%1$s</xliff:g>"</string>
</resources>
diff --git a/res/values-en-rAU/strings.xml b/res/values-en-rAU/strings.xml
new file mode 100644
index 0000000..665f93b
--- /dev/null
+++ b/res/values-en-rAU/strings.xml
@@ -0,0 +1,74 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2013 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="app_label" msgid="2783841764617238354">"Documents"</string>
+ <string name="title_open" msgid="4353228937663917801">"Open from"</string>
+ <string name="title_save" msgid="2433679664882857999">"Save to"</string>
+ <string name="menu_create_dir" msgid="5947289605844398389">"Create folder"</string>
+ <string name="menu_grid" msgid="6878021334497835259">"Grid view"</string>
+ <string name="menu_list" msgid="7279285939892417279">"List view"</string>
+ <string name="menu_sort" msgid="7677740407158414452">"Sort by"</string>
+ <string name="menu_search" msgid="3816712084502856974">"Search"</string>
+ <string name="menu_settings" msgid="6008033148948428823">"Settings"</string>
+ <string name="menu_open" msgid="432922957274920903">"Open"</string>
+ <string name="menu_save" msgid="2394743337684426338">"Save"</string>
+ <string name="menu_share" msgid="3075149983979628146">"Share"</string>
+ <string name="menu_delete" msgid="8138799623850614177">"Delete"</string>
+ <string name="menu_select_all" msgid="8323579667348729928">"Select all"</string>
+ <string name="menu_copy" msgid="3612326052677229148">"Copy to…"</string>
+ <string name="menu_advanced_show" product="nosdcard" msgid="4693652895715631401">"Show internal storage"</string>
+ <string name="menu_advanced_show" product="default" msgid="5792182900084144261">"Show SD card"</string>
+ <string name="menu_advanced_hide" product="nosdcard" msgid="4218809952721972589">"Hide internal storage"</string>
+ <string name="menu_advanced_hide" product="default" msgid="4845869969015718848">"Hide SD card"</string>
+ <string name="menu_file_size_show" msgid="3240323619260823076">"Show file size"</string>
+ <string name="menu_file_size_hide" msgid="8881975928502581042">"Hide file size"</string>
+ <string name="button_select" msgid="527196987259139214">"select"</string>
+ <string name="button_copy" msgid="8706475544635021302">"Copy"</string>
+ <string name="sort_name" msgid="9183560467917256779">"By name"</string>
+ <string name="sort_date" msgid="586080032956151448">"By date modified"</string>
+ <string name="sort_size" msgid="3350681319735474741">"By size"</string>
+ <string name="drawer_open" msgid="4545466532430226949">"Show roots"</string>
+ <string name="drawer_close" msgid="7602734368552123318">"Hide roots"</string>
+ <string name="save_error" msgid="6167009778003223664">"Failed to save document"</string>
+ <string name="create_error" msgid="3735649141335444215">"Failed to create folder"</string>
+ <string name="query_error" msgid="1222448261663503501">"Failed to query documents"</string>
+ <string name="root_recent" msgid="4470053704320518133">"Recent"</string>
+ <string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> free"</string>
+ <string name="root_type_service" msgid="2178854894416775409">"Storage services"</string>
+ <string name="root_type_shortcut" msgid="3318760609471618093">"Shortcuts"</string>
+ <string name="root_type_device" msgid="7121342474653483538">"Devices"</string>
+ <string name="root_type_apps" msgid="8838065367985945189">"More apps"</string>
+ <string name="empty" msgid="7858882803708117596">"No items"</string>
+ <string name="toast_no_application" msgid="1339885974067891667">"Cannot open file"</string>
+ <string name="toast_failed_delete" msgid="2180678019407244069">"Unable to delete some documents"</string>
+ <string name="share_via" msgid="8966594246261344259">"Share via"</string>
+ <string name="copy_notification_title" msgid="6374299806748219777">"Copying files"</string>
+ <string name="copy_remaining" msgid="6283790937387975095">"<xliff:g id="DURATION">%s</xliff:g> left"</string>
+ <plurals name="copy_begin" formatted="false" msgid="9071199452634086365">
+ <item quantity="other">Copying <xliff:g id="COUNT_1">%1$d</xliff:g> files.</item>
+ <item quantity="one">Copying <xliff:g id="COUNT_0">%1$d</xliff:g> file.</item>
+ </plurals>
+ <string name="copy_preparing" msgid="3896202461003039386">"Preparing for copy…"</string>
+ <plurals name="copy_error_notification_title" formatted="false" msgid="5267616889076217261">
+ <item quantity="other">Couldn\'t copy <xliff:g id="COUNT_1">%1$d</xliff:g> files</item>
+ <item quantity="one">Couldn\'t copy <xliff:g id="COUNT_0">%1$d</xliff:g> file</item>
+ </plurals>
+ <string name="notification_touch_for_details" msgid="4483108577842961665">"Touch to view details"</string>
+ <string name="retry" msgid="7564024179122207376">"Retry"</string>
+ <string name="copy_failure_alert_content" msgid="3715575000297709082">"These files weren\'t copied: <xliff:g id="LIST">%1$s</xliff:g>"</string>
+</resources>
diff --git a/res/values-en-rGB/strings.xml b/res/values-en-rGB/strings.xml
index d2af473..665f93b 100644
--- a/res/values-en-rGB/strings.xml
+++ b/res/values-en-rGB/strings.xml
@@ -29,8 +29,16 @@
<string name="menu_save" msgid="2394743337684426338">"Save"</string>
<string name="menu_share" msgid="3075149983979628146">"Share"</string>
<string name="menu_delete" msgid="8138799623850614177">"Delete"</string>
- <string name="menu_select" msgid="8711270657353563424">"Select \"<xliff:g id="DIRECTORY">^1</xliff:g>\""</string>
- <string name="mode_selected_count" msgid="459111894725594625">"<xliff:g id="COUNT">%1$d</xliff:g> selected"</string>
+ <string name="menu_select_all" msgid="8323579667348729928">"Select all"</string>
+ <string name="menu_copy" msgid="3612326052677229148">"Copy to…"</string>
+ <string name="menu_advanced_show" product="nosdcard" msgid="4693652895715631401">"Show internal storage"</string>
+ <string name="menu_advanced_show" product="default" msgid="5792182900084144261">"Show SD card"</string>
+ <string name="menu_advanced_hide" product="nosdcard" msgid="4218809952721972589">"Hide internal storage"</string>
+ <string name="menu_advanced_hide" product="default" msgid="4845869969015718848">"Hide SD card"</string>
+ <string name="menu_file_size_show" msgid="3240323619260823076">"Show file size"</string>
+ <string name="menu_file_size_hide" msgid="8881975928502581042">"Hide file size"</string>
+ <string name="button_select" msgid="527196987259139214">"select"</string>
+ <string name="button_copy" msgid="8706475544635021302">"Copy"</string>
<string name="sort_name" msgid="9183560467917256779">"By name"</string>
<string name="sort_date" msgid="586080032956151448">"By date modified"</string>
<string name="sort_size" msgid="3350681319735474741">"By size"</string>
@@ -45,11 +53,22 @@
<string name="root_type_shortcut" msgid="3318760609471618093">"Shortcuts"</string>
<string name="root_type_device" msgid="7121342474653483538">"Devices"</string>
<string name="root_type_apps" msgid="8838065367985945189">"More apps"</string>
- <string name="pref_advanced_devices" msgid="903257239609301276">"Display advanced devices"</string>
- <string name="pref_file_size" msgid="2826879315743961459">"Display file size"</string>
- <string name="pref_device_size" msgid="3542106883278997222">"Display device size"</string>
<string name="empty" msgid="7858882803708117596">"No items"</string>
<string name="toast_no_application" msgid="1339885974067891667">"Cannot open file"</string>
<string name="toast_failed_delete" msgid="2180678019407244069">"Unable to delete some documents"</string>
<string name="share_via" msgid="8966594246261344259">"Share via"</string>
+ <string name="copy_notification_title" msgid="6374299806748219777">"Copying files"</string>
+ <string name="copy_remaining" msgid="6283790937387975095">"<xliff:g id="DURATION">%s</xliff:g> left"</string>
+ <plurals name="copy_begin" formatted="false" msgid="9071199452634086365">
+ <item quantity="other">Copying <xliff:g id="COUNT_1">%1$d</xliff:g> files.</item>
+ <item quantity="one">Copying <xliff:g id="COUNT_0">%1$d</xliff:g> file.</item>
+ </plurals>
+ <string name="copy_preparing" msgid="3896202461003039386">"Preparing for copy…"</string>
+ <plurals name="copy_error_notification_title" formatted="false" msgid="5267616889076217261">
+ <item quantity="other">Couldn\'t copy <xliff:g id="COUNT_1">%1$d</xliff:g> files</item>
+ <item quantity="one">Couldn\'t copy <xliff:g id="COUNT_0">%1$d</xliff:g> file</item>
+ </plurals>
+ <string name="notification_touch_for_details" msgid="4483108577842961665">"Touch to view details"</string>
+ <string name="retry" msgid="7564024179122207376">"Retry"</string>
+ <string name="copy_failure_alert_content" msgid="3715575000297709082">"These files weren\'t copied: <xliff:g id="LIST">%1$s</xliff:g>"</string>
</resources>
diff --git a/res/values-en-rIN/strings.xml b/res/values-en-rIN/strings.xml
index d2af473..665f93b 100644
--- a/res/values-en-rIN/strings.xml
+++ b/res/values-en-rIN/strings.xml
@@ -29,8 +29,16 @@
<string name="menu_save" msgid="2394743337684426338">"Save"</string>
<string name="menu_share" msgid="3075149983979628146">"Share"</string>
<string name="menu_delete" msgid="8138799623850614177">"Delete"</string>
- <string name="menu_select" msgid="8711270657353563424">"Select \"<xliff:g id="DIRECTORY">^1</xliff:g>\""</string>
- <string name="mode_selected_count" msgid="459111894725594625">"<xliff:g id="COUNT">%1$d</xliff:g> selected"</string>
+ <string name="menu_select_all" msgid="8323579667348729928">"Select all"</string>
+ <string name="menu_copy" msgid="3612326052677229148">"Copy to…"</string>
+ <string name="menu_advanced_show" product="nosdcard" msgid="4693652895715631401">"Show internal storage"</string>
+ <string name="menu_advanced_show" product="default" msgid="5792182900084144261">"Show SD card"</string>
+ <string name="menu_advanced_hide" product="nosdcard" msgid="4218809952721972589">"Hide internal storage"</string>
+ <string name="menu_advanced_hide" product="default" msgid="4845869969015718848">"Hide SD card"</string>
+ <string name="menu_file_size_show" msgid="3240323619260823076">"Show file size"</string>
+ <string name="menu_file_size_hide" msgid="8881975928502581042">"Hide file size"</string>
+ <string name="button_select" msgid="527196987259139214">"select"</string>
+ <string name="button_copy" msgid="8706475544635021302">"Copy"</string>
<string name="sort_name" msgid="9183560467917256779">"By name"</string>
<string name="sort_date" msgid="586080032956151448">"By date modified"</string>
<string name="sort_size" msgid="3350681319735474741">"By size"</string>
@@ -45,11 +53,22 @@
<string name="root_type_shortcut" msgid="3318760609471618093">"Shortcuts"</string>
<string name="root_type_device" msgid="7121342474653483538">"Devices"</string>
<string name="root_type_apps" msgid="8838065367985945189">"More apps"</string>
- <string name="pref_advanced_devices" msgid="903257239609301276">"Display advanced devices"</string>
- <string name="pref_file_size" msgid="2826879315743961459">"Display file size"</string>
- <string name="pref_device_size" msgid="3542106883278997222">"Display device size"</string>
<string name="empty" msgid="7858882803708117596">"No items"</string>
<string name="toast_no_application" msgid="1339885974067891667">"Cannot open file"</string>
<string name="toast_failed_delete" msgid="2180678019407244069">"Unable to delete some documents"</string>
<string name="share_via" msgid="8966594246261344259">"Share via"</string>
+ <string name="copy_notification_title" msgid="6374299806748219777">"Copying files"</string>
+ <string name="copy_remaining" msgid="6283790937387975095">"<xliff:g id="DURATION">%s</xliff:g> left"</string>
+ <plurals name="copy_begin" formatted="false" msgid="9071199452634086365">
+ <item quantity="other">Copying <xliff:g id="COUNT_1">%1$d</xliff:g> files.</item>
+ <item quantity="one">Copying <xliff:g id="COUNT_0">%1$d</xliff:g> file.</item>
+ </plurals>
+ <string name="copy_preparing" msgid="3896202461003039386">"Preparing for copy…"</string>
+ <plurals name="copy_error_notification_title" formatted="false" msgid="5267616889076217261">
+ <item quantity="other">Couldn\'t copy <xliff:g id="COUNT_1">%1$d</xliff:g> files</item>
+ <item quantity="one">Couldn\'t copy <xliff:g id="COUNT_0">%1$d</xliff:g> file</item>
+ </plurals>
+ <string name="notification_touch_for_details" msgid="4483108577842961665">"Touch to view details"</string>
+ <string name="retry" msgid="7564024179122207376">"Retry"</string>
+ <string name="copy_failure_alert_content" msgid="3715575000297709082">"These files weren\'t copied: <xliff:g id="LIST">%1$s</xliff:g>"</string>
</resources>
diff --git a/res/values-es-rUS/strings.xml b/res/values-es-rUS/strings.xml
index daf18cf..0140e97 100644
--- a/res/values-es-rUS/strings.xml
+++ b/res/values-es-rUS/strings.xml
@@ -29,8 +29,16 @@
<string name="menu_save" msgid="2394743337684426338">"Guardar"</string>
<string name="menu_share" msgid="3075149983979628146">"Compartir"</string>
<string name="menu_delete" msgid="8138799623850614177">"Eliminar"</string>
- <string name="menu_select" msgid="8711270657353563424">"Seleccionar \"<xliff:g id="DIRECTORY">^1</xliff:g>\""</string>
- <string name="mode_selected_count" msgid="459111894725594625">"<xliff:g id="COUNT">%1$d</xliff:g> seleccionado(s)"</string>
+ <string name="menu_select_all" msgid="8323579667348729928">"Seleccionar todo"</string>
+ <string name="menu_copy" msgid="3612326052677229148">"Copiar a…"</string>
+ <string name="menu_advanced_show" product="nosdcard" msgid="4693652895715631401">"Mostrar almacen. interno"</string>
+ <string name="menu_advanced_show" product="default" msgid="5792182900084144261">"Mostrar tarjeta SD"</string>
+ <string name="menu_advanced_hide" product="nosdcard" msgid="4218809952721972589">"Ocultar almacen. interno"</string>
+ <string name="menu_advanced_hide" product="default" msgid="4845869969015718848">"Ocultar tarjeta SD"</string>
+ <string name="menu_file_size_show" msgid="3240323619260823076">"Mostrar tamaño archivos"</string>
+ <string name="menu_file_size_hide" msgid="8881975928502581042">"Ocultar tamaño archivos"</string>
+ <string name="button_select" msgid="527196987259139214">"Seleccionar"</string>
+ <string name="button_copy" msgid="8706475544635021302">"Copiar"</string>
<string name="sort_name" msgid="9183560467917256779">"Por nombre"</string>
<string name="sort_date" msgid="586080032956151448">"Por fecha de modificación"</string>
<string name="sort_size" msgid="3350681319735474741">"Por tamaño"</string>
@@ -45,11 +53,22 @@
<string name="root_type_shortcut" msgid="3318760609471618093">"Accesos directos"</string>
<string name="root_type_device" msgid="7121342474653483538">"Dispositivos"</string>
<string name="root_type_apps" msgid="8838065367985945189">"Más aplicaciones"</string>
- <string name="pref_advanced_devices" msgid="903257239609301276">"Mostrar dispositivos avanzados"</string>
- <string name="pref_file_size" msgid="2826879315743961459">"Mostrar tamaño del archivo"</string>
- <string name="pref_device_size" msgid="3542106883278997222">"Mostrar tamaño del dispositivo"</string>
<string name="empty" msgid="7858882803708117596">"Sin elementos"</string>
<string name="toast_no_application" msgid="1339885974067891667">"No se puede abrir el archivo."</string>
<string name="toast_failed_delete" msgid="2180678019407244069">"No es posible eliminar algunos documentos."</string>
<string name="share_via" msgid="8966594246261344259">"Compartir mediante"</string>
+ <string name="copy_notification_title" msgid="6374299806748219777">"Copiando archivos"</string>
+ <string name="copy_remaining" msgid="6283790937387975095">"Faltan <xliff:g id="DURATION">%s</xliff:g>."</string>
+ <plurals name="copy_begin" formatted="false" msgid="9071199452634086365">
+ <item quantity="other">Copiando <xliff:g id="COUNT_1">%1$d</xliff:g> archivos</item>
+ <item quantity="one">Copiando <xliff:g id="COUNT_0">%1$d</xliff:g> archivo</item>
+ </plurals>
+ <string name="copy_preparing" msgid="3896202461003039386">"Preparando para copiar…"</string>
+ <plurals name="copy_error_notification_title" formatted="false" msgid="5267616889076217261">
+ <item quantity="other">No se pudieron copiar <xliff:g id="COUNT_1">%1$d</xliff:g> archivos.</item>
+ <item quantity="one">No se pudo copiar <xliff:g id="COUNT_0">%1$d</xliff:g> archivo.</item>
+ </plurals>
+ <string name="notification_touch_for_details" msgid="4483108577842961665">"Toca el elemento para ver más información."</string>
+ <string name="retry" msgid="7564024179122207376">"Reintentar"</string>
+ <string name="copy_failure_alert_content" msgid="3715575000297709082">"No se copiaron estos archivos: <xliff:g id="LIST">%1$s</xliff:g>"</string>
</resources>
diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml
index 573ee41..27595ba 100644
--- a/res/values-es/strings.xml
+++ b/res/values-es/strings.xml
@@ -29,8 +29,16 @@
<string name="menu_save" msgid="2394743337684426338">"Guardar"</string>
<string name="menu_share" msgid="3075149983979628146">"Compartir"</string>
<string name="menu_delete" msgid="8138799623850614177">"Eliminar"</string>
- <string name="menu_select" msgid="8711270657353563424">"Selecciona \"<xliff:g id="DIRECTORY">^1</xliff:g>\""</string>
- <string name="mode_selected_count" msgid="459111894725594625">"Seleccionado: <xliff:g id="COUNT">%1$d</xliff:g>"</string>
+ <string name="menu_select_all" msgid="8323579667348729928">"Seleccionar todo"</string>
+ <string name="menu_copy" msgid="3612326052677229148">"Copiar en…"</string>
+ <string name="menu_advanced_show" product="nosdcard" msgid="4693652895715631401">"Mostrar almac. interno"</string>
+ <string name="menu_advanced_show" product="default" msgid="5792182900084144261">"Mostrar tarjeta SD"</string>
+ <string name="menu_advanced_hide" product="nosdcard" msgid="4218809952721972589">"Ocultar almac. interno"</string>
+ <string name="menu_advanced_hide" product="default" msgid="4845869969015718848">"Ocultar tarjeta SD"</string>
+ <string name="menu_file_size_show" msgid="3240323619260823076">"Mostrar tamaño del archivo"</string>
+ <string name="menu_file_size_hide" msgid="8881975928502581042">"Ocultar tamaño del archivo"</string>
+ <string name="button_select" msgid="527196987259139214">"Seleccionar"</string>
+ <string name="button_copy" msgid="8706475544635021302">"Copiar"</string>
<string name="sort_name" msgid="9183560467917256779">"Por nombre"</string>
<string name="sort_date" msgid="586080032956151448">"Por fecha de modificación"</string>
<string name="sort_size" msgid="3350681319735474741">"Por tamaño"</string>
@@ -45,11 +53,22 @@
<string name="root_type_shortcut" msgid="3318760609471618093">"Accesos directos"</string>
<string name="root_type_device" msgid="7121342474653483538">"Dispositivos"</string>
<string name="root_type_apps" msgid="8838065367985945189">"Más aplicaciones"</string>
- <string name="pref_advanced_devices" msgid="903257239609301276">"Mostrar dispositivos avanzados"</string>
- <string name="pref_file_size" msgid="2826879315743961459">"Mostrar tamaño del archivo"</string>
- <string name="pref_device_size" msgid="3542106883278997222">"Mostrar tamaño del dispositivo"</string>
- <string name="empty" msgid="7858882803708117596">"Sin elementos"</string>
+ <string name="empty" msgid="7858882803708117596">"No hay elementos"</string>
<string name="toast_no_application" msgid="1339885974067891667">"Error al abrir el archivo"</string>
<string name="toast_failed_delete" msgid="2180678019407244069">"No es posible eliminar algunos documentos"</string>
<string name="share_via" msgid="8966594246261344259">"Compartir a través de"</string>
+ <string name="copy_notification_title" msgid="6374299806748219777">"Copiando archivos"</string>
+ <string name="copy_remaining" msgid="6283790937387975095">"Tiempo restante: <xliff:g id="DURATION">%s</xliff:g>"</string>
+ <plurals name="copy_begin" formatted="false" msgid="9071199452634086365">
+ <item quantity="other">Copiando <xliff:g id="COUNT_1">%1$d</xliff:g> archivos.</item>
+ <item quantity="one">Copiando <xliff:g id="COUNT_0">%1$d</xliff:g> archivo.</item>
+ </plurals>
+ <string name="copy_preparing" msgid="3896202461003039386">"Preparando para copiar..."</string>
+ <plurals name="copy_error_notification_title" formatted="false" msgid="5267616889076217261">
+ <item quantity="other">No se han podido copiar <xliff:g id="COUNT_1">%1$d</xliff:g> archivos</item>
+ <item quantity="one">No se ha podido copiar <xliff:g id="COUNT_0">%1$d</xliff:g> archivo</item>
+ </plurals>
+ <string name="notification_touch_for_details" msgid="4483108577842961665">"Toca para ver más información"</string>
+ <string name="retry" msgid="7564024179122207376">"Volver a intentar"</string>
+ <string name="copy_failure_alert_content" msgid="3715575000297709082">"Archivos que no se han copiado: <xliff:g id="LIST">%1$s</xliff:g>"</string>
</resources>
diff --git a/res/values-et-rEE/strings.xml b/res/values-et-rEE/strings.xml
index dae965a..425926b 100644
--- a/res/values-et-rEE/strings.xml
+++ b/res/values-et-rEE/strings.xml
@@ -29,8 +29,16 @@
<string name="menu_save" msgid="2394743337684426338">"Salvesta"</string>
<string name="menu_share" msgid="3075149983979628146">"Jaga"</string>
<string name="menu_delete" msgid="8138799623850614177">"Kustuta"</string>
- <string name="menu_select" msgid="8711270657353563424">"Kataloogi „<xliff:g id="DIRECTORY">^1</xliff:g>” valimine"</string>
- <string name="mode_selected_count" msgid="459111894725594625">"<xliff:g id="COUNT">%1$d</xliff:g> on valitud"</string>
+ <string name="menu_select_all" msgid="8323579667348729928">"Vali kõik"</string>
+ <string name="menu_copy" msgid="3612326052677229148">"Kopeeri asukohta ..."</string>
+ <string name="menu_advanced_show" product="nosdcard" msgid="4693652895715631401">"Kuva sis. salvestusruum"</string>
+ <string name="menu_advanced_show" product="default" msgid="5792182900084144261">"Kuva SD-kaart"</string>
+ <string name="menu_advanced_hide" product="nosdcard" msgid="4218809952721972589">"Peida sis. salvestusruum"</string>
+ <string name="menu_advanced_hide" product="default" msgid="4845869969015718848">"Peida SD-kaart"</string>
+ <string name="menu_file_size_show" msgid="3240323619260823076">"Kuva faili suurus"</string>
+ <string name="menu_file_size_hide" msgid="8881975928502581042">"Peida faili suurus"</string>
+ <string name="button_select" msgid="527196987259139214">"Vali"</string>
+ <string name="button_copy" msgid="8706475544635021302">"Kopeeri"</string>
<string name="sort_name" msgid="9183560467917256779">"Nime järgi"</string>
<string name="sort_date" msgid="586080032956151448">"Muutmiskuupäeva järgi"</string>
<string name="sort_size" msgid="3350681319735474741">"Suuruse järgi"</string>
@@ -45,11 +53,22 @@
<string name="root_type_shortcut" msgid="3318760609471618093">"Otseteed"</string>
<string name="root_type_device" msgid="7121342474653483538">"Seadmed"</string>
<string name="root_type_apps" msgid="8838065367985945189">"Rohkem rakendusi"</string>
- <string name="pref_advanced_devices" msgid="903257239609301276">"Kuva tippseadmed"</string>
- <string name="pref_file_size" msgid="2826879315743961459">"Kuva faili suurus"</string>
- <string name="pref_device_size" msgid="3542106883278997222">"Kuva seadme suurus"</string>
<string name="empty" msgid="7858882803708117596">"Üksusi ei ole"</string>
<string name="toast_no_application" msgid="1339885974067891667">"Faili ei saa avada"</string>
<string name="toast_failed_delete" msgid="2180678019407244069">"Mõnda dokumenti ei õnnestu kustutada"</string>
<string name="share_via" msgid="8966594246261344259">"Jagage teenusega"</string>
+ <string name="copy_notification_title" msgid="6374299806748219777">"Failide kopeerimine"</string>
+ <string name="copy_remaining" msgid="6283790937387975095">"Jäänud on <xliff:g id="DURATION">%s</xliff:g>"</string>
+ <plurals name="copy_begin" formatted="false" msgid="9071199452634086365">
+ <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> faili kopeerimine.</item>
+ <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> faili kopeerimine.</item>
+ </plurals>
+ <string name="copy_preparing" msgid="3896202461003039386">"Kopeerimise ettevalmistamine …"</string>
+ <plurals name="copy_error_notification_title" formatted="false" msgid="5267616889076217261">
+ <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> faili ei saanud kopeerida</item>
+ <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> faili ei saanud kopeerida</item>
+ </plurals>
+ <string name="notification_touch_for_details" msgid="4483108577842961665">"Puudutage üksikasjade vaatamiseks"</string>
+ <string name="retry" msgid="7564024179122207376">"Proovi uuesti"</string>
+ <string name="copy_failure_alert_content" msgid="3715575000297709082">"Neid faile ei kopeeritud: <xliff:g id="LIST">%1$s</xliff:g>"</string>
</resources>
diff --git a/res/values-eu-rES/strings.xml b/res/values-eu-rES/strings.xml
index 582bf73..98d0d25 100644
--- a/res/values-eu-rES/strings.xml
+++ b/res/values-eu-rES/strings.xml
@@ -29,8 +29,16 @@
<string name="menu_save" msgid="2394743337684426338">"Gorde"</string>
<string name="menu_share" msgid="3075149983979628146">"Partekatu"</string>
<string name="menu_delete" msgid="8138799623850614177">"Ezabatu"</string>
- <string name="menu_select" msgid="8711270657353563424">"Hautatu \"<xliff:g id="DIRECTORY">^1</xliff:g>\""</string>
- <string name="mode_selected_count" msgid="459111894725594625">"<xliff:g id="COUNT">%1$d</xliff:g> hautatuta"</string>
+ <string name="menu_select_all" msgid="8323579667348729928">"Hautatu guztiak"</string>
+ <string name="menu_copy" msgid="3612326052677229148">"Kopiatu hemen…"</string>
+ <string name="menu_advanced_show" product="nosdcard" msgid="4693652895715631401">"Erakutsi barneko memoria"</string>
+ <string name="menu_advanced_show" product="default" msgid="5792182900084144261">"Erakutsi SD txartela"</string>
+ <string name="menu_advanced_hide" product="nosdcard" msgid="4218809952721972589">"Ezkutatu barneko memoria"</string>
+ <string name="menu_advanced_hide" product="default" msgid="4845869969015718848">"Ezkutatu SD txartela"</string>
+ <string name="menu_file_size_show" msgid="3240323619260823076">"Erakutsi fitxategi-tamaina"</string>
+ <string name="menu_file_size_hide" msgid="8881975928502581042">"Ezkutatu fitxategi-tamaina"</string>
+ <string name="button_select" msgid="527196987259139214">"Hautatu"</string>
+ <string name="button_copy" msgid="8706475544635021302">"Kopiatu"</string>
<string name="sort_name" msgid="9183560467917256779">"Izenaren arabera"</string>
<string name="sort_date" msgid="586080032956151448">"Aldatze-dataren arabera"</string>
<string name="sort_size" msgid="3350681319735474741">"Tamainaren arabera"</string>
@@ -45,11 +53,22 @@
<string name="root_type_shortcut" msgid="3318760609471618093">"Lasterbideak"</string>
<string name="root_type_device" msgid="7121342474653483538">"Gailuak"</string>
<string name="root_type_apps" msgid="8838065367985945189">"Aplikazio gehiago"</string>
- <string name="pref_advanced_devices" msgid="903257239609301276">"Bistaratu gailu aurreratuak"</string>
- <string name="pref_file_size" msgid="2826879315743961459">"Bistaratu fitxategiaren tamaina"</string>
- <string name="pref_device_size" msgid="3542106883278997222">"Bistaratu gailuaren tamaina"</string>
<string name="empty" msgid="7858882803708117596">"Ez dago elementurik"</string>
<string name="toast_no_application" msgid="1339885974067891667">"Ezin da fitxategia ireki"</string>
<string name="toast_failed_delete" msgid="2180678019407244069">"Ezin izan dira dokumentu batzuk ezabatu"</string>
<string name="share_via" msgid="8966594246261344259">"Partekatu honen bidez:"</string>
+ <string name="copy_notification_title" msgid="6374299806748219777">"Fitxategiak kopiatzen"</string>
+ <string name="copy_remaining" msgid="6283790937387975095">"Falta den denbora: <xliff:g id="DURATION">%s</xliff:g>"</string>
+ <plurals name="copy_begin" formatted="false" msgid="9071199452634086365">
+ <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> fitxategi kopiatzen.</item>
+ <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> fitxategi kopiatzen.</item>
+ </plurals>
+ <string name="copy_preparing" msgid="3896202461003039386">"Kopiatzeko prestatzen…"</string>
+ <plurals name="copy_error_notification_title" formatted="false" msgid="5267616889076217261">
+ <item quantity="other">Ezin izan dira kopiatu <xliff:g id="COUNT_1">%1$d</xliff:g> fitxategi</item>
+ <item quantity="one">Ezin izan da kopiatu <xliff:g id="COUNT_0">%1$d</xliff:g> fitxategi</item>
+ </plurals>
+ <string name="notification_touch_for_details" msgid="4483108577842961665">"Xehetasunak ikusteko, ukitu hau."</string>
+ <string name="retry" msgid="7564024179122207376">"Saiatu berriro"</string>
+ <string name="copy_failure_alert_content" msgid="3715575000297709082">"Ez dira kopiatu fitxategi hauek: <xliff:g id="LIST">%1$s</xliff:g>"</string>
</resources>
diff --git a/res/values-fa/strings.xml b/res/values-fa/strings.xml
index a646eda..b414b07 100644
--- a/res/values-fa/strings.xml
+++ b/res/values-fa/strings.xml
@@ -29,8 +29,16 @@
<string name="menu_save" msgid="2394743337684426338">"ذخیره"</string>
<string name="menu_share" msgid="3075149983979628146">"اشتراکگذاری"</string>
<string name="menu_delete" msgid="8138799623850614177">"حذف"</string>
- <string name="menu_select" msgid="8711270657353563424">"انتخاب «<xliff:g id="DIRECTORY">^1</xliff:g>»"</string>
- <string name="mode_selected_count" msgid="459111894725594625">"<xliff:g id="COUNT">%1$d</xliff:g> انتخاب شد"</string>
+ <string name="menu_select_all" msgid="8323579667348729928">"انتخاب همه"</string>
+ <string name="menu_copy" msgid="3612326052677229148">"کپی در..."</string>
+ <string name="menu_advanced_show" product="nosdcard" msgid="4693652895715631401">"نمایش فضای ذخیرهسازی داخلی"</string>
+ <string name="menu_advanced_show" product="default" msgid="5792182900084144261">"نمایش کارت SD"</string>
+ <string name="menu_advanced_hide" product="nosdcard" msgid="4218809952721972589">"پنهان کردن فضای ذخیرهسازی داخلی"</string>
+ <string name="menu_advanced_hide" product="default" msgid="4845869969015718848">"پنهان کردن کارت SD"</string>
+ <string name="menu_file_size_show" msgid="3240323619260823076">"نمایش اندازه فایل"</string>
+ <string name="menu_file_size_hide" msgid="8881975928502581042">"پنهان کردن اندازه فایل"</string>
+ <string name="button_select" msgid="527196987259139214">"انتخاب"</string>
+ <string name="button_copy" msgid="8706475544635021302">"کپی"</string>
<string name="sort_name" msgid="9183560467917256779">"بر اساس نام"</string>
<string name="sort_date" msgid="586080032956151448">"بر اساس تاریخ اصلاح"</string>
<string name="sort_size" msgid="3350681319735474741">"بر اساس اندازه"</string>
@@ -45,11 +53,22 @@
<string name="root_type_shortcut" msgid="3318760609471618093">"میانبرها"</string>
<string name="root_type_device" msgid="7121342474653483538">"دستگاهها"</string>
<string name="root_type_apps" msgid="8838065367985945189">"برنامههای بیشتر"</string>
- <string name="pref_advanced_devices" msgid="903257239609301276">"نمایش دستگاههای پیشرفته"</string>
- <string name="pref_file_size" msgid="2826879315743961459">"نمایش اندازه فایل"</string>
- <string name="pref_device_size" msgid="3542106883278997222">"نمایش اندازه صفحه نمایش"</string>
<string name="empty" msgid="7858882803708117596">"موردی موجود نیست"</string>
<string name="toast_no_application" msgid="1339885974067891667">"فایل باز نمیشود"</string>
<string name="toast_failed_delete" msgid="2180678019407244069">"برخی از اسناد حذف نمیشوند"</string>
<string name="share_via" msgid="8966594246261344259">"اشتراکگذاری از طریق"</string>
+ <string name="copy_notification_title" msgid="6374299806748219777">"در حال کپی کردن فایلها"</string>
+ <string name="copy_remaining" msgid="6283790937387975095">"<xliff:g id="DURATION">%s</xliff:g> باقیمانده"</string>
+ <plurals name="copy_begin" formatted="false" msgid="9071199452634086365">
+ <item quantity="one">در حال کپی کردن <xliff:g id="COUNT_1">%1$d</xliff:g> فایل.</item>
+ <item quantity="other">در حال کپی کردن <xliff:g id="COUNT_1">%1$d</xliff:g> فایل.</item>
+ </plurals>
+ <string name="copy_preparing" msgid="3896202461003039386">"در حال آمادهسازی برای کپی..."</string>
+ <plurals name="copy_error_notification_title" formatted="false" msgid="5267616889076217261">
+ <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> فایل کپی نشد</item>
+ <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> فایل کپی نشد</item>
+ </plurals>
+ <string name="notification_touch_for_details" msgid="4483108577842961665">"برای مشاهده جزئیات لمس کنید"</string>
+ <string name="retry" msgid="7564024179122207376">"امتحان مجدد"</string>
+ <string name="copy_failure_alert_content" msgid="3715575000297709082">"این فایلها کپی نشدند: <xliff:g id="LIST">%1$s</xliff:g>"</string>
</resources>
diff --git a/res/values-fi/strings.xml b/res/values-fi/strings.xml
index ae04e32..ca28e95 100644
--- a/res/values-fi/strings.xml
+++ b/res/values-fi/strings.xml
@@ -29,8 +29,16 @@
<string name="menu_save" msgid="2394743337684426338">"Tallenna"</string>
<string name="menu_share" msgid="3075149983979628146">"Jaa"</string>
<string name="menu_delete" msgid="8138799623850614177">"Poista"</string>
- <string name="menu_select" msgid="8711270657353563424">"Valitse <xliff:g id="DIRECTORY">^1</xliff:g>"</string>
- <string name="mode_selected_count" msgid="459111894725594625">"<xliff:g id="COUNT">%1$d</xliff:g> valittua"</string>
+ <string name="menu_select_all" msgid="8323579667348729928">"Valitse kaikki"</string>
+ <string name="menu_copy" msgid="3612326052677229148">"Kopioi kohteeseen…"</string>
+ <string name="menu_advanced_show" product="nosdcard" msgid="4693652895715631401">"Näytä sis. tallennustila"</string>
+ <string name="menu_advanced_show" product="default" msgid="5792182900084144261">"Näytä SD-kortti"</string>
+ <string name="menu_advanced_hide" product="nosdcard" msgid="4218809952721972589">"Piilota sis. tallennust."</string>
+ <string name="menu_advanced_hide" product="default" msgid="4845869969015718848">"Piilota SD-kortti"</string>
+ <string name="menu_file_size_show" msgid="3240323619260823076">"Näytä tiedostokoko"</string>
+ <string name="menu_file_size_hide" msgid="8881975928502581042">"Piilota tiedostokoko"</string>
+ <string name="button_select" msgid="527196987259139214">"Valitse"</string>
+ <string name="button_copy" msgid="8706475544635021302">"Kopioi"</string>
<string name="sort_name" msgid="9183560467917256779">"Nimen mukaan"</string>
<string name="sort_date" msgid="586080032956151448">"Muokkauspäivän mukaan"</string>
<string name="sort_size" msgid="3350681319735474741">"Koon mukaan"</string>
@@ -45,11 +53,22 @@
<string name="root_type_shortcut" msgid="3318760609471618093">"Pikakuvakkeet"</string>
<string name="root_type_device" msgid="7121342474653483538">"Laitteet"</string>
<string name="root_type_apps" msgid="8838065367985945189">"Lisää sovelluksia"</string>
- <string name="pref_advanced_devices" msgid="903257239609301276">"Näytä kehittyneet laitteet"</string>
- <string name="pref_file_size" msgid="2826879315743961459">"Näytä tiedoston koko"</string>
- <string name="pref_device_size" msgid="3542106883278997222">"Näytä laitteen koko"</string>
<string name="empty" msgid="7858882803708117596">"Ei kohteita"</string>
<string name="toast_no_application" msgid="1339885974067891667">"Tiedostoa ei voi avata"</string>
<string name="toast_failed_delete" msgid="2180678019407244069">"Joitakin asiakirjoja ei voi poistaa"</string>
<string name="share_via" msgid="8966594246261344259">"Jaa sovelluksessa"</string>
+ <string name="copy_notification_title" msgid="6374299806748219777">"Kopioidaan tiedostoja"</string>
+ <string name="copy_remaining" msgid="6283790937387975095">"<xliff:g id="DURATION">%s</xliff:g> jäljellä"</string>
+ <plurals name="copy_begin" formatted="false" msgid="9071199452634086365">
+ <item quantity="other">Kopioidaan <xliff:g id="COUNT_1">%1$d</xliff:g> tiedostoa.</item>
+ <item quantity="one">Kopioidaan <xliff:g id="COUNT_0">%1$d</xliff:g> tiedosto.</item>
+ </plurals>
+ <string name="copy_preparing" msgid="3896202461003039386">"Valmistellaan kopiointia…"</string>
+ <plurals name="copy_error_notification_title" formatted="false" msgid="5267616889076217261">
+ <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> tiedoston kopioiminen epäonnistui.</item>
+ <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> tiedoston kopioiminen epäonnistui.</item>
+ </plurals>
+ <string name="notification_touch_for_details" msgid="4483108577842961665">"Lue lisätietoja koskettamalla"</string>
+ <string name="retry" msgid="7564024179122207376">"Yritä uudelleen"</string>
+ <string name="copy_failure_alert_content" msgid="3715575000297709082">"Seuraavia tiedostoja ei kopioitu: <xliff:g id="LIST">%1$s</xliff:g>"</string>
</resources>
diff --git a/res/values-fr-rCA/strings.xml b/res/values-fr-rCA/strings.xml
index b370a1e..03f09ff 100644
--- a/res/values-fr-rCA/strings.xml
+++ b/res/values-fr-rCA/strings.xml
@@ -17,7 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="2783841764617238354">"Documents"</string>
- <string name="title_open" msgid="4353228937663917801">"Ouvert à partir de"</string>
+ <string name="title_open" msgid="4353228937663917801">"Ouvrir à partir de"</string>
<string name="title_save" msgid="2433679664882857999">"Enregistrer dans"</string>
<string name="menu_create_dir" msgid="5947289605844398389">"Créer un dossier"</string>
<string name="menu_grid" msgid="6878021334497835259">"Grille"</string>
@@ -29,8 +29,16 @@
<string name="menu_save" msgid="2394743337684426338">"Enregistrer"</string>
<string name="menu_share" msgid="3075149983979628146">"Partager"</string>
<string name="menu_delete" msgid="8138799623850614177">"Supprimer"</string>
- <string name="menu_select" msgid="8711270657353563424">"Sélectionner « <xliff:g id="DIRECTORY">^1</xliff:g> »"</string>
- <string name="mode_selected_count" msgid="459111894725594625">"<xliff:g id="COUNT">%1$d</xliff:g> sélectionné(s)"</string>
+ <string name="menu_select_all" msgid="8323579667348729928">"Tout sélectionner"</string>
+ <string name="menu_copy" msgid="3612326052677229148">"Copier vers..."</string>
+ <string name="menu_advanced_show" product="nosdcard" msgid="4693652895715631401">"Aff. mém. stock. interne"</string>
+ <string name="menu_advanced_show" product="default" msgid="5792182900084144261">"Afficher la carte SD"</string>
+ <string name="menu_advanced_hide" product="nosdcard" msgid="4218809952721972589">"Masquer mém. stock. int."</string>
+ <string name="menu_advanced_hide" product="default" msgid="4845869969015718848">"Masquer la carte SD"</string>
+ <string name="menu_file_size_show" msgid="3240323619260823076">"Afficher taille fichier"</string>
+ <string name="menu_file_size_hide" msgid="8881975928502581042">"Masquer taille fichier"</string>
+ <string name="button_select" msgid="527196987259139214">"Sélectionner"</string>
+ <string name="button_copy" msgid="8706475544635021302">"Copier"</string>
<string name="sort_name" msgid="9183560467917256779">"Par nom"</string>
<string name="sort_date" msgid="586080032956151448">"Par date de modification"</string>
<string name="sort_size" msgid="3350681319735474741">"Par taille"</string>
@@ -45,11 +53,22 @@
<string name="root_type_shortcut" msgid="3318760609471618093">"Raccourcis"</string>
<string name="root_type_device" msgid="7121342474653483538">"Appareils"</string>
<string name="root_type_apps" msgid="8838065367985945189">"Plus d\'applications"</string>
- <string name="pref_advanced_devices" msgid="903257239609301276">"Afficher les appareils avancés"</string>
- <string name="pref_file_size" msgid="2826879315743961459">"Afficher la taille du fichier"</string>
- <string name="pref_device_size" msgid="3542106883278997222">"Taille de l\'écran de l\'appareil"</string>
<string name="empty" msgid="7858882803708117596">"Aucun élément"</string>
<string name="toast_no_application" msgid="1339885974067891667">"Impossible d\'ouvrir le fichier"</string>
<string name="toast_failed_delete" msgid="2180678019407244069">"Impossible de supprimer certains documents"</string>
<string name="share_via" msgid="8966594246261344259">"Partager par"</string>
+ <string name="copy_notification_title" msgid="6374299806748219777">"Copie de fichiers..."</string>
+ <string name="copy_remaining" msgid="6283790937387975095">"Durée restante : <xliff:g id="DURATION">%s</xliff:g>"</string>
+ <plurals name="copy_begin" formatted="false" msgid="9071199452634086365">
+ <item quantity="one">Copier de <xliff:g id="COUNT_1">%1$d</xliff:g> fichier en cours.</item>
+ <item quantity="other">Copier de <xliff:g id="COUNT_1">%1$d</xliff:g> fichiers en cours.</item>
+ </plurals>
+ <string name="copy_preparing" msgid="3896202461003039386">"Préparation de la copie en cours"</string>
+ <plurals name="copy_error_notification_title" formatted="false" msgid="5267616889076217261">
+ <item quantity="one">Impossible de copier <xliff:g id="COUNT_1">%1$d</xliff:g> fichier</item>
+ <item quantity="other">Impossible de copier <xliff:g id="COUNT_1">%1$d</xliff:g> fichiers</item>
+ </plurals>
+ <string name="notification_touch_for_details" msgid="4483108577842961665">"Touchez ici pour afficher les détails"</string>
+ <string name="retry" msgid="7564024179122207376">"Réessayer"</string>
+ <string name="copy_failure_alert_content" msgid="3715575000297709082">"Ces fichiers ne ont pas été copiés : <xliff:g id="LIST">%1$s</xliff:g>"</string>
</resources>
diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml
index b85b518..f2fa732 100644
--- a/res/values-fr/strings.xml
+++ b/res/values-fr/strings.xml
@@ -29,8 +29,16 @@
<string name="menu_save" msgid="2394743337684426338">"Enregistrer"</string>
<string name="menu_share" msgid="3075149983979628146">"Partager"</string>
<string name="menu_delete" msgid="8138799623850614177">"Supprimer"</string>
- <string name="menu_select" msgid="8711270657353563424">"Sélectionner \"<xliff:g id="DIRECTORY">^1</xliff:g>\""</string>
- <string name="mode_selected_count" msgid="459111894725594625">"<xliff:g id="COUNT">%1$d</xliff:g> élément(s) sélectionné(s)"</string>
+ <string name="menu_select_all" msgid="8323579667348729928">"Tout sélectionner"</string>
+ <string name="menu_copy" msgid="3612326052677229148">"Copier vers…"</string>
+ <string name="menu_advanced_show" product="nosdcard" msgid="4693652895715631401">"Aff. mém. stock. interne"</string>
+ <string name="menu_advanced_show" product="default" msgid="5792182900084144261">"Afficher la carte SD"</string>
+ <string name="menu_advanced_hide" product="nosdcard" msgid="4218809952721972589">"Masquer mém. stock. int."</string>
+ <string name="menu_advanced_hide" product="default" msgid="4845869969015718848">"Masquer la carte SD"</string>
+ <string name="menu_file_size_show" msgid="3240323619260823076">"Afficher taille fichier"</string>
+ <string name="menu_file_size_hide" msgid="8881975928502581042">"Masquer taille fichier"</string>
+ <string name="button_select" msgid="527196987259139214">"Sélectionner"</string>
+ <string name="button_copy" msgid="8706475544635021302">"Copier"</string>
<string name="sort_name" msgid="9183560467917256779">"Par nom"</string>
<string name="sort_date" msgid="586080032956151448">"Par date de modification"</string>
<string name="sort_size" msgid="3350681319735474741">"Par taille"</string>
@@ -45,11 +53,22 @@
<string name="root_type_shortcut" msgid="3318760609471618093">"Raccourcis"</string>
<string name="root_type_device" msgid="7121342474653483538">"Appareils"</string>
<string name="root_type_apps" msgid="8838065367985945189">"Autres applications"</string>
- <string name="pref_advanced_devices" msgid="903257239609301276">"Afficher les appareils avancés"</string>
- <string name="pref_file_size" msgid="2826879315743961459">"Afficher la taille des fichiers"</string>
- <string name="pref_device_size" msgid="3542106883278997222">"Afficher la capacité de stockage des appareils"</string>
<string name="empty" msgid="7858882803708117596">"Aucun élément"</string>
<string name="toast_no_application" msgid="1339885974067891667">"Impossible d\'ouvrir le fichier."</string>
<string name="toast_failed_delete" msgid="2180678019407244069">"Impossible de supprimer certains documents."</string>
<string name="share_via" msgid="8966594246261344259">"Partager via"</string>
+ <string name="copy_notification_title" msgid="6374299806748219777">"Copie de fichiers en cours"</string>
+ <string name="copy_remaining" msgid="6283790937387975095">"Temps restant : <xliff:g id="DURATION">%s</xliff:g>"</string>
+ <plurals name="copy_begin" formatted="false" msgid="9071199452634086365">
+ <item quantity="one">Copie de <xliff:g id="COUNT_1">%1$d</xliff:g> fichier en cours…</item>
+ <item quantity="other">Copie de <xliff:g id="COUNT_1">%1$d</xliff:g> fichiers en cours…</item>
+ </plurals>
+ <string name="copy_preparing" msgid="3896202461003039386">"Préparation de la copie en cours…"</string>
+ <plurals name="copy_error_notification_title" formatted="false" msgid="5267616889076217261">
+ <item quantity="one">Impossible de copier <xliff:g id="COUNT_1">%1$d</xliff:g> fichier</item>
+ <item quantity="other">Impossible de copier <xliff:g id="COUNT_1">%1$d</xliff:g> fichiers</item>
+ </plurals>
+ <string name="notification_touch_for_details" msgid="4483108577842961665">"Appuyez pour en savoir plus."</string>
+ <string name="retry" msgid="7564024179122207376">"Réessayer"</string>
+ <string name="copy_failure_alert_content" msgid="3715575000297709082">"Les fichiers suivants n\'ont pas été copiés : <xliff:g id="LIST">%1$s</xliff:g>."</string>
</resources>
diff --git a/res/values-gl-rES/strings.xml b/res/values-gl-rES/strings.xml
index b1cf76b..322d431 100644
--- a/res/values-gl-rES/strings.xml
+++ b/res/values-gl-rES/strings.xml
@@ -29,8 +29,16 @@
<string name="menu_save" msgid="2394743337684426338">"Gardar"</string>
<string name="menu_share" msgid="3075149983979628146">"Compartir"</string>
<string name="menu_delete" msgid="8138799623850614177">"Eliminar"</string>
- <string name="menu_select" msgid="8711270657353563424">"Selecciona \"<xliff:g id="DIRECTORY">^1</xliff:g>\""</string>
- <string name="mode_selected_count" msgid="459111894725594625">"<xliff:g id="COUNT">%1$d</xliff:g> seleccionados"</string>
+ <string name="menu_select_all" msgid="8323579667348729928">"Seleccionar todo"</string>
+ <string name="menu_copy" msgid="3612326052677229148">"Copiar en…"</string>
+ <string name="menu_advanced_show" product="nosdcard" msgid="4693652895715631401">"Mostrar almacen. interno"</string>
+ <string name="menu_advanced_show" product="default" msgid="5792182900084144261">"Mostrar tarxeta SD"</string>
+ <string name="menu_advanced_hide" product="nosdcard" msgid="4218809952721972589">"Ocultar almacen. interno"</string>
+ <string name="menu_advanced_hide" product="default" msgid="4845869969015718848">"Ocultar tarxeta SD"</string>
+ <string name="menu_file_size_show" msgid="3240323619260823076">"Mostrar tamaño ficheiro"</string>
+ <string name="menu_file_size_hide" msgid="8881975928502581042">"Ocultar tamaño ficheiro"</string>
+ <string name="button_select" msgid="527196987259139214">"Seleccionar"</string>
+ <string name="button_copy" msgid="8706475544635021302">"Copiar"</string>
<string name="sort_name" msgid="9183560467917256779">"Por nome"</string>
<string name="sort_date" msgid="586080032956151448">"Por data de modificación"</string>
<string name="sort_size" msgid="3350681319735474741">"Por tamaño"</string>
@@ -45,11 +53,22 @@
<string name="root_type_shortcut" msgid="3318760609471618093">"Atallos"</string>
<string name="root_type_device" msgid="7121342474653483538">"Dispositivos"</string>
<string name="root_type_apps" msgid="8838065367985945189">"Máis aplicacións"</string>
- <string name="pref_advanced_devices" msgid="903257239609301276">"Mostrar dispositivos avanzados"</string>
- <string name="pref_file_size" msgid="2826879315743961459">"Mostrar tamaño do ficheiro"</string>
- <string name="pref_device_size" msgid="3542106883278997222">"Mostrar tamaño do dispositivo"</string>
<string name="empty" msgid="7858882803708117596">"Ningún elemento"</string>
<string name="toast_no_application" msgid="1339885974067891667">"Non se pode abrir o ficheiro"</string>
<string name="toast_failed_delete" msgid="2180678019407244069">"Non se poden eliminar algúns documentos"</string>
<string name="share_via" msgid="8966594246261344259">"Compartir a través de"</string>
+ <string name="copy_notification_title" msgid="6374299806748219777">"Copiando ficheiros"</string>
+ <string name="copy_remaining" msgid="6283790937387975095">"Tempo restante: <xliff:g id="DURATION">%s</xliff:g>"</string>
+ <plurals name="copy_begin" formatted="false" msgid="9071199452634086365">
+ <item quantity="other">Copiando <xliff:g id="COUNT_1">%1$d</xliff:g> ficheiros.</item>
+ <item quantity="one">Copianto <xliff:g id="COUNT_0">%1$d</xliff:g> ficheiro.</item>
+ </plurals>
+ <string name="copy_preparing" msgid="3896202461003039386">"Preparando para copiar…"</string>
+ <plurals name="copy_error_notification_title" formatted="false" msgid="5267616889076217261">
+ <item quantity="other">Non se puideron copiar <xliff:g id="COUNT_1">%1$d</xliff:g> ficheiros</item>
+ <item quantity="one">Non se puido copiar <xliff:g id="COUNT_0">%1$d</xliff:g> ficheiro</item>
+ </plurals>
+ <string name="notification_touch_for_details" msgid="4483108577842961665">"Toca para ver detalles"</string>
+ <string name="retry" msgid="7564024179122207376">"Tentar de novo"</string>
+ <string name="copy_failure_alert_content" msgid="3715575000297709082">"Non se copiaron estes ficheiros: <xliff:g id="LIST">%1$s</xliff:g>"</string>
</resources>
diff --git a/res/values-gu-rIN/strings.xml b/res/values-gu-rIN/strings.xml
new file mode 100644
index 0000000..a76c490
--- /dev/null
+++ b/res/values-gu-rIN/strings.xml
@@ -0,0 +1,74 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2013 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="app_label" msgid="2783841764617238354">"દસ્તાવેજો"</string>
+ <string name="title_open" msgid="4353228937663917801">"અહીંથી ખોલો"</string>
+ <string name="title_save" msgid="2433679664882857999">"આમાં સાચવો"</string>
+ <string name="menu_create_dir" msgid="5947289605844398389">"ફોલ્ડર બનાવો"</string>
+ <string name="menu_grid" msgid="6878021334497835259">"ગ્રિડ દૃશ્ય"</string>
+ <string name="menu_list" msgid="7279285939892417279">"સૂચિ દૃશ્ય"</string>
+ <string name="menu_sort" msgid="7677740407158414452">"આ પ્રમાણે સૉર્ટ કરો"</string>
+ <string name="menu_search" msgid="3816712084502856974">"શોધો"</string>
+ <string name="menu_settings" msgid="6008033148948428823">"સેટિંગ્સ"</string>
+ <string name="menu_open" msgid="432922957274920903">"ખોલો"</string>
+ <string name="menu_save" msgid="2394743337684426338">"સાચવો"</string>
+ <string name="menu_share" msgid="3075149983979628146">"શેર કરો"</string>
+ <string name="menu_delete" msgid="8138799623850614177">"કાઢી નાખો"</string>
+ <string name="menu_select_all" msgid="8323579667348729928">"બધા પસંદ કરો"</string>
+ <string name="menu_copy" msgid="3612326052677229148">"આના પર કૉપિ કરો…"</string>
+ <string name="menu_advanced_show" product="nosdcard" msgid="4693652895715631401">"આંતરિક સ્ટોરેજ દર્શાવો"</string>
+ <string name="menu_advanced_show" product="default" msgid="5792182900084144261">"SD કાર્ડ દર્શાવો"</string>
+ <string name="menu_advanced_hide" product="nosdcard" msgid="4218809952721972589">"આંતરિક સંગ્રહ છુપાવો"</string>
+ <string name="menu_advanced_hide" product="default" msgid="4845869969015718848">"SD કાર્ડ છુપાવો"</string>
+ <string name="menu_file_size_show" msgid="3240323619260823076">"ફાઇલ કદ દર્શાવો"</string>
+ <string name="menu_file_size_hide" msgid="8881975928502581042">"ફાઇલ કદ છુપાવો"</string>
+ <string name="button_select" msgid="527196987259139214">"પસંદ કરો"</string>
+ <string name="button_copy" msgid="8706475544635021302">"કૉપિ કરો"</string>
+ <string name="sort_name" msgid="9183560467917256779">"નામ દ્વારા"</string>
+ <string name="sort_date" msgid="586080032956151448">"સંશોધન તારીખ દ્વારા"</string>
+ <string name="sort_size" msgid="3350681319735474741">"કદ દ્વારા"</string>
+ <string name="drawer_open" msgid="4545466532430226949">"રૂટ્સ દર્શાવો"</string>
+ <string name="drawer_close" msgid="7602734368552123318">"રૂટ્સ છુપાવો"</string>
+ <string name="save_error" msgid="6167009778003223664">"દસ્તાવેજ સાચવવામાં નિષ્ફળ થયાં."</string>
+ <string name="create_error" msgid="3735649141335444215">"ફોલ્ડર બનાવવામાં નિષ્ફળ થયા"</string>
+ <string name="query_error" msgid="1222448261663503501">"દસ્તાવેજોને ક્વેરી કરવામાં નિષ્ફળ થયાં"</string>
+ <string name="root_recent" msgid="4470053704320518133">"તાજેતરના"</string>
+ <string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> ખાલી"</string>
+ <string name="root_type_service" msgid="2178854894416775409">"સંગ્રહ સેવાઓ"</string>
+ <string name="root_type_shortcut" msgid="3318760609471618093">"શોર્ટકટ્સ"</string>
+ <string name="root_type_device" msgid="7121342474653483538">"ઉપકરણો"</string>
+ <string name="root_type_apps" msgid="8838065367985945189">"વધુ એપ્લિકેશન્સ"</string>
+ <string name="empty" msgid="7858882803708117596">"કોઈ આઇટમ્સ નથી"</string>
+ <string name="toast_no_application" msgid="1339885974067891667">"ફાઇલ ખોલી શકાતી નથી"</string>
+ <string name="toast_failed_delete" msgid="2180678019407244069">"કેટલાક દસ્તાવેજો કાઢી નાખવામાં અસમર્થ"</string>
+ <string name="share_via" msgid="8966594246261344259">"આના દ્વારા શેર કરો"</string>
+ <string name="copy_notification_title" msgid="6374299806748219777">"ફાઇલો કૉપિ કરી રહ્યાં છે"</string>
+ <string name="copy_remaining" msgid="6283790937387975095">"<xliff:g id="DURATION">%s</xliff:g> બાકી"</string>
+ <plurals name="copy_begin" formatted="false" msgid="9071199452634086365">
+ <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> ફાઇલો કૉપિ કરી રહ્યાં છે.</item>
+ <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> ફાઇલો કૉપિ કરી રહ્યાં છે.</item>
+ </plurals>
+ <string name="copy_preparing" msgid="3896202461003039386">"કૉપિ માટે તૈયારી કરી રહ્યું છે…"</string>
+ <plurals name="copy_error_notification_title" formatted="false" msgid="5267616889076217261">
+ <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> ફાઇલો કૉપિ કરી શકાઈ નથી</item>
+ <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> ફાઇલો કૉપિ કરી શકાઈ નથી</item>
+ </plurals>
+ <string name="notification_touch_for_details" msgid="4483108577842961665">"વિગતો જોવા માટે ટચ કરો"</string>
+ <string name="retry" msgid="7564024179122207376">"ફરી પ્રયાસ કરો"</string>
+ <string name="copy_failure_alert_content" msgid="3715575000297709082">"આ ફાઇલો કૉપિ કરી નહોતી: <xliff:g id="LIST">%1$s</xliff:g>"</string>
+</resources>
diff --git a/res/values-hi/strings.xml b/res/values-hi/strings.xml
index 66c707e..a3ff7a4 100644
--- a/res/values-hi/strings.xml
+++ b/res/values-hi/strings.xml
@@ -18,7 +18,7 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="2783841764617238354">"दस्तावेज़"</string>
<string name="title_open" msgid="4353228937663917801">"यहां से खोलें"</string>
- <string name="title_save" msgid="2433679664882857999">"यहां सहेजें"</string>
+ <string name="title_save" msgid="2433679664882857999">"यहां जोड़ें"</string>
<string name="menu_create_dir" msgid="5947289605844398389">"फ़ोल्डर बनाएं"</string>
<string name="menu_grid" msgid="6878021334497835259">"ग्रिड दृश्य"</string>
<string name="menu_list" msgid="7279285939892417279">"सूची दृश्य"</string>
@@ -26,11 +26,19 @@
<string name="menu_search" msgid="3816712084502856974">"खोजें"</string>
<string name="menu_settings" msgid="6008033148948428823">"सेटिंग"</string>
<string name="menu_open" msgid="432922957274920903">"खोलें"</string>
- <string name="menu_save" msgid="2394743337684426338">"सहेजें"</string>
+ <string name="menu_save" msgid="2394743337684426338">"जोड़ें"</string>
<string name="menu_share" msgid="3075149983979628146">"साझा करें"</string>
<string name="menu_delete" msgid="8138799623850614177">"हटाएं"</string>
- <string name="menu_select" msgid="8711270657353563424">"\"<xliff:g id="DIRECTORY">^1</xliff:g>\" चुनें"</string>
- <string name="mode_selected_count" msgid="459111894725594625">"<xliff:g id="COUNT">%1$d</xliff:g> चयनित"</string>
+ <string name="menu_select_all" msgid="8323579667348729928">"सभी चुनें"</string>
+ <string name="menu_copy" msgid="3612326052677229148">"इनकी कॉपी बनाएं..."</string>
+ <string name="menu_advanced_show" product="nosdcard" msgid="4693652895715631401">"आंतरिक मेमोरी दिखाएं"</string>
+ <string name="menu_advanced_show" product="default" msgid="5792182900084144261">"SD कार्ड दिखाएं"</string>
+ <string name="menu_advanced_hide" product="nosdcard" msgid="4218809952721972589">"आंतरिक मेमोरी छिपाएं"</string>
+ <string name="menu_advanced_hide" product="default" msgid="4845869969015718848">"SD कार्ड छिपाएं"</string>
+ <string name="menu_file_size_show" msgid="3240323619260823076">"फ़ाइल आकार दिखाएं"</string>
+ <string name="menu_file_size_hide" msgid="8881975928502581042">"फ़ाइल आकार छिपाएं"</string>
+ <string name="button_select" msgid="527196987259139214">"चुनें"</string>
+ <string name="button_copy" msgid="8706475544635021302">"कॉपी करें"</string>
<string name="sort_name" msgid="9183560467917256779">"नाम के अनुसार"</string>
<string name="sort_date" msgid="586080032956151448">"बदलाव के दिनांक के अनुसार"</string>
<string name="sort_size" msgid="3350681319735474741">"आकार के अनुसार"</string>
@@ -40,16 +48,27 @@
<string name="create_error" msgid="3735649141335444215">"फ़ोल्डर बनाने में विफल"</string>
<string name="query_error" msgid="1222448261663503501">"दस्तावेजों के लिए क्वेरी करने में विफल रहा"</string>
<string name="root_recent" msgid="4470053704320518133">"हाल ही के"</string>
- <string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> रिक्त"</string>
- <string name="root_type_service" msgid="2178854894416775409">"संग्रहण सेवाएं"</string>
+ <string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> खाली"</string>
+ <string name="root_type_service" msgid="2178854894416775409">"मेमोरी सेवाएं"</string>
<string name="root_type_shortcut" msgid="3318760609471618093">"शॉर्टकट"</string>
- <string name="root_type_device" msgid="7121342474653483538">"उपकरण"</string>
+ <string name="root_type_device" msgid="7121342474653483538">"डिवाइस"</string>
<string name="root_type_apps" msgid="8838065367985945189">"अधिक ऐप्स"</string>
- <string name="pref_advanced_devices" msgid="903257239609301276">"उन्नत उपकरणों को दिखाएं"</string>
- <string name="pref_file_size" msgid="2826879315743961459">"फ़ाइल का आकार दिखाएं"</string>
- <string name="pref_device_size" msgid="3542106883278997222">"उपकरण का आकार दिखाएं"</string>
<string name="empty" msgid="7858882803708117596">"कोई आइटम नहीं"</string>
<string name="toast_no_application" msgid="1339885974067891667">"फ़ाइल नहीं खोली जा सकती"</string>
<string name="toast_failed_delete" msgid="2180678019407244069">"कुछ दस्तावेज़ों को हटाने में अक्षम"</string>
<string name="share_via" msgid="8966594246261344259">"इसके द्वारा साझा करें"</string>
+ <string name="copy_notification_title" msgid="6374299806748219777">"फ़ाइलें कॉपी हो रही हैं"</string>
+ <string name="copy_remaining" msgid="6283790937387975095">"<xliff:g id="DURATION">%s</xliff:g> शेष"</string>
+ <plurals name="copy_begin" formatted="false" msgid="9071199452634086365">
+ <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> फ़ाइलें कॉपी की जा रही हैं.</item>
+ <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> फ़ाइलें कॉपी की जा रही हैं.</item>
+ </plurals>
+ <string name="copy_preparing" msgid="3896202461003039386">"कॉपी करने की तैयारी हो रही है…"</string>
+ <plurals name="copy_error_notification_title" formatted="false" msgid="5267616889076217261">
+ <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> फ़ाइलों की कॉपी नहीं बनाई जा सकती</item>
+ <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> फ़ाइलों की कॉपी नहीं बनाई जा सकती</item>
+ </plurals>
+ <string name="notification_touch_for_details" msgid="4483108577842961665">"विवरण देखने के लिए स्पर्श करें"</string>
+ <string name="retry" msgid="7564024179122207376">"पुन: प्रयास करें"</string>
+ <string name="copy_failure_alert_content" msgid="3715575000297709082">"इन फ़ाइलों की कॉपी नहीं बनाई गई: <xliff:g id="LIST">%1$s</xliff:g>"</string>
</resources>
diff --git a/res/values-hr/strings.xml b/res/values-hr/strings.xml
index 3438e73..50b4c4b 100644
--- a/res/values-hr/strings.xml
+++ b/res/values-hr/strings.xml
@@ -29,8 +29,16 @@
<string name="menu_save" msgid="2394743337684426338">"Spremi"</string>
<string name="menu_share" msgid="3075149983979628146">"Dijeli"</string>
<string name="menu_delete" msgid="8138799623850614177">"Izbriši"</string>
- <string name="menu_select" msgid="8711270657353563424">"Odaberi \"<xliff:g id="DIRECTORY">^1</xliff:g>\""</string>
- <string name="mode_selected_count" msgid="459111894725594625">"Odabrano: <xliff:g id="COUNT">%1$d</xliff:g>"</string>
+ <string name="menu_select_all" msgid="8323579667348729928">"Odaberi sve"</string>
+ <string name="menu_copy" msgid="3612326052677229148">"Kopiraj u…"</string>
+ <string name="menu_advanced_show" product="nosdcard" msgid="4693652895715631401">"Pokaži internu pohranu"</string>
+ <string name="menu_advanced_show" product="default" msgid="5792182900084144261">"Pokaži SD karticu"</string>
+ <string name="menu_advanced_hide" product="nosdcard" msgid="4218809952721972589">"Sakrij internu pohranu"</string>
+ <string name="menu_advanced_hide" product="default" msgid="4845869969015718848">"Sakrij SD karticu"</string>
+ <string name="menu_file_size_show" msgid="3240323619260823076">"Pokaži veličinu datoteke"</string>
+ <string name="menu_file_size_hide" msgid="8881975928502581042">"Sakrij veličinu datoteke"</string>
+ <string name="button_select" msgid="527196987259139214">"Odaberi"</string>
+ <string name="button_copy" msgid="8706475544635021302">"Kopiraj"</string>
<string name="sort_name" msgid="9183560467917256779">"Po korisniku"</string>
<string name="sort_date" msgid="586080032956151448">"Po datumu izmjene"</string>
<string name="sort_size" msgid="3350681319735474741">"Po veličini"</string>
@@ -45,11 +53,24 @@
<string name="root_type_shortcut" msgid="3318760609471618093">"Prečaci"</string>
<string name="root_type_device" msgid="7121342474653483538">"Uređaji"</string>
<string name="root_type_apps" msgid="8838065367985945189">"Više aplikacija"</string>
- <string name="pref_advanced_devices" msgid="903257239609301276">"Prikaži napredne uređaje"</string>
- <string name="pref_file_size" msgid="2826879315743961459">"Prikaži veličinu datoteke"</string>
- <string name="pref_device_size" msgid="3542106883278997222">"Prikaži veličinu uređaja"</string>
<string name="empty" msgid="7858882803708117596">"Nema stavki"</string>
<string name="toast_no_application" msgid="1339885974067891667">"Datoteku nije moguće otvoriti"</string>
<string name="toast_failed_delete" msgid="2180678019407244069">"Nije moguće izbrisati neke dokumente"</string>
<string name="share_via" msgid="8966594246261344259">"Dijeli putem"</string>
+ <string name="copy_notification_title" msgid="6374299806748219777">"Kopiranje datoteka"</string>
+ <string name="copy_remaining" msgid="6283790937387975095">"Još <xliff:g id="DURATION">%s</xliff:g>"</string>
+ <plurals name="copy_begin" formatted="false" msgid="9071199452634086365">
+ <item quantity="one">Kopiranje <xliff:g id="COUNT_1">%1$d</xliff:g> datoteke.</item>
+ <item quantity="few">Kopiranje <xliff:g id="COUNT_1">%1$d</xliff:g> datoteke.</item>
+ <item quantity="other">Kopiranje <xliff:g id="COUNT_1">%1$d</xliff:g> datoteka.</item>
+ </plurals>
+ <string name="copy_preparing" msgid="3896202461003039386">"Priprema za kopiranje…"</string>
+ <plurals name="copy_error_notification_title" formatted="false" msgid="5267616889076217261">
+ <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> datoteka nije kopirana</item>
+ <item quantity="few"><xliff:g id="COUNT_1">%1$d</xliff:g> datoteke nisu kopirane</item>
+ <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> datoteka nije kopirano</item>
+ </plurals>
+ <string name="notification_touch_for_details" msgid="4483108577842961665">"Dodirnite da biste vidjeli pojedinosti"</string>
+ <string name="retry" msgid="7564024179122207376">"Pokušaj ponovo"</string>
+ <string name="copy_failure_alert_content" msgid="3715575000297709082">"Ove datoteke nisu kopirane: <xliff:g id="LIST">%1$s</xliff:g>"</string>
</resources>
diff --git a/res/values-hu/strings.xml b/res/values-hu/strings.xml
index 2af559b..db5c710 100644
--- a/res/values-hu/strings.xml
+++ b/res/values-hu/strings.xml
@@ -29,8 +29,16 @@
<string name="menu_save" msgid="2394743337684426338">"Mentés"</string>
<string name="menu_share" msgid="3075149983979628146">"Megosztás"</string>
<string name="menu_delete" msgid="8138799623850614177">"Törlés"</string>
- <string name="menu_select" msgid="8711270657353563424">"A(z) „<xliff:g id="DIRECTORY">^1</xliff:g>” mappa kiválasztása"</string>
- <string name="mode_selected_count" msgid="459111894725594625">"<xliff:g id="COUNT">%1$d</xliff:g> kiválasztva"</string>
+ <string name="menu_select_all" msgid="8323579667348729928">"Összes kijelölése"</string>
+ <string name="menu_copy" msgid="3612326052677229148">"Másolás ide…"</string>
+ <string name="menu_advanced_show" product="nosdcard" msgid="4693652895715631401">"Belső tárhely"</string>
+ <string name="menu_advanced_show" product="default" msgid="5792182900084144261">"SD-kártya megjelenítése"</string>
+ <string name="menu_advanced_hide" product="nosdcard" msgid="4218809952721972589">"Belső tárhely elrejtése"</string>
+ <string name="menu_advanced_hide" product="default" msgid="4845869969015718848">"SD-kártya elrejtése"</string>
+ <string name="menu_file_size_show" msgid="3240323619260823076">"Fájlméret megjelenítése"</string>
+ <string name="menu_file_size_hide" msgid="8881975928502581042">"Fájlméret elrejtése"</string>
+ <string name="button_select" msgid="527196987259139214">"Kiválasztás"</string>
+ <string name="button_copy" msgid="8706475544635021302">"Másolás"</string>
<string name="sort_name" msgid="9183560467917256779">"Név szerint"</string>
<string name="sort_date" msgid="586080032956151448">"Módosítás dátuma szerint"</string>
<string name="sort_size" msgid="3350681319735474741">"Méret szerint"</string>
@@ -45,11 +53,22 @@
<string name="root_type_shortcut" msgid="3318760609471618093">"Parancsikonok"</string>
<string name="root_type_device" msgid="7121342474653483538">"Eszközök"</string>
<string name="root_type_apps" msgid="8838065367985945189">"További alkalmazások"</string>
- <string name="pref_advanced_devices" msgid="903257239609301276">"Speciális eszközök megjelenítése"</string>
- <string name="pref_file_size" msgid="2826879315743961459">"Fájlméret megjelenítése"</string>
- <string name="pref_device_size" msgid="3542106883278997222">"Eszközméret megjelenítése"</string>
<string name="empty" msgid="7858882803708117596">"Nincsenek elemek"</string>
<string name="toast_no_application" msgid="1339885974067891667">"A fájlt nem lehet megnyitni"</string>
<string name="toast_failed_delete" msgid="2180678019407244069">"Néhány dokumentumot nem lehet törölni"</string>
<string name="share_via" msgid="8966594246261344259">"Megosztás itt:"</string>
+ <string name="copy_notification_title" msgid="6374299806748219777">"Fájlok másolása"</string>
+ <string name="copy_remaining" msgid="6283790937387975095">"<xliff:g id="DURATION">%s</xliff:g> van hátra"</string>
+ <plurals name="copy_begin" formatted="false" msgid="9071199452634086365">
+ <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> fájl másolása.</item>
+ <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> fájl másolása.</item>
+ </plurals>
+ <string name="copy_preparing" msgid="3896202461003039386">"Felkészülés a másolásra…"</string>
+ <plurals name="copy_error_notification_title" formatted="false" msgid="5267616889076217261">
+ <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> fájlt nem sikerült átmásolni</item>
+ <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> fájlt nem sikerült átmásolni</item>
+ </plurals>
+ <string name="notification_touch_for_details" msgid="4483108577842961665">"Érintse meg a részletek megtekintéséhez"</string>
+ <string name="retry" msgid="7564024179122207376">"Újra"</string>
+ <string name="copy_failure_alert_content" msgid="3715575000297709082">"A következő fájlokat nem sikerült átmásolni: <xliff:g id="LIST">%1$s</xliff:g>"</string>
</resources>
diff --git a/res/values-hy-rAM/strings.xml b/res/values-hy-rAM/strings.xml
index 67a1f7e..eb49b1d 100644
--- a/res/values-hy-rAM/strings.xml
+++ b/res/values-hy-rAM/strings.xml
@@ -19,8 +19,8 @@
<string name="app_label" msgid="2783841764617238354">"Փաստաթղթեր"</string>
<string name="title_open" msgid="4353228937663917801">"Բացել այստեղից"</string>
<string name="title_save" msgid="2433679664882857999">"Պահել այստեղ"</string>
- <string name="menu_create_dir" msgid="5947289605844398389">"Ստեղծել թղթապանակ"</string>
- <string name="menu_grid" msgid="6878021334497835259">"Ցանցային տեսք"</string>
+ <string name="menu_create_dir" msgid="5947289605844398389">"Ստեղծել պանակ"</string>
+ <string name="menu_grid" msgid="6878021334497835259">"Ցանցի տեսք"</string>
<string name="menu_list" msgid="7279285939892417279">"Ցուցակի տեսք"</string>
<string name="menu_sort" msgid="7677740407158414452">"Դասավորել ըստ"</string>
<string name="menu_search" msgid="3816712084502856974">"Որոնել"</string>
@@ -29,15 +29,23 @@
<string name="menu_save" msgid="2394743337684426338">"Պահել"</string>
<string name="menu_share" msgid="3075149983979628146">"Համօգտագործել"</string>
<string name="menu_delete" msgid="8138799623850614177">"Ջնջել"</string>
- <string name="menu_select" msgid="8711270657353563424">"Ընտրել «<xliff:g id="DIRECTORY">^1</xliff:g>»"</string>
- <string name="mode_selected_count" msgid="459111894725594625">"<xliff:g id="COUNT">%1$d</xliff:g> ընտրված"</string>
+ <string name="menu_select_all" msgid="8323579667348729928">"Ընտրել բոլորը"</string>
+ <string name="menu_copy" msgid="3612326052677229148">"Պատճենել…"</string>
+ <string name="menu_advanced_show" product="nosdcard" msgid="4693652895715631401">"Ցույց տալ ներքին պահոցը"</string>
+ <string name="menu_advanced_show" product="default" msgid="5792182900084144261">"Ցույց տալ SD քարտը"</string>
+ <string name="menu_advanced_hide" product="nosdcard" msgid="4218809952721972589">"Թաքցնել ներքին պահոցը"</string>
+ <string name="menu_advanced_hide" product="default" msgid="4845869969015718848">"Թաքցնել SD քարտը"</string>
+ <string name="menu_file_size_show" msgid="3240323619260823076">"Ցույց տալ ֆայլի չափը"</string>
+ <string name="menu_file_size_hide" msgid="8881975928502581042">"Թաքցնել ֆայլի չափը"</string>
+ <string name="button_select" msgid="527196987259139214">"Ընտրել"</string>
+ <string name="button_copy" msgid="8706475544635021302">"Պատճենել"</string>
<string name="sort_name" msgid="9183560467917256779">"Ըստ անվան"</string>
<string name="sort_date" msgid="586080032956151448">"Ըստ փոփոխման ամսաթվի"</string>
<string name="sort_size" msgid="3350681319735474741">"Ըստ չափի"</string>
<string name="drawer_open" msgid="4545466532430226949">"Ցույց տալ արմատները"</string>
<string name="drawer_close" msgid="7602734368552123318">"Թաքցնել արմատները"</string>
<string name="save_error" msgid="6167009778003223664">"Չհաջողվեց պահել փաստաթուղթը"</string>
- <string name="create_error" msgid="3735649141335444215">"Չհաջողվեց ստեղծել թղթապանակը"</string>
+ <string name="create_error" msgid="3735649141335444215">"Չհաջողվեց ստեղծել պանակը"</string>
<string name="query_error" msgid="1222448261663503501">"Փաստաթղթերին հարցում կատարելիս սխալ տեղի ունեցավ"</string>
<string name="root_recent" msgid="4470053704320518133">"Վերջին"</string>
<string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> ազատ է"</string>
@@ -45,11 +53,22 @@
<string name="root_type_shortcut" msgid="3318760609471618093">"Դյուրանցումներ"</string>
<string name="root_type_device" msgid="7121342474653483538">"Սարքեր"</string>
<string name="root_type_apps" msgid="8838065367985945189">"Հավելյալ ծրագրեր"</string>
- <string name="pref_advanced_devices" msgid="903257239609301276">"Ցուցադրել ընդլայնված սարքերը"</string>
- <string name="pref_file_size" msgid="2826879315743961459">"Ցուցադրել ֆայլի չափը"</string>
- <string name="pref_device_size" msgid="3542106883278997222">"Ցուցադրել սարքի չափը"</string>
<string name="empty" msgid="7858882803708117596">"Տարրեր չկան"</string>
<string name="toast_no_application" msgid="1339885974067891667">"Հնարավոր չէ բացել ֆայլը"</string>
<string name="toast_failed_delete" msgid="2180678019407244069">"Անհնար է ջնջել որոշ փաստաթղթեր"</string>
<string name="share_via" msgid="8966594246261344259">"Տարածել"</string>
+ <string name="copy_notification_title" msgid="6374299806748219777">"Ֆայլերի պատճենում"</string>
+ <string name="copy_remaining" msgid="6283790937387975095">"Մնացել է <xliff:g id="DURATION">%s</xliff:g>"</string>
+ <plurals name="copy_begin" formatted="false" msgid="9071199452634086365">
+ <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> ֆայլի պատճենում:</item>
+ <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> ֆայլի պատճենում:</item>
+ </plurals>
+ <string name="copy_preparing" msgid="3896202461003039386">"Պատճենման նախապատրաստում…"</string>
+ <plurals name="copy_error_notification_title" formatted="false" msgid="5267616889076217261">
+ <item quantity="one">Չհաջողվեց պատճենել <xliff:g id="COUNT_1">%1$d</xliff:g> ֆայլ</item>
+ <item quantity="other">Չհաջողվեց պատճենել <xliff:g id="COUNT_1">%1$d</xliff:g> ֆայլ</item>
+ </plurals>
+ <string name="notification_touch_for_details" msgid="4483108577842961665">"Հպեք՝ մանրամասները դիտելու համար"</string>
+ <string name="retry" msgid="7564024179122207376">"Կրկնել"</string>
+ <string name="copy_failure_alert_content" msgid="3715575000297709082">"Հետևյալ ֆայլերը չեն պատճենվել՝ <xliff:g id="LIST">%1$s</xliff:g>"</string>
</resources>
diff --git a/res/values-in/strings.xml b/res/values-in/strings.xml
index 62057c7..d4fdd11 100644
--- a/res/values-in/strings.xml
+++ b/res/values-in/strings.xml
@@ -29,8 +29,16 @@
<string name="menu_save" msgid="2394743337684426338">"Simpan"</string>
<string name="menu_share" msgid="3075149983979628146">"Bagikan"</string>
<string name="menu_delete" msgid="8138799623850614177">"Hapus"</string>
- <string name="menu_select" msgid="8711270657353563424">"Pilih \"<xliff:g id="DIRECTORY">^1</xliff:g>\""</string>
- <string name="mode_selected_count" msgid="459111894725594625">"<xliff:g id="COUNT">%1$d</xliff:g> dipilih"</string>
+ <string name="menu_select_all" msgid="8323579667348729928">"Pilih semua"</string>
+ <string name="menu_copy" msgid="3612326052677229148">"Salin ke…"</string>
+ <string name="menu_advanced_show" product="nosdcard" msgid="4693652895715631401">"Tampilkan simpanan internal"</string>
+ <string name="menu_advanced_show" product="default" msgid="5792182900084144261">"Tampilkan kartu SD"</string>
+ <string name="menu_advanced_hide" product="nosdcard" msgid="4218809952721972589">"Sembunyikan simpanan internal"</string>
+ <string name="menu_advanced_hide" product="default" msgid="4845869969015718848">"Sembunyikan kartu SD"</string>
+ <string name="menu_file_size_show" msgid="3240323619260823076">"Tampilkan ukuran file"</string>
+ <string name="menu_file_size_hide" msgid="8881975928502581042">"Sembunyikan ukuran file"</string>
+ <string name="button_select" msgid="527196987259139214">"Pilih"</string>
+ <string name="button_copy" msgid="8706475544635021302">"Salin"</string>
<string name="sort_name" msgid="9183560467917256779">"Menurut nama"</string>
<string name="sort_date" msgid="586080032956151448">"Menurut tanggal diubah"</string>
<string name="sort_size" msgid="3350681319735474741">"Menurut ukuran"</string>
@@ -40,16 +48,27 @@
<string name="create_error" msgid="3735649141335444215">"Gagal membuat folder"</string>
<string name="query_error" msgid="1222448261663503501">"Gagal mengirim kueri untuk dokumen"</string>
<string name="root_recent" msgid="4470053704320518133">"Terkini"</string>
- <string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> bebas"</string>
+ <string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> kosong"</string>
<string name="root_type_service" msgid="2178854894416775409">"Layanan penyimpanan"</string>
<string name="root_type_shortcut" msgid="3318760609471618093">"Pintasan"</string>
<string name="root_type_device" msgid="7121342474653483538">"Perangkat"</string>
<string name="root_type_apps" msgid="8838065367985945189">"Aplikasi lain"</string>
- <string name="pref_advanced_devices" msgid="903257239609301276">"Tampilkan perangkat lanjutan"</string>
- <string name="pref_file_size" msgid="2826879315743961459">"Tampilkan ukuran file"</string>
- <string name="pref_device_size" msgid="3542106883278997222">"Tampilkan ukuran perangkat"</string>
<string name="empty" msgid="7858882803708117596">"Tidak ada item"</string>
<string name="toast_no_application" msgid="1339885974067891667">"Tidak dapat membuka file"</string>
<string name="toast_failed_delete" msgid="2180678019407244069">"Tidak dapat menghapus beberapa dokumen"</string>
<string name="share_via" msgid="8966594246261344259">"Bagikan melalui"</string>
+ <string name="copy_notification_title" msgid="6374299806748219777">"Menyalin file"</string>
+ <string name="copy_remaining" msgid="6283790937387975095">"<xliff:g id="DURATION">%s</xliff:g> lagi"</string>
+ <plurals name="copy_begin" formatted="false" msgid="9071199452634086365">
+ <item quantity="other">Menyalin <xliff:g id="COUNT_1">%1$d</xliff:g> file.</item>
+ <item quantity="one">Menyalin <xliff:g id="COUNT_0">%1$d</xliff:g> file.</item>
+ </plurals>
+ <string name="copy_preparing" msgid="3896202461003039386">"Menyiapkan salinan..."</string>
+ <plurals name="copy_error_notification_title" formatted="false" msgid="5267616889076217261">
+ <item quantity="other">Tidak dapat menyalin <xliff:g id="COUNT_1">%1$d</xliff:g> file</item>
+ <item quantity="one">Tidak dapat menyalin <xliff:g id="COUNT_0">%1$d</xliff:g> file</item>
+ </plurals>
+ <string name="notification_touch_for_details" msgid="4483108577842961665">"Sentuh untuk melihat detail"</string>
+ <string name="retry" msgid="7564024179122207376">"Coba lagi"</string>
+ <string name="copy_failure_alert_content" msgid="3715575000297709082">"Semua file ini tidak disalin: <xliff:g id="LIST">%1$s</xliff:g>"</string>
</resources>
diff --git a/res/values-is-rIS/strings.xml b/res/values-is-rIS/strings.xml
index 4f6878c..e82eb38 100644
--- a/res/values-is-rIS/strings.xml
+++ b/res/values-is-rIS/strings.xml
@@ -29,8 +29,16 @@
<string name="menu_save" msgid="2394743337684426338">"Vista"</string>
<string name="menu_share" msgid="3075149983979628146">"Deila"</string>
<string name="menu_delete" msgid="8138799623850614177">"Eyða"</string>
- <string name="menu_select" msgid="8711270657353563424">"Velja „<xliff:g id="DIRECTORY">^1</xliff:g>“"</string>
- <string name="mode_selected_count" msgid="459111894725594625">"<xliff:g id="COUNT">%1$d</xliff:g> valin"</string>
+ <string name="menu_select_all" msgid="8323579667348729928">"Velja allt"</string>
+ <string name="menu_copy" msgid="3612326052677229148">"Afrita í ..."</string>
+ <string name="menu_advanced_show" product="nosdcard" msgid="4693652895715631401">"Sýna innbyggða geymslu"</string>
+ <string name="menu_advanced_show" product="default" msgid="5792182900084144261">"Sýna SD-kort"</string>
+ <string name="menu_advanced_hide" product="nosdcard" msgid="4218809952721972589">"Fela innbyggða geymslu"</string>
+ <string name="menu_advanced_hide" product="default" msgid="4845869969015718848">"Fela SD-kort"</string>
+ <string name="menu_file_size_show" msgid="3240323619260823076">"Sýna skráarstærð"</string>
+ <string name="menu_file_size_hide" msgid="8881975928502581042">"Fela skráarstærð"</string>
+ <string name="button_select" msgid="527196987259139214">"Velja"</string>
+ <string name="button_copy" msgid="8706475544635021302">"Afrita"</string>
<string name="sort_name" msgid="9183560467917256779">"Eftir heiti"</string>
<string name="sort_date" msgid="586080032956151448">"Eftir breytingadags."</string>
<string name="sort_size" msgid="3350681319735474741">"Eftir stærð"</string>
@@ -45,11 +53,22 @@
<string name="root_type_shortcut" msgid="3318760609471618093">"Flýtileiðir"</string>
<string name="root_type_device" msgid="7121342474653483538">"Tæki"</string>
<string name="root_type_apps" msgid="8838065367985945189">"Fleiri forrit"</string>
- <string name="pref_advanced_devices" msgid="903257239609301276">"Sýna ítarleg tæki"</string>
- <string name="pref_file_size" msgid="2826879315743961459">"Sýna skráarstærð"</string>
- <string name="pref_device_size" msgid="3542106883278997222">"Sýna stærð tækis"</string>
<string name="empty" msgid="7858882803708117596">"Engin atriði"</string>
<string name="toast_no_application" msgid="1339885974067891667">"Ekki er hægt að opna skrána"</string>
<string name="toast_failed_delete" msgid="2180678019407244069">"Ekki er hægt að eyða einhverjum skjölum"</string>
<string name="share_via" msgid="8966594246261344259">"Deila í gegnum"</string>
+ <string name="copy_notification_title" msgid="6374299806748219777">"Afritar skrár"</string>
+ <string name="copy_remaining" msgid="6283790937387975095">"<xliff:g id="DURATION">%s</xliff:g> eftir"</string>
+ <plurals name="copy_begin" formatted="false" msgid="9071199452634086365">
+ <item quantity="one">Afritar <xliff:g id="COUNT_1">%1$d</xliff:g> skrá.</item>
+ <item quantity="other">Afritar <xliff:g id="COUNT_1">%1$d</xliff:g> skrár.</item>
+ </plurals>
+ <string name="copy_preparing" msgid="3896202461003039386">"Undirbúningur fyrir afritun…"</string>
+ <plurals name="copy_error_notification_title" formatted="false" msgid="5267616889076217261">
+ <item quantity="one">Ekki var hægt að afrita <xliff:g id="COUNT_1">%1$d</xliff:g> skrá</item>
+ <item quantity="other">Ekki var hægt að afrita <xliff:g id="COUNT_1">%1$d</xliff:g> skrár</item>
+ </plurals>
+ <string name="notification_touch_for_details" msgid="4483108577842961665">"Snertu til að skoða nánari upplýsingar"</string>
+ <string name="retry" msgid="7564024179122207376">"Reyna aftur"</string>
+ <string name="copy_failure_alert_content" msgid="3715575000297709082">"Þessar skrár voru ekki afritaðar: <xliff:g id="LIST">%1$s</xliff:g>"</string>
</resources>
diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml
index bec4d00..10082bf 100644
--- a/res/values-it/strings.xml
+++ b/res/values-it/strings.xml
@@ -29,8 +29,16 @@
<string name="menu_save" msgid="2394743337684426338">"Salva"</string>
<string name="menu_share" msgid="3075149983979628146">"Condividi"</string>
<string name="menu_delete" msgid="8138799623850614177">"Elimina"</string>
- <string name="menu_select" msgid="8711270657353563424">"Seleziona \"<xliff:g id="DIRECTORY">^1</xliff:g>\""</string>
- <string name="mode_selected_count" msgid="459111894725594625">"<xliff:g id="COUNT">%1$d</xliff:g> selezionati"</string>
+ <string name="menu_select_all" msgid="8323579667348729928">"Seleziona tutto"</string>
+ <string name="menu_copy" msgid="3612326052677229148">"Copia in…"</string>
+ <string name="menu_advanced_show" product="nosdcard" msgid="4693652895715631401">"Mostra memoria interna"</string>
+ <string name="menu_advanced_show" product="default" msgid="5792182900084144261">"Mostra scheda SD"</string>
+ <string name="menu_advanced_hide" product="nosdcard" msgid="4218809952721972589">"Nascondi memoria interna"</string>
+ <string name="menu_advanced_hide" product="default" msgid="4845869969015718848">"Nascondi scheda SD"</string>
+ <string name="menu_file_size_show" msgid="3240323619260823076">"Mostra dimensioni file"</string>
+ <string name="menu_file_size_hide" msgid="8881975928502581042">"Nascondi dimensioni file"</string>
+ <string name="button_select" msgid="527196987259139214">"Seleziona"</string>
+ <string name="button_copy" msgid="8706475544635021302">"Copia"</string>
<string name="sort_name" msgid="9183560467917256779">"Per nome"</string>
<string name="sort_date" msgid="586080032956151448">"Per data di modifica"</string>
<string name="sort_size" msgid="3350681319735474741">"Per dimensioni"</string>
@@ -45,11 +53,22 @@
<string name="root_type_shortcut" msgid="3318760609471618093">"Scorciatoie"</string>
<string name="root_type_device" msgid="7121342474653483538">"Dispositivi"</string>
<string name="root_type_apps" msgid="8838065367985945189">"Altre app"</string>
- <string name="pref_advanced_devices" msgid="903257239609301276">"Visualizza dispositivi avanzati"</string>
- <string name="pref_file_size" msgid="2826879315743961459">"Visualizza dimensioni file"</string>
- <string name="pref_device_size" msgid="3542106883278997222">"Visualizza dimensioni dispositivi"</string>
- <string name="empty" msgid="7858882803708117596">"Nessun articolo"</string>
+ <string name="empty" msgid="7858882803708117596">"Nessun elemento"</string>
<string name="toast_no_application" msgid="1339885974067891667">"Impossibile aprire il file"</string>
<string name="toast_failed_delete" msgid="2180678019407244069">"Impossibile eliminare alcuni documenti"</string>
<string name="share_via" msgid="8966594246261344259">"Condividi via"</string>
+ <string name="copy_notification_title" msgid="6374299806748219777">"Copia di file in corso"</string>
+ <string name="copy_remaining" msgid="6283790937387975095">"<xliff:g id="DURATION">%s</xliff:g> rimanenti"</string>
+ <plurals name="copy_begin" formatted="false" msgid="9071199452634086365">
+ <item quantity="other">Copia di <xliff:g id="COUNT_1">%1$d</xliff:g> file in corso.</item>
+ <item quantity="one">Copia di <xliff:g id="COUNT_0">%1$d</xliff:g> file in corso.</item>
+ </plurals>
+ <string name="copy_preparing" msgid="3896202461003039386">"Preparazione alla copia…"</string>
+ <plurals name="copy_error_notification_title" formatted="false" msgid="5267616889076217261">
+ <item quantity="other">Impossibile copiare <xliff:g id="COUNT_1">%1$d</xliff:g> file</item>
+ <item quantity="one">Impossibile copiare <xliff:g id="COUNT_0">%1$d</xliff:g> file</item>
+ </plurals>
+ <string name="notification_touch_for_details" msgid="4483108577842961665">"Tocca per visualizzare i dettagli"</string>
+ <string name="retry" msgid="7564024179122207376">"Riprova"</string>
+ <string name="copy_failure_alert_content" msgid="3715575000297709082">"I seguenti file non sono stati copiati: <xliff:g id="LIST">%1$s</xliff:g>"</string>
</resources>
diff --git a/res/values-iw/strings.xml b/res/values-iw/strings.xml
index c8a3fb9..b9a2808 100644
--- a/res/values-iw/strings.xml
+++ b/res/values-iw/strings.xml
@@ -29,8 +29,16 @@
<string name="menu_save" msgid="2394743337684426338">"שמור"</string>
<string name="menu_share" msgid="3075149983979628146">"שתף"</string>
<string name="menu_delete" msgid="8138799623850614177">"מחק"</string>
- <string name="menu_select" msgid="8711270657353563424">"בחר ב-\"<xliff:g id="DIRECTORY">^1</xliff:g>\""</string>
- <string name="mode_selected_count" msgid="459111894725594625">"<xliff:g id="COUNT">%1$d</xliff:g> נבחרו"</string>
+ <string name="menu_select_all" msgid="8323579667348729928">"בחר הכל"</string>
+ <string name="menu_copy" msgid="3612326052677229148">"העתק אל…"</string>
+ <string name="menu_advanced_show" product="nosdcard" msgid="4693652895715631401">"הצג אחסון פנימי"</string>
+ <string name="menu_advanced_show" product="default" msgid="5792182900084144261">"הצג כרטיס SD"</string>
+ <string name="menu_advanced_hide" product="nosdcard" msgid="4218809952721972589">"הסתר אחסון פנימי"</string>
+ <string name="menu_advanced_hide" product="default" msgid="4845869969015718848">"הסתר כרטיס SD"</string>
+ <string name="menu_file_size_show" msgid="3240323619260823076">"הצג גודל קובץ"</string>
+ <string name="menu_file_size_hide" msgid="8881975928502581042">"הסתר גודל קובץ"</string>
+ <string name="button_select" msgid="527196987259139214">"בחר"</string>
+ <string name="button_copy" msgid="8706475544635021302">"העתק"</string>
<string name="sort_name" msgid="9183560467917256779">"לפי שם"</string>
<string name="sort_date" msgid="586080032956151448">"לפי תאריך שינוי"</string>
<string name="sort_size" msgid="3350681319735474741">"לפי גודל"</string>
@@ -45,11 +53,26 @@
<string name="root_type_shortcut" msgid="3318760609471618093">"קיצורי דרך"</string>
<string name="root_type_device" msgid="7121342474653483538">"מכשירים"</string>
<string name="root_type_apps" msgid="8838065367985945189">"עוד אפליקציות"</string>
- <string name="pref_advanced_devices" msgid="903257239609301276">"הצג מכשירים מתקדמים"</string>
- <string name="pref_file_size" msgid="2826879315743961459">"הצג את גודל הקובץ"</string>
- <string name="pref_device_size" msgid="3542106883278997222">"הצג את גודל המכשיר"</string>
<string name="empty" msgid="7858882803708117596">"אין פריטים"</string>
<string name="toast_no_application" msgid="1339885974067891667">"לא ניתן לפתוח את הקובץ"</string>
<string name="toast_failed_delete" msgid="2180678019407244069">"לא ניתן למחוק חלק מהמסמכים"</string>
<string name="share_via" msgid="8966594246261344259">"שתף באמצעות"</string>
+ <string name="copy_notification_title" msgid="6374299806748219777">"מעתיק קבצים"</string>
+ <string name="copy_remaining" msgid="6283790937387975095">"זמן נותר: <xliff:g id="DURATION">%s</xliff:g>"</string>
+ <plurals name="copy_begin" formatted="false" msgid="9071199452634086365">
+ <item quantity="two">מעתיק <xliff:g id="COUNT_1">%1$d</xliff:g> קבצים.</item>
+ <item quantity="many">מעתיק <xliff:g id="COUNT_1">%1$d</xliff:g> קבצים.</item>
+ <item quantity="other">מעתיק <xliff:g id="COUNT_1">%1$d</xliff:g> קבצים.</item>
+ <item quantity="one">מעתיק קובץ <xliff:g id="COUNT_0">%1$d</xliff:g>.</item>
+ </plurals>
+ <string name="copy_preparing" msgid="3896202461003039386">"מתכונן להעתקה..."</string>
+ <plurals name="copy_error_notification_title" formatted="false" msgid="5267616889076217261">
+ <item quantity="two">לא ניתן היה להעתיק <xliff:g id="COUNT_1">%1$d</xliff:g> קבצים</item>
+ <item quantity="many">לא ניתן היה להעתיק <xliff:g id="COUNT_1">%1$d</xliff:g> קבצים</item>
+ <item quantity="other">לא ניתן היה להעתיק <xliff:g id="COUNT_1">%1$d</xliff:g> קבצים</item>
+ <item quantity="one">לא ניתן היה להעתיק קובץ <xliff:g id="COUNT_0">%1$d</xliff:g></item>
+ </plurals>
+ <string name="notification_touch_for_details" msgid="4483108577842961665">"גע כדי להציג את הפרטים"</string>
+ <string name="retry" msgid="7564024179122207376">"נסה שוב"</string>
+ <string name="copy_failure_alert_content" msgid="3715575000297709082">"הקבצים הבאים לא הועתקו: <xliff:g id="LIST">%1$s</xliff:g>"</string>
</resources>
diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml
index 1475005..8c118a1 100644
--- a/res/values-ja/strings.xml
+++ b/res/values-ja/strings.xml
@@ -29,8 +29,16 @@
<string name="menu_save" msgid="2394743337684426338">"保存"</string>
<string name="menu_share" msgid="3075149983979628146">"共有"</string>
<string name="menu_delete" msgid="8138799623850614177">"削除"</string>
- <string name="menu_select" msgid="8711270657353563424">"「<xliff:g id="DIRECTORY">^1</xliff:g>」を選択"</string>
- <string name="mode_selected_count" msgid="459111894725594625">"<xliff:g id="COUNT">%1$d</xliff:g>件選択済み"</string>
+ <string name="menu_select_all" msgid="8323579667348729928">"すべて選択"</string>
+ <string name="menu_copy" msgid="3612326052677229148">"コピー…"</string>
+ <string name="menu_advanced_show" product="nosdcard" msgid="4693652895715631401">"内部ストレージを表示"</string>
+ <string name="menu_advanced_show" product="default" msgid="5792182900084144261">"SDカードを表示"</string>
+ <string name="menu_advanced_hide" product="nosdcard" msgid="4218809952721972589">"内部ストレージを非表示"</string>
+ <string name="menu_advanced_hide" product="default" msgid="4845869969015718848">"SDカードを非表示"</string>
+ <string name="menu_file_size_show" msgid="3240323619260823076">"ファイルサイズを表示"</string>
+ <string name="menu_file_size_hide" msgid="8881975928502581042">"ファイルサイズを非表示"</string>
+ <string name="button_select" msgid="527196987259139214">"選択"</string>
+ <string name="button_copy" msgid="8706475544635021302">"コピー"</string>
<string name="sort_name" msgid="9183560467917256779">"名前順"</string>
<string name="sort_date" msgid="586080032956151448">"更新日順"</string>
<string name="sort_size" msgid="3350681319735474741">"サイズ順"</string>
@@ -45,11 +53,22 @@
<string name="root_type_shortcut" msgid="3318760609471618093">"ショートカット"</string>
<string name="root_type_device" msgid="7121342474653483538">"端末"</string>
<string name="root_type_apps" msgid="8838065367985945189">"その他のアプリ"</string>
- <string name="pref_advanced_devices" msgid="903257239609301276">"端末の詳細設定を表示"</string>
- <string name="pref_file_size" msgid="2826879315743961459">"ファイルのサイズを表示"</string>
- <string name="pref_device_size" msgid="3542106883278997222">"端末のサイズを表示"</string>
<string name="empty" msgid="7858882803708117596">"アイテムがありません"</string>
<string name="toast_no_application" msgid="1339885974067891667">"ファイルを開けません"</string>
<string name="toast_failed_delete" msgid="2180678019407244069">"一部のドキュメントを削除できません"</string>
<string name="share_via" msgid="8966594246261344259">"共有ツール"</string>
+ <string name="copy_notification_title" msgid="6374299806748219777">"ファイルのコピー中"</string>
+ <string name="copy_remaining" msgid="6283790937387975095">"残り<xliff:g id="DURATION">%s</xliff:g>"</string>
+ <plurals name="copy_begin" formatted="false" msgid="9071199452634086365">
+ <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g>個のファイルをコピーしています。</item>
+ <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g>個のファイルをコピーしています。</item>
+ </plurals>
+ <string name="copy_preparing" msgid="3896202461003039386">"コピーの準備をしています…"</string>
+ <plurals name="copy_error_notification_title" formatted="false" msgid="5267616889076217261">
+ <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g>ファイルをコピーできませんでした</item>
+ <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g>ファイルをコピーできませんでした</item>
+ </plurals>
+ <string name="notification_touch_for_details" msgid="4483108577842961665">"タップして詳細をご覧ください"</string>
+ <string name="retry" msgid="7564024179122207376">"再試行"</string>
+ <string name="copy_failure_alert_content" msgid="3715575000297709082">"ファイル(<xliff:g id="LIST">%1$s</xliff:g>)をコピーできませんでした"</string>
</resources>
diff --git a/res/values-ka-rGE/strings.xml b/res/values-ka-rGE/strings.xml
index c90768f..59e8589 100644
--- a/res/values-ka-rGE/strings.xml
+++ b/res/values-ka-rGE/strings.xml
@@ -29,8 +29,16 @@
<string name="menu_save" msgid="2394743337684426338">"შენახვა"</string>
<string name="menu_share" msgid="3075149983979628146">"გაზიარება"</string>
<string name="menu_delete" msgid="8138799623850614177">"წაშლა"</string>
- <string name="menu_select" msgid="8711270657353563424">"„<xliff:g id="DIRECTORY">^1</xliff:g>“-ის არჩევა"</string>
- <string name="mode_selected_count" msgid="459111894725594625">"<xliff:g id="COUNT">%1$d</xliff:g> მონიშნული"</string>
+ <string name="menu_select_all" msgid="8323579667348729928">"ყველას არჩევა"</string>
+ <string name="menu_copy" msgid="3612326052677229148">"კოპირება…"</string>
+ <string name="menu_advanced_show" product="nosdcard" msgid="4693652895715631401">"შიდა საცავის ჩვენება"</string>
+ <string name="menu_advanced_show" product="default" msgid="5792182900084144261">"SD ბარათის ჩვენება"</string>
+ <string name="menu_advanced_hide" product="nosdcard" msgid="4218809952721972589">"შიდა მეხსიერების დამალვა"</string>
+ <string name="menu_advanced_hide" product="default" msgid="4845869969015718848">"SD ბარათის დამალვა"</string>
+ <string name="menu_file_size_show" msgid="3240323619260823076">"ფაილის ზომის ჩვენება"</string>
+ <string name="menu_file_size_hide" msgid="8881975928502581042">"ფაილის ზომის დამალვა"</string>
+ <string name="button_select" msgid="527196987259139214">"არჩევა"</string>
+ <string name="button_copy" msgid="8706475544635021302">"კოპირება"</string>
<string name="sort_name" msgid="9183560467917256779">"სახელით"</string>
<string name="sort_date" msgid="586080032956151448">"ცვლილების თარიღით"</string>
<string name="sort_size" msgid="3350681319735474741">"ზომით"</string>
@@ -45,11 +53,22 @@
<string name="root_type_shortcut" msgid="3318760609471618093">"მალსახმობები"</string>
<string name="root_type_device" msgid="7121342474653483538">"მოწყობილობები"</string>
<string name="root_type_apps" msgid="8838065367985945189">"მეტი აპები"</string>
- <string name="pref_advanced_devices" msgid="903257239609301276">"კომპლექსური მოწყობილობების ჩვენება"</string>
- <string name="pref_file_size" msgid="2826879315743961459">"ფაილის ზომის ჩვენება"</string>
- <string name="pref_device_size" msgid="3542106883278997222">"მოწყობილობის ზომის ჩვენება"</string>
<string name="empty" msgid="7858882803708117596">"ერთეულები არ არის"</string>
<string name="toast_no_application" msgid="1339885974067891667">"ფაილის გახსნა ვერ ხერხდება"</string>
<string name="toast_failed_delete" msgid="2180678019407244069">"ზოგიერთი დოკუმენტის წაშლა ვერ ხერხდება"</string>
<string name="share_via" msgid="8966594246261344259">"გაზიარება:"</string>
+ <string name="copy_notification_title" msgid="6374299806748219777">"მიმდ. ფაილების კოპირება"</string>
+ <string name="copy_remaining" msgid="6283790937387975095">"დარჩა <xliff:g id="DURATION">%s</xliff:g>"</string>
+ <plurals name="copy_begin" formatted="false" msgid="9071199452634086365">
+ <item quantity="other">მიმდინარეობს <xliff:g id="COUNT_1">%1$d</xliff:g> ფაილის კოპირება.</item>
+ <item quantity="one">მიმდინარეობს <xliff:g id="COUNT_0">%1$d</xliff:g> ფაილის კოპირება.</item>
+ </plurals>
+ <string name="copy_preparing" msgid="3896202461003039386">"მომზადება კოპირებისთვის…"</string>
+ <plurals name="copy_error_notification_title" formatted="false" msgid="5267616889076217261">
+ <item quantity="other">ვერ მოხდა <xliff:g id="COUNT_1">%1$d</xliff:g> ფაილის კოპირება</item>
+ <item quantity="one">ვერ მოხდა <xliff:g id="COUNT_0">%1$d</xliff:g> ფაილის კოპირება.</item>
+ </plurals>
+ <string name="notification_touch_for_details" msgid="4483108577842961665">"შეეხეთ მონაცემების სანახავად."</string>
+ <string name="retry" msgid="7564024179122207376">"ხელახლა ცდა"</string>
+ <string name="copy_failure_alert_content" msgid="3715575000297709082">"ეს ფაილები არ იყო გადაწერილი: <xliff:g id="LIST">%1$s</xliff:g>"</string>
</resources>
diff --git a/res/values-kk-rKZ/strings.xml b/res/values-kk-rKZ/strings.xml
index d60c4b3..d30df0c 100644
--- a/res/values-kk-rKZ/strings.xml
+++ b/res/values-kk-rKZ/strings.xml
@@ -17,8 +17,8 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="2783841764617238354">"Құжаттар"</string>
- <string name="title_open" msgid="4353228937663917801">"Келесі тармақ арқылы ашу:"</string>
- <string name="title_save" msgid="2433679664882857999">"Келесі файлға сақтау:"</string>
+ <string name="title_open" msgid="4353228937663917801">"Мынадан ашу:"</string>
+ <string name="title_save" msgid="2433679664882857999">"Сақталатын орны"</string>
<string name="menu_create_dir" msgid="5947289605844398389">"Қалта жасақтау"</string>
<string name="menu_grid" msgid="6878021334497835259">"Торлы көрініс"</string>
<string name="menu_list" msgid="7279285939892417279">"Тізім көрінісі"</string>
@@ -29,8 +29,16 @@
<string name="menu_save" msgid="2394743337684426338">"Сақтау"</string>
<string name="menu_share" msgid="3075149983979628146">"Бөлісу"</string>
<string name="menu_delete" msgid="8138799623850614177">"Жою"</string>
- <string name="menu_select" msgid="8711270657353563424">"«<xliff:g id="DIRECTORY">^1</xliff:g>» таңдау"</string>
- <string name="mode_selected_count" msgid="459111894725594625">"<xliff:g id="COUNT">%1$d</xliff:g> таңдалды"</string>
+ <string name="menu_select_all" msgid="8323579667348729928">"Барлығын таңдау"</string>
+ <string name="menu_copy" msgid="3612326052677229148">"Көшіру орны…"</string>
+ <string name="menu_advanced_show" product="nosdcard" msgid="4693652895715631401">"Ішкі жадты көрсету"</string>
+ <string name="menu_advanced_show" product="default" msgid="5792182900084144261">"SD картасын көрсету"</string>
+ <string name="menu_advanced_hide" product="nosdcard" msgid="4218809952721972589">"Ішкі жадты жасыру"</string>
+ <string name="menu_advanced_hide" product="default" msgid="4845869969015718848">"SD картасын жасыру"</string>
+ <string name="menu_file_size_show" msgid="3240323619260823076">"Файл өлшемін көрсету"</string>
+ <string name="menu_file_size_hide" msgid="8881975928502581042">"Файл өлшемін жасыру"</string>
+ <string name="button_select" msgid="527196987259139214">"Таңдау"</string>
+ <string name="button_copy" msgid="8706475544635021302">"Көшіру"</string>
<string name="sort_name" msgid="9183560467917256779">"Атауы бойынша"</string>
<string name="sort_date" msgid="586080032956151448">"Өзгертілген мерзімі бойынша"</string>
<string name="sort_size" msgid="3350681319735474741">"Өлшемі бойынша"</string>
@@ -45,11 +53,22 @@
<string name="root_type_shortcut" msgid="3318760609471618093">"Төте пернелер"</string>
<string name="root_type_device" msgid="7121342474653483538">"Құрылғылар"</string>
<string name="root_type_apps" msgid="8838065367985945189">"Басқа қолданбалар"</string>
- <string name="pref_advanced_devices" msgid="903257239609301276">"Жетілдірілген құрылғыларды көрсету"</string>
- <string name="pref_file_size" msgid="2826879315743961459">"Файл өлшемін көрсету"</string>
- <string name="pref_device_size" msgid="3542106883278997222">"Құрылғы өлшемін көрсету"</string>
<string name="empty" msgid="7858882803708117596">"Бос"</string>
<string name="toast_no_application" msgid="1339885974067891667">"Файлды аша алмады"</string>
<string name="toast_failed_delete" msgid="2180678019407244069">"Кейбір құжаттарды жою мүмкін болмады"</string>
- <string name="share_via" msgid="8966594246261344259">"арқылы бөлісу"</string>
+ <string name="share_via" msgid="8966594246261344259">"Бөлісу"</string>
+ <string name="copy_notification_title" msgid="6374299806748219777">"Файлдарды көшіру"</string>
+ <string name="copy_remaining" msgid="6283790937387975095">"<xliff:g id="DURATION">%s</xliff:g> қалды"</string>
+ <plurals name="copy_begin" formatted="false" msgid="9071199452634086365">
+ <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> файлды көшіру.</item>
+ <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> файлды көшіру.</item>
+ </plurals>
+ <string name="copy_preparing" msgid="3896202461003039386">"Көшіруге дайындау…"</string>
+ <plurals name="copy_error_notification_title" formatted="false" msgid="5267616889076217261">
+ <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> файлды көшіру мүмкін емес</item>
+ <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> файлды көшіру мүмкін емес</item>
+ </plurals>
+ <string name="notification_touch_for_details" msgid="4483108577842961665">"Толығырақ мәліметті көру үшін түртіңіз"</string>
+ <string name="retry" msgid="7564024179122207376">"Қайталау"</string>
+ <string name="copy_failure_alert_content" msgid="3715575000297709082">"Мына файлдар көшірілген жоқ: <xliff:g id="LIST">%1$s</xliff:g>"</string>
</resources>
diff --git a/res/values-km-rKH/strings.xml b/res/values-km-rKH/strings.xml
index 8c9030d..8ac4a5f 100644
--- a/res/values-km-rKH/strings.xml
+++ b/res/values-km-rKH/strings.xml
@@ -29,8 +29,16 @@
<string name="menu_save" msgid="2394743337684426338">"រក្សាទុក"</string>
<string name="menu_share" msgid="3075149983979628146">"ចែករំលែក"</string>
<string name="menu_delete" msgid="8138799623850614177">"លុប"</string>
- <string name="menu_select" msgid="8711270657353563424">"ជ្រើស \"<xliff:g id="DIRECTORY">^1</xliff:g>\""</string>
- <string name="mode_selected_count" msgid="459111894725594625">"បានជ្រើស <xliff:g id="COUNT">%1$d</xliff:g>"</string>
+ <string name="menu_select_all" msgid="8323579667348729928">"ជ្រើសរើសទាំងអស់"</string>
+ <string name="menu_copy" msgid="3612326052677229148">"ថតចម្លងទៅ…"</string>
+ <string name="menu_advanced_show" product="nosdcard" msgid="4693652895715631401">"បង្ហាញឧបករណ៍ផ្ទុកខាងក្នុង"</string>
+ <string name="menu_advanced_show" product="default" msgid="5792182900084144261">"បង្ហាញកាតអេសឌី"</string>
+ <string name="menu_advanced_hide" product="nosdcard" msgid="4218809952721972589">"លាក់ឧបករណ៍ផ្ទុកខាងក្នុង"</string>
+ <string name="menu_advanced_hide" product="default" msgid="4845869969015718848">"លាក់កាតអេសឌី"</string>
+ <string name="menu_file_size_show" msgid="3240323619260823076">"បង្ហាញទំហំឯកសារ"</string>
+ <string name="menu_file_size_hide" msgid="8881975928502581042">"លាក់ទំហំឯកសារ"</string>
+ <string name="button_select" msgid="527196987259139214">"ជ្រើស"</string>
+ <string name="button_copy" msgid="8706475544635021302">"ចម្លង"</string>
<string name="sort_name" msgid="9183560467917256779">"តាមឈ្មោះ"</string>
<string name="sort_date" msgid="586080032956151448">"តាមកាលបរិច្ឆេទបានកែប្រែ"</string>
<string name="sort_size" msgid="3350681319735474741">"តាមទំហំ"</string>
@@ -45,11 +53,22 @@
<string name="root_type_shortcut" msgid="3318760609471618093">"ផ្លូវកាត់"</string>
<string name="root_type_device" msgid="7121342474653483538">"ឧបករណ៍"</string>
<string name="root_type_apps" msgid="8838065367985945189">"កម្មវិធីច្រើនទៀត"</string>
- <string name="pref_advanced_devices" msgid="903257239609301276">"បង្ហាញឧបករណ៍កម្រិតខ្ពស់"</string>
- <string name="pref_file_size" msgid="2826879315743961459">"បង្ហាញទំហំឯកសារ"</string>
- <string name="pref_device_size" msgid="3542106883278997222">"បង្ហាញទំហំឧបករណ៍"</string>
<string name="empty" msgid="7858882803708117596">"គ្មានធាតុ"</string>
<string name="toast_no_application" msgid="1339885974067891667">"មិនអាចបើកឯកសារ"</string>
<string name="toast_failed_delete" msgid="2180678019407244069">"មិនអាចលុបឯកសារមួយចំនួន"</string>
<string name="share_via" msgid="8966594246261344259">"ចែករំលែកតាម"</string>
+ <string name="copy_notification_title" msgid="6374299806748219777">"កំពុងថតចម្លងឯកសារ"</string>
+ <string name="copy_remaining" msgid="6283790937387975095">"នៅសល់ <xliff:g id="DURATION">%s</xliff:g>"</string>
+ <plurals name="copy_begin" formatted="false" msgid="9071199452634086365">
+ <item quantity="other">កំពុងថតចម្លងឯកសារចំនួន <xliff:g id="COUNT_1">%1$d</xliff:g> ។</item>
+ <item quantity="one">កំពុងថតចម្លងឯកសារចំនួន <xliff:g id="COUNT_0">%1$d</xliff:g> ។</item>
+ </plurals>
+ <string name="copy_preparing" msgid="3896202461003039386">"កំពុងរៀបចំចម្លង…"</string>
+ <plurals name="copy_error_notification_title" formatted="false" msgid="5267616889076217261">
+ <item quantity="other">មិនអាចចម្លងឯកសារ <xliff:g id="COUNT_1">%1$d</xliff:g></item>
+ <item quantity="one">មិនអាចចម្លងឯកសារ <xliff:g id="COUNT_0">%1$d</xliff:g></item>
+ </plurals>
+ <string name="notification_touch_for_details" msgid="4483108577842961665">"ប៉ះ ដើម្បីមើលព័ត៌មានលម្អិត"</string>
+ <string name="retry" msgid="7564024179122207376">"ព្យាយាមម្ដងទៀត"</string>
+ <string name="copy_failure_alert_content" msgid="3715575000297709082">"ឯកសារទាំងនេះមិនបានចម្លងទេ៖ <xliff:g id="LIST">%1$s</xliff:g>"</string>
</resources>
diff --git a/res/values-kn-rIN/strings.xml b/res/values-kn-rIN/strings.xml
index 70fc185..e93876d 100644
--- a/res/values-kn-rIN/strings.xml
+++ b/res/values-kn-rIN/strings.xml
@@ -18,7 +18,7 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="2783841764617238354">"ಡಾಕ್ಯುಮೆಂಟ್ಗಳು"</string>
<string name="title_open" msgid="4353228937663917801">"ಇದರ ಮೂಲಕ ತೆರೆಯಿರಿ"</string>
- <string name="title_save" msgid="2433679664882857999">"ಇದಕ್ಕೆ ಉಳಿಸಿ"</string>
+ <string name="title_save" msgid="2433679664882857999">"ಇವುಗಳಲ್ಲಿ ಉಳಿಸಿ"</string>
<string name="menu_create_dir" msgid="5947289605844398389">"ಫೋಲ್ಡರ್ ರಚಿಸು"</string>
<string name="menu_grid" msgid="6878021334497835259">"ಗ್ರಿಡ್ ವೀಕ್ಷಣೆ"</string>
<string name="menu_list" msgid="7279285939892417279">"ಪಟ್ಟಿ ವೀಕ್ಷಣೆ"</string>
@@ -29,8 +29,16 @@
<string name="menu_save" msgid="2394743337684426338">"ಉಳಿಸು"</string>
<string name="menu_share" msgid="3075149983979628146">"ಹಂಚು"</string>
<string name="menu_delete" msgid="8138799623850614177">"ಅಳಿಸು"</string>
- <string name="menu_select" msgid="8711270657353563424">"\"<xliff:g id="DIRECTORY">^1</xliff:g>\" ಆಯ್ಕೆಮಾಡಿ"</string>
- <string name="mode_selected_count" msgid="459111894725594625">"<xliff:g id="COUNT">%1$d</xliff:g> ಆಯ್ಕೆ ಮಾಡಲಾಗಿದೆ"</string>
+ <string name="menu_select_all" msgid="8323579667348729928">"ಎಲ್ಲವನ್ನೂ ಆಯ್ಕೆಮಾಡಿ"</string>
+ <string name="menu_copy" msgid="3612326052677229148">"ಇದಕ್ಕೆ ನಕಲಿಸಿ…"</string>
+ <string name="menu_advanced_show" product="nosdcard" msgid="4693652895715631401">"ಆಂತರಿಕ ಸಂಗ್ರಹಣೆಯನ್ನು ತೋರಿಸು"</string>
+ <string name="menu_advanced_show" product="default" msgid="5792182900084144261">"SD ಕಾಡ್ ಅನ್ನು ತೋರಿಸು"</string>
+ <string name="menu_advanced_hide" product="nosdcard" msgid="4218809952721972589">"ಆಂತರಿಕ ಸಂಗ್ರಹಣೆಯನ್ನು ಮರೆಮಾಡಿ"</string>
+ <string name="menu_advanced_hide" product="default" msgid="4845869969015718848">"SD ಕಾರ್ಡ್ ಅನ್ನು ಮರೆಮಾಡಿ"</string>
+ <string name="menu_file_size_show" msgid="3240323619260823076">"ಫೈಲ್ ಗಾತ್ರವನ್ನು ತೋರಿಸು"</string>
+ <string name="menu_file_size_hide" msgid="8881975928502581042">"ಫೈಲ್ ಗಾತ್ರವನ್ನು ಮರೆಮಾಡಿ"</string>
+ <string name="button_select" msgid="527196987259139214">"ಆಯ್ಕೆಮಾಡು"</string>
+ <string name="button_copy" msgid="8706475544635021302">"ನಕಲಿಸು"</string>
<string name="sort_name" msgid="9183560467917256779">"ಹೆಸರಿನ ಪ್ರಕಾರ"</string>
<string name="sort_date" msgid="586080032956151448">"ಮಾರ್ಪಡಿಸಿರುವ ದಿನಾಂಕದ ಪ್ರಕಾರ"</string>
<string name="sort_size" msgid="3350681319735474741">"ಗಾತ್ರದ ಪ್ರಕಾರ"</string>
@@ -45,11 +53,22 @@
<string name="root_type_shortcut" msgid="3318760609471618093">"ಶಾರ್ಟ್ಕಟ್ಗಳು"</string>
<string name="root_type_device" msgid="7121342474653483538">"ಸಾಧನಗಳು"</string>
<string name="root_type_apps" msgid="8838065367985945189">"ಇನ್ನಷ್ಟು ಅಪ್ಲಿಕೇಶನ್ಗಳು"</string>
- <string name="pref_advanced_devices" msgid="903257239609301276">"ಸುಧಾರಿತ ಸಾಧನಗಳನ್ನು ಪ್ರದರ್ಶಿಸಿ"</string>
- <string name="pref_file_size" msgid="2826879315743961459">"ಫೈಲ್ ಗಾತ್ರವನ್ನು ಪ್ರದರ್ಶಿಸಿ"</string>
- <string name="pref_device_size" msgid="3542106883278997222">"ಸಾಧನದ ಗಾತ್ರವನ್ನು ಪ್ರದರ್ಶಿಸಿ"</string>
<string name="empty" msgid="7858882803708117596">"ಯಾವುದೇ ಐಟಂಗಳಿಲ್ಲ"</string>
<string name="toast_no_application" msgid="1339885974067891667">"ಫೈಲ್ ತೆರೆಯಲು ಸಾಧ್ಯವಾಗುತ್ತಿಲ್ಲ"</string>
<string name="toast_failed_delete" msgid="2180678019407244069">"ಕೆಲವು ಡಾಕ್ಯುಮೆಂಟ್ಗಳನ್ನು ಅಳಿಸಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ"</string>
<string name="share_via" msgid="8966594246261344259">"ಈ ಮೂಲಕ ಹಂಚಿಕೊಳ್ಳಿ"</string>
+ <string name="copy_notification_title" msgid="6374299806748219777">"ಫೈಲ್ಗಳನ್ನು ನಕಲಿಸಲಾಗುತ್ತಿದೆ"</string>
+ <string name="copy_remaining" msgid="6283790937387975095">"<xliff:g id="DURATION">%s</xliff:g> ಉಳಿದಿದೆ"</string>
+ <plurals name="copy_begin" formatted="false" msgid="9071199452634086365">
+ <item quantity="one"> <xliff:g id="COUNT_1">%1$d</xliff:g> ಫೈಲ್ಗಳನ್ನು ನಕಲಿಸಲಾಗುತ್ತಿದೆ.</item>
+ <item quantity="other"> <xliff:g id="COUNT_1">%1$d</xliff:g> ಫೈಲ್ಗಳನ್ನು ನಕಲಿಸಲಾಗುತ್ತಿದೆ.</item>
+ </plurals>
+ <string name="copy_preparing" msgid="3896202461003039386">"ನಕಲಿಸಲು ಸಿದ್ಧಪಡಿಸಲಾಗುತ್ತಿದೆ..."</string>
+ <plurals name="copy_error_notification_title" formatted="false" msgid="5267616889076217261">
+ <item quantity="one"> <xliff:g id="COUNT_1">%1$d</xliff:g> ಫೈಲ್ಗಳನ್ನು ನಕಲು ಮಾಡಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ</item>
+ <item quantity="other"> <xliff:g id="COUNT_1">%1$d</xliff:g> ಫೈಲ್ಗಳನ್ನು ನಕಲು ಮಾಡಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ</item>
+ </plurals>
+ <string name="notification_touch_for_details" msgid="4483108577842961665">"ವಿವರಗಳನ್ನು ವೀಕ್ಷಿಸಲು ಸ್ಪರ್ಶಿಸಿ"</string>
+ <string name="retry" msgid="7564024179122207376">"ಮರುಪ್ರಯತ್ನಿಸು"</string>
+ <string name="copy_failure_alert_content" msgid="3715575000297709082">"ಈ ಫೈಲ್ಗಳನ್ನು ನಕಲು ಮಾಡಿಲ್ಲ: <xliff:g id="LIST">%1$s</xliff:g>"</string>
</resources>
diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml
index 5996e66..f4eca51 100644
--- a/res/values-ko/strings.xml
+++ b/res/values-ko/strings.xml
@@ -29,8 +29,16 @@
<string name="menu_save" msgid="2394743337684426338">"저장"</string>
<string name="menu_share" msgid="3075149983979628146">"공유"</string>
<string name="menu_delete" msgid="8138799623850614177">"삭제"</string>
- <string name="menu_select" msgid="8711270657353563424">"\'<xliff:g id="DIRECTORY">^1</xliff:g>\' 선택"</string>
- <string name="mode_selected_count" msgid="459111894725594625">"<xliff:g id="COUNT">%1$d</xliff:g>개 선택됨"</string>
+ <string name="menu_select_all" msgid="8323579667348729928">"모두 선택"</string>
+ <string name="menu_copy" msgid="3612326052677229148">"복사…"</string>
+ <string name="menu_advanced_show" product="nosdcard" msgid="4693652895715631401">"내부 저장소 표시"</string>
+ <string name="menu_advanced_show" product="default" msgid="5792182900084144261">"SD 카드 표시"</string>
+ <string name="menu_advanced_hide" product="nosdcard" msgid="4218809952721972589">"내부 저장소 숨기기"</string>
+ <string name="menu_advanced_hide" product="default" msgid="4845869969015718848">"SD 카드 숨기기"</string>
+ <string name="menu_file_size_show" msgid="3240323619260823076">"파일 크기 표시"</string>
+ <string name="menu_file_size_hide" msgid="8881975928502581042">"파일 크기 숨기기"</string>
+ <string name="button_select" msgid="527196987259139214">"선택"</string>
+ <string name="button_copy" msgid="8706475544635021302">"복사"</string>
<string name="sort_name" msgid="9183560467917256779">"이름순"</string>
<string name="sort_date" msgid="586080032956151448">"수정된 날짜순"</string>
<string name="sort_size" msgid="3350681319735474741">"크기순"</string>
@@ -45,11 +53,22 @@
<string name="root_type_shortcut" msgid="3318760609471618093">"바로가기"</string>
<string name="root_type_device" msgid="7121342474653483538">"기기"</string>
<string name="root_type_apps" msgid="8838065367985945189">"앱 더보기"</string>
- <string name="pref_advanced_devices" msgid="903257239609301276">"고급 기기 표시"</string>
- <string name="pref_file_size" msgid="2826879315743961459">"파일 크기 표시"</string>
- <string name="pref_device_size" msgid="3542106883278997222">"기기 크기 표시"</string>
<string name="empty" msgid="7858882803708117596">"항목 없음"</string>
<string name="toast_no_application" msgid="1339885974067891667">"파일을 열 수 없음"</string>
<string name="toast_failed_delete" msgid="2180678019407244069">"일부 문서를 삭제할 수 없음"</string>
<string name="share_via" msgid="8966594246261344259">"공유 방법"</string>
+ <string name="copy_notification_title" msgid="6374299806748219777">"파일 복사 중"</string>
+ <string name="copy_remaining" msgid="6283790937387975095">"<xliff:g id="DURATION">%s</xliff:g> 남음"</string>
+ <plurals name="copy_begin" formatted="false" msgid="9071199452634086365">
+ <item quantity="other">파일 <xliff:g id="COUNT_1">%1$d</xliff:g>개를 복사합니다.</item>
+ <item quantity="one">파일 <xliff:g id="COUNT_0">%1$d</xliff:g>개를 복사합니다.</item>
+ </plurals>
+ <string name="copy_preparing" msgid="3896202461003039386">"사본 준비 중…"</string>
+ <plurals name="copy_error_notification_title" formatted="false" msgid="5267616889076217261">
+ <item quantity="other">파일 <xliff:g id="COUNT_1">%1$d</xliff:g>개를 복사할 수 없습니다.</item>
+ <item quantity="one">파일 <xliff:g id="COUNT_0">%1$d</xliff:g>개를 복사할 수 없습니다.</item>
+ </plurals>
+ <string name="notification_touch_for_details" msgid="4483108577842961665">"세부정보를 보려면 터치하세요."</string>
+ <string name="retry" msgid="7564024179122207376">"다시 시도"</string>
+ <string name="copy_failure_alert_content" msgid="3715575000297709082">"다음 파일이 복사되지 않았습니다. <xliff:g id="LIST">%1$s</xliff:g>"</string>
</resources>
diff --git a/res/values-ky-rKG/strings.xml b/res/values-ky-rKG/strings.xml
index 1fe7183..71a1fd2 100644
--- a/res/values-ky-rKG/strings.xml
+++ b/res/values-ky-rKG/strings.xml
@@ -29,8 +29,16 @@
<string name="menu_save" msgid="2394743337684426338">"Сактоо"</string>
<string name="menu_share" msgid="3075149983979628146">"Бөлүшүү"</string>
<string name="menu_delete" msgid="8138799623850614177">"Өчүрүү"</string>
- <string name="menu_select" msgid="8711270657353563424">"\"<xliff:g id="DIRECTORY">^1</xliff:g>\" тандоо"</string>
- <string name="mode_selected_count" msgid="459111894725594625">"<xliff:g id="COUNT">%1$d</xliff:g> тандалды"</string>
+ <string name="menu_select_all" msgid="8323579667348729928">"Бардыгын тандоо"</string>
+ <string name="menu_copy" msgid="3612326052677229148">"Төмөнкүгө көчүрүү…"</string>
+ <string name="menu_advanced_show" product="nosdcard" msgid="4693652895715631401">"Ички сактагычты көрсөтүү"</string>
+ <string name="menu_advanced_show" product="default" msgid="5792182900084144261">"SD картаны көрсөтүү"</string>
+ <string name="menu_advanced_hide" product="nosdcard" msgid="4218809952721972589">"Ички эстутумду жашыруу"</string>
+ <string name="menu_advanced_hide" product="default" msgid="4845869969015718848">"SD картаны жашыруу"</string>
+ <string name="menu_file_size_show" msgid="3240323619260823076">"Файл өлчөмүн көрсөтүү"</string>
+ <string name="menu_file_size_hide" msgid="8881975928502581042">"Файл өлчөмүн жашыруу"</string>
+ <string name="button_select" msgid="527196987259139214">"Тандоо"</string>
+ <string name="button_copy" msgid="8706475544635021302">"Көчүрүү"</string>
<string name="sort_name" msgid="9183560467917256779">"Аты боюнча"</string>
<string name="sort_date" msgid="586080032956151448">"Өзгөртүлгөн күнү боюнча"</string>
<string name="sort_size" msgid="3350681319735474741">"Өлчөмү боюнча"</string>
@@ -45,11 +53,22 @@
<string name="root_type_shortcut" msgid="3318760609471618093">"Тез чакырмалар"</string>
<string name="root_type_device" msgid="7121342474653483538">"Түзмөктөр"</string>
<string name="root_type_apps" msgid="8838065367985945189">"Көбүрөөк колдонмолор"</string>
- <string name="pref_advanced_devices" msgid="903257239609301276">"Жакшыртылган түзмөктөр"</string>
- <string name="pref_file_size" msgid="2826879315743961459">"Файл өлчөмүн көрсөтүү"</string>
- <string name="pref_device_size" msgid="3542106883278997222">"Түзмөк өлчөмүн көрсөтүү"</string>
<string name="empty" msgid="7858882803708117596">"Эч нерсе жок"</string>
<string name="toast_no_application" msgid="1339885974067891667">"Файл ачылбады"</string>
<string name="toast_failed_delete" msgid="2180678019407244069">"Кээ бир документтерди өчүрүү кыйрады"</string>
<string name="share_via" msgid="8966594246261344259">"Кийинки аркылуу бөлүшүү:"</string>
+ <string name="copy_notification_title" msgid="6374299806748219777">"Файлдар көчүрүлүүдө"</string>
+ <string name="copy_remaining" msgid="6283790937387975095">"<xliff:g id="DURATION">%s</xliff:g> калды"</string>
+ <plurals name="copy_begin" formatted="false" msgid="9071199452634086365">
+ <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> файл көчүрүлүүдө.</item>
+ <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> файл көчүрүлүүдө.</item>
+ </plurals>
+ <string name="copy_preparing" msgid="3896202461003039386">"Көчүрүүгө даярдалууда…"</string>
+ <plurals name="copy_error_notification_title" formatted="false" msgid="5267616889076217261">
+ <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> файл көчүрүлбөй койду</item>
+ <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> файл көчүрүлбөй койду</item>
+ </plurals>
+ <string name="notification_touch_for_details" msgid="4483108577842961665">"Чоо-жайын билүү үчүн тийип коюңуз"</string>
+ <string name="retry" msgid="7564024179122207376">"Дагы аракет кылуу"</string>
+ <string name="copy_failure_alert_content" msgid="3715575000297709082">"Төмөнкү файлдар көчүрүлгөн жок: <xliff:g id="LIST">%1$s</xliff:g>"</string>
</resources>
diff --git a/res/values-lo-rLA/strings.xml b/res/values-lo-rLA/strings.xml
index 8452ae1..7fde417 100644
--- a/res/values-lo-rLA/strings.xml
+++ b/res/values-lo-rLA/strings.xml
@@ -29,8 +29,16 @@
<string name="menu_save" msgid="2394743337684426338">"ບັນທຶກ"</string>
<string name="menu_share" msgid="3075149983979628146">"ແບ່ງປັນ"</string>
<string name="menu_delete" msgid="8138799623850614177">"ລຶບ"</string>
- <string name="menu_select" msgid="8711270657353563424">"ເລືອກ \"<xliff:g id="DIRECTORY">^1</xliff:g>\""</string>
- <string name="mode_selected_count" msgid="459111894725594625">"ເລືອກແລ້ວ <xliff:g id="COUNT">%1$d</xliff:g> ລາຍການ"</string>
+ <string name="menu_select_all" msgid="8323579667348729928">"ເລືອກທັງຫມົດ"</string>
+ <string name="menu_copy" msgid="3612326052677229148">"ອັດສຳເນົາໃສ່…"</string>
+ <string name="menu_advanced_show" product="nosdcard" msgid="4693652895715631401">"ສະແດງໂຕເກັບຂໍ້ມູນພາຍໃນ"</string>
+ <string name="menu_advanced_show" product="default" msgid="5792182900084144261">"ສະແດງ SD Card"</string>
+ <string name="menu_advanced_hide" product="nosdcard" msgid="4218809952721972589">"ເຊື່ອງໂຕເກັບຂໍ້ມູນພາຍໃນ"</string>
+ <string name="menu_advanced_hide" product="default" msgid="4845869969015718848">"ເຊື່ອງ SD Card"</string>
+ <string name="menu_file_size_show" msgid="3240323619260823076">"ສະແດງຂະໜາດໄຟລ໌"</string>
+ <string name="menu_file_size_hide" msgid="8881975928502581042">"ເຊື່ອງຂະຫນາດໄຟລ໌"</string>
+ <string name="button_select" msgid="527196987259139214">"ເລືອກ"</string>
+ <string name="button_copy" msgid="8706475544635021302">"ສຳເນົາ"</string>
<string name="sort_name" msgid="9183560467917256779">"ຕາມຊື່"</string>
<string name="sort_date" msgid="586080032956151448">"ຕາມວັນທີທີ່ແກ້ໄຂ"</string>
<string name="sort_size" msgid="3350681319735474741">"ຕາມຂະໜາດ"</string>
@@ -45,11 +53,22 @@
<string name="root_type_shortcut" msgid="3318760609471618093">"ທາງລັດ"</string>
<string name="root_type_device" msgid="7121342474653483538">"ອຸປະກອນ"</string>
<string name="root_type_apps" msgid="8838065367985945189">"ແອັບຯອື່ນໆ"</string>
- <string name="pref_advanced_devices" msgid="903257239609301276">"ສະແດງອຸປະກອນຂັ້ນສູງ"</string>
- <string name="pref_file_size" msgid="2826879315743961459">"ສະແດງຂະໜາດໄຟລ໌"</string>
- <string name="pref_device_size" msgid="3542106883278997222">"ສະແດງຂະໜາດອຸປະກອນ"</string>
<string name="empty" msgid="7858882803708117596">"ບໍ່ມີລາຍການ"</string>
<string name="toast_no_application" msgid="1339885974067891667">"ບໍ່ສາມດາເປີດໄຟລ໌ໄດ້"</string>
<string name="toast_failed_delete" msgid="2180678019407244069">"ບໍ່ສາມາດລຶບບາງເອກະສານໄດ້"</string>
<string name="share_via" msgid="8966594246261344259">"ແບ່ງປັນຜ່ານ"</string>
+ <string name="copy_notification_title" msgid="6374299806748219777">"ກຳລັງອັດສຳເນົາໄຟລ໌"</string>
+ <string name="copy_remaining" msgid="6283790937387975095">"<xliff:g id="DURATION">%s</xliff:g> ຍັງເຫຼືອຢູ່"</string>
+ <plurals name="copy_begin" formatted="false" msgid="9071199452634086365">
+ <item quantity="other">ກຳລັງອັດສຳເນົາ <xliff:g id="COUNT_1">%1$d</xliff:g> ໄຟລ໌.</item>
+ <item quantity="one">ກຳລັງອັດສຳເນົາ <xliff:g id="COUNT_0">%1$d</xliff:g> ໄຟລ໌.</item>
+ </plurals>
+ <string name="copy_preparing" msgid="3896202461003039386">"ກຳລັງກຽມອັດສຳເນົາ…"</string>
+ <plurals name="copy_error_notification_title" formatted="false" msgid="5267616889076217261">
+ <item quantity="other">ບໍ່ສາມາດອັດສຳເນົາ <xliff:g id="COUNT_1">%1$d</xliff:g> ໄຟລ໌ໄດ້</item>
+ <item quantity="one">ບໍ່ສາມາດອັດສຳເນົາ <xliff:g id="COUNT_0">%1$d</xliff:g> ໄຟລ໌ໄດ້</item>
+ </plurals>
+ <string name="notification_touch_for_details" msgid="4483108577842961665">"ສຳພັດເພື່ອເບິ່ງລາຍລະອຽດ"</string>
+ <string name="retry" msgid="7564024179122207376">"ລອງໃໝ່"</string>
+ <string name="copy_failure_alert_content" msgid="3715575000297709082">"ໄຟລ໌ເຫຼົ່ານີ້ບໍ່ຖືກອັດສຳເນົາ: <xliff:g id="LIST">%1$s</xliff:g>"</string>
</resources>
diff --git a/res/values-lt/strings.xml b/res/values-lt/strings.xml
index 8ec3e0b..aa129c1 100644
--- a/res/values-lt/strings.xml
+++ b/res/values-lt/strings.xml
@@ -29,8 +29,16 @@
<string name="menu_save" msgid="2394743337684426338">"Išsaugoti"</string>
<string name="menu_share" msgid="3075149983979628146">"Bendrinti"</string>
<string name="menu_delete" msgid="8138799623850614177">"Ištrinti"</string>
- <string name="menu_select" msgid="8711270657353563424">"Pasirinkti katalogą „<xliff:g id="DIRECTORY">^1</xliff:g>“"</string>
- <string name="mode_selected_count" msgid="459111894725594625">"Pasirinkta: <xliff:g id="COUNT">%1$d</xliff:g>"</string>
+ <string name="menu_select_all" msgid="8323579667348729928">"Pasirinkti viską"</string>
+ <string name="menu_copy" msgid="3612326052677229148">"Kopijuoti į..."</string>
+ <string name="menu_advanced_show" product="nosdcard" msgid="4693652895715631401">"Rodyti vidinę atmintį"</string>
+ <string name="menu_advanced_show" product="default" msgid="5792182900084144261">"Rodyti SD kortelę"</string>
+ <string name="menu_advanced_hide" product="nosdcard" msgid="4218809952721972589">"Slėpti vidinę atmintį"</string>
+ <string name="menu_advanced_hide" product="default" msgid="4845869969015718848">"Slėpti SD kortelę"</string>
+ <string name="menu_file_size_show" msgid="3240323619260823076">"Rodyti failo dydį"</string>
+ <string name="menu_file_size_hide" msgid="8881975928502581042">"Slėpti failo dydį"</string>
+ <string name="button_select" msgid="527196987259139214">"Pasirinkti"</string>
+ <string name="button_copy" msgid="8706475544635021302">"Kopijuoti"</string>
<string name="sort_name" msgid="9183560467917256779">"Pagal pavadinimą"</string>
<string name="sort_date" msgid="586080032956151448">"Pagal keitimo datą"</string>
<string name="sort_size" msgid="3350681319735474741">"Pagal dydį"</string>
@@ -45,11 +53,26 @@
<string name="root_type_shortcut" msgid="3318760609471618093">"Spartieji klavišai"</string>
<string name="root_type_device" msgid="7121342474653483538">"Įrenginiai"</string>
<string name="root_type_apps" msgid="8838065367985945189">"Daugiau programų"</string>
- <string name="pref_advanced_devices" msgid="903257239609301276">"Rodyti išplėstinius įrenginius"</string>
- <string name="pref_file_size" msgid="2826879315743961459">"Rodyti failo dydį"</string>
- <string name="pref_device_size" msgid="3542106883278997222">"Rodyti įrenginio dydį"</string>
<string name="empty" msgid="7858882803708117596">"Nėra elementų"</string>
<string name="toast_no_application" msgid="1339885974067891667">"Nepavyksta atidaryti failo"</string>
<string name="toast_failed_delete" msgid="2180678019407244069">"Nepavyko ištrinti kai kurių dokumentų"</string>
<string name="share_via" msgid="8966594246261344259">"Bendrinti naudojant"</string>
+ <string name="copy_notification_title" msgid="6374299806748219777">"Kopijuojami failai"</string>
+ <string name="copy_remaining" msgid="6283790937387975095">"Liko: <xliff:g id="DURATION">%s</xliff:g>"</string>
+ <plurals name="copy_begin" formatted="false" msgid="9071199452634086365">
+ <item quantity="one">Kopijuojamas <xliff:g id="COUNT_1">%1$d</xliff:g> failas.</item>
+ <item quantity="few">Kopijuojami <xliff:g id="COUNT_1">%1$d</xliff:g> failai.</item>
+ <item quantity="many">Kopijuojama <xliff:g id="COUNT_1">%1$d</xliff:g> failo.</item>
+ <item quantity="other">Kopijuojama <xliff:g id="COUNT_1">%1$d</xliff:g> failų.</item>
+ </plurals>
+ <string name="copy_preparing" msgid="3896202461003039386">"Ruošiamasi kopijuoti…"</string>
+ <plurals name="copy_error_notification_title" formatted="false" msgid="5267616889076217261">
+ <item quantity="one">Nepavyko nukopijuoti <xliff:g id="COUNT_1">%1$d</xliff:g> failo</item>
+ <item quantity="few">Nepavyko nukopijuoti <xliff:g id="COUNT_1">%1$d</xliff:g> failų</item>
+ <item quantity="many">Nepavyko nukopijuoti <xliff:g id="COUNT_1">%1$d</xliff:g> failo</item>
+ <item quantity="other">Nepavyko nukopijuoti <xliff:g id="COUNT_1">%1$d</xliff:g> failų</item>
+ </plurals>
+ <string name="notification_touch_for_details" msgid="4483108577842961665">"Palieskite, kad peržiūr. išsamią informaciją"</string>
+ <string name="retry" msgid="7564024179122207376">"Bandyti dar kartą"</string>
+ <string name="copy_failure_alert_content" msgid="3715575000297709082">"Šie failai nenukopijuoti: <xliff:g id="LIST">%1$s</xliff:g>"</string>
</resources>
diff --git a/res/values-lv/strings.xml b/res/values-lv/strings.xml
index caaf8ec..7476960 100644
--- a/res/values-lv/strings.xml
+++ b/res/values-lv/strings.xml
@@ -29,8 +29,16 @@
<string name="menu_save" msgid="2394743337684426338">"Saglabāt"</string>
<string name="menu_share" msgid="3075149983979628146">"Kopīgot"</string>
<string name="menu_delete" msgid="8138799623850614177">"Dzēst"</string>
- <string name="menu_select" msgid="8711270657353563424">"Atlasīt “<xliff:g id="DIRECTORY">^1</xliff:g>”"</string>
- <string name="mode_selected_count" msgid="459111894725594625">"Atlasīts: <xliff:g id="COUNT">%1$d</xliff:g>"</string>
+ <string name="menu_select_all" msgid="8323579667348729928">"Atlasīt visus"</string>
+ <string name="menu_copy" msgid="3612326052677229148">"Kopēt…"</string>
+ <string name="menu_advanced_show" product="nosdcard" msgid="4693652895715631401">"Rādīt iekšējo atmiņu"</string>
+ <string name="menu_advanced_show" product="default" msgid="5792182900084144261">"Rādīt SD karti"</string>
+ <string name="menu_advanced_hide" product="nosdcard" msgid="4218809952721972589">"Paslēpt iekšējo atmiņu"</string>
+ <string name="menu_advanced_hide" product="default" msgid="4845869969015718848">"Paslēpt SD karti"</string>
+ <string name="menu_file_size_show" msgid="3240323619260823076">"Rādīt failu lielumu"</string>
+ <string name="menu_file_size_hide" msgid="8881975928502581042">"Paslēpt failu lielumu"</string>
+ <string name="button_select" msgid="527196987259139214">"Atlasīt"</string>
+ <string name="button_copy" msgid="8706475544635021302">"Kopēt"</string>
<string name="sort_name" msgid="9183560467917256779">"Pēc nosaukuma"</string>
<string name="sort_date" msgid="586080032956151448">"Pēc pārveidošanas datuma"</string>
<string name="sort_size" msgid="3350681319735474741">"Pēc lieluma"</string>
@@ -45,11 +53,24 @@
<string name="root_type_shortcut" msgid="3318760609471618093">"Saīsnes"</string>
<string name="root_type_device" msgid="7121342474653483538">"Ierīces"</string>
<string name="root_type_apps" msgid="8838065367985945189">"Vairāk lietotņu"</string>
- <string name="pref_advanced_devices" msgid="903257239609301276">"Attēlot papildu ierīces"</string>
- <string name="pref_file_size" msgid="2826879315743961459">"Attēlot faila lielumu"</string>
- <string name="pref_device_size" msgid="3542106883278997222">"Attēlot ierīces izmēru"</string>
<string name="empty" msgid="7858882803708117596">"Nav vienumu"</string>
<string name="toast_no_application" msgid="1339885974067891667">"Nevar atvērt failu."</string>
<string name="toast_failed_delete" msgid="2180678019407244069">"Nevar dzēst dažus dokumentus."</string>
<string name="share_via" msgid="8966594246261344259">"Kopīgot, izmantojot"</string>
+ <string name="copy_notification_title" msgid="6374299806748219777">"Notiek failu kopēšana"</string>
+ <string name="copy_remaining" msgid="6283790937387975095">"Atlikušais laiks: <xliff:g id="DURATION">%s</xliff:g>"</string>
+ <plurals name="copy_begin" formatted="false" msgid="9071199452634086365">
+ <item quantity="zero">Notiek <xliff:g id="COUNT_1">%1$d</xliff:g> failu kopēšana.</item>
+ <item quantity="one">Notiek <xliff:g id="COUNT_1">%1$d</xliff:g> faila kopēšana.</item>
+ <item quantity="other">Notiek <xliff:g id="COUNT_1">%1$d</xliff:g> failu kopēšana.</item>
+ </plurals>
+ <string name="copy_preparing" msgid="3896202461003039386">"Gatavošanās kopēšanai…"</string>
+ <plurals name="copy_error_notification_title" formatted="false" msgid="5267616889076217261">
+ <item quantity="zero">Nevarēja nokopēt <xliff:g id="COUNT_1">%1$d</xliff:g> failus</item>
+ <item quantity="one">Nevarēja nokopēt <xliff:g id="COUNT_1">%1$d</xliff:g> failu</item>
+ <item quantity="other">Nevarēja nokopēt <xliff:g id="COUNT_1">%1$d</xliff:g> failus</item>
+ </plurals>
+ <string name="notification_touch_for_details" msgid="4483108577842961665">"Pieskarieties, lai skatītu informāciju"</string>
+ <string name="retry" msgid="7564024179122207376">"Mēģināt vēlreiz"</string>
+ <string name="copy_failure_alert_content" msgid="3715575000297709082">"Netika nokopēti šādi faili: <xliff:g id="LIST">%1$s</xliff:g>"</string>
</resources>
diff --git a/res/values-mk-rMK/strings.xml b/res/values-mk-rMK/strings.xml
index 7b50a25..8479839 100644
--- a/res/values-mk-rMK/strings.xml
+++ b/res/values-mk-rMK/strings.xml
@@ -29,8 +29,16 @@
<string name="menu_save" msgid="2394743337684426338">"Зачувај"</string>
<string name="menu_share" msgid="3075149983979628146">"Сподели"</string>
<string name="menu_delete" msgid="8138799623850614177">"Избриши"</string>
- <string name="menu_select" msgid="8711270657353563424">"Одберете „<xliff:g id="DIRECTORY">^1</xliff:g>“"</string>
- <string name="mode_selected_count" msgid="459111894725594625">"Избрани се <xliff:g id="COUNT">%1$d</xliff:g>"</string>
+ <string name="menu_select_all" msgid="8323579667348729928">"Избери ги сите"</string>
+ <string name="menu_copy" msgid="3612326052677229148">"Копирај во…"</string>
+ <string name="menu_advanced_show" product="nosdcard" msgid="4693652895715631401">"Прикажи внатрешна мемор."</string>
+ <string name="menu_advanced_show" product="default" msgid="5792182900084144261">"Прикажи СД-картичка"</string>
+ <string name="menu_advanced_hide" product="nosdcard" msgid="4218809952721972589">"Скриј внатрешна меморија"</string>
+ <string name="menu_advanced_hide" product="default" msgid="4845869969015718848">"Сoкриј СД-картичка"</string>
+ <string name="menu_file_size_show" msgid="3240323619260823076">"Прикажи целосна големина"</string>
+ <string name="menu_file_size_hide" msgid="8881975928502581042">"Сокриј целосна големина"</string>
+ <string name="button_select" msgid="527196987259139214">"Избери"</string>
+ <string name="button_copy" msgid="8706475544635021302">"Копирај"</string>
<string name="sort_name" msgid="9183560467917256779">"По име"</string>
<string name="sort_date" msgid="586080032956151448">"Изменети по датум"</string>
<string name="sort_size" msgid="3350681319735474741">"По големина"</string>
@@ -45,11 +53,22 @@
<string name="root_type_shortcut" msgid="3318760609471618093">"Кратенки"</string>
<string name="root_type_device" msgid="7121342474653483538">"Уреди"</string>
<string name="root_type_apps" msgid="8838065367985945189">"Повеќе апликации"</string>
- <string name="pref_advanced_devices" msgid="903257239609301276">"Прикажи напредни уреди"</string>
- <string name="pref_file_size" msgid="2826879315743961459">"Прикажи големина на датотека"</string>
- <string name="pref_device_size" msgid="3542106883278997222">"Прикажи големина на уред"</string>
<string name="empty" msgid="7858882803708117596">"Нема ставки"</string>
<string name="toast_no_application" msgid="1339885974067891667">"Датотеката не се отвора"</string>
<string name="toast_failed_delete" msgid="2180678019407244069">"Некои документи не може да се избришат"</string>
<string name="share_via" msgid="8966594246261344259">"Сподели преку"</string>
+ <string name="copy_notification_title" msgid="6374299806748219777">"Се копираат датотеки"</string>
+ <string name="copy_remaining" msgid="6283790937387975095">"Уште <xliff:g id="DURATION">%s</xliff:g>"</string>
+ <plurals name="copy_begin" formatted="false" msgid="9071199452634086365">
+ <item quantity="one">Се копира <xliff:g id="COUNT_1">%1$d</xliff:g> датотека.</item>
+ <item quantity="other">Се копираат <xliff:g id="COUNT_1">%1$d</xliff:g> датотеки.</item>
+ </plurals>
+ <string name="copy_preparing" msgid="3896202461003039386">"Се подготвува за копирање…"</string>
+ <plurals name="copy_error_notification_title" formatted="false" msgid="5267616889076217261">
+ <item quantity="one">Не може да копира <xliff:g id="COUNT_1">%1$d</xliff:g> датотека</item>
+ <item quantity="other">Не може да копираат <xliff:g id="COUNT_1">%1$d</xliff:g> датотеки</item>
+ </plurals>
+ <string name="notification_touch_for_details" msgid="4483108577842961665">"Допрете за да ги погледнете деталите"</string>
+ <string name="retry" msgid="7564024179122207376">"Обидете се повторно"</string>
+ <string name="copy_failure_alert_content" msgid="3715575000297709082">"Датотекиве не се ископирани: <xliff:g id="LIST">%1$s</xliff:g>"</string>
</resources>
diff --git a/res/values-ml-rIN/strings.xml b/res/values-ml-rIN/strings.xml
index f91ad8a..56b22b1 100644
--- a/res/values-ml-rIN/strings.xml
+++ b/res/values-ml-rIN/strings.xml
@@ -29,8 +29,16 @@
<string name="menu_save" msgid="2394743337684426338">"സംരക്ഷിക്കുക"</string>
<string name="menu_share" msgid="3075149983979628146">"പങ്കിടുക"</string>
<string name="menu_delete" msgid="8138799623850614177">"ഇല്ലാതാക്കുക"</string>
- <string name="menu_select" msgid="8711270657353563424">"\"<xliff:g id="DIRECTORY">^1</xliff:g>\" തിരഞ്ഞെടുക്കുക"</string>
- <string name="mode_selected_count" msgid="459111894725594625">"<xliff:g id="COUNT">%1$d</xliff:g> തിരഞ്ഞെടുത്തു"</string>
+ <string name="menu_select_all" msgid="8323579667348729928">"എല്ലാം തിരഞ്ഞെടുക്കുക"</string>
+ <string name="menu_copy" msgid="3612326052677229148">"ഇതിൽ പകർത്തുക…"</string>
+ <string name="menu_advanced_show" product="nosdcard" msgid="4693652895715631401">"ആന്തരിക സംഭരണം കാണിക്കുക"</string>
+ <string name="menu_advanced_show" product="default" msgid="5792182900084144261">"SD കാർഡ് കാണിക്കുക"</string>
+ <string name="menu_advanced_hide" product="nosdcard" msgid="4218809952721972589">"ആന്തരിക സംഭരണം മറയ്ക്കുക"</string>
+ <string name="menu_advanced_hide" product="default" msgid="4845869969015718848">"SD കാർഡ് മറയ്ക്കുക"</string>
+ <string name="menu_file_size_show" msgid="3240323619260823076">"ഫയൽ വലുപ്പം കാണിക്കുക"</string>
+ <string name="menu_file_size_hide" msgid="8881975928502581042">"ഫയൽ വലുപ്പം മറയ്ക്കുക"</string>
+ <string name="button_select" msgid="527196987259139214">"തിരഞ്ഞെടുക്കുക"</string>
+ <string name="button_copy" msgid="8706475544635021302">"പകര്ത്തുക"</string>
<string name="sort_name" msgid="9183560467917256779">"പേര് പ്രകാരം"</string>
<string name="sort_date" msgid="586080032956151448">"പരിഷ്ക്കരിച്ച തീയതി പ്രകാരം"</string>
<string name="sort_size" msgid="3350681319735474741">"വലുപ്പം പ്രകാരം"</string>
@@ -45,11 +53,22 @@
<string name="root_type_shortcut" msgid="3318760609471618093">"കുറുക്കുവഴികൾ"</string>
<string name="root_type_device" msgid="7121342474653483538">"ഉപകരണങ്ങൾ"</string>
<string name="root_type_apps" msgid="8838065367985945189">"കൂടുതൽ അപ്ലിക്കേഷനുകൾ"</string>
- <string name="pref_advanced_devices" msgid="903257239609301276">"വിപുലമായ ഉപകരണങ്ങൾ ദൃശ്യമാക്കുക"</string>
- <string name="pref_file_size" msgid="2826879315743961459">"ഫയൽ വലുപ്പം ദൃശ്യമാക്കുക"</string>
- <string name="pref_device_size" msgid="3542106883278997222">"ഉപകരണ വലുപ്പം ദൃശ്യമാക്കുക"</string>
<string name="empty" msgid="7858882803708117596">"ഇനങ്ങളൊന്നുമില്ല"</string>
<string name="toast_no_application" msgid="1339885974067891667">"ഫയൽ തുറക്കാനായില്ല"</string>
<string name="toast_failed_delete" msgid="2180678019407244069">"ചില പ്രമാണങ്ങൾ ഇല്ലാതാക്കാനായില്ല"</string>
<string name="share_via" msgid="8966594246261344259">"ഇതുവഴി പങ്കിടുക"</string>
+ <string name="copy_notification_title" msgid="6374299806748219777">"ഫയലുകൾ പകർത്തുന്നു"</string>
+ <string name="copy_remaining" msgid="6283790937387975095">"<xliff:g id="DURATION">%s</xliff:g> ശേഷിക്കുന്നു"</string>
+ <plurals name="copy_begin" formatted="false" msgid="9071199452634086365">
+ <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> ഫയലുകൾ പകർത്തുന്നു.</item>
+ <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> ഫയൽ പകർത്തുന്നു.</item>
+ </plurals>
+ <string name="copy_preparing" msgid="3896202461003039386">"പകർപ്പിനായി തയ്യാറെടുക്കുന്നു…"</string>
+ <plurals name="copy_error_notification_title" formatted="false" msgid="5267616889076217261">
+ <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> ഫയലുകൾ പകർത്താനായില്ല</item>
+ <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> ഫയൽ പകർത്താനായില്ല</item>
+ </plurals>
+ <string name="notification_touch_for_details" msgid="4483108577842961665">"വിശദാംശങ്ങൾ കാണാൻ സ്പർശിക്കുക"</string>
+ <string name="retry" msgid="7564024179122207376">"വീണ്ടും ശ്രമിക്കുക"</string>
+ <string name="copy_failure_alert_content" msgid="3715575000297709082">"ഈ ഫയലുകൾ പകർത്താനായില്ല: <xliff:g id="LIST">%1$s</xliff:g>"</string>
</resources>
diff --git a/res/values-mn-rMN/strings.xml b/res/values-mn-rMN/strings.xml
index 3d90cc1..5ce4046 100644
--- a/res/values-mn-rMN/strings.xml
+++ b/res/values-mn-rMN/strings.xml
@@ -29,8 +29,16 @@
<string name="menu_save" msgid="2394743337684426338">"Хадгалах"</string>
<string name="menu_share" msgid="3075149983979628146">"Хуваалцах"</string>
<string name="menu_delete" msgid="8138799623850614177">"Устгах"</string>
- <string name="menu_select" msgid="8711270657353563424">"\"<xliff:g id="DIRECTORY">^1</xliff:g>\"-г сонгох"</string>
- <string name="mode_selected_count" msgid="459111894725594625">"<xliff:g id="COUNT">%1$d</xliff:g> сонгогдсон"</string>
+ <string name="menu_select_all" msgid="8323579667348729928">"Бүгдийг сонгох"</string>
+ <string name="menu_copy" msgid="3612326052677229148">"...руу хуулах"</string>
+ <string name="menu_advanced_show" product="nosdcard" msgid="4693652895715631401">"Дотоод санг харуулах"</string>
+ <string name="menu_advanced_show" product="default" msgid="5792182900084144261">"SD картыг харуулах"</string>
+ <string name="menu_advanced_hide" product="nosdcard" msgid="4218809952721972589">"Дотоод санг нуух"</string>
+ <string name="menu_advanced_hide" product="default" msgid="4845869969015718848">"SD картыг нуух"</string>
+ <string name="menu_file_size_show" msgid="3240323619260823076">"Файлын хэмжээг харуулах"</string>
+ <string name="menu_file_size_hide" msgid="8881975928502581042">"Файлын хэмжээг нуух"</string>
+ <string name="button_select" msgid="527196987259139214">"Сонгох"</string>
+ <string name="button_copy" msgid="8706475544635021302">"Хуулах"</string>
<string name="sort_name" msgid="9183560467917256779">"Нэрээр"</string>
<string name="sort_date" msgid="586080032956151448">"Өөрчлөгдсөн огноогоор"</string>
<string name="sort_size" msgid="3350681319735474741">"Хэмжээгээр"</string>
@@ -45,11 +53,22 @@
<string name="root_type_shortcut" msgid="3318760609471618093">"Товчлол"</string>
<string name="root_type_device" msgid="7121342474653483538">"Төхөөрөмжүүд"</string>
<string name="root_type_apps" msgid="8838065367985945189">"Өөр апп-ууд"</string>
- <string name="pref_advanced_devices" msgid="903257239609301276">"Дэвшилтэт төхөөрөмжүүдийг харуулах"</string>
- <string name="pref_file_size" msgid="2826879315743961459">"Файлын хэмжээг харуулах"</string>
- <string name="pref_device_size" msgid="3542106883278997222">"Төхөөрөмжийн хэмжээг харуулах"</string>
<string name="empty" msgid="7858882803708117596">"Хоосон"</string>
<string name="toast_no_application" msgid="1339885974067891667">"Файлыг нээх боломжгүй"</string>
<string name="toast_failed_delete" msgid="2180678019407244069">"Зарим документуудыг устгах боломжгүй"</string>
<string name="share_via" msgid="8966594246261344259">"Дараахаар дамжуулан хуваалцах"</string>
+ <string name="copy_notification_title" msgid="6374299806748219777">"Файлуудыг хуулж байна"</string>
+ <string name="copy_remaining" msgid="6283790937387975095">"<xliff:g id="DURATION">%s</xliff:g> үлдсэн"</string>
+ <plurals name="copy_begin" formatted="false" msgid="9071199452634086365">
+ <item quantity="other"> <xliff:g id="COUNT_1">%1$d</xliff:g> файлуудыг хуулж байна.</item>
+ <item quantity="one"> <xliff:g id="COUNT_0">%1$d</xliff:g> файл хуулж байна.</item>
+ </plurals>
+ <string name="copy_preparing" msgid="3896202461003039386">"Хуулбарлахад бэлтгэж байна..."</string>
+ <plurals name="copy_error_notification_title" formatted="false" msgid="5267616889076217261">
+ <item quantity="other"> <xliff:g id="COUNT_1">%1$d</xliff:g> файлыг хуулбарлаж чадсангүй</item>
+ <item quantity="one"> <xliff:g id="COUNT_0">%1$d</xliff:g> файлыг хуулбарлаж чадсангүй</item>
+ </plurals>
+ <string name="notification_touch_for_details" msgid="4483108577842961665">"Дэлгэрэнгүй мэдээллийг үзэхийн тулд хүрнэ үү."</string>
+ <string name="retry" msgid="7564024179122207376">"Дахин оролдох"</string>
+ <string name="copy_failure_alert_content" msgid="3715575000297709082">"Дараах файлуудыг хуулаагүй: <xliff:g id="LIST">%1$s</xliff:g>"</string>
</resources>
diff --git a/res/values-mr-rIN/strings.xml b/res/values-mr-rIN/strings.xml
index da7c863..ca414e8 100644
--- a/res/values-mr-rIN/strings.xml
+++ b/res/values-mr-rIN/strings.xml
@@ -29,8 +29,16 @@
<string name="menu_save" msgid="2394743337684426338">"जतन करा"</string>
<string name="menu_share" msgid="3075149983979628146">"सामायिक करा"</string>
<string name="menu_delete" msgid="8138799623850614177">"हटवा"</string>
- <string name="menu_select" msgid="8711270657353563424">"\"<xliff:g id="DIRECTORY">^1</xliff:g>\" निवडा"</string>
- <string name="mode_selected_count" msgid="459111894725594625">"<xliff:g id="COUNT">%1$d</xliff:g> निवडले"</string>
+ <string name="menu_select_all" msgid="8323579667348729928">"सर्व निवडा"</string>
+ <string name="menu_copy" msgid="3612326052677229148">"यावर कॉपी करा…"</string>
+ <string name="menu_advanced_show" product="nosdcard" msgid="4693652895715631401">"अंतर्गत संचयन दर्शवा"</string>
+ <string name="menu_advanced_show" product="default" msgid="5792182900084144261">"SD कार्ड दर्शवा"</string>
+ <string name="menu_advanced_hide" product="nosdcard" msgid="4218809952721972589">"अंतर्गत संचयन लपवा"</string>
+ <string name="menu_advanced_hide" product="default" msgid="4845869969015718848">"SD कार्ड लपवा"</string>
+ <string name="menu_file_size_show" msgid="3240323619260823076">"फाईल आकार दर्शवा"</string>
+ <string name="menu_file_size_hide" msgid="8881975928502581042">"फाईल आकार लपवा"</string>
+ <string name="button_select" msgid="527196987259139214">"निवडा"</string>
+ <string name="button_copy" msgid="8706475544635021302">"कॉपी करा"</string>
<string name="sort_name" msgid="9183560467917256779">"नावानुसार"</string>
<string name="sort_date" msgid="586080032956151448">"सुधारित केलेल्या तारखेनुसार"</string>
<string name="sort_size" msgid="3350681319735474741">"आकारानुसार"</string>
@@ -45,11 +53,22 @@
<string name="root_type_shortcut" msgid="3318760609471618093">"शॉर्टकट"</string>
<string name="root_type_device" msgid="7121342474653483538">"डिव्हाइसेस"</string>
<string name="root_type_apps" msgid="8838065367985945189">"अधिक अॅप्स"</string>
- <string name="pref_advanced_devices" msgid="903257239609301276">"प्रगत डिव्हाइसेस प्रदर्शित करा"</string>
- <string name="pref_file_size" msgid="2826879315743961459">"फाइल आकार प्रदर्शित करा"</string>
- <string name="pref_device_size" msgid="3542106883278997222">"डिव्हाइस आकार प्रदर्शित करा"</string>
<string name="empty" msgid="7858882803708117596">"कोणतेही आयटम नाहीत"</string>
<string name="toast_no_application" msgid="1339885974067891667">"फाईल उघडू शकत नाही"</string>
<string name="toast_failed_delete" msgid="2180678019407244069">"काही दस्तऐवज हटविण्यात अक्षम"</string>
<string name="share_via" msgid="8966594246261344259">"द्वारे सामायिक करा"</string>
+ <string name="copy_notification_title" msgid="6374299806748219777">"फायली कॉपी करीत आहे"</string>
+ <string name="copy_remaining" msgid="6283790937387975095">"<xliff:g id="DURATION">%s</xliff:g> शिल्लक"</string>
+ <plurals name="copy_begin" formatted="false" msgid="9071199452634086365">
+ <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> फाईल कॉपी करीत आहे.</item>
+ <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> फायली कॉपी करीत आहे.</item>
+ </plurals>
+ <string name="copy_preparing" msgid="3896202461003039386">"कॉपी करण्यासाठी तयार करीत आहे…"</string>
+ <plurals name="copy_error_notification_title" formatted="false" msgid="5267616889076217261">
+ <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> फाईल कॉपी करू शकलो नाही</item>
+ <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> फायली कॉपी करू शकलो नाही</item>
+ </plurals>
+ <string name="notification_touch_for_details" msgid="4483108577842961665">"तपशील पाहण्यासाठी स्पर्श करा"</string>
+ <string name="retry" msgid="7564024179122207376">"पुन्हा प्रयत्न करा"</string>
+ <string name="copy_failure_alert_content" msgid="3715575000297709082">"या फायली कॉपी झाल्या नाहीत: <xliff:g id="LIST">%1$s</xliff:g>"</string>
</resources>
diff --git a/res/values-ms-rMY/strings.xml b/res/values-ms-rMY/strings.xml
index 9ea7119..7b08e91 100644
--- a/res/values-ms-rMY/strings.xml
+++ b/res/values-ms-rMY/strings.xml
@@ -29,10 +29,18 @@
<string name="menu_save" msgid="2394743337684426338">"Simpan"</string>
<string name="menu_share" msgid="3075149983979628146">"Kongsi"</string>
<string name="menu_delete" msgid="8138799623850614177">"Padam"</string>
- <string name="menu_select" msgid="8711270657353563424">"Pilih \"<xliff:g id="DIRECTORY">^1</xliff:g>\""</string>
- <string name="mode_selected_count" msgid="459111894725594625">"<xliff:g id="COUNT">%1$d</xliff:g> dipilih"</string>
+ <string name="menu_select_all" msgid="8323579667348729928">"Pilih semua"</string>
+ <string name="menu_copy" msgid="3612326052677229148">"Salin ke..."</string>
+ <string name="menu_advanced_show" product="nosdcard" msgid="4693652895715631401">"Papar storan dalaman"</string>
+ <string name="menu_advanced_show" product="default" msgid="5792182900084144261">"Papar kad SD"</string>
+ <string name="menu_advanced_hide" product="nosdcard" msgid="4218809952721972589">"Sembunyikan storan dlmn"</string>
+ <string name="menu_advanced_hide" product="default" msgid="4845869969015718848">"Sembunyikan kad SD"</string>
+ <string name="menu_file_size_show" msgid="3240323619260823076">"Papar saiz fail"</string>
+ <string name="menu_file_size_hide" msgid="8881975928502581042">"Sembunyikan saiz fail"</string>
+ <string name="button_select" msgid="527196987259139214">"Pilih"</string>
+ <string name="button_copy" msgid="8706475544635021302">"Salin"</string>
<string name="sort_name" msgid="9183560467917256779">"Mengikut nama"</string>
- <string name="sort_date" msgid="586080032956151448">"Diubah suai mengikut tarikh"</string>
+ <string name="sort_date" msgid="586080032956151448">"Mengikut tarikh diubah"</string>
<string name="sort_size" msgid="3350681319735474741">"Mengikut saiz"</string>
<string name="drawer_open" msgid="4545466532430226949">"Tunjukkan akar"</string>
<string name="drawer_close" msgid="7602734368552123318">"Sembunyikan akar"</string>
@@ -45,11 +53,22 @@
<string name="root_type_shortcut" msgid="3318760609471618093">"Pintasan"</string>
<string name="root_type_device" msgid="7121342474653483538">"Peranti"</string>
<string name="root_type_apps" msgid="8838065367985945189">"Lebih banyak apl"</string>
- <string name="pref_advanced_devices" msgid="903257239609301276">"Paparkan peranti terperinci"</string>
- <string name="pref_file_size" msgid="2826879315743961459">"Paparkan saiz fail"</string>
- <string name="pref_device_size" msgid="3542106883278997222">"Paparkan saiz peranti"</string>
<string name="empty" msgid="7858882803708117596">"Tiada item"</string>
<string name="toast_no_application" msgid="1339885974067891667">"Tidak dapat membuka fail"</string>
<string name="toast_failed_delete" msgid="2180678019407244069">"Tidak dapat memadam beberapa dokumen"</string>
<string name="share_via" msgid="8966594246261344259">"Kongsi melalui"</string>
+ <string name="copy_notification_title" msgid="6374299806748219777">"Menyalin fail"</string>
+ <string name="copy_remaining" msgid="6283790937387975095">"<xliff:g id="DURATION">%s</xliff:g> lagi"</string>
+ <plurals name="copy_begin" formatted="false" msgid="9071199452634086365">
+ <item quantity="other">Menyalin <xliff:g id="COUNT_1">%1$d</xliff:g> fail.</item>
+ <item quantity="one">Menyalin <xliff:g id="COUNT_0">%1$d</xliff:g> fail.</item>
+ </plurals>
+ <string name="copy_preparing" msgid="3896202461003039386">"Bersedia untuk salin..."</string>
+ <plurals name="copy_error_notification_title" formatted="false" msgid="5267616889076217261">
+ <item quantity="other">Tidak dapat menyalin <xliff:g id="COUNT_1">%1$d</xliff:g> fail</item>
+ <item quantity="one">Tidak dapat menyalin <xliff:g id="COUNT_0">%1$d</xliff:g> fail</item>
+ </plurals>
+ <string name="notification_touch_for_details" msgid="4483108577842961665">"Sentuh untuk melihat butiran"</string>
+ <string name="retry" msgid="7564024179122207376">"Cuba semula"</string>
+ <string name="copy_failure_alert_content" msgid="3715575000297709082">"Fail ini tidak disalin: <xliff:g id="LIST">%1$s</xliff:g>"</string>
</resources>
diff --git a/res/values-my-rMM/strings.xml b/res/values-my-rMM/strings.xml
index c095273..f8d0fd4 100644
--- a/res/values-my-rMM/strings.xml
+++ b/res/values-my-rMM/strings.xml
@@ -26,11 +26,19 @@
<string name="menu_search" msgid="3816712084502856974">"ရှာဖွေရန်"</string>
<string name="menu_settings" msgid="6008033148948428823">"ဆက်တင်များ"</string>
<string name="menu_open" msgid="432922957274920903">"ဖွင့်ရန်"</string>
- <string name="menu_save" msgid="2394743337684426338">"သိမ်းဆည်းရန်"</string>
+ <string name="menu_save" msgid="2394743337684426338">"သိမ်းပါ"</string>
<string name="menu_share" msgid="3075149983979628146">"မျှဝေခြင်း"</string>
<string name="menu_delete" msgid="8138799623850614177">"ဖျက်ပစ်ရန်"</string>
- <string name="menu_select" msgid="8711270657353563424">"ရွေးရန်\"<xliff:g id="DIRECTORY">^1</xliff:g>\""</string>
- <string name="mode_selected_count" msgid="459111894725594625">"<xliff:g id="COUNT">%1$d</xliff:g> ခရွေးချယ်ပြီး"</string>
+ <string name="menu_select_all" msgid="8323579667348729928">"အားလုံးကို ရွေးရန်"</string>
+ <string name="menu_copy" msgid="3612326052677229148">"သို့ကူးယူရန်…"</string>
+ <string name="menu_advanced_show" product="nosdcard" msgid="4693652895715631401">"စက်ရှိစတိုရုံ ပြပါ"</string>
+ <string name="menu_advanced_show" product="default" msgid="5792182900084144261">"SD ကဒ် ပြပါ"</string>
+ <string name="menu_advanced_hide" product="nosdcard" msgid="4218809952721972589">"စက်ရှိစတိုရုံ ဖျောက်ထားပါ"</string>
+ <string name="menu_advanced_hide" product="default" msgid="4845869969015718848">"SD ကဒ် ဖျောက်ပါ"</string>
+ <string name="menu_file_size_show" msgid="3240323619260823076">"ဖိုင်အရွယ်အစား ပြပါ"</string>
+ <string name="menu_file_size_hide" msgid="8881975928502581042">"ဖိုင်အရွယ်အစား ဖျောက်ပါ"</string>
+ <string name="button_select" msgid="527196987259139214">"ရွေးရန်"</string>
+ <string name="button_copy" msgid="8706475544635021302">"ကူးယူရန်"</string>
<string name="sort_name" msgid="9183560467917256779">"အမည်ဖြင့်"</string>
<string name="sort_date" msgid="586080032956151448">"ပြင်ဆင်မှု ရက်စွဲဖြင့်"</string>
<string name="sort_size" msgid="3350681319735474741">"အရွယ်အစားဖြင့်"</string>
@@ -45,11 +53,22 @@
<string name="root_type_shortcut" msgid="3318760609471618093">"အတိုကောက်များ"</string>
<string name="root_type_device" msgid="7121342474653483538">"စက်ပစ္စည်းများ"</string>
<string name="root_type_apps" msgid="8838065367985945189">"နောက်ထပ်အပလီကေးရှင်းများ"</string>
- <string name="pref_advanced_devices" msgid="903257239609301276">"အဆင့်မြင့် စက်များ ပြသခြင်း"</string>
- <string name="pref_file_size" msgid="2826879315743961459">"ဖိုင် အရွယ်အစား ပြသခြင်း"</string>
- <string name="pref_device_size" msgid="3542106883278997222">"စက်ရဲ့ အရွယ်အစား ပြသခြင်း"</string>
<string name="empty" msgid="7858882803708117596">"ဘာမှ မရှိပါ"</string>
<string name="toast_no_application" msgid="1339885974067891667">"ဖိုင်အား ဖွင့်မရပါ"</string>
<string name="toast_failed_delete" msgid="2180678019407244069">"တချို့ စာရွက်စာတန်းများ မဖျက်စီးနိုင်ပါ"</string>
<string name="share_via" msgid="8966594246261344259">"မှ ဝေမျှပါ"</string>
+ <string name="copy_notification_title" msgid="6374299806748219777">"ဖိုင်များကူယူနေသည်"</string>
+ <string name="copy_remaining" msgid="6283790937387975095">"<xliff:g id="DURATION">%s</xliff:g> ကျန်ရှိသည်"</string>
+ <plurals name="copy_begin" formatted="false" msgid="9071199452634086365">
+ <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> ဖိုင်များကို ကူးယူနေသည်။</item>
+ <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> ဖိုင် ကူးယူနေသည်။</item>
+ </plurals>
+ <string name="copy_preparing" msgid="3896202461003039386">"မိတ္တူကူးရန်ပြင်ဆင်နေ..."</string>
+ <plurals name="copy_error_notification_title" formatted="false" msgid="5267616889076217261">
+ <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> ဖိုင် ကော်ပီ မကူးနိုင်ပါ</item>
+ <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> ဖိုင် ကော်ပီမကူးနိုင်ပါ</item>
+ </plurals>
+ <string name="notification_touch_for_details" msgid="4483108577842961665">"အသေးစိတ် ကြည့်ရန် ထိပါ။"</string>
+ <string name="retry" msgid="7564024179122207376">"ထပ်စမ်းရန်"</string>
+ <string name="copy_failure_alert_content" msgid="3715575000297709082">"ဤဖိုင်များ ကော်ပီကူးမထားပါ- <xliff:g id="LIST">%1$s</xliff:g>"</string>
</resources>
diff --git a/res/values-nb/strings.xml b/res/values-nb/strings.xml
index af7c282..e361b8a 100644
--- a/res/values-nb/strings.xml
+++ b/res/values-nb/strings.xml
@@ -29,10 +29,18 @@
<string name="menu_save" msgid="2394743337684426338">"Lagre"</string>
<string name="menu_share" msgid="3075149983979628146">"Del"</string>
<string name="menu_delete" msgid="8138799623850614177">"Slett"</string>
- <string name="menu_select" msgid="8711270657353563424">"Velg «<xliff:g id="DIRECTORY">^1</xliff:g>»"</string>
- <string name="mode_selected_count" msgid="459111894725594625">"<xliff:g id="COUNT">%1$d</xliff:g> valgt"</string>
+ <string name="menu_select_all" msgid="8323579667348729928">"Markér alt"</string>
+ <string name="menu_copy" msgid="3612326052677229148">"Kopiér til …"</string>
+ <string name="menu_advanced_show" product="nosdcard" msgid="4693652895715631401">"Vis den interne lagringen"</string>
+ <string name="menu_advanced_show" product="default" msgid="5792182900084144261">"Vis SD-kortet"</string>
+ <string name="menu_advanced_hide" product="nosdcard" msgid="4218809952721972589">"Skjul den interne lagringen"</string>
+ <string name="menu_advanced_hide" product="default" msgid="4845869969015718848">"Skjul SD-kortet"</string>
+ <string name="menu_file_size_show" msgid="3240323619260823076">"Vis filstørrelsen"</string>
+ <string name="menu_file_size_hide" msgid="8881975928502581042">"Skjul filstørrelsen"</string>
+ <string name="button_select" msgid="527196987259139214">"Velg"</string>
+ <string name="button_copy" msgid="8706475544635021302">"Kopiér"</string>
<string name="sort_name" msgid="9183560467917256779">"Etter navn"</string>
- <string name="sort_date" msgid="586080032956151448">"«Etter dato» endret"</string>
+ <string name="sort_date" msgid="586080032956151448">"Etter endringsdato"</string>
<string name="sort_size" msgid="3350681319735474741">"Etter størrelse"</string>
<string name="drawer_open" msgid="4545466532430226949">"Vis røtter"</string>
<string name="drawer_close" msgid="7602734368552123318">"Skjul røtter"</string>
@@ -40,16 +48,27 @@
<string name="create_error" msgid="3735649141335444215">"Kunne ikke opprette mappen"</string>
<string name="query_error" msgid="1222448261663503501">"Kunne ikke undersøke dokumenter"</string>
<string name="root_recent" msgid="4470053704320518133">"Siste"</string>
- <string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> gratis"</string>
+ <string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> ledig"</string>
<string name="root_type_service" msgid="2178854894416775409">"Lagringstjenester"</string>
<string name="root_type_shortcut" msgid="3318760609471618093">"Snarveier"</string>
<string name="root_type_device" msgid="7121342474653483538">"Enheter"</string>
<string name="root_type_apps" msgid="8838065367985945189">"Flere apper"</string>
- <string name="pref_advanced_devices" msgid="903257239609301276">"Vis avanserte enheter"</string>
- <string name="pref_file_size" msgid="2826879315743961459">"Vis filstørrelse"</string>
- <string name="pref_device_size" msgid="3542106883278997222">"Vis enhetsstørrelse"</string>
<string name="empty" msgid="7858882803708117596">"Ingen elementer"</string>
<string name="toast_no_application" msgid="1339885974067891667">"Kan ikke åpne filen"</string>
<string name="toast_failed_delete" msgid="2180678019407244069">"Enkelte dokumenter kunne ikke slettes"</string>
<string name="share_via" msgid="8966594246261344259">"Del via"</string>
+ <string name="copy_notification_title" msgid="6374299806748219777">"Kopierer filer"</string>
+ <string name="copy_remaining" msgid="6283790937387975095">"<xliff:g id="DURATION">%s</xliff:g> gjenstår"</string>
+ <plurals name="copy_begin" formatted="false" msgid="9071199452634086365">
+ <item quantity="other">Kopierer <xliff:g id="COUNT_1">%1$d</xliff:g> filer.</item>
+ <item quantity="one">Kopierer <xliff:g id="COUNT_0">%1$d</xliff:g> fil.</item>
+ </plurals>
+ <string name="copy_preparing" msgid="3896202461003039386">"Forbereder kopiering …"</string>
+ <plurals name="copy_error_notification_title" formatted="false" msgid="5267616889076217261">
+ <item quantity="other">Kunne ikke kopiere <xliff:g id="COUNT_1">%1$d</xliff:g> filer</item>
+ <item quantity="one">Kunne ikke kopiere <xliff:g id="COUNT_0">%1$d</xliff:g> fil</item>
+ </plurals>
+ <string name="notification_touch_for_details" msgid="4483108577842961665">"Trykk for å se detaljer"</string>
+ <string name="retry" msgid="7564024179122207376">"Prøv på nytt"</string>
+ <string name="copy_failure_alert_content" msgid="3715575000297709082">"Disse filene ble ikke kopiert: <xliff:g id="LIST">%1$s</xliff:g>"</string>
</resources>
diff --git a/res/values-ne-rNP/strings.xml b/res/values-ne-rNP/strings.xml
index d8a873e..fa8c287 100644
--- a/res/values-ne-rNP/strings.xml
+++ b/res/values-ne-rNP/strings.xml
@@ -29,8 +29,16 @@
<string name="menu_save" msgid="2394743337684426338">"सुरक्षित गर्नुहोस्"</string>
<string name="menu_share" msgid="3075149983979628146">"साझेदारी गर्नुहोस्"</string>
<string name="menu_delete" msgid="8138799623850614177">"मेटाउनुहोस्"</string>
- <string name="menu_select" msgid="8711270657353563424">"चयनगर्नुहोस् \"<xliff:g id="DIRECTORY">^1</xliff:g>\""</string>
- <string name="mode_selected_count" msgid="459111894725594625">"<xliff:g id="COUNT">%1$d</xliff:g> चयन गरियो"</string>
+ <string name="menu_select_all" msgid="8323579667348729928">"सबै चयन गर्नुहोस्"</string>
+ <string name="menu_copy" msgid="3612326052677229148">"यसमा प्रतिलिपि गर्नुहोस् ..."</string>
+ <string name="menu_advanced_show" product="nosdcard" msgid="4693652895715631401">"आन्तरिक भण्डारण देखाउनुहोस्"</string>
+ <string name="menu_advanced_show" product="default" msgid="5792182900084144261">"SD कार्ड देखाउनुहोस्"</string>
+ <string name="menu_advanced_hide" product="nosdcard" msgid="4218809952721972589">"आन्तरिक भण्डारण लुकाउनुहोस्"</string>
+ <string name="menu_advanced_hide" product="default" msgid="4845869969015718848">"SD कार्ड लुकाउनुहोस्"</string>
+ <string name="menu_file_size_show" msgid="3240323619260823076">"फाइल आकार देखाउनुहोस्"</string>
+ <string name="menu_file_size_hide" msgid="8881975928502581042">"फाइल आकार लुकाउनुहोस्"</string>
+ <string name="button_select" msgid="527196987259139214">"चयन गर्नुहोस्"</string>
+ <string name="button_copy" msgid="8706475544635021302">"प्रतिलिपि बनाउनुहोस्"</string>
<string name="sort_name" msgid="9183560467917256779">"नाम अनुसार"</string>
<string name="sort_date" msgid="586080032956151448">"परिमार्जित मिति अनुसार"</string>
<string name="sort_size" msgid="3350681319735474741">"आकार अनुसार"</string>
@@ -45,11 +53,22 @@
<string name="root_type_shortcut" msgid="3318760609471618093">"सर्टकटहरू"</string>
<string name="root_type_device" msgid="7121342474653483538">"उपकरणहरू"</string>
<string name="root_type_apps" msgid="8838065367985945189">"थप अनुप्रयोगहरू"</string>
- <string name="pref_advanced_devices" msgid="903257239609301276">"उन्नत उपकरणहरू प्रदर्शन गर्नुहोस्"</string>
- <string name="pref_file_size" msgid="2826879315743961459">"फाइल आकार प्रदर्शन गर्नुहोस्"</string>
- <string name="pref_device_size" msgid="3542106883278997222">"उपकरण आकार प्रदर्शन गर्नुहोस्"</string>
<string name="empty" msgid="7858882803708117596">"कुनै वस्तु छैन।"</string>
<string name="toast_no_application" msgid="1339885974067891667">"फाइल खोल्न सक्दैन"</string>
<string name="toast_failed_delete" msgid="2180678019407244069">"केही कागजातहरू मेट्न असमर्थ छ"</string>
<string name="share_via" msgid="8966594246261344259">"माध्यमबाट साझेदारी गर्नुहोस्"</string>
+ <string name="copy_notification_title" msgid="6374299806748219777">"फाइलहरू प्रतिलिपि गर्दै:"</string>
+ <string name="copy_remaining" msgid="6283790937387975095">"<xliff:g id="DURATION">%s</xliff:g>बाँकी"</string>
+ <plurals name="copy_begin" formatted="false" msgid="9071199452634086365">
+ <item quantity="other"> <xliff:g id="COUNT_1">%1$d</xliff:g>फाइलहरू प्रतिलिप गर्दै।</item>
+ <item quantity="one"> <xliff:g id="COUNT_0">%1$d</xliff:g> फाइल प्रतिलिपि गर्दै।</item>
+ </plurals>
+ <string name="copy_preparing" msgid="3896202461003039386">"प्रतिलिपिको लागि तयारी गर्दै ..."</string>
+ <plurals name="copy_error_notification_title" formatted="false" msgid="5267616889076217261">
+ <item quantity="other"> <xliff:g id="COUNT_1">%1$d</xliff:g> फाइलहरू प्रतिलिपि गर्न सकेन</item>
+ <item quantity="one"> <xliff:g id="COUNT_0">%1$d</xliff:g> फाइल प्रतिलिपि गर्न सकेन</item>
+ </plurals>
+ <string name="notification_touch_for_details" msgid="4483108577842961665">"विवरणहरू हेर्न छुनुहोस्"</string>
+ <string name="retry" msgid="7564024179122207376">"पुनःप्रयास गर्नुहोस्"</string>
+ <string name="copy_failure_alert_content" msgid="3715575000297709082">"यी फाइलहरू प्रतिलिपि गरिएको थिएनः <xliff:g id="LIST">%1$s</xliff:g>"</string>
</resources>
diff --git a/res/values-night/colors.xml b/res/values-night/colors.xml
new file mode 100644
index 0000000..87cac78
--- /dev/null
+++ b/res/values-night/colors.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2015 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<resources>
+ <color name="item_doc_grid_background">#ff111111</color>
+ <color name="item_doc_grid_protect_background">#88ffffff</color>
+</resources>
diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml
index a8cf114..1d6b6a8 100644
--- a/res/values-nl/strings.xml
+++ b/res/values-nl/strings.xml
@@ -29,8 +29,16 @@
<string name="menu_save" msgid="2394743337684426338">"Opslaan"</string>
<string name="menu_share" msgid="3075149983979628146">"Delen"</string>
<string name="menu_delete" msgid="8138799623850614177">"Verwijderen"</string>
- <string name="menu_select" msgid="8711270657353563424">"<xliff:g id="DIRECTORY">^1</xliff:g> selecteren"</string>
- <string name="mode_selected_count" msgid="459111894725594625">"<xliff:g id="COUNT">%1$d</xliff:g> geselecteerd"</string>
+ <string name="menu_select_all" msgid="8323579667348729928">"Alles selecteren"</string>
+ <string name="menu_copy" msgid="3612326052677229148">"Kopiëren naar…"</string>
+ <string name="menu_advanced_show" product="nosdcard" msgid="4693652895715631401">"Interne opslag weergeven"</string>
+ <string name="menu_advanced_show" product="default" msgid="5792182900084144261">"SD-kaart weergeven"</string>
+ <string name="menu_advanced_hide" product="nosdcard" msgid="4218809952721972589">"Interne opslag verbergen"</string>
+ <string name="menu_advanced_hide" product="default" msgid="4845869969015718848">"SD-kaart verbergen"</string>
+ <string name="menu_file_size_show" msgid="3240323619260823076">"Bestandsgrootte weergeven"</string>
+ <string name="menu_file_size_hide" msgid="8881975928502581042">"Bestandsgrootte verbergen"</string>
+ <string name="button_select" msgid="527196987259139214">"Selecteren"</string>
+ <string name="button_copy" msgid="8706475544635021302">"Kopiëren"</string>
<string name="sort_name" msgid="9183560467917256779">"Op naam"</string>
<string name="sort_date" msgid="586080032956151448">"Op aanpassingsdatum"</string>
<string name="sort_size" msgid="3350681319735474741">"Op grootte"</string>
@@ -45,11 +53,22 @@
<string name="root_type_shortcut" msgid="3318760609471618093">"Sneltoetsen"</string>
<string name="root_type_device" msgid="7121342474653483538">"Apparaten"</string>
<string name="root_type_apps" msgid="8838065367985945189">"Meer apps"</string>
- <string name="pref_advanced_devices" msgid="903257239609301276">"Geavanceerde apparaten weergeven"</string>
- <string name="pref_file_size" msgid="2826879315743961459">"Bestandsgrootte weergeven"</string>
- <string name="pref_device_size" msgid="3542106883278997222">"Apparaatgrootte weergeven"</string>
<string name="empty" msgid="7858882803708117596">"Geen items"</string>
<string name="toast_no_application" msgid="1339885974067891667">"Kan bestand niet openen"</string>
<string name="toast_failed_delete" msgid="2180678019407244069">"Kan bepaalde documenten niet verwijderen"</string>
<string name="share_via" msgid="8966594246261344259">"Delen via"</string>
+ <string name="copy_notification_title" msgid="6374299806748219777">"Bestanden kopiëren"</string>
+ <string name="copy_remaining" msgid="6283790937387975095">"<xliff:g id="DURATION">%s</xliff:g> resterend"</string>
+ <plurals name="copy_begin" formatted="false" msgid="9071199452634086365">
+ <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> bestanden kopiëren.</item>
+ <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> bestand kopiëren.</item>
+ </plurals>
+ <string name="copy_preparing" msgid="3896202461003039386">"Kopiëren voorbereiden…"</string>
+ <plurals name="copy_error_notification_title" formatted="false" msgid="5267616889076217261">
+ <item quantity="other">Kan <xliff:g id="COUNT_1">%1$d</xliff:g> bestanden niet kopiëren</item>
+ <item quantity="one">Kan <xliff:g id="COUNT_0">%1$d</xliff:g> bestand niet kopiëren</item>
+ </plurals>
+ <string name="notification_touch_for_details" msgid="4483108577842961665">"Tik om details weer te geven"</string>
+ <string name="retry" msgid="7564024179122207376">"Opnieuw proberen"</string>
+ <string name="copy_failure_alert_content" msgid="3715575000297709082">"Deze bestanden zijn niet gekopieerd: <xliff:g id="LIST">%1$s</xliff:g>"</string>
</resources>
diff --git a/res/values-pa-rIN/strings.xml b/res/values-pa-rIN/strings.xml
new file mode 100644
index 0000000..a8b3866
--- /dev/null
+++ b/res/values-pa-rIN/strings.xml
@@ -0,0 +1,74 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2013 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="app_label" msgid="2783841764617238354">"ਦਸਤਾਵੇਜ਼"</string>
+ <string name="title_open" msgid="4353228937663917801">"ਤੋਂ ਖੋਲ੍ਹੋ"</string>
+ <string name="title_save" msgid="2433679664882857999">"ਇਸ ਵਿੱਚ ਸੁਰੱਖਿਅਤ ਕਰੋ"</string>
+ <string name="menu_create_dir" msgid="5947289605844398389">"ਫੋਲਡਰ ਬਣਾਓ"</string>
+ <string name="menu_grid" msgid="6878021334497835259">"ਗ੍ਰਿਡ ਵਿਊ"</string>
+ <string name="menu_list" msgid="7279285939892417279">"ਸੂਚੀ ਦ੍ਰਿਸ਼"</string>
+ <string name="menu_sort" msgid="7677740407158414452">"ਇਸ ਅਨੁਸਾਰ ਛਾਂਟੋ"</string>
+ <string name="menu_search" msgid="3816712084502856974">"ਖੋਜੋ"</string>
+ <string name="menu_settings" msgid="6008033148948428823">"ਸੈਟਿੰਗਾਂ"</string>
+ <string name="menu_open" msgid="432922957274920903">"ਖੋਲ੍ਹੋ"</string>
+ <string name="menu_save" msgid="2394743337684426338">"ਸੁਰੱਖਿਅਤ ਕਰੋ"</string>
+ <string name="menu_share" msgid="3075149983979628146">"ਸ਼ੇਅਰ ਕਰੋ"</string>
+ <string name="menu_delete" msgid="8138799623850614177">"ਮਿਟਾਓ"</string>
+ <string name="menu_select_all" msgid="8323579667348729928">"ਸਾਰੇ ਚੁਣੋ"</string>
+ <string name="menu_copy" msgid="3612326052677229148">"ਇਸ ਵਿੱਚ ਕਾਪੀ ਕਰੋ…"</string>
+ <string name="menu_advanced_show" product="nosdcard" msgid="4693652895715631401">"ਅੰਦਰੂਨੀ ਸਟੋਰੇਜ ਦਿਖਾਓ"</string>
+ <string name="menu_advanced_show" product="default" msgid="5792182900084144261">"SD ਕਾਰਡ ਦਿਖਾਓ"</string>
+ <string name="menu_advanced_hide" product="nosdcard" msgid="4218809952721972589">"ਅੰਦਰੂਨੀ ਸਟੋਰੇਜ ਲੁਕਾਓ"</string>
+ <string name="menu_advanced_hide" product="default" msgid="4845869969015718848">"SD ਕਾਰਡ ਲੁਕਾਓ"</string>
+ <string name="menu_file_size_show" msgid="3240323619260823076">"ਫਾਈਲ ਆਕਾਰ ਦਿਖਾਓ"</string>
+ <string name="menu_file_size_hide" msgid="8881975928502581042">"ਫਾਈਲ ਆਕਾਰ ਲੁਕਾਓ"</string>
+ <string name="button_select" msgid="527196987259139214">"ਚੁਣੋ"</string>
+ <string name="button_copy" msgid="8706475544635021302">"ਕਾਪੀ ਕਰੋ"</string>
+ <string name="sort_name" msgid="9183560467917256779">"ਨਾਮ ਮੁਤਾਬਕ"</string>
+ <string name="sort_date" msgid="586080032956151448">"ਤਾਰੀਖ ਮੁਤਾਬਕ ਸੰਸ਼ੋਧਿਤ"</string>
+ <string name="sort_size" msgid="3350681319735474741">"ਆਕਾਰ ਮੁਤਾਬਕ"</string>
+ <string name="drawer_open" msgid="4545466532430226949">"ਰੂਟਸ ਦਿਖਾਓ"</string>
+ <string name="drawer_close" msgid="7602734368552123318">"ਰੂਟਸ ਲੁਕਾਓ"</string>
+ <string name="save_error" msgid="6167009778003223664">"ਦਸਾਤਵੇਜ਼ ਸੁਰੱਖਿਅਤ ਕਰਨ ਵਿੱਚ ਅਸਫਲ"</string>
+ <string name="create_error" msgid="3735649141335444215">"ਫੋਲਡਰ ਬਣਾਉਣ ਲਈ ਅਸਫਲ"</string>
+ <string name="query_error" msgid="1222448261663503501">"ਦਸਤਾਵੇਜ਼ਾਂ ਦੀ ਪੁੱਛਗਿੱਛ ਕਰਨ ਵਿੱਚ ਅਸਫਲ"</string>
+ <string name="root_recent" msgid="4470053704320518133">"ਹਾਲੀਆ"</string>
+ <string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> ਖਾਲੀ"</string>
+ <string name="root_type_service" msgid="2178854894416775409">"ਸਟੋਰੇਜ ਸੇਵਾਵਾਂ"</string>
+ <string name="root_type_shortcut" msgid="3318760609471618093">"ਸ਼ੌਰਟਕਟਸ"</string>
+ <string name="root_type_device" msgid="7121342474653483538">"ਡਿਵਾਈਸਾਂ"</string>
+ <string name="root_type_apps" msgid="8838065367985945189">"ਹੋਰ ਐਪਸ"</string>
+ <string name="empty" msgid="7858882803708117596">"ਕੋਈ ਆਈਟਮਾਂ ਨਹੀਂ"</string>
+ <string name="toast_no_application" msgid="1339885974067891667">"ਫਾਈਲ ਨਹੀਂ ਖੋਲ੍ਹ ਸਕਦਾ"</string>
+ <string name="toast_failed_delete" msgid="2180678019407244069">"ਕੁਝ ਦਸਤਾਵੇਜ਼ ਮਿਟਾਉਣ ਵਿੱਚ ਅਸਮਰੱਥ"</string>
+ <string name="share_via" msgid="8966594246261344259">"ਇਸ ਰਾਹੀਂ ਸ਼ੇਅਰ ਕਰੋ"</string>
+ <string name="copy_notification_title" msgid="6374299806748219777">"ਫਾਈਲਾਂ ਕਾਪੀ ਕਰ ਰਿਹਾ ਹੈ"</string>
+ <string name="copy_remaining" msgid="6283790937387975095">"<xliff:g id="DURATION">%s</xliff:g> ਬਾਕੀ"</string>
+ <plurals name="copy_begin" formatted="false" msgid="9071199452634086365">
+ <item quantity="one"> <xliff:g id="COUNT_1">%1$d</xliff:g> ਫਾਈਲਾਂ ਕਾਪੀ ਕਰ ਰਿਹਾ ਹੈ।</item>
+ <item quantity="other"> <xliff:g id="COUNT_1">%1$d</xliff:g> ਫਾਈਲਾਂ ਕਾਪੀ ਕਰ ਰਿਹਾ ਹੈ।</item>
+ </plurals>
+ <string name="copy_preparing" msgid="3896202461003039386">"ਕਾਪੀ ਲਈ ਤਿਆਰ ਕਰ ਰਿਹਾ ਹੈ…"</string>
+ <plurals name="copy_error_notification_title" formatted="false" msgid="5267616889076217261">
+ <item quantity="one"> <xliff:g id="COUNT_1">%1$d</xliff:g> ਫ਼ਾਈਲਾਂ ਦੀ ਪ੍ਰਤੀਲਿਪੀ ਨਹੀਂ ਬਣਾ ਸਕਿਆ</item>
+ <item quantity="other"> <xliff:g id="COUNT_1">%1$d</xliff:g> ਫ਼ਾਈਲਾਂ ਦੀ ਪ੍ਰਤੀਲਿਪੀ ਨਹੀਂ ਬਣਾ ਸਕਿਆ</item>
+ </plurals>
+ <string name="notification_touch_for_details" msgid="4483108577842961665">"ਵੇਰਵੇ ਵੇਖਣ ਲਈ ਸਪਰਸ਼ ਕਰੋ"</string>
+ <string name="retry" msgid="7564024179122207376">"ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ"</string>
+ <string name="copy_failure_alert_content" msgid="3715575000297709082">"ਇਹਨਾਂ ਫ਼ਾਈਲਾਂ ਦੀ ਪ੍ਰਤੀਲਿਪੀ ਨਹੀਂ ਬਣਾਈ ਗਈ: <xliff:g id="LIST">%1$s</xliff:g>"</string>
+</resources>
diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml
index ead40e9..84e5495 100644
--- a/res/values-pl/strings.xml
+++ b/res/values-pl/strings.xml
@@ -29,8 +29,16 @@
<string name="menu_save" msgid="2394743337684426338">"Zapisz"</string>
<string name="menu_share" msgid="3075149983979628146">"Udostępnij"</string>
<string name="menu_delete" msgid="8138799623850614177">"Usuń"</string>
- <string name="menu_select" msgid="8711270657353563424">"Zaznacz „<xliff:g id="DIRECTORY">^1</xliff:g>”"</string>
- <string name="mode_selected_count" msgid="459111894725594625">"Wybrano: <xliff:g id="COUNT">%1$d</xliff:g>"</string>
+ <string name="menu_select_all" msgid="8323579667348729928">"Zaznacz wszystko"</string>
+ <string name="menu_copy" msgid="3612326052677229148">"Kopiuj do…"</string>
+ <string name="menu_advanced_show" product="nosdcard" msgid="4693652895715631401">"Pokaż pamięć wewnętrzną"</string>
+ <string name="menu_advanced_show" product="default" msgid="5792182900084144261">"Pokaż kartę SD"</string>
+ <string name="menu_advanced_hide" product="nosdcard" msgid="4218809952721972589">"Ukryj pamięć wewnętrzną"</string>
+ <string name="menu_advanced_hide" product="default" msgid="4845869969015718848">"Ukryj kartę SD"</string>
+ <string name="menu_file_size_show" msgid="3240323619260823076">"Pokaż rozmiar pliku"</string>
+ <string name="menu_file_size_hide" msgid="8881975928502581042">"Ukryj rozmiar pliku"</string>
+ <string name="button_select" msgid="527196987259139214">"Wybierz"</string>
+ <string name="button_copy" msgid="8706475544635021302">"Kopiuj"</string>
<string name="sort_name" msgid="9183560467917256779">"Według nazwy"</string>
<string name="sort_date" msgid="586080032956151448">"Według daty edycji"</string>
<string name="sort_size" msgid="3350681319735474741">"Według rozmiaru"</string>
@@ -45,11 +53,26 @@
<string name="root_type_shortcut" msgid="3318760609471618093">"Skróty"</string>
<string name="root_type_device" msgid="7121342474653483538">"Urządzenia"</string>
<string name="root_type_apps" msgid="8838065367985945189">"Więcej aplikacji"</string>
- <string name="pref_advanced_devices" msgid="903257239609301276">"Pokaż urządzenia zaawansowane"</string>
- <string name="pref_file_size" msgid="2826879315743961459">"Pokaż rozmiar pliku"</string>
- <string name="pref_device_size" msgid="3542106883278997222">"Wyświetl rozmiar urządzenia"</string>
<string name="empty" msgid="7858882803708117596">"Brak elementów"</string>
<string name="toast_no_application" msgid="1339885974067891667">"Nie można otworzyć pliku"</string>
<string name="toast_failed_delete" msgid="2180678019407244069">"Nie można usunąć niektórych dokumentów"</string>
- <string name="share_via" msgid="8966594246261344259">"Udostępnij przez"</string>
+ <string name="share_via" msgid="8966594246261344259">"Udostępnij przez:"</string>
+ <string name="copy_notification_title" msgid="6374299806748219777">"Kopiowanie plików"</string>
+ <string name="copy_remaining" msgid="6283790937387975095">"Pozostało: <xliff:g id="DURATION">%s</xliff:g>"</string>
+ <plurals name="copy_begin" formatted="false" msgid="9071199452634086365">
+ <item quantity="few">Kopiowanie <xliff:g id="COUNT_1">%1$d</xliff:g> plików.</item>
+ <item quantity="many">Kopiowanie <xliff:g id="COUNT_1">%1$d</xliff:g> plików.</item>
+ <item quantity="other">Kopiowanie <xliff:g id="COUNT_1">%1$d</xliff:g> pliku.</item>
+ <item quantity="one">Kopiowanie <xliff:g id="COUNT_0">%1$d</xliff:g> pliku.</item>
+ </plurals>
+ <string name="copy_preparing" msgid="3896202461003039386">"Przygotowuję do kopiowania…"</string>
+ <plurals name="copy_error_notification_title" formatted="false" msgid="5267616889076217261">
+ <item quantity="few">Nie można skopiować <xliff:g id="COUNT_1">%1$d</xliff:g> plików</item>
+ <item quantity="many">Nie można skopiować <xliff:g id="COUNT_1">%1$d</xliff:g> plików</item>
+ <item quantity="other">Nie można skopiować <xliff:g id="COUNT_1">%1$d</xliff:g> pliku</item>
+ <item quantity="one">Nie można skopiować <xliff:g id="COUNT_0">%1$d</xliff:g> pliku</item>
+ </plurals>
+ <string name="notification_touch_for_details" msgid="4483108577842961665">"Kliknij, by zobaczyć szczegóły"</string>
+ <string name="retry" msgid="7564024179122207376">"Ponów"</string>
+ <string name="copy_failure_alert_content" msgid="3715575000297709082">"Te pliki nie zostały skopiowane: <xliff:g id="LIST">%1$s</xliff:g>"</string>
</resources>
diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml
index 0003c05..ac0367d 100644
--- a/res/values-pt-rPT/strings.xml
+++ b/res/values-pt-rPT/strings.xml
@@ -29,8 +29,16 @@
<string name="menu_save" msgid="2394743337684426338">"Guardar"</string>
<string name="menu_share" msgid="3075149983979628146">"Partilhar"</string>
<string name="menu_delete" msgid="8138799623850614177">"Eliminar"</string>
- <string name="menu_select" msgid="8711270657353563424">"Selecionar \"<xliff:g id="DIRECTORY">^1</xliff:g>\""</string>
- <string name="mode_selected_count" msgid="459111894725594625">"<xliff:g id="COUNT">%1$d</xliff:g> selecionado(s)"</string>
+ <string name="menu_select_all" msgid="8323579667348729928">"Selecionar tudo"</string>
+ <string name="menu_copy" msgid="3612326052677229148">"Copiar para…"</string>
+ <string name="menu_advanced_show" product="nosdcard" msgid="4693652895715631401">"Mostrar mem. armaz. int."</string>
+ <string name="menu_advanced_show" product="default" msgid="5792182900084144261">"Mostrar cartão SD"</string>
+ <string name="menu_advanced_hide" product="nosdcard" msgid="4218809952721972589">"Ocultar mem. armaz. int."</string>
+ <string name="menu_advanced_hide" product="default" msgid="4845869969015718848">"Ocultar cartão SD"</string>
+ <string name="menu_file_size_show" msgid="3240323619260823076">"Mostrar tam. de fich."</string>
+ <string name="menu_file_size_hide" msgid="8881975928502581042">"Ocultar tam. de fich."</string>
+ <string name="button_select" msgid="527196987259139214">"Selecionar"</string>
+ <string name="button_copy" msgid="8706475544635021302">"Copiar"</string>
<string name="sort_name" msgid="9183560467917256779">"Por nome"</string>
<string name="sort_date" msgid="586080032956151448">"Por data de modificação"</string>
<string name="sort_size" msgid="3350681319735474741">"Por tamanho"</string>
@@ -45,11 +53,22 @@
<string name="root_type_shortcut" msgid="3318760609471618093">"Atalhos"</string>
<string name="root_type_device" msgid="7121342474653483538">"Dispositivos"</string>
<string name="root_type_apps" msgid="8838065367985945189">"Mais aplicações"</string>
- <string name="pref_advanced_devices" msgid="903257239609301276">"Ver dispositivos avançados"</string>
- <string name="pref_file_size" msgid="2826879315743961459">"Apresentar tamanho do ficheiro"</string>
- <string name="pref_device_size" msgid="3542106883278997222">"Apresentar tamanho do dispositivo"</string>
<string name="empty" msgid="7858882803708117596">"Sem itens"</string>
<string name="toast_no_application" msgid="1339885974067891667">"Não é possível abrir o ficheiro"</string>
<string name="toast_failed_delete" msgid="2180678019407244069">"Não é possível eliminar alguns documentos"</string>
<string name="share_via" msgid="8966594246261344259">"Partilhar através de"</string>
+ <string name="copy_notification_title" msgid="6374299806748219777">"A copiar ficheiros"</string>
+ <string name="copy_remaining" msgid="6283790937387975095">"Faltam <xliff:g id="DURATION">%s</xliff:g>"</string>
+ <plurals name="copy_begin" formatted="false" msgid="9071199452634086365">
+ <item quantity="other">A copiar <xliff:g id="COUNT_1">%1$d</xliff:g> ficheiros.</item>
+ <item quantity="one">A copiar <xliff:g id="COUNT_0">%1$d</xliff:g> ficheiro.</item>
+ </plurals>
+ <string name="copy_preparing" msgid="3896202461003039386">"A preparar para copiar…"</string>
+ <plurals name="copy_error_notification_title" formatted="false" msgid="5267616889076217261">
+ <item quantity="other">Não foi possível copiar <xliff:g id="COUNT_1">%1$d</xliff:g> ficheiros</item>
+ <item quantity="one">Não foi possível copiar <xliff:g id="COUNT_0">%1$d</xliff:g> ficheiro</item>
+ </plurals>
+ <string name="notification_touch_for_details" msgid="4483108577842961665">"Toque para ver detalhes"</string>
+ <string name="retry" msgid="7564024179122207376">"Tentar novamente"</string>
+ <string name="copy_failure_alert_content" msgid="3715575000297709082">"Os seguintes ficheiros não foram copiados: <xliff:g id="LIST">%1$s</xliff:g>"</string>
</resources>
diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml
index 4a5c72a..5e96100 100644
--- a/res/values-pt/strings.xml
+++ b/res/values-pt/strings.xml
@@ -29,8 +29,16 @@
<string name="menu_save" msgid="2394743337684426338">"Salvar"</string>
<string name="menu_share" msgid="3075149983979628146">"Compartilhar"</string>
<string name="menu_delete" msgid="8138799623850614177">"Excluir"</string>
- <string name="menu_select" msgid="8711270657353563424">"Selecionar \"<xliff:g id="DIRECTORY">^1</xliff:g>\""</string>
- <string name="mode_selected_count" msgid="459111894725594625">"<xliff:g id="COUNT">%1$d</xliff:g> selecionados"</string>
+ <string name="menu_select_all" msgid="8323579667348729928">"Selecionar tudo"</string>
+ <string name="menu_copy" msgid="3612326052677229148">"Copiar para..."</string>
+ <string name="menu_advanced_show" product="nosdcard" msgid="4693652895715631401">"Mostrar armaz. interno"</string>
+ <string name="menu_advanced_show" product="default" msgid="5792182900084144261">"Mostrar cartão SD"</string>
+ <string name="menu_advanced_hide" product="nosdcard" msgid="4218809952721972589">"Ocultar armaz. interno"</string>
+ <string name="menu_advanced_hide" product="default" msgid="4845869969015718848">"Ocultar cartão SD"</string>
+ <string name="menu_file_size_show" msgid="3240323619260823076">"Mostrar tam. do arquivo"</string>
+ <string name="menu_file_size_hide" msgid="8881975928502581042">"Ocultar tam. do arquivo"</string>
+ <string name="button_select" msgid="527196987259139214">"Selecionar"</string>
+ <string name="button_copy" msgid="8706475544635021302">"Copiar"</string>
<string name="sort_name" msgid="9183560467917256779">"Por nome"</string>
<string name="sort_date" msgid="586080032956151448">"Por data de modificação"</string>
<string name="sort_size" msgid="3350681319735474741">"Por tamanho"</string>
@@ -44,12 +52,23 @@
<string name="root_type_service" msgid="2178854894416775409">"Serviços de armazenamento"</string>
<string name="root_type_shortcut" msgid="3318760609471618093">"Atalhos"</string>
<string name="root_type_device" msgid="7121342474653483538">"Dispositivos"</string>
- <string name="root_type_apps" msgid="8838065367985945189">"Mais aplicativos"</string>
- <string name="pref_advanced_devices" msgid="903257239609301276">"Mostrar dispositivos avançados"</string>
- <string name="pref_file_size" msgid="2826879315743961459">"Mostrar tamanho do arquivo"</string>
- <string name="pref_device_size" msgid="3542106883278997222">"Mostrar tamanho do dispositivo"</string>
+ <string name="root_type_apps" msgid="8838065367985945189">"Mais apps"</string>
<string name="empty" msgid="7858882803708117596">"Nenhum item"</string>
<string name="toast_no_application" msgid="1339885974067891667">"Não é possível abrir o arquivo"</string>
<string name="toast_failed_delete" msgid="2180678019407244069">"Não foi possível excluir alguns documentos"</string>
<string name="share_via" msgid="8966594246261344259">"Compartilhar via"</string>
+ <string name="copy_notification_title" msgid="6374299806748219777">"Copiando arquivos"</string>
+ <string name="copy_remaining" msgid="6283790937387975095">"<xliff:g id="DURATION">%s</xliff:g> restantes"</string>
+ <plurals name="copy_begin" formatted="false" msgid="9071199452634086365">
+ <item quantity="one">Copiando <xliff:g id="COUNT_1">%1$d</xliff:g> arquivos.</item>
+ <item quantity="other">Copiando <xliff:g id="COUNT_1">%1$d</xliff:g> arquivos.</item>
+ </plurals>
+ <string name="copy_preparing" msgid="3896202461003039386">"Preparando para copiar..."</string>
+ <plurals name="copy_error_notification_title" formatted="false" msgid="5267616889076217261">
+ <item quantity="one">Não foi possível copiar <xliff:g id="COUNT_1">%1$d</xliff:g> arquivos</item>
+ <item quantity="other">Não foi possível copiar <xliff:g id="COUNT_1">%1$d</xliff:g> arquivos</item>
+ </plurals>
+ <string name="notification_touch_for_details" msgid="4483108577842961665">"Toque para ver detalhes"</string>
+ <string name="retry" msgid="7564024179122207376">"Repetir"</string>
+ <string name="copy_failure_alert_content" msgid="3715575000297709082">"Estes arquivos não foram copiados: <xliff:g id="LIST">%1$s</xliff:g>"</string>
</resources>
diff --git a/res/values-ro/strings.xml b/res/values-ro/strings.xml
index 0dfa11d..b3fead3 100644
--- a/res/values-ro/strings.xml
+++ b/res/values-ro/strings.xml
@@ -29,8 +29,16 @@
<string name="menu_save" msgid="2394743337684426338">"Salvați"</string>
<string name="menu_share" msgid="3075149983979628146">"Distribuiți"</string>
<string name="menu_delete" msgid="8138799623850614177">"Ștergeți"</string>
- <string name="menu_select" msgid="8711270657353563424">"Selectați „<xliff:g id="DIRECTORY">^1</xliff:g>”"</string>
- <string name="mode_selected_count" msgid="459111894725594625">"<xliff:g id="COUNT">%1$d</xliff:g> selectate"</string>
+ <string name="menu_select_all" msgid="8323579667348729928">"Selectați tot"</string>
+ <string name="menu_copy" msgid="3612326052677229148">"Copiați în…"</string>
+ <string name="menu_advanced_show" product="nosdcard" msgid="4693652895715631401">"Afișați stocarea internă"</string>
+ <string name="menu_advanced_show" product="default" msgid="5792182900084144261">"Afișați cardul SD"</string>
+ <string name="menu_advanced_hide" product="nosdcard" msgid="4218809952721972589">"Ascundeți stocarea internă"</string>
+ <string name="menu_advanced_hide" product="default" msgid="4845869969015718848">"Ascundeți cardul SD"</string>
+ <string name="menu_file_size_show" msgid="3240323619260823076">"Afișați mărime fișiere"</string>
+ <string name="menu_file_size_hide" msgid="8881975928502581042">"Ascundeți mărime fișiere"</string>
+ <string name="button_select" msgid="527196987259139214">"Selectați"</string>
+ <string name="button_copy" msgid="8706475544635021302">"Copiați"</string>
<string name="sort_name" msgid="9183560467917256779">"După nume"</string>
<string name="sort_date" msgid="586080032956151448">"După data modificării"</string>
<string name="sort_size" msgid="3350681319735474741">"După dimensiune"</string>
@@ -45,11 +53,24 @@
<string name="root_type_shortcut" msgid="3318760609471618093">"Comenzi rapide"</string>
<string name="root_type_device" msgid="7121342474653483538">"Dispozitive"</string>
<string name="root_type_apps" msgid="8838065367985945189">"Alte aplicații"</string>
- <string name="pref_advanced_devices" msgid="903257239609301276">"Afișați dispozitive avansate"</string>
- <string name="pref_file_size" msgid="2826879315743961459">"Afișați dimensiunile fișierelor"</string>
- <string name="pref_device_size" msgid="3542106883278997222">"Afișați capacitatea de stocare a dispozitivelor"</string>
<string name="empty" msgid="7858882803708117596">"Nu există elemente"</string>
<string name="toast_no_application" msgid="1339885974067891667">"Fișierul nu poate fi deschis"</string>
<string name="toast_failed_delete" msgid="2180678019407244069">"Unele documente nu au putut fi șterse"</string>
- <string name="share_via" msgid="8966594246261344259">"Distribuiți prin"</string>
+ <string name="share_via" msgid="8966594246261344259">"Trimiteți prin"</string>
+ <string name="copy_notification_title" msgid="6374299806748219777">"Se copiază fișierele"</string>
+ <string name="copy_remaining" msgid="6283790937387975095">"Timp rămas: <xliff:g id="DURATION">%s</xliff:g>"</string>
+ <plurals name="copy_begin" formatted="false" msgid="9071199452634086365">
+ <item quantity="few">Se copiază <xliff:g id="COUNT_1">%1$d</xliff:g> fișiere.</item>
+ <item quantity="other">Se copiază <xliff:g id="COUNT_1">%1$d</xliff:g> de fișiere.</item>
+ <item quantity="one">Se copiază <xliff:g id="COUNT_0">%1$d</xliff:g> fișier.</item>
+ </plurals>
+ <string name="copy_preparing" msgid="3896202461003039386">"Se pregătește copierea..."</string>
+ <plurals name="copy_error_notification_title" formatted="false" msgid="5267616889076217261">
+ <item quantity="few">Nu s-au putut copia <xliff:g id="COUNT_1">%1$d</xliff:g> fișiere</item>
+ <item quantity="other">Nu s-au putut copia <xliff:g id="COUNT_1">%1$d</xliff:g> de fișiere</item>
+ <item quantity="one">Nu s-a putut copia <xliff:g id="COUNT_0">%1$d</xliff:g> fișier</item>
+ </plurals>
+ <string name="notification_touch_for_details" msgid="4483108577842961665">"Atingeți pentru a afișa detaliile"</string>
+ <string name="retry" msgid="7564024179122207376">"Reîncercați"</string>
+ <string name="copy_failure_alert_content" msgid="3715575000297709082">"Aceste fișiere nu au fost copiate: <xliff:g id="LIST">%1$s</xliff:g>"</string>
</resources>
diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml
index f86a4af..8626176 100644
--- a/res/values-ru/strings.xml
+++ b/res/values-ru/strings.xml
@@ -20,7 +20,7 @@
<string name="title_open" msgid="4353228937663917801">"Открыть"</string>
<string name="title_save" msgid="2433679664882857999">"Сохранить"</string>
<string name="menu_create_dir" msgid="5947289605844398389">"Новая папка"</string>
- <string name="menu_grid" msgid="6878021334497835259">"Таблица"</string>
+ <string name="menu_grid" msgid="6878021334497835259">"Сетка"</string>
<string name="menu_list" msgid="7279285939892417279">"Список"</string>
<string name="menu_sort" msgid="7677740407158414452">"Сортировать"</string>
<string name="menu_search" msgid="3816712084502856974">"Поиск"</string>
@@ -29,8 +29,16 @@
<string name="menu_save" msgid="2394743337684426338">"Сохранить"</string>
<string name="menu_share" msgid="3075149983979628146">"Поделиться"</string>
<string name="menu_delete" msgid="8138799623850614177">"Удалить"</string>
- <string name="menu_select" msgid="8711270657353563424">"Выбрать папку \"<xliff:g id="DIRECTORY">^1</xliff:g>\""</string>
- <string name="mode_selected_count" msgid="459111894725594625">"Выбрано: <xliff:g id="COUNT">%1$d</xliff:g>"</string>
+ <string name="menu_select_all" msgid="8323579667348729928">"Выбрать все"</string>
+ <string name="menu_copy" msgid="3612326052677229148">"Копировать в…"</string>
+ <string name="menu_advanced_show" product="nosdcard" msgid="4693652895715631401">"Внутренняя память"</string>
+ <string name="menu_advanced_show" product="default" msgid="5792182900084144261">"SD-карта"</string>
+ <string name="menu_advanced_hide" product="nosdcard" msgid="4218809952721972589">"Скрыть внутреннюю память"</string>
+ <string name="menu_advanced_hide" product="default" msgid="4845869969015718848">"Скрыть SD-карту"</string>
+ <string name="menu_file_size_show" msgid="3240323619260823076">"Показать размер файлов"</string>
+ <string name="menu_file_size_hide" msgid="8881975928502581042">"Скрыть размер файлов"</string>
+ <string name="button_select" msgid="527196987259139214">"Выбрать"</string>
+ <string name="button_copy" msgid="8706475544635021302">"Копировать"</string>
<string name="sort_name" msgid="9183560467917256779">"По названию"</string>
<string name="sort_date" msgid="586080032956151448">"По дате изменения"</string>
<string name="sort_size" msgid="3350681319735474741">"По размеру"</string>
@@ -45,11 +53,26 @@
<string name="root_type_shortcut" msgid="3318760609471618093">"Ярлыки"</string>
<string name="root_type_device" msgid="7121342474653483538">"Устройства"</string>
<string name="root_type_apps" msgid="8838065367985945189">"Другие приложения"</string>
- <string name="pref_advanced_devices" msgid="903257239609301276">"Показать другие устройства"</string>
- <string name="pref_file_size" msgid="2826879315743961459">"Показать размер файла"</string>
- <string name="pref_device_size" msgid="3542106883278997222">"Показать размер устройства"</string>
<string name="empty" msgid="7858882803708117596">"Ничего нет"</string>
<string name="toast_no_application" msgid="1339885974067891667">"Не удалось открыть файл"</string>
<string name="toast_failed_delete" msgid="2180678019407244069">"Не удалось удалить некоторые документы"</string>
<string name="share_via" msgid="8966594246261344259">"Поделиться"</string>
+ <string name="copy_notification_title" msgid="6374299806748219777">"Копирование файлов"</string>
+ <string name="copy_remaining" msgid="6283790937387975095">"Осталось <xliff:g id="DURATION">%s</xliff:g>"</string>
+ <plurals name="copy_begin" formatted="false" msgid="9071199452634086365">
+ <item quantity="one">Копируется <xliff:g id="COUNT_1">%1$d</xliff:g> файл...</item>
+ <item quantity="few">Копируется <xliff:g id="COUNT_1">%1$d</xliff:g> файла...</item>
+ <item quantity="many">Копируется <xliff:g id="COUNT_1">%1$d</xliff:g> файлов...</item>
+ <item quantity="other">Копируется <xliff:g id="COUNT_1">%1$d</xliff:g> файла...</item>
+ </plurals>
+ <string name="copy_preparing" msgid="3896202461003039386">"Подготовка к копированию…"</string>
+ <plurals name="copy_error_notification_title" formatted="false" msgid="5267616889076217261">
+ <item quantity="one">Не удалось скопировать <xliff:g id="COUNT_1">%1$d</xliff:g> файл</item>
+ <item quantity="few">Не удалось скопировать <xliff:g id="COUNT_1">%1$d</xliff:g> файла</item>
+ <item quantity="many">Не удалось скопировать <xliff:g id="COUNT_1">%1$d</xliff:g> файлов</item>
+ <item quantity="other">Не удалось скопировать <xliff:g id="COUNT_1">%1$d</xliff:g> файла</item>
+ </plurals>
+ <string name="notification_touch_for_details" msgid="4483108577842961665">"Нажмите, чтобы узнать подробности."</string>
+ <string name="retry" msgid="7564024179122207376">"Повторить"</string>
+ <string name="copy_failure_alert_content" msgid="3715575000297709082">"Не удалось скопировать эти файлы: <xliff:g id="LIST">%1$s</xliff:g>"</string>
</resources>
diff --git a/res/values-si-rLK/strings.xml b/res/values-si-rLK/strings.xml
index 3d6eadf..a118b34 100644
--- a/res/values-si-rLK/strings.xml
+++ b/res/values-si-rLK/strings.xml
@@ -29,8 +29,16 @@
<string name="menu_save" msgid="2394743337684426338">"සුරකින්න"</string>
<string name="menu_share" msgid="3075149983979628146">"බෙදාගන්න"</string>
<string name="menu_delete" msgid="8138799623850614177">"මකන්න"</string>
- <string name="menu_select" msgid="8711270657353563424">"\"<xliff:g id="DIRECTORY">^1</xliff:g>\" තෝරන්න"</string>
- <string name="mode_selected_count" msgid="459111894725594625">"<xliff:g id="COUNT">%1$d</xliff:g> ක් තෝරාගන්නා ලදි"</string>
+ <string name="menu_select_all" msgid="8323579667348729928">"සියල්ල තෝරන්න"</string>
+ <string name="menu_copy" msgid="3612326052677229148">"වෙත පිටපත් කරන්න..."</string>
+ <string name="menu_advanced_show" product="nosdcard" msgid="4693652895715631401">"අභ්යන්තර ආචයනය පෙන්වන්න"</string>
+ <string name="menu_advanced_show" product="default" msgid="5792182900084144261">"SD කාඩ් පත පෙන්වන්න"</string>
+ <string name="menu_advanced_hide" product="nosdcard" msgid="4218809952721972589">"අභ්යන්තර ආචයනය සඟවන්න"</string>
+ <string name="menu_advanced_hide" product="default" msgid="4845869969015718848">"SD කාඩ් පත සඟවන්න"</string>
+ <string name="menu_file_size_show" msgid="3240323619260823076">"ගොනු ප්රමණය පෙන්වන්න"</string>
+ <string name="menu_file_size_hide" msgid="8881975928502581042">"ගොනු ප්රමණය සඟවන්න"</string>
+ <string name="button_select" msgid="527196987259139214">"තෝරන්න"</string>
+ <string name="button_copy" msgid="8706475544635021302">"පිටපත් කිරීම"</string>
<string name="sort_name" msgid="9183560467917256779">"නමින්"</string>
<string name="sort_date" msgid="586080032956151448">"වෙනස් කරන ලද දිනයෙන්"</string>
<string name="sort_size" msgid="3350681319735474741">"ප්රමාණය මගින්"</string>
@@ -45,11 +53,22 @@
<string name="root_type_shortcut" msgid="3318760609471618093">"කෙටිමං"</string>
<string name="root_type_device" msgid="7121342474653483538">"උපාංග"</string>
<string name="root_type_apps" msgid="8838065367985945189">"තවත් යෙදුම්"</string>
- <string name="pref_advanced_devices" msgid="903257239609301276">"උසස් උපාංග දර්ශනය කරන්න"</string>
- <string name="pref_file_size" msgid="2826879315743961459">"ගොනු ප්රමාණය දර්ශනය කරන්න"</string>
- <string name="pref_device_size" msgid="3542106883278997222">"උපාංග ප්රමාණය දර්ශනය කරන්න"</string>
<string name="empty" msgid="7858882803708117596">"අයිතම නැත"</string>
<string name="toast_no_application" msgid="1339885974067891667">"ගොනුව විවෘත කළ නොහැක"</string>
<string name="toast_failed_delete" msgid="2180678019407244069">"සමහර ලේඛන මැකීමට නොහැකි විය"</string>
<string name="share_via" msgid="8966594246261344259">"හරහා බෙදාගන්න"</string>
+ <string name="copy_notification_title" msgid="6374299806748219777">"ගොනු පිටපත් කරමින්"</string>
+ <string name="copy_remaining" msgid="6283790937387975095">"<xliff:g id="DURATION">%s</xliff:g> ඉතිරියි"</string>
+ <plurals name="copy_begin" formatted="false" msgid="9071199452634086365">
+ <item quantity="one">ගොනු <xliff:g id="COUNT_1">%1$d</xliff:g> ක් පිටපත් කරමින්.</item>
+ <item quantity="other">ගොනු <xliff:g id="COUNT_1">%1$d</xliff:g> ක් පිටපත් කරමින්.</item>
+ </plurals>
+ <string name="copy_preparing" msgid="3896202461003039386">"පිටපතක් සඳහා සූදානම් කරමින්..."</string>
+ <plurals name="copy_error_notification_title" formatted="false" msgid="5267616889076217261">
+ <item quantity="one">ගොනු <xliff:g id="COUNT_1">%1$d</xliff:g> ක් පිටපත් කළ නොහැකි විය</item>
+ <item quantity="other">ගොනු <xliff:g id="COUNT_1">%1$d</xliff:g> ක් පිටපත් කළ නොහැකි විය</item>
+ </plurals>
+ <string name="notification_touch_for_details" msgid="4483108577842961665">"විස්තර බැලීමට ස්පර්ශ කරන්න"</string>
+ <string name="retry" msgid="7564024179122207376">"නැවත උත්සාහ කරන්න"</string>
+ <string name="copy_failure_alert_content" msgid="3715575000297709082">"මෙම ගොනු පිටපත් නොකරන ලදී: <xliff:g id="LIST">%1$s</xliff:g>"</string>
</resources>
diff --git a/res/values-sk/strings.xml b/res/values-sk/strings.xml
index 5d03df6..f2733fb 100644
--- a/res/values-sk/strings.xml
+++ b/res/values-sk/strings.xml
@@ -29,8 +29,16 @@
<string name="menu_save" msgid="2394743337684426338">"Uložiť"</string>
<string name="menu_share" msgid="3075149983979628146">"Zdieľať"</string>
<string name="menu_delete" msgid="8138799623850614177">"Odstrániť"</string>
- <string name="menu_select" msgid="8711270657353563424">"Vyberte adresár <xliff:g id="DIRECTORY">^1</xliff:g>"</string>
- <string name="mode_selected_count" msgid="459111894725594625">"Vybraté: <xliff:g id="COUNT">%1$d</xliff:g>"</string>
+ <string name="menu_select_all" msgid="8323579667348729928">"Vybrať všetko"</string>
+ <string name="menu_copy" msgid="3612326052677229148">"Kopírovať do…"</string>
+ <string name="menu_advanced_show" product="nosdcard" msgid="4693652895715631401">"Zobraziť interné úložisko"</string>
+ <string name="menu_advanced_show" product="default" msgid="5792182900084144261">"Zobraziť SD kartu"</string>
+ <string name="menu_advanced_hide" product="nosdcard" msgid="4218809952721972589">"Skryť interné úložisko"</string>
+ <string name="menu_advanced_hide" product="default" msgid="4845869969015718848">"Skryť SD kartu"</string>
+ <string name="menu_file_size_show" msgid="3240323619260823076">"Zobraziť veľkosť súboru"</string>
+ <string name="menu_file_size_hide" msgid="8881975928502581042">"Skryť veľkosť súboru"</string>
+ <string name="button_select" msgid="527196987259139214">"Vybrať"</string>
+ <string name="button_copy" msgid="8706475544635021302">"Kopírovať"</string>
<string name="sort_name" msgid="9183560467917256779">"Podľa názvu"</string>
<string name="sort_date" msgid="586080032956151448">"Podľa dátumu zmeny"</string>
<string name="sort_size" msgid="3350681319735474741">"Podľa veľkosti"</string>
@@ -40,16 +48,31 @@
<string name="create_error" msgid="3735649141335444215">"Priečinok sa nepodarilo vytvoriť"</string>
<string name="query_error" msgid="1222448261663503501">"Zoznam dokumentov sa nepodarilo načítať"</string>
<string name="root_recent" msgid="4470053704320518133">"Nedávne"</string>
- <string name="root_available_bytes" msgid="8568452858617033281">"Voľné: <xliff:g id="SIZE">%1$s</xliff:g>"</string>
+ <string name="root_available_bytes" msgid="8568452858617033281">"Voľné <xliff:g id="SIZE">%1$s</xliff:g>"</string>
<string name="root_type_service" msgid="2178854894416775409">"Služby úložiska"</string>
<string name="root_type_shortcut" msgid="3318760609471618093">"Skratky"</string>
<string name="root_type_device" msgid="7121342474653483538">"Zariadenia"</string>
<string name="root_type_apps" msgid="8838065367985945189">"Ďalšie aplikácie"</string>
- <string name="pref_advanced_devices" msgid="903257239609301276">"Zobraziť pokročilé zariadenia"</string>
- <string name="pref_file_size" msgid="2826879315743961459">"Zobraziť veľkosť súboru"</string>
- <string name="pref_device_size" msgid="3542106883278997222">"Zobraziť veľkosť zariadenia"</string>
<string name="empty" msgid="7858882803708117596">"Žiadne položky"</string>
<string name="toast_no_application" msgid="1339885974067891667">"Súbor sa nepodarilo otvoriť"</string>
<string name="toast_failed_delete" msgid="2180678019407244069">"Niektoré dokumenty sa nepodarilo odstrániť"</string>
- <string name="share_via" msgid="8966594246261344259">"Zdieľať pomocou"</string>
+ <string name="share_via" msgid="8966594246261344259">"Zdieľať"</string>
+ <string name="copy_notification_title" msgid="6374299806748219777">"Kopírovanie súborov"</string>
+ <string name="copy_remaining" msgid="6283790937387975095">"Zostáva: <xliff:g id="DURATION">%s</xliff:g>"</string>
+ <plurals name="copy_begin" formatted="false" msgid="9071199452634086365">
+ <item quantity="few">Kopírujú sa <xliff:g id="COUNT_1">%1$d</xliff:g> súbory.</item>
+ <item quantity="many">Kopíruje sa <xliff:g id="COUNT_1">%1$d</xliff:g> súboru.</item>
+ <item quantity="other">Kopíruje sa <xliff:g id="COUNT_1">%1$d</xliff:g> súborov.</item>
+ <item quantity="one">Kopíruje sa <xliff:g id="COUNT_0">%1$d</xliff:g> súbor.</item>
+ </plurals>
+ <string name="copy_preparing" msgid="3896202461003039386">"Pripravuje sa na kopírovanie..."</string>
+ <plurals name="copy_error_notification_title" formatted="false" msgid="5267616889076217261">
+ <item quantity="few">Zlyhalo kopírovanie <xliff:g id="COUNT_1">%1$d</xliff:g> súborov</item>
+ <item quantity="many">Zlyhalo kopírovanie <xliff:g id="COUNT_1">%1$d</xliff:g> súboru</item>
+ <item quantity="other">Zlyhalo kopírovanie <xliff:g id="COUNT_1">%1$d</xliff:g> súborov</item>
+ <item quantity="one">Zlyhalo kopírovanie <xliff:g id="COUNT_0">%1$d</xliff:g> súboru</item>
+ </plurals>
+ <string name="notification_touch_for_details" msgid="4483108577842961665">"Klepnutím zobrazíte podrobné informácie"</string>
+ <string name="retry" msgid="7564024179122207376">"Skúsiť znova"</string>
+ <string name="copy_failure_alert_content" msgid="3715575000297709082">"Tieto súbory neboli skopírované: <xliff:g id="LIST">%1$s</xliff:g>"</string>
</resources>
diff --git a/res/values-sl/strings.xml b/res/values-sl/strings.xml
index b3e52dd..65e857b 100644
--- a/res/values-sl/strings.xml
+++ b/res/values-sl/strings.xml
@@ -29,8 +29,16 @@
<string name="menu_save" msgid="2394743337684426338">"Shrani"</string>
<string name="menu_share" msgid="3075149983979628146">"Skupna raba"</string>
<string name="menu_delete" msgid="8138799623850614177">"Izbriši"</string>
- <string name="menu_select" msgid="8711270657353563424">"Izbira mape »<xliff:g id="DIRECTORY">^1</xliff:g>«"</string>
- <string name="mode_selected_count" msgid="459111894725594625">"Št. izbranih: <xliff:g id="COUNT">%1$d</xliff:g>"</string>
+ <string name="menu_select_all" msgid="8323579667348729928">"Izberi vse"</string>
+ <string name="menu_copy" msgid="3612326052677229148">"Kopiranje v …"</string>
+ <string name="menu_advanced_show" product="nosdcard" msgid="4693652895715631401">"Pokaži notranjo shrambo"</string>
+ <string name="menu_advanced_show" product="default" msgid="5792182900084144261">"Pokaži kartico SD"</string>
+ <string name="menu_advanced_hide" product="nosdcard" msgid="4218809952721972589">"Skrij notranjo shrambo"</string>
+ <string name="menu_advanced_hide" product="default" msgid="4845869969015718848">"Skrij kartico SD"</string>
+ <string name="menu_file_size_show" msgid="3240323619260823076">"Pokaži velikost datoteke"</string>
+ <string name="menu_file_size_hide" msgid="8881975928502581042">"Skrij velikost datoteke"</string>
+ <string name="button_select" msgid="527196987259139214">"Izberi"</string>
+ <string name="button_copy" msgid="8706475544635021302">"Kopiraj"</string>
<string name="sort_name" msgid="9183560467917256779">"Po imenu"</string>
<string name="sort_date" msgid="586080032956151448">"Po datumu spremembe"</string>
<string name="sort_size" msgid="3350681319735474741">"Po velikosti"</string>
@@ -45,11 +53,26 @@
<string name="root_type_shortcut" msgid="3318760609471618093">"Bližnjice"</string>
<string name="root_type_device" msgid="7121342474653483538">"Naprave"</string>
<string name="root_type_apps" msgid="8838065367985945189">"Več aplikacij"</string>
- <string name="pref_advanced_devices" msgid="903257239609301276">"Prikaz naprednih naprav"</string>
- <string name="pref_file_size" msgid="2826879315743961459">"Prikaz velikosti datoteke"</string>
- <string name="pref_device_size" msgid="3542106883278997222">"Prikaz velikosti naprave"</string>
<string name="empty" msgid="7858882803708117596">"Ni elementov"</string>
<string name="toast_no_application" msgid="1339885974067891667">"Datoteke ni mogoče odpreti"</string>
<string name="toast_failed_delete" msgid="2180678019407244069">"Nekaterih dokumentov ni mogoče izbrisati"</string>
<string name="share_via" msgid="8966594246261344259">"Deli z drugimi prek"</string>
+ <string name="copy_notification_title" msgid="6374299806748219777">"Kopiranje datotek"</string>
+ <string name="copy_remaining" msgid="6283790937387975095">"Še <xliff:g id="DURATION">%s</xliff:g>"</string>
+ <plurals name="copy_begin" formatted="false" msgid="9071199452634086365">
+ <item quantity="one">Kopiranje <xliff:g id="COUNT_1">%1$d</xliff:g> datoteke.</item>
+ <item quantity="two">Kopiranje <xliff:g id="COUNT_1">%1$d</xliff:g> datotek.</item>
+ <item quantity="few">Kopiranje <xliff:g id="COUNT_1">%1$d</xliff:g> datotek.</item>
+ <item quantity="other">Kopiranje <xliff:g id="COUNT_1">%1$d</xliff:g> datotek.</item>
+ </plurals>
+ <string name="copy_preparing" msgid="3896202461003039386">"Pripravljanje na kopiranje …"</string>
+ <plurals name="copy_error_notification_title" formatted="false" msgid="5267616889076217261">
+ <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> datoteke ni bilo mogoče kopirati</item>
+ <item quantity="two"><xliff:g id="COUNT_1">%1$d</xliff:g> datotek ni bilo mogoče kopirati</item>
+ <item quantity="few"><xliff:g id="COUNT_1">%1$d</xliff:g> datotek ni bilo mogoče kopirati</item>
+ <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> datotek ni bilo mogoče kopirati</item>
+ </plurals>
+ <string name="notification_touch_for_details" msgid="4483108577842961665">"Dotaknite se za ogled podrobnosti"</string>
+ <string name="retry" msgid="7564024179122207376">"Poskusi znova"</string>
+ <string name="copy_failure_alert_content" msgid="3715575000297709082">"Te datoteke niso bile kopirane: <xliff:g id="LIST">%1$s</xliff:g>"</string>
</resources>
diff --git a/res/values-sq-rAL/strings.xml b/res/values-sq-rAL/strings.xml
new file mode 100644
index 0000000..6c04aaf
--- /dev/null
+++ b/res/values-sq-rAL/strings.xml
@@ -0,0 +1,74 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2013 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="app_label" msgid="2783841764617238354">"Dokumente"</string>
+ <string name="title_open" msgid="4353228937663917801">"Hap nga"</string>
+ <string name="title_save" msgid="2433679664882857999">"Ruaje te"</string>
+ <string name="menu_create_dir" msgid="5947289605844398389">"Krijo dosje"</string>
+ <string name="menu_grid" msgid="6878021334497835259">"Pamje rrjete"</string>
+ <string name="menu_list" msgid="7279285939892417279">"Pamje liste"</string>
+ <string name="menu_sort" msgid="7677740407158414452">"Rendit sipas"</string>
+ <string name="menu_search" msgid="3816712084502856974">"Kërko"</string>
+ <string name="menu_settings" msgid="6008033148948428823">"Cilësimet"</string>
+ <string name="menu_open" msgid="432922957274920903">"Hap"</string>
+ <string name="menu_save" msgid="2394743337684426338">"Ruaj"</string>
+ <string name="menu_share" msgid="3075149983979628146">"Shpërnda"</string>
+ <string name="menu_delete" msgid="8138799623850614177">"Fshi"</string>
+ <string name="menu_select_all" msgid="8323579667348729928">"Zgjidhi të gjitha"</string>
+ <string name="menu_copy" msgid="3612326052677229148">"Kopjo te..."</string>
+ <string name="menu_advanced_show" product="nosdcard" msgid="4693652895715631401">"Trego hapësirën e brendshme ruajtëse"</string>
+ <string name="menu_advanced_show" product="default" msgid="5792182900084144261">"Shfaq kartën SD"</string>
+ <string name="menu_advanced_hide" product="nosdcard" msgid="4218809952721972589">"Fshih hapësirën ruajtëse të brendshme"</string>
+ <string name="menu_advanced_hide" product="default" msgid="4845869969015718848">"Fshih kartën SD"</string>
+ <string name="menu_file_size_show" msgid="3240323619260823076">"Shfaq madhësinë e skedarit"</string>
+ <string name="menu_file_size_hide" msgid="8881975928502581042">"Fshih madhësinë e skedarit"</string>
+ <string name="button_select" msgid="527196987259139214">"Zgjidh"</string>
+ <string name="button_copy" msgid="8706475544635021302">"Kopjo"</string>
+ <string name="sort_name" msgid="9183560467917256779">"Sipas emrit"</string>
+ <string name="sort_date" msgid="586080032956151448">"Sipas datës së modifikimit"</string>
+ <string name="sort_size" msgid="3350681319735474741">"Sipas madhësisë"</string>
+ <string name="drawer_open" msgid="4545466532430226949">"Trego rrënjët"</string>
+ <string name="drawer_close" msgid="7602734368552123318">"Fshih rrënjët"</string>
+ <string name="save_error" msgid="6167009778003223664">"Ruajtja e dokumentit dështoi"</string>
+ <string name="create_error" msgid="3735649141335444215">"Krijimi i dosjes dështoi"</string>
+ <string name="query_error" msgid="1222448261663503501">"Kërkesa për dokumentet dështoi"</string>
+ <string name="root_recent" msgid="4470053704320518133">"Të kohëve të fundit"</string>
+ <string name="root_available_bytes" msgid="8568452858617033281">"Të lirë: <xliff:g id="SIZE">%1$s</xliff:g>"</string>
+ <string name="root_type_service" msgid="2178854894416775409">"Shërbimet e hapësirës ruajtëse"</string>
+ <string name="root_type_shortcut" msgid="3318760609471618093">"Shkurtore"</string>
+ <string name="root_type_device" msgid="7121342474653483538">"Pajisjet"</string>
+ <string name="root_type_apps" msgid="8838065367985945189">"Aplikacione të tjera"</string>
+ <string name="empty" msgid="7858882803708117596">"Nuk ka artikuj"</string>
+ <string name="toast_no_application" msgid="1339885974067891667">"Skedari nuk mund të hapet"</string>
+ <string name="toast_failed_delete" msgid="2180678019407244069">"E pamundur të fshihen disa dokumente"</string>
+ <string name="share_via" msgid="8966594246261344259">"Shpërnda publikisht përmes"</string>
+ <string name="copy_notification_title" msgid="6374299806748219777">"Po kopjon skedarët"</string>
+ <string name="copy_remaining" msgid="6283790937387975095">"<xliff:g id="DURATION">%s</xliff:g> të mbetura"</string>
+ <plurals name="copy_begin" formatted="false" msgid="9071199452634086365">
+ <item quantity="other">Po kopjon <xliff:g id="COUNT_1">%1$d</xliff:g> skedarë.</item>
+ <item quantity="one">Po kopjon <xliff:g id="COUNT_0">%1$d</xliff:g> skedar.</item>
+ </plurals>
+ <string name="copy_preparing" msgid="3896202461003039386">"Po përgatitet për kopjimin…"</string>
+ <plurals name="copy_error_notification_title" formatted="false" msgid="5267616889076217261">
+ <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> skedarë nuk mund të kopjoheshin</item>
+ <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> skedar nuk mund të kopjohej</item>
+ </plurals>
+ <string name="notification_touch_for_details" msgid="4483108577842961665">"Prek për të parë detajet"</string>
+ <string name="retry" msgid="7564024179122207376">"Provo përsëri"</string>
+ <string name="copy_failure_alert_content" msgid="3715575000297709082">"Këta skedarë nuk u kopjuan: <xliff:g id="LIST">%1$s</xliff:g>"</string>
+</resources>
diff --git a/res/values-sr/strings.xml b/res/values-sr/strings.xml
index 892dbce..dbb4b88 100644
--- a/res/values-sr/strings.xml
+++ b/res/values-sr/strings.xml
@@ -29,8 +29,16 @@
<string name="menu_save" msgid="2394743337684426338">"Сачувај"</string>
<string name="menu_share" msgid="3075149983979628146">"Дели"</string>
<string name="menu_delete" msgid="8138799623850614177">"Избриши"</string>
- <string name="menu_select" msgid="8711270657353563424">"Изабери „<xliff:g id="DIRECTORY">^1</xliff:g>“"</string>
- <string name="mode_selected_count" msgid="459111894725594625">"Изабрано је <xliff:g id="COUNT">%1$d</xliff:g>"</string>
+ <string name="menu_select_all" msgid="8323579667348729928">"Изабери све"</string>
+ <string name="menu_copy" msgid="3612326052677229148">"Копирај на..."</string>
+ <string name="menu_advanced_show" product="nosdcard" msgid="4693652895715631401">"Прикажи интерну меморију"</string>
+ <string name="menu_advanced_show" product="default" msgid="5792182900084144261">"Прикажи SD картицу"</string>
+ <string name="menu_advanced_hide" product="nosdcard" msgid="4218809952721972589">"Сакриј интерну меморију"</string>
+ <string name="menu_advanced_hide" product="default" msgid="4845869969015718848">"Сакриј SD картицу"</string>
+ <string name="menu_file_size_show" msgid="3240323619260823076">"Прикажи величину датотеке"</string>
+ <string name="menu_file_size_hide" msgid="8881975928502581042">"Сакриј величину датотеке"</string>
+ <string name="button_select" msgid="527196987259139214">"Изабери"</string>
+ <string name="button_copy" msgid="8706475544635021302">"Копирај"</string>
<string name="sort_name" msgid="9183560467917256779">"Према имену"</string>
<string name="sort_date" msgid="586080032956151448">"Према датуму измене"</string>
<string name="sort_size" msgid="3350681319735474741">"Према величини"</string>
@@ -45,11 +53,24 @@
<string name="root_type_shortcut" msgid="3318760609471618093">"Пречице"</string>
<string name="root_type_device" msgid="7121342474653483538">"Уређаји"</string>
<string name="root_type_apps" msgid="8838065367985945189">"Још апликација"</string>
- <string name="pref_advanced_devices" msgid="903257239609301276">"Прикажи напредне уређаје"</string>
- <string name="pref_file_size" msgid="2826879315743961459">"Прикажи величину датотеке"</string>
- <string name="pref_device_size" msgid="3542106883278997222">"Прикажи величину уређаја"</string>
<string name="empty" msgid="7858882803708117596">"Нема ставки"</string>
<string name="toast_no_application" msgid="1339885974067891667">"Није могуће отворити датотеку"</string>
<string name="toast_failed_delete" msgid="2180678019407244069">"Није могуће избрисати неке документе"</string>
<string name="share_via" msgid="8966594246261344259">"Делите преко"</string>
+ <string name="copy_notification_title" msgid="6374299806748219777">"Копирање датотека"</string>
+ <string name="copy_remaining" msgid="6283790937387975095">"Још <xliff:g id="DURATION">%s</xliff:g>"</string>
+ <plurals name="copy_begin" formatted="false" msgid="9071199452634086365">
+ <item quantity="one">Копирање <xliff:g id="COUNT_1">%1$d</xliff:g> датотеке.</item>
+ <item quantity="few">Копирање <xliff:g id="COUNT_1">%1$d</xliff:g> датотеке.</item>
+ <item quantity="other">Копирање <xliff:g id="COUNT_1">%1$d</xliff:g> датотека.</item>
+ </plurals>
+ <string name="copy_preparing" msgid="3896202461003039386">"Припрема се копирање…"</string>
+ <plurals name="copy_error_notification_title" formatted="false" msgid="5267616889076217261">
+ <item quantity="one">Нисмо успели да копирамо <xliff:g id="COUNT_1">%1$d</xliff:g> датотеку</item>
+ <item quantity="few">Нисмо успели да копирамо <xliff:g id="COUNT_1">%1$d</xliff:g> датотеке</item>
+ <item quantity="other">Нисмо успели да копирамо <xliff:g id="COUNT_1">%1$d</xliff:g> датотека</item>
+ </plurals>
+ <string name="notification_touch_for_details" msgid="4483108577842961665">"Додирните да бисте видели детаље"</string>
+ <string name="retry" msgid="7564024179122207376">"Покушај поново"</string>
+ <string name="copy_failure_alert_content" msgid="3715575000297709082">"Следеће датотеке нису копиране: <xliff:g id="LIST">%1$s</xliff:g>"</string>
</resources>
diff --git a/res/values-sv/strings.xml b/res/values-sv/strings.xml
index fd6457d..2bb6653 100644
--- a/res/values-sv/strings.xml
+++ b/res/values-sv/strings.xml
@@ -29,8 +29,16 @@
<string name="menu_save" msgid="2394743337684426338">"Spara"</string>
<string name="menu_share" msgid="3075149983979628146">"Dela"</string>
<string name="menu_delete" msgid="8138799623850614177">"Ta bort"</string>
- <string name="menu_select" msgid="8711270657353563424">"Välj <xliff:g id="DIRECTORY">^1</xliff:g>"</string>
- <string name="mode_selected_count" msgid="459111894725594625">"Har valt <xliff:g id="COUNT">%1$d</xliff:g>"</string>
+ <string name="menu_select_all" msgid="8323579667348729928">"Markera allt"</string>
+ <string name="menu_copy" msgid="3612326052677229148">"Kopiera till …"</string>
+ <string name="menu_advanced_show" product="nosdcard" msgid="4693652895715631401">"Visa internminne"</string>
+ <string name="menu_advanced_show" product="default" msgid="5792182900084144261">"Visa SD-kort"</string>
+ <string name="menu_advanced_hide" product="nosdcard" msgid="4218809952721972589">"Dölj internminne"</string>
+ <string name="menu_advanced_hide" product="default" msgid="4845869969015718848">"Dölj SD-kort"</string>
+ <string name="menu_file_size_show" msgid="3240323619260823076">"Visa filstorlek"</string>
+ <string name="menu_file_size_hide" msgid="8881975928502581042">"Dölj filstorlek"</string>
+ <string name="button_select" msgid="527196987259139214">"Välj"</string>
+ <string name="button_copy" msgid="8706475544635021302">"Kopiera"</string>
<string name="sort_name" msgid="9183560467917256779">"Efter namn"</string>
<string name="sort_date" msgid="586080032956151448">"Efter ändringsdatum"</string>
<string name="sort_size" msgid="3350681319735474741">"Efter storlek"</string>
@@ -45,11 +53,22 @@
<string name="root_type_shortcut" msgid="3318760609471618093">"Genvägar"</string>
<string name="root_type_device" msgid="7121342474653483538">"Enheter"</string>
<string name="root_type_apps" msgid="8838065367985945189">"Fler appar"</string>
- <string name="pref_advanced_devices" msgid="903257239609301276">"Visa avancerade enheter"</string>
- <string name="pref_file_size" msgid="2826879315743961459">"Visa filstorlek"</string>
- <string name="pref_device_size" msgid="3542106883278997222">"Bildskärmsstorlek"</string>
<string name="empty" msgid="7858882803708117596">"Inga objekt"</string>
<string name="toast_no_application" msgid="1339885974067891667">"Det går inte att öppna filen"</string>
<string name="toast_failed_delete" msgid="2180678019407244069">"Det gick inte att ta bort vissa dokument"</string>
<string name="share_via" msgid="8966594246261344259">"Dela via"</string>
+ <string name="copy_notification_title" msgid="6374299806748219777">"Kopierar filer"</string>
+ <string name="copy_remaining" msgid="6283790937387975095">"<xliff:g id="DURATION">%s</xliff:g> återstår"</string>
+ <plurals name="copy_begin" formatted="false" msgid="9071199452634086365">
+ <item quantity="other">Kopierar <xliff:g id="COUNT_1">%1$d</xliff:g> filer.</item>
+ <item quantity="one">Kopierar <xliff:g id="COUNT_0">%1$d</xliff:g> fil.</item>
+ </plurals>
+ <string name="copy_preparing" msgid="3896202461003039386">"Kopieringen förbereds …"</string>
+ <plurals name="copy_error_notification_title" formatted="false" msgid="5267616889076217261">
+ <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> filer gick inte att kopiera</item>
+ <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> fil gick inte att kopiera</item>
+ </plurals>
+ <string name="notification_touch_for_details" msgid="4483108577842961665">"Tryck här om du vill veta mer"</string>
+ <string name="retry" msgid="7564024179122207376">"Försök igen"</string>
+ <string name="copy_failure_alert_content" msgid="3715575000297709082">"Följande filer kopierades inte: <xliff:g id="LIST">%1$s</xliff:g>"</string>
</resources>
diff --git a/res/values-sw/strings.xml b/res/values-sw/strings.xml
index 0948c71..5151a94 100644
--- a/res/values-sw/strings.xml
+++ b/res/values-sw/strings.xml
@@ -29,8 +29,16 @@
<string name="menu_save" msgid="2394743337684426338">"Hifadhi"</string>
<string name="menu_share" msgid="3075149983979628146">"Shiriki"</string>
<string name="menu_delete" msgid="8138799623850614177">"Futa"</string>
- <string name="menu_select" msgid="8711270657353563424">"Chagua \" <xliff:g id="DIRECTORY">^1</xliff:g> \""</string>
- <string name="mode_selected_count" msgid="459111894725594625">"<xliff:g id="COUNT">%1$d</xliff:g> zimechaguliwa"</string>
+ <string name="menu_select_all" msgid="8323579667348729928">"Chagua zote"</string>
+ <string name="menu_copy" msgid="3612326052677229148">"Nakili kwenda..."</string>
+ <string name="menu_advanced_show" product="nosdcard" msgid="4693652895715631401">"Onyesha hifadhi ya ndani"</string>
+ <string name="menu_advanced_show" product="default" msgid="5792182900084144261">"Onyesha kadi ya SD"</string>
+ <string name="menu_advanced_hide" product="nosdcard" msgid="4218809952721972589">"Ficha hifadhi ya ndani"</string>
+ <string name="menu_advanced_hide" product="default" msgid="4845869969015718848">"Ficha kadi ya SD"</string>
+ <string name="menu_file_size_show" msgid="3240323619260823076">"Onyesha ukubwa wa faili"</string>
+ <string name="menu_file_size_hide" msgid="8881975928502581042">"Ficha ukubwa wa faili"</string>
+ <string name="button_select" msgid="527196987259139214">"Teua"</string>
+ <string name="button_copy" msgid="8706475544635021302">"Nakili"</string>
<string name="sort_name" msgid="9183560467917256779">"Kwa jina"</string>
<string name="sort_date" msgid="586080032956151448">"Kwa tarehe viliporekebishwa"</string>
<string name="sort_size" msgid="3350681319735474741">"Kwa ukubwa"</string>
@@ -45,11 +53,22 @@
<string name="root_type_shortcut" msgid="3318760609471618093">"Njia za mkato"</string>
<string name="root_type_device" msgid="7121342474653483538">"Vifaa"</string>
<string name="root_type_apps" msgid="8838065367985945189">"Programu zaidi"</string>
- <string name="pref_advanced_devices" msgid="903257239609301276">"Onyesha vifaa mahiri"</string>
- <string name="pref_file_size" msgid="2826879315743961459">"Onyesha ukubwa wa faili"</string>
- <string name="pref_device_size" msgid="3542106883278997222">"Onyesha ukubwa wa kifaa"</string>
<string name="empty" msgid="7858882803708117596">"Hakuna vipengee"</string>
<string name="toast_no_application" msgid="1339885974067891667">"Haiwezi kufungua faili"</string>
<string name="toast_failed_delete" msgid="2180678019407244069">"Imeshindwa kufuta baadhi ya hati"</string>
<string name="share_via" msgid="8966594246261344259">"Shiriki kupitia"</string>
+ <string name="copy_notification_title" msgid="6374299806748219777">"Inanakili faili"</string>
+ <string name="copy_remaining" msgid="6283790937387975095">"Zimesalia <xliff:g id="DURATION">%s</xliff:g>"</string>
+ <plurals name="copy_begin" formatted="false" msgid="9071199452634086365">
+ <item quantity="other">Inanakili faili <xliff:g id="COUNT_1">%1$d</xliff:g>.</item>
+ <item quantity="one">Inanakili faili <xliff:g id="COUNT_0">%1$d</xliff:g>.</item>
+ </plurals>
+ <string name="copy_preparing" msgid="3896202461003039386">"Inaanda kunakili..."</string>
+ <plurals name="copy_error_notification_title" formatted="false" msgid="5267616889076217261">
+ <item quantity="other">Haikuweza kunakili faili <xliff:g id="COUNT_1">%1$d</xliff:g> </item>
+ <item quantity="one">Haikuweza kunakili faili <xliff:g id="COUNT_0">%1$d</xliff:g></item>
+ </plurals>
+ <string name="notification_touch_for_details" msgid="4483108577842961665">"Gusa ili uone maelezo"</string>
+ <string name="retry" msgid="7564024179122207376">"Jaribu tena"</string>
+ <string name="copy_failure_alert_content" msgid="3715575000297709082">"Faili hizi hazikunakiliwa: <xliff:g id="LIST">%1$s</xliff:g>"</string>
</resources>
diff --git a/res/values-sw720dp/dimens.xml b/res/values-sw720dp/dimens.xml
index 068c806..4786d28 100644
--- a/res/values-sw720dp/dimens.xml
+++ b/res/values-sw720dp/dimens.xml
@@ -18,11 +18,9 @@
<bool name="show_as_dialog">true</bool>
<item type="dimen" name="dialog_width">85%</item>
- <item type="dimen" name="dialog_height">90%</item>
<dimen name="grid_padding_horiz">24dp</dimen>
<dimen name="grid_padding_vert">16dp</dimen>
<dimen name="grid_item_padding">8dp</dimen>
-
</resources>
diff --git a/res/values-sw720dp/styles.xml b/res/values-sw720dp/styles.xml
index 9968bb8..d7c031e 100644
--- a/res/values-sw720dp/styles.xml
+++ b/res/values-sw720dp/styles.xml
@@ -16,6 +16,11 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android">
- <style name="DialogWhenReallyLarge" parent="@*android:style/Theme.DeviceDefault.Light.Dialog.FixedSize" />
+ <style name="DialogWhenReallyLarge" parent="@*android:style/Theme.DeviceDefault.Light.Dialog">
+ <!-- We do not specify width of window here because the max size of
+ floating window specified by windowFixedWidthis is limited. -->
+ <item name="*android:windowFixedHeightMajor">80%</item>
+ <item name="*android:windowFixedHeightMinor">90%</item>
+ </style>
</resources>
diff --git a/res/values-ta-rIN/strings.xml b/res/values-ta-rIN/strings.xml
index 221769f..bc822fb 100644
--- a/res/values-ta-rIN/strings.xml
+++ b/res/values-ta-rIN/strings.xml
@@ -24,15 +24,23 @@
<string name="menu_list" msgid="7279285939892417279">"பட்டியல்"</string>
<string name="menu_sort" msgid="7677740407158414452">"இதன்படி வரிசைப்படுத்து"</string>
<string name="menu_search" msgid="3816712084502856974">"தேடு"</string>
- <string name="menu_settings" msgid="6008033148948428823">"அமைப்புகள்"</string>
+ <string name="menu_settings" msgid="6008033148948428823">"அமைப்பு"</string>
<string name="menu_open" msgid="432922957274920903">"திற"</string>
<string name="menu_save" msgid="2394743337684426338">"சேமி"</string>
<string name="menu_share" msgid="3075149983979628146">"பகிர்"</string>
<string name="menu_delete" msgid="8138799623850614177">"நீக்கு"</string>
- <string name="menu_select" msgid="8711270657353563424">"\"<xliff:g id="DIRECTORY">^1</xliff:g>\" ஐத் தேர்ந்தெடு"</string>
- <string name="mode_selected_count" msgid="459111894725594625">"<xliff:g id="COUNT">%1$d</xliff:g> தேர்ந்தெடுக்கப்பட்டன"</string>
+ <string name="menu_select_all" msgid="8323579667348729928">"எல்லாவற்றையும் தேர்ந்தெடு"</string>
+ <string name="menu_copy" msgid="3612326052677229148">"இங்கு நகலெடு…"</string>
+ <string name="menu_advanced_show" product="nosdcard" msgid="4693652895715631401">"அகச் சேமிப்பகத்தைக் காட்டு"</string>
+ <string name="menu_advanced_show" product="default" msgid="5792182900084144261">"SD கார்டைக் காட்டு"</string>
+ <string name="menu_advanced_hide" product="nosdcard" msgid="4218809952721972589">"அகச் சேமிப்பகத்தை மறை"</string>
+ <string name="menu_advanced_hide" product="default" msgid="4845869969015718848">"SD கார்டை மறை"</string>
+ <string name="menu_file_size_show" msgid="3240323619260823076">"கோப்பு அளவைக் காட்டு"</string>
+ <string name="menu_file_size_hide" msgid="8881975928502581042">"கோப்பு அளவை மறை"</string>
+ <string name="button_select" msgid="527196987259139214">"தேர்ந்தெடு"</string>
+ <string name="button_copy" msgid="8706475544635021302">"நகலெடு"</string>
<string name="sort_name" msgid="9183560467917256779">"பெயரின்படி"</string>
- <string name="sort_date" msgid="586080032956151448">"தேதியின்படி திருத்தப்பட்டது"</string>
+ <string name="sort_date" msgid="586080032956151448">"திருத்தப்பட்ட தேதியின்படி"</string>
<string name="sort_size" msgid="3350681319735474741">"அளவின்படி"</string>
<string name="drawer_open" msgid="4545466532430226949">"வழிகளைக் காட்டு"</string>
<string name="drawer_close" msgid="7602734368552123318">"வழிகளை மறை"</string>
@@ -45,11 +53,22 @@
<string name="root_type_shortcut" msgid="3318760609471618093">"குறுக்குவழிகள்"</string>
<string name="root_type_device" msgid="7121342474653483538">"சாதனங்கள்"</string>
<string name="root_type_apps" msgid="8838065367985945189">"மேலும் பயன்பாடுகள்"</string>
- <string name="pref_advanced_devices" msgid="903257239609301276">"மேம்பட்ட சாதனங்களைக் காட்டு"</string>
- <string name="pref_file_size" msgid="2826879315743961459">"கோப்பின் அளவைக் காட்டு"</string>
- <string name="pref_device_size" msgid="3542106883278997222">"சாதன அளவைக் காட்டு"</string>
- <string name="empty" msgid="7858882803708117596">"உருப்படிகள் இல்லை"</string>
+ <string name="empty" msgid="7858882803708117596">"எதுவும் இல்லை"</string>
<string name="toast_no_application" msgid="1339885974067891667">"கோப்பைத் திறக்க முடியவில்லை"</string>
<string name="toast_failed_delete" msgid="2180678019407244069">"சில ஆவணங்களை நீக்க முடியவில்லை"</string>
<string name="share_via" msgid="8966594246261344259">"இதன் வழியாகப் பகிர்"</string>
+ <string name="copy_notification_title" msgid="6374299806748219777">"கோப்புகளை நகலெடுத்தல்"</string>
+ <string name="copy_remaining" msgid="6283790937387975095">"<xliff:g id="DURATION">%s</xliff:g> மீதமுள்ளது"</string>
+ <plurals name="copy_begin" formatted="false" msgid="9071199452634086365">
+ <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> கோப்புகளை நகலெடுக்கிறது.</item>
+ <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> கோப்பை நகலெடுக்கிறது.</item>
+ </plurals>
+ <string name="copy_preparing" msgid="3896202461003039386">"நகல் தயாராகிறது…"</string>
+ <plurals name="copy_error_notification_title" formatted="false" msgid="5267616889076217261">
+ <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> கோப்புகளை நகலெடுக்க முடியவில்லை</item>
+ <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> கோப்பை நகலெடுக்க முடியவில்லை</item>
+ </plurals>
+ <string name="notification_touch_for_details" msgid="4483108577842961665">"விவரங்களைப் பார்க்க, தொடவும்"</string>
+ <string name="retry" msgid="7564024179122207376">"மீண்டும் முயற்சிக்கவும்"</string>
+ <string name="copy_failure_alert_content" msgid="3715575000297709082">"நகலெடுக்கப்படாத கோப்புகள்: <xliff:g id="LIST">%1$s</xliff:g>"</string>
</resources>
diff --git a/res/values-te-rIN/strings.xml b/res/values-te-rIN/strings.xml
index 54ce484..f24176f 100644
--- a/res/values-te-rIN/strings.xml
+++ b/res/values-te-rIN/strings.xml
@@ -29,8 +29,16 @@
<string name="menu_save" msgid="2394743337684426338">"సేవ్ చేయి"</string>
<string name="menu_share" msgid="3075149983979628146">"భాగస్వామ్యం చేయి"</string>
<string name="menu_delete" msgid="8138799623850614177">"తొలగించు"</string>
- <string name="menu_select" msgid="8711270657353563424">"\"<xliff:g id="DIRECTORY">^1</xliff:g>\"ని ఎంచుకోండి"</string>
- <string name="mode_selected_count" msgid="459111894725594625">"<xliff:g id="COUNT">%1$d</xliff:g> ఎంచుకోబడ్డాయి"</string>
+ <string name="menu_select_all" msgid="8323579667348729928">"అన్నీ ఎంచుకోండి"</string>
+ <string name="menu_copy" msgid="3612326052677229148">"ఇక్కడికి కాపీ చేయి…"</string>
+ <string name="menu_advanced_show" product="nosdcard" msgid="4693652895715631401">"అంతర్గత నిల్వను చూపు"</string>
+ <string name="menu_advanced_show" product="default" msgid="5792182900084144261">"SD కార్డ్ను చూపు"</string>
+ <string name="menu_advanced_hide" product="nosdcard" msgid="4218809952721972589">"అంతర్గత నిల్వను దాచు"</string>
+ <string name="menu_advanced_hide" product="default" msgid="4845869969015718848">"SD కార్డ్ను దాచు"</string>
+ <string name="menu_file_size_show" msgid="3240323619260823076">"ఫైల్ పరిమాణాన్ని చూపు"</string>
+ <string name="menu_file_size_hide" msgid="8881975928502581042">"ఫైల్ పరిమాణాన్ని దాచు"</string>
+ <string name="button_select" msgid="527196987259139214">"ఎంచుకోండి"</string>
+ <string name="button_copy" msgid="8706475544635021302">"కాపీ చేయి"</string>
<string name="sort_name" msgid="9183560467917256779">"పేరు ద్వారా"</string>
<string name="sort_date" msgid="586080032956151448">"సవరించిన తేదీ ద్వారా"</string>
<string name="sort_size" msgid="3350681319735474741">"పరిమాణం ద్వారా"</string>
@@ -45,11 +53,22 @@
<string name="root_type_shortcut" msgid="3318760609471618093">"సత్వరమార్గాలు"</string>
<string name="root_type_device" msgid="7121342474653483538">"పరికరాలు"</string>
<string name="root_type_apps" msgid="8838065367985945189">"మరిన్ని అనువర్తనాలు"</string>
- <string name="pref_advanced_devices" msgid="903257239609301276">"అధునాతన పరికరాలను చూపు"</string>
- <string name="pref_file_size" msgid="2826879315743961459">"ఫైల్ పరిమాణాన్ని ప్రదర్శించు"</string>
- <string name="pref_device_size" msgid="3542106883278997222">"పరికర పరిమాణాన్ని ప్రదర్శించు"</string>
<string name="empty" msgid="7858882803708117596">"అంశాలు లేవు"</string>
<string name="toast_no_application" msgid="1339885974067891667">"ఫైల్ను తెరవడం సాధ్యపడదు"</string>
<string name="toast_failed_delete" msgid="2180678019407244069">"కొన్ని పత్రాలను తొలగించడం సాధ్యపడలేదు"</string>
<string name="share_via" msgid="8966594246261344259">"దీని ద్వారా భాగస్వామ్యం చేయండి"</string>
+ <string name="copy_notification_title" msgid="6374299806748219777">"ఫైల్లు కాపీ అవుతున్నాయి"</string>
+ <string name="copy_remaining" msgid="6283790937387975095">"<xliff:g id="DURATION">%s</xliff:g> మిగిలి ఉంది"</string>
+ <plurals name="copy_begin" formatted="false" msgid="9071199452634086365">
+ <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> ఫైల్లను కాపీ చేస్తోంది.</item>
+ <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> ఫైల్ను కాపీ చేస్తోంది.</item>
+ </plurals>
+ <string name="copy_preparing" msgid="3896202461003039386">"కాపీ చేయడానికి సిద్ధం చేస్తోంది…"</string>
+ <plurals name="copy_error_notification_title" formatted="false" msgid="5267616889076217261">
+ <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> ఫైల్లను కాపీ చేయలేకపోయింది</item>
+ <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> ఫైల్ను కాపీ చేయలేకపోయింది</item>
+ </plurals>
+ <string name="notification_touch_for_details" msgid="4483108577842961665">"వివరాలను వీక్షించడానికి తాకండి"</string>
+ <string name="retry" msgid="7564024179122207376">"మళ్లీ ప్రయత్నించు"</string>
+ <string name="copy_failure_alert_content" msgid="3715575000297709082">"ఈ ఫైల్లు కాపీ చేయబడలేదు: <xliff:g id="LIST">%1$s</xliff:g>"</string>
</resources>
diff --git a/res/values-th/strings.xml b/res/values-th/strings.xml
index 4bf3e4f..101dfbb 100644
--- a/res/values-th/strings.xml
+++ b/res/values-th/strings.xml
@@ -29,8 +29,16 @@
<string name="menu_save" msgid="2394743337684426338">"บันทึก"</string>
<string name="menu_share" msgid="3075149983979628146">"แชร์"</string>
<string name="menu_delete" msgid="8138799623850614177">"ลบ"</string>
- <string name="menu_select" msgid="8711270657353563424">"เลือก \"<xliff:g id="DIRECTORY">^1</xliff:g>\""</string>
- <string name="mode_selected_count" msgid="459111894725594625">"เลือกไว้ <xliff:g id="COUNT">%1$d</xliff:g>"</string>
+ <string name="menu_select_all" msgid="8323579667348729928">"เลือกทั้งหมด"</string>
+ <string name="menu_copy" msgid="3612326052677229148">"คัดลอกไปยัง…"</string>
+ <string name="menu_advanced_show" product="nosdcard" msgid="4693652895715631401">"แสดงที่จัดเก็บภายใน"</string>
+ <string name="menu_advanced_show" product="default" msgid="5792182900084144261">"แสดงการ์ด SD"</string>
+ <string name="menu_advanced_hide" product="nosdcard" msgid="4218809952721972589">"ซ่อนที่จัดเก็บภายใน"</string>
+ <string name="menu_advanced_hide" product="default" msgid="4845869969015718848">"ซ่อนการ์ด SD"</string>
+ <string name="menu_file_size_show" msgid="3240323619260823076">"แสดงขนาดไฟล์"</string>
+ <string name="menu_file_size_hide" msgid="8881975928502581042">"ซ่อนขนาดไฟล์"</string>
+ <string name="button_select" msgid="527196987259139214">"เลือก"</string>
+ <string name="button_copy" msgid="8706475544635021302">"คัดลอก"</string>
<string name="sort_name" msgid="9183560467917256779">"ตามชื่อ"</string>
<string name="sort_date" msgid="586080032956151448">"ตามวันที่ที่ปรับเปลี่ยน"</string>
<string name="sort_size" msgid="3350681319735474741">"ตามขนาด"</string>
@@ -45,11 +53,22 @@
<string name="root_type_shortcut" msgid="3318760609471618093">"ทางลัด"</string>
<string name="root_type_device" msgid="7121342474653483538">"อุปกรณ์"</string>
<string name="root_type_apps" msgid="8838065367985945189">"แอปเพิ่มเติม"</string>
- <string name="pref_advanced_devices" msgid="903257239609301276">"แสดงอุปกรณ์ขั้นสูง"</string>
- <string name="pref_file_size" msgid="2826879315743961459">"แสดงขนาดของไฟล์"</string>
- <string name="pref_device_size" msgid="3542106883278997222">"แสดงขนาดของอุปกรณ์"</string>
<string name="empty" msgid="7858882803708117596">"ไม่มีรายการ"</string>
<string name="toast_no_application" msgid="1339885974067891667">"ไม่สามารถเปิดไฟล์ได้"</string>
<string name="toast_failed_delete" msgid="2180678019407244069">"ไม่สามารถลบเอกสารบางรายการ"</string>
<string name="share_via" msgid="8966594246261344259">"แชร์ผ่าน"</string>
+ <string name="copy_notification_title" msgid="6374299806748219777">"กำลังคัดลอกไฟล์"</string>
+ <string name="copy_remaining" msgid="6283790937387975095">"เหลือ <xliff:g id="DURATION">%s</xliff:g>"</string>
+ <plurals name="copy_begin" formatted="false" msgid="9071199452634086365">
+ <item quantity="other">กำลังคัดลอก <xliff:g id="COUNT_1">%1$d</xliff:g> ไฟล์</item>
+ <item quantity="one">กำลังคัดลอก <xliff:g id="COUNT_0">%1$d</xliff:g> ไฟล์</item>
+ </plurals>
+ <string name="copy_preparing" msgid="3896202461003039386">"กำลังเตรียมการคัดลอก…"</string>
+ <plurals name="copy_error_notification_title" formatted="false" msgid="5267616889076217261">
+ <item quantity="other">ไม่สามารถคัดลอก <xliff:g id="COUNT_1">%1$d</xliff:g> ไฟล์</item>
+ <item quantity="one">ไม่สามารถคัดลอก <xliff:g id="COUNT_0">%1$d</xliff:g> ไฟล์</item>
+ </plurals>
+ <string name="notification_touch_for_details" msgid="4483108577842961665">"แตะเพื่อดูรายละเอียด"</string>
+ <string name="retry" msgid="7564024179122207376">"ลองอีกครั้ง"</string>
+ <string name="copy_failure_alert_content" msgid="3715575000297709082">"ไม่มีการคัดลอกไฟล์เหล่านี้: <xliff:g id="LIST">%1$s</xliff:g>"</string>
</resources>
diff --git a/res/values-tl/strings.xml b/res/values-tl/strings.xml
index 8ef8aa5..1a06cd4 100644
--- a/res/values-tl/strings.xml
+++ b/res/values-tl/strings.xml
@@ -20,17 +20,25 @@
<string name="title_open" msgid="4353228937663917801">"Buksan mula sa"</string>
<string name="title_save" msgid="2433679664882857999">"I-save sa"</string>
<string name="menu_create_dir" msgid="5947289605844398389">"Gumawa ng folder"</string>
- <string name="menu_grid" msgid="6878021334497835259">"View ng grid"</string>
- <string name="menu_list" msgid="7279285939892417279">"View ng listahan"</string>
- <string name="menu_sort" msgid="7677740407158414452">"Pag-uri-uriin ayon sa"</string>
+ <string name="menu_grid" msgid="6878021334497835259">"View na grid"</string>
+ <string name="menu_list" msgid="7279285939892417279">"View na listahan"</string>
+ <string name="menu_sort" msgid="7677740407158414452">"Uriin ayon sa"</string>
<string name="menu_search" msgid="3816712084502856974">"Maghanap"</string>
<string name="menu_settings" msgid="6008033148948428823">"Mga Setting"</string>
<string name="menu_open" msgid="432922957274920903">"Buksan"</string>
<string name="menu_save" msgid="2394743337684426338">"I-save"</string>
<string name="menu_share" msgid="3075149983979628146">"Ibahagi"</string>
<string name="menu_delete" msgid="8138799623850614177">"Tanggalin"</string>
- <string name="menu_select" msgid="8711270657353563424">"Piliin ang \"<xliff:g id="DIRECTORY">^1</xliff:g>\""</string>
- <string name="mode_selected_count" msgid="459111894725594625">"<xliff:g id="COUNT">%1$d</xliff:g> ang pinili"</string>
+ <string name="menu_select_all" msgid="8323579667348729928">"Piliin lahat"</string>
+ <string name="menu_copy" msgid="3612326052677229148">"Kopyahin sa..."</string>
+ <string name="menu_advanced_show" product="nosdcard" msgid="4693652895715631401">"Ipakita internal storage"</string>
+ <string name="menu_advanced_show" product="default" msgid="5792182900084144261">"Ipakita ang SD card"</string>
+ <string name="menu_advanced_hide" product="nosdcard" msgid="4218809952721972589">"Itago internal storage"</string>
+ <string name="menu_advanced_hide" product="default" msgid="4845869969015718848">"Itago ang SD card"</string>
+ <string name="menu_file_size_show" msgid="3240323619260823076">"Ipakita ang laki ng file"</string>
+ <string name="menu_file_size_hide" msgid="8881975928502581042">"Itago ang laki ng file"</string>
+ <string name="button_select" msgid="527196987259139214">"Pumili"</string>
+ <string name="button_copy" msgid="8706475544635021302">"Kopyahin"</string>
<string name="sort_name" msgid="9183560467917256779">"Ayon sa pangalan"</string>
<string name="sort_date" msgid="586080032956151448">"Ayon sa petsa ng pagbago"</string>
<string name="sort_size" msgid="3350681319735474741">"Ayon sa laki"</string>
@@ -45,11 +53,22 @@
<string name="root_type_shortcut" msgid="3318760609471618093">"Mga Shortcut"</string>
<string name="root_type_device" msgid="7121342474653483538">"Mga Device"</string>
<string name="root_type_apps" msgid="8838065367985945189">"Higit pang apps"</string>
- <string name="pref_advanced_devices" msgid="903257239609301276">"Ipakita ang mga advanced na device"</string>
- <string name="pref_file_size" msgid="2826879315743961459">"Ipakita ang laki ng file"</string>
- <string name="pref_device_size" msgid="3542106883278997222">"Ipakita ang laki ng device"</string>
<string name="empty" msgid="7858882803708117596">"Walang mga item"</string>
<string name="toast_no_application" msgid="1339885974067891667">"Hindi mabuksan ang file"</string>
<string name="toast_failed_delete" msgid="2180678019407244069">"Hindi matanggal ang ilang dokumento"</string>
<string name="share_via" msgid="8966594246261344259">"Ibahagi sa pamamagitan ng"</string>
+ <string name="copy_notification_title" msgid="6374299806748219777">"Kinokopya ang mga file"</string>
+ <string name="copy_remaining" msgid="6283790937387975095">"<xliff:g id="DURATION">%s</xliff:g> na lang ang natitira"</string>
+ <plurals name="copy_begin" formatted="false" msgid="9071199452634086365">
+ <item quantity="one">Kumokopya ng <xliff:g id="COUNT_1">%1$d</xliff:g> file.</item>
+ <item quantity="other">Kumokopya ng <xliff:g id="COUNT_1">%1$d</xliff:g> na file.</item>
+ </plurals>
+ <string name="copy_preparing" msgid="3896202461003039386">"Naghahanda para sa pagkopya…"</string>
+ <plurals name="copy_error_notification_title" formatted="false" msgid="5267616889076217261">
+ <item quantity="one">Hindi makopya ang <xliff:g id="COUNT_1">%1$d</xliff:g> file</item>
+ <item quantity="other">Hindi makopya ang <xliff:g id="COUNT_1">%1$d</xliff:g> na file</item>
+ </plurals>
+ <string name="notification_touch_for_details" msgid="4483108577842961665">"Pindutin upang tingnan ang mga detalye"</string>
+ <string name="retry" msgid="7564024179122207376">"Subukang muli"</string>
+ <string name="copy_failure_alert_content" msgid="3715575000297709082">"Hindi nakopya ang mga file na ito: <xliff:g id="LIST">%1$s</xliff:g>"</string>
</resources>
diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml
index 93586d0..9258065 100644
--- a/res/values-tr/strings.xml
+++ b/res/values-tr/strings.xml
@@ -29,8 +29,16 @@
<string name="menu_save" msgid="2394743337684426338">"Kaydet"</string>
<string name="menu_share" msgid="3075149983979628146">"Paylaş"</string>
<string name="menu_delete" msgid="8138799623850614177">"Sil"</string>
- <string name="menu_select" msgid="8711270657353563424">"\"<xliff:g id="DIRECTORY">^1</xliff:g>\" dizinini seç"</string>
- <string name="mode_selected_count" msgid="459111894725594625">"<xliff:g id="COUNT">%1$d</xliff:g> tane seçildi"</string>
+ <string name="menu_select_all" msgid="8323579667348729928">"Tümünü seç"</string>
+ <string name="menu_copy" msgid="3612326052677229148">"Kopyala…"</string>
+ <string name="menu_advanced_show" product="nosdcard" msgid="4693652895715631401">"Dahili depolamayı göster"</string>
+ <string name="menu_advanced_show" product="default" msgid="5792182900084144261">"SD kartı göster"</string>
+ <string name="menu_advanced_hide" product="nosdcard" msgid="4218809952721972589">"Dahili depolamayı gizle"</string>
+ <string name="menu_advanced_hide" product="default" msgid="4845869969015718848">"SD kartı gizle"</string>
+ <string name="menu_file_size_show" msgid="3240323619260823076">"Dosya boyutunu göster"</string>
+ <string name="menu_file_size_hide" msgid="8881975928502581042">"Dosya boyutunu gizle"</string>
+ <string name="button_select" msgid="527196987259139214">"Seç"</string>
+ <string name="button_copy" msgid="8706475544635021302">"Kopyala"</string>
<string name="sort_name" msgid="9183560467917256779">"Ada göre"</string>
<string name="sort_date" msgid="586080032956151448">"Değişiklik tarihine göre"</string>
<string name="sort_size" msgid="3350681319735474741">"Boyuta göre"</string>
@@ -45,11 +53,22 @@
<string name="root_type_shortcut" msgid="3318760609471618093">"Kısayollar"</string>
<string name="root_type_device" msgid="7121342474653483538">"Cihazlar"</string>
<string name="root_type_apps" msgid="8838065367985945189">"Diğer uygulamalar"</string>
- <string name="pref_advanced_devices" msgid="903257239609301276">"Gelişmiş cihazları göster"</string>
- <string name="pref_file_size" msgid="2826879315743961459">"Dosya boyutunu göster"</string>
- <string name="pref_device_size" msgid="3542106883278997222">"Cihaz boyutunu göster"</string>
<string name="empty" msgid="7858882803708117596">"Öğe yok"</string>
<string name="toast_no_application" msgid="1339885974067891667">"Dosya açılamıyor"</string>
<string name="toast_failed_delete" msgid="2180678019407244069">"Bazı dokümanlar silinemiyor"</string>
<string name="share_via" msgid="8966594246261344259">"Şunu kullanarak paylaş:"</string>
+ <string name="copy_notification_title" msgid="6374299806748219777">"Dosyalar kopyalanıyor"</string>
+ <string name="copy_remaining" msgid="6283790937387975095">"<xliff:g id="DURATION">%s</xliff:g> kaldı"</string>
+ <plurals name="copy_begin" formatted="false" msgid="9071199452634086365">
+ <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> dosya kopyalanıyor.</item>
+ <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> dosya kopyalanıyor.</item>
+ </plurals>
+ <string name="copy_preparing" msgid="3896202461003039386">"Kopyalanmak için hazırlanıyor…"</string>
+ <plurals name="copy_error_notification_title" formatted="false" msgid="5267616889076217261">
+ <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> dosya kopyalanamadı</item>
+ <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> dosya kopyalanamadı</item>
+ </plurals>
+ <string name="notification_touch_for_details" msgid="4483108577842961665">"Ayrıntıları görüntülemek için dokunun"</string>
+ <string name="retry" msgid="7564024179122207376">"Yeniden dene"</string>
+ <string name="copy_failure_alert_content" msgid="3715575000297709082">"Şu dosyalar kopyalanmadı: <xliff:g id="LIST">%1$s</xliff:g>"</string>
</resources>
diff --git a/res/values-uk/strings.xml b/res/values-uk/strings.xml
index 8f8865b..c4c92de 100644
--- a/res/values-uk/strings.xml
+++ b/res/values-uk/strings.xml
@@ -17,7 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="2783841764617238354">"Документи"</string>
- <string name="title_open" msgid="4353228937663917801">"Відкрити в"</string>
+ <string name="title_open" msgid="4353228937663917801">"Відкрити"</string>
<string name="title_save" msgid="2433679664882857999">"Зберегти в"</string>
<string name="menu_create_dir" msgid="5947289605844398389">"Створити папку"</string>
<string name="menu_grid" msgid="6878021334497835259">"Режим таблиці"</string>
@@ -29,8 +29,16 @@
<string name="menu_save" msgid="2394743337684426338">"Зберегти"</string>
<string name="menu_share" msgid="3075149983979628146">"Поділитися"</string>
<string name="menu_delete" msgid="8138799623850614177">"Видалити"</string>
- <string name="menu_select" msgid="8711270657353563424">"Вибрати каталог \"<xliff:g id="DIRECTORY">^1</xliff:g>\""</string>
- <string name="mode_selected_count" msgid="459111894725594625">"Вибрано <xliff:g id="COUNT">%1$d</xliff:g>"</string>
+ <string name="menu_select_all" msgid="8323579667348729928">"Вибрати все"</string>
+ <string name="menu_copy" msgid="3612326052677229148">"Копіювати в…"</string>
+ <string name="menu_advanced_show" product="nosdcard" msgid="4693652895715631401">"Показати внутр. пам’ять"</string>
+ <string name="menu_advanced_show" product="default" msgid="5792182900084144261">"Показати карту SD"</string>
+ <string name="menu_advanced_hide" product="nosdcard" msgid="4218809952721972589">"Сховати внутр. пам’ять"</string>
+ <string name="menu_advanced_hide" product="default" msgid="4845869969015718848">"Сховати карту SD"</string>
+ <string name="menu_file_size_show" msgid="3240323619260823076">"Показати розмір файлу"</string>
+ <string name="menu_file_size_hide" msgid="8881975928502581042">"Сховати розмір файлу"</string>
+ <string name="button_select" msgid="527196987259139214">"Вибрати"</string>
+ <string name="button_copy" msgid="8706475544635021302">"Копіювати"</string>
<string name="sort_name" msgid="9183560467917256779">"За назвою"</string>
<string name="sort_date" msgid="586080032956151448">"За датою змінення"</string>
<string name="sort_size" msgid="3350681319735474741">"За розміром"</string>
@@ -45,11 +53,26 @@
<string name="root_type_shortcut" msgid="3318760609471618093">"Ярлики"</string>
<string name="root_type_device" msgid="7121342474653483538">"Пристрої"</string>
<string name="root_type_apps" msgid="8838065367985945189">"Інші програми"</string>
- <string name="pref_advanced_devices" msgid="903257239609301276">"Показати покращені пристрої"</string>
- <string name="pref_file_size" msgid="2826879315743961459">"Показати розмір файлу"</string>
- <string name="pref_device_size" msgid="3542106883278997222">"Показати розмір пристрою"</string>
- <string name="empty" msgid="7858882803708117596">"Немає елементів"</string>
+ <string name="empty" msgid="7858882803708117596">"Нічого немає"</string>
<string name="toast_no_application" msgid="1339885974067891667">"Не вдалося відкрити файл"</string>
<string name="toast_failed_delete" msgid="2180678019407244069">"Не вдалося видалити деякі документи"</string>
<string name="share_via" msgid="8966594246261344259">"Надіслати через"</string>
+ <string name="copy_notification_title" msgid="6374299806748219777">"Копіювання файлів"</string>
+ <string name="copy_remaining" msgid="6283790937387975095">"Залишилося <xliff:g id="DURATION">%s</xliff:g>"</string>
+ <plurals name="copy_begin" formatted="false" msgid="9071199452634086365">
+ <item quantity="one">Копіювання <xliff:g id="COUNT_1">%1$d</xliff:g> файлу.</item>
+ <item quantity="few">Копіювання <xliff:g id="COUNT_1">%1$d</xliff:g> файлів.</item>
+ <item quantity="many">Копіювання <xliff:g id="COUNT_1">%1$d</xliff:g> файлів.</item>
+ <item quantity="other">Копіювання <xliff:g id="COUNT_1">%1$d</xliff:g> файлу.</item>
+ </plurals>
+ <string name="copy_preparing" msgid="3896202461003039386">"Підготовка до копіювання…"</string>
+ <plurals name="copy_error_notification_title" formatted="false" msgid="5267616889076217261">
+ <item quantity="one">Не вдалося скопіювати <xliff:g id="COUNT_1">%1$d</xliff:g> файл</item>
+ <item quantity="few">Не вдалося скопіювати <xliff:g id="COUNT_1">%1$d</xliff:g> файли</item>
+ <item quantity="many">Не вдалося скопіювати <xliff:g id="COUNT_1">%1$d</xliff:g> файлів</item>
+ <item quantity="other">Не вдалося скопіювати <xliff:g id="COUNT_1">%1$d</xliff:g> файлу</item>
+ </plurals>
+ <string name="notification_touch_for_details" msgid="4483108577842961665">"Торкніться, щоб дізнатися більше"</string>
+ <string name="retry" msgid="7564024179122207376">"Повторити"</string>
+ <string name="copy_failure_alert_content" msgid="3715575000297709082">"Ці файли не скопійовано: <xliff:g id="LIST">%1$s</xliff:g>"</string>
</resources>
diff --git a/res/values-ur-rPK/strings.xml b/res/values-ur-rPK/strings.xml
index a57f5b1..e350c32 100644
--- a/res/values-ur-rPK/strings.xml
+++ b/res/values-ur-rPK/strings.xml
@@ -29,8 +29,16 @@
<string name="menu_save" msgid="2394743337684426338">"محفوظ کریں"</string>
<string name="menu_share" msgid="3075149983979628146">"اشتراک کریں"</string>
<string name="menu_delete" msgid="8138799623850614177">"حذف کریں"</string>
- <string name="menu_select" msgid="8711270657353563424">"\"<xliff:g id="DIRECTORY">^1</xliff:g>\" منتخب کریں"</string>
- <string name="mode_selected_count" msgid="459111894725594625">"<xliff:g id="COUNT">%1$d</xliff:g> کو منتخب کیا گیا"</string>
+ <string name="menu_select_all" msgid="8323579667348729928">"سبھی کو منتخب کریں"</string>
+ <string name="menu_copy" msgid="3612326052677229148">"اس میں کاپی کریں…"</string>
+ <string name="menu_advanced_show" product="nosdcard" msgid="4693652895715631401">"داخلی اسٹوریج دکھائیں"</string>
+ <string name="menu_advanced_show" product="default" msgid="5792182900084144261">"SD کارڈ دکھائیں"</string>
+ <string name="menu_advanced_hide" product="nosdcard" msgid="4218809952721972589">"داخلی اسٹوریج چھپائیں"</string>
+ <string name="menu_advanced_hide" product="default" msgid="4845869969015718848">"SD کارڈ چھپائیں"</string>
+ <string name="menu_file_size_show" msgid="3240323619260823076">"فائل سائز دکھائیں"</string>
+ <string name="menu_file_size_hide" msgid="8881975928502581042">"فائل سائز چھپائیں"</string>
+ <string name="button_select" msgid="527196987259139214">"منتخب کریں"</string>
+ <string name="button_copy" msgid="8706475544635021302">"کاپی کریں"</string>
<string name="sort_name" msgid="9183560467917256779">"نام کے لحاظ سے"</string>
<string name="sort_date" msgid="586080032956151448">"ترمیم کی تاریخ کے لحاظ سے"</string>
<string name="sort_size" msgid="3350681319735474741">"سائز کے لحاظ سے"</string>
@@ -45,11 +53,22 @@
<string name="root_type_shortcut" msgid="3318760609471618093">"شارٹ کٹس"</string>
<string name="root_type_device" msgid="7121342474653483538">"آلات"</string>
<string name="root_type_apps" msgid="8838065367985945189">"مزید ایپس"</string>
- <string name="pref_advanced_devices" msgid="903257239609301276">"جدید آلات ڈسپلے کریں"</string>
- <string name="pref_file_size" msgid="2826879315743961459">"فائل کا سائز ڈسپلے کریں"</string>
- <string name="pref_device_size" msgid="3542106883278997222">"آلہ کا سائز ڈسپلے کریں"</string>
<string name="empty" msgid="7858882803708117596">"کوئی آئٹمز نہيں ہیں"</string>
<string name="toast_no_application" msgid="1339885974067891667">"فائل نہيں کھول سکتے ہیں"</string>
<string name="toast_failed_delete" msgid="2180678019407244069">"کچھ دستاویزات کو حذف کرنے سے قاصر"</string>
<string name="share_via" msgid="8966594246261344259">"اشتراک کریں بذریعہ"</string>
+ <string name="copy_notification_title" msgid="6374299806748219777">"فائلیں کاپی ہو رہی ہیں"</string>
+ <string name="copy_remaining" msgid="6283790937387975095">"<xliff:g id="DURATION">%s</xliff:g> باقی ہے"</string>
+ <plurals name="copy_begin" formatted="false" msgid="9071199452634086365">
+ <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> فائلیں کاپی کی جا رہی ہیں۔</item>
+ <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> فائل کاپی کی جا رہی ہے۔</item>
+ </plurals>
+ <string name="copy_preparing" msgid="3896202461003039386">"کاپی کیلئے تیار ہو رہا ہے…"</string>
+ <plurals name="copy_error_notification_title" formatted="false" msgid="5267616889076217261">
+ <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> فائلز کاپی نہیں کی جا سکیں</item>
+ <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> فائل کاپی نہیں کی جا سکی</item>
+ </plurals>
+ <string name="notification_touch_for_details" msgid="4483108577842961665">"تفصیلات دیکھنے کیلئے ٹچ کریں"</string>
+ <string name="retry" msgid="7564024179122207376">"دوبارہ کوشش کریں"</string>
+ <string name="copy_failure_alert_content" msgid="3715575000297709082">"یہ فائلز کاپی نہیں کی گئیں: <xliff:g id="LIST">%1$s</xliff:g>"</string>
</resources>
diff --git a/res/values-uz-rUZ/strings.xml b/res/values-uz-rUZ/strings.xml
index 2ba2bab..f92fcf1 100644
--- a/res/values-uz-rUZ/strings.xml
+++ b/res/values-uz-rUZ/strings.xml
@@ -20,17 +20,25 @@
<string name="title_open" msgid="4353228937663917801">"Ochish"</string>
<string name="title_save" msgid="2433679664882857999">"Saqlash"</string>
<string name="menu_create_dir" msgid="5947289605844398389">"Jild yaratish"</string>
- <string name="menu_grid" msgid="6878021334497835259">"Katakchalar ko‘rinishida"</string>
+ <string name="menu_grid" msgid="6878021334497835259">"Katak ko‘rinishida"</string>
<string name="menu_list" msgid="7279285939892417279">"Ro‘yxat ko‘rinishida"</string>
- <string name="menu_sort" msgid="7677740407158414452">"Saralash:"</string>
+ <string name="menu_sort" msgid="7677740407158414452">"Saralash"</string>
<string name="menu_search" msgid="3816712084502856974">"Izlash"</string>
<string name="menu_settings" msgid="6008033148948428823">"Sozlamalar"</string>
<string name="menu_open" msgid="432922957274920903">"Ochish"</string>
<string name="menu_save" msgid="2394743337684426338">"Saqlash"</string>
<string name="menu_share" msgid="3075149983979628146">"Ulashish"</string>
<string name="menu_delete" msgid="8138799623850614177">"O‘chirish"</string>
- <string name="menu_select" msgid="8711270657353563424">"“<xliff:g id="DIRECTORY">^1</xliff:g>” jildini tanlash"</string>
- <string name="mode_selected_count" msgid="459111894725594625">"<xliff:g id="COUNT">%1$d</xliff:g> belgilandi"</string>
+ <string name="menu_select_all" msgid="8323579667348729928">"Barchasini belgilash"</string>
+ <string name="menu_copy" msgid="3612326052677229148">"Nusxalash…"</string>
+ <string name="menu_advanced_show" product="nosdcard" msgid="4693652895715631401">"Ichki xotirani ko‘rsatish"</string>
+ <string name="menu_advanced_show" product="default" msgid="5792182900084144261">"SD kartani ko‘rsatish"</string>
+ <string name="menu_advanced_hide" product="nosdcard" msgid="4218809952721972589">"Ichki xotirani berkitish"</string>
+ <string name="menu_advanced_hide" product="default" msgid="4845869969015718848">"SD kartani berkitish"</string>
+ <string name="menu_file_size_show" msgid="3240323619260823076">"Fayl hajmini ko‘rsatish"</string>
+ <string name="menu_file_size_hide" msgid="8881975928502581042">"Fayl hajmini berkitish"</string>
+ <string name="button_select" msgid="527196987259139214">"Tanlash"</string>
+ <string name="button_copy" msgid="8706475544635021302">"Nusxalash"</string>
<string name="sort_name" msgid="9183560467917256779">"Nomi bo‘yicha"</string>
<string name="sort_date" msgid="586080032956151448">"Tahrir sanasi bo‘yicha"</string>
<string name="sort_size" msgid="3350681319735474741">"Hajmi bo‘yicha"</string>
@@ -39,17 +47,28 @@
<string name="save_error" msgid="6167009778003223664">"Hujjat saqlanmadi"</string>
<string name="create_error" msgid="3735649141335444215">"Jild yaratilmadi"</string>
<string name="query_error" msgid="1222448261663503501">"Hujjatlar so‘rovi jo‘natilmadi"</string>
- <string name="root_recent" msgid="4470053704320518133">"So‘nggi"</string>
+ <string name="root_recent" msgid="4470053704320518133">"Yaqinda"</string>
<string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> bo‘sh"</string>
<string name="root_type_service" msgid="2178854894416775409">"Xotira xizmatlari"</string>
<string name="root_type_shortcut" msgid="3318760609471618093">"Yorliqlar"</string>
<string name="root_type_device" msgid="7121342474653483538">"Qurilmalar"</string>
<string name="root_type_apps" msgid="8838065367985945189">"Ko‘proq dasturlar"</string>
- <string name="pref_advanced_devices" msgid="903257239609301276">"Qo‘shimcha qurilmalarni ko‘rsatish"</string>
- <string name="pref_file_size" msgid="2826879315743961459">"Fayl hajmini ko‘rsatish"</string>
- <string name="pref_device_size" msgid="3542106883278997222">"Qurilma hajmini ko‘rsatish"</string>
- <string name="empty" msgid="7858882803708117596">"Hech nima yo‘q"</string>
+ <string name="empty" msgid="7858882803708117596">"Hech narsa yo‘q"</string>
<string name="toast_no_application" msgid="1339885974067891667">"Fayl ochilmadi"</string>
<string name="toast_failed_delete" msgid="2180678019407244069">"Ba’zi hujjatlar o‘chirilmadi"</string>
<string name="share_via" msgid="8966594246261344259">"Quyidagi orqali ulashish"</string>
+ <string name="copy_notification_title" msgid="6374299806748219777">"Fayllar nusxalanmoqda"</string>
+ <string name="copy_remaining" msgid="6283790937387975095">"<xliff:g id="DURATION">%s</xliff:g> qoldi"</string>
+ <plurals name="copy_begin" formatted="false" msgid="9071199452634086365">
+ <item quantity="other"> <xliff:g id="COUNT_1">%1$d</xliff:g> ta fayl nusxalanmoqda</item>
+ <item quantity="one"> <xliff:g id="COUNT_0">%1$d</xliff:g> ta fayl nusxalanmoqda</item>
+ </plurals>
+ <string name="copy_preparing" msgid="3896202461003039386">"Nuxsa olishga tayyorgarlik..."</string>
+ <plurals name="copy_error_notification_title" formatted="false" msgid="5267616889076217261">
+ <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> ta fayldan nusxa olinmadi</item>
+ <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> ta fayldan nusxa olinmadi</item>
+ </plurals>
+ <string name="notification_touch_for_details" msgid="4483108577842961665">"Batafsil ma’lumot olish uchun bosing"</string>
+ <string name="retry" msgid="7564024179122207376">"Qayta urinish"</string>
+ <string name="copy_failure_alert_content" msgid="3715575000297709082">"Ushbu fayllardan nusxa olinmadi: <xliff:g id="LIST">%1$s</xliff:g>"</string>
</resources>
diff --git a/res/values-vi/strings.xml b/res/values-vi/strings.xml
index 8b8ff1f..9d1dfa8 100644
--- a/res/values-vi/strings.xml
+++ b/res/values-vi/strings.xml
@@ -29,8 +29,16 @@
<string name="menu_save" msgid="2394743337684426338">"Lưu"</string>
<string name="menu_share" msgid="3075149983979628146">"Chia sẻ"</string>
<string name="menu_delete" msgid="8138799623850614177">"Xóa"</string>
- <string name="menu_select" msgid="8711270657353563424">"Chọn \"<xliff:g id="DIRECTORY">^1</xliff:g>\""</string>
- <string name="mode_selected_count" msgid="459111894725594625">"Đã chọn <xliff:g id="COUNT">%1$d</xliff:g>"</string>
+ <string name="menu_select_all" msgid="8323579667348729928">"Chọn tất cả"</string>
+ <string name="menu_copy" msgid="3612326052677229148">"Sao chép vào…"</string>
+ <string name="menu_advanced_show" product="nosdcard" msgid="4693652895715631401">"Hiển thị bộ nhớ trong"</string>
+ <string name="menu_advanced_show" product="default" msgid="5792182900084144261">"Hiển thị thẻ SD"</string>
+ <string name="menu_advanced_hide" product="nosdcard" msgid="4218809952721972589">"Ẩn bộ nhớ trong"</string>
+ <string name="menu_advanced_hide" product="default" msgid="4845869969015718848">"Ẩn thẻ SD"</string>
+ <string name="menu_file_size_show" msgid="3240323619260823076">"Hiển thị kích thước tệp"</string>
+ <string name="menu_file_size_hide" msgid="8881975928502581042">"Ẩn kích thước tệp"</string>
+ <string name="button_select" msgid="527196987259139214">"Chọn"</string>
+ <string name="button_copy" msgid="8706475544635021302">"Sao chép"</string>
<string name="sort_name" msgid="9183560467917256779">"Theo tên"</string>
<string name="sort_date" msgid="586080032956151448">"Theo ngày sửa đổi"</string>
<string name="sort_size" msgid="3350681319735474741">"Theo kích thước"</string>
@@ -45,11 +53,22 @@
<string name="root_type_shortcut" msgid="3318760609471618093">"Lối tắt"</string>
<string name="root_type_device" msgid="7121342474653483538">"Thiết bị"</string>
<string name="root_type_apps" msgid="8838065367985945189">"Các ứng dụng khác"</string>
- <string name="pref_advanced_devices" msgid="903257239609301276">"Hiển thị các thiết bị nâng cao"</string>
- <string name="pref_file_size" msgid="2826879315743961459">"Hiển thị kích thước tệp"</string>
- <string name="pref_device_size" msgid="3542106883278997222">"Hiển thị kích thước thiết bị"</string>
<string name="empty" msgid="7858882803708117596">"Không có mục nào"</string>
<string name="toast_no_application" msgid="1339885974067891667">"Không thể mở tệp"</string>
<string name="toast_failed_delete" msgid="2180678019407244069">"Không thể xóa một số tài liệu"</string>
<string name="share_via" msgid="8966594246261344259">"Chia sẻ qua"</string>
+ <string name="copy_notification_title" msgid="6374299806748219777">"Đang sao chép tệp"</string>
+ <string name="copy_remaining" msgid="6283790937387975095">"Còn <xliff:g id="DURATION">%s</xliff:g>"</string>
+ <plurals name="copy_begin" formatted="false" msgid="9071199452634086365">
+ <item quantity="other">Đang sao chép <xliff:g id="COUNT_1">%1$d</xliff:g> tệp.</item>
+ <item quantity="one">Đang sao chép <xliff:g id="COUNT_0">%1$d</xliff:g> tệp.</item>
+ </plurals>
+ <string name="copy_preparing" msgid="3896202461003039386">"Đang chuẩn bị sao chép…"</string>
+ <plurals name="copy_error_notification_title" formatted="false" msgid="5267616889076217261">
+ <item quantity="other">Không thể sao chép <xliff:g id="COUNT_1">%1$d</xliff:g> tệp</item>
+ <item quantity="one">Không thể sao chép <xliff:g id="COUNT_0">%1$d</xliff:g> tệp</item>
+ </plurals>
+ <string name="notification_touch_for_details" msgid="4483108577842961665">"Chạm để xem chi tiết"</string>
+ <string name="retry" msgid="7564024179122207376">"Thử lại"</string>
+ <string name="copy_failure_alert_content" msgid="3715575000297709082">"Những tệp này chưa được sao chép: <xliff:g id="LIST">%1$s</xliff:g>"</string>
</resources>
diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml
index 68ab5f8..1d005b0 100644
--- a/res/values-zh-rCN/strings.xml
+++ b/res/values-zh-rCN/strings.xml
@@ -29,8 +29,16 @@
<string name="menu_save" msgid="2394743337684426338">"保存"</string>
<string name="menu_share" msgid="3075149983979628146">"分享"</string>
<string name="menu_delete" msgid="8138799623850614177">"删除"</string>
- <string name="menu_select" msgid="8711270657353563424">"选择“<xliff:g id="DIRECTORY">^1</xliff:g>”"</string>
- <string name="mode_selected_count" msgid="459111894725594625">"已选择<xliff:g id="COUNT">%1$d</xliff:g>项"</string>
+ <string name="menu_select_all" msgid="8323579667348729928">"全选"</string>
+ <string name="menu_copy" msgid="3612326052677229148">"复制到…"</string>
+ <string name="menu_advanced_show" product="nosdcard" msgid="4693652895715631401">"显示内部存储设备"</string>
+ <string name="menu_advanced_show" product="default" msgid="5792182900084144261">"显示SD卡"</string>
+ <string name="menu_advanced_hide" product="nosdcard" msgid="4218809952721972589">"隐藏内部存储设备"</string>
+ <string name="menu_advanced_hide" product="default" msgid="4845869969015718848">"隐藏SD卡"</string>
+ <string name="menu_file_size_show" msgid="3240323619260823076">"显示文件大小"</string>
+ <string name="menu_file_size_hide" msgid="8881975928502581042">"隐藏文件大小"</string>
+ <string name="button_select" msgid="527196987259139214">"选择"</string>
+ <string name="button_copy" msgid="8706475544635021302">"复制"</string>
<string name="sort_name" msgid="9183560467917256779">"按名称"</string>
<string name="sort_date" msgid="586080032956151448">"按修改日期"</string>
<string name="sort_size" msgid="3350681319735474741">"按大小"</string>
@@ -45,11 +53,22 @@
<string name="root_type_shortcut" msgid="3318760609471618093">"捷径"</string>
<string name="root_type_device" msgid="7121342474653483538">"设备"</string>
<string name="root_type_apps" msgid="8838065367985945189">"更多应用"</string>
- <string name="pref_advanced_devices" msgid="903257239609301276">"显示高级设备"</string>
- <string name="pref_file_size" msgid="2826879315743961459">"显示文件大小"</string>
- <string name="pref_device_size" msgid="3542106883278997222">"显示设备大小"</string>
<string name="empty" msgid="7858882803708117596">"无任何文件"</string>
<string name="toast_no_application" msgid="1339885974067891667">"无法打开文件"</string>
<string name="toast_failed_delete" msgid="2180678019407244069">"无法删除部分文档"</string>
<string name="share_via" msgid="8966594246261344259">"分享方式"</string>
+ <string name="copy_notification_title" msgid="6374299806748219777">"正在复制文件"</string>
+ <string name="copy_remaining" msgid="6283790937387975095">"剩余时间:<xliff:g id="DURATION">%s</xliff:g>"</string>
+ <plurals name="copy_begin" formatted="false" msgid="9071199452634086365">
+ <item quantity="other">正在复制 <xliff:g id="COUNT_1">%1$d</xliff:g> 个文件。</item>
+ <item quantity="one">正在复制 <xliff:g id="COUNT_0">%1$d</xliff:g> 个文件。</item>
+ </plurals>
+ <string name="copy_preparing" msgid="3896202461003039386">"正在准备复制…"</string>
+ <plurals name="copy_error_notification_title" formatted="false" msgid="5267616889076217261">
+ <item quantity="other">无法复制 <xliff:g id="COUNT_1">%1$d</xliff:g> 个文件</item>
+ <item quantity="one">无法复制 <xliff:g id="COUNT_0">%1$d</xliff:g> 个文件</item>
+ </plurals>
+ <string name="notification_touch_for_details" msgid="4483108577842961665">"触摸可查看详情"</string>
+ <string name="retry" msgid="7564024179122207376">"重试"</string>
+ <string name="copy_failure_alert_content" msgid="3715575000297709082">"以下文件无法复制:<xliff:g id="LIST">%1$s</xliff:g>"</string>
</resources>
diff --git a/res/values-zh-rHK/strings.xml b/res/values-zh-rHK/strings.xml
index 4aefd0d..a4ff79f 100644
--- a/res/values-zh-rHK/strings.xml
+++ b/res/values-zh-rHK/strings.xml
@@ -29,8 +29,16 @@
<string name="menu_save" msgid="2394743337684426338">"儲存"</string>
<string name="menu_share" msgid="3075149983979628146">"分享"</string>
<string name="menu_delete" msgid="8138799623850614177">"刪除"</string>
- <string name="menu_select" msgid="8711270657353563424">"選取「<xliff:g id="DIRECTORY">^1</xliff:g>」"</string>
- <string name="mode_selected_count" msgid="459111894725594625">"已選取 <xliff:g id="COUNT">%1$d</xliff:g> 個"</string>
+ <string name="menu_select_all" msgid="8323579667348729928">"全部選取"</string>
+ <string name="menu_copy" msgid="3612326052677229148">"複製到…"</string>
+ <string name="menu_advanced_show" product="nosdcard" msgid="4693652895715631401">"顯示內部儲存空間"</string>
+ <string name="menu_advanced_show" product="default" msgid="5792182900084144261">"顯示 SD 卡"</string>
+ <string name="menu_advanced_hide" product="nosdcard" msgid="4218809952721972589">"隱藏內部儲存空間"</string>
+ <string name="menu_advanced_hide" product="default" msgid="4845869969015718848">"隱藏 SD 卡"</string>
+ <string name="menu_file_size_show" msgid="3240323619260823076">"顯示檔案大小"</string>
+ <string name="menu_file_size_hide" msgid="8881975928502581042">"隱藏檔案大小"</string>
+ <string name="button_select" msgid="527196987259139214">"選取"</string>
+ <string name="button_copy" msgid="8706475544635021302">"複製"</string>
<string name="sort_name" msgid="9183560467917256779">"按名稱"</string>
<string name="sort_date" msgid="586080032956151448">"按修改日期"</string>
<string name="sort_size" msgid="3350681319735474741">"按大小"</string>
@@ -45,11 +53,22 @@
<string name="root_type_shortcut" msgid="3318760609471618093">"捷徑"</string>
<string name="root_type_device" msgid="7121342474653483538">"裝置"</string>
<string name="root_type_apps" msgid="8838065367985945189">"更多應用程式"</string>
- <string name="pref_advanced_devices" msgid="903257239609301276">"顯示進階裝置"</string>
- <string name="pref_file_size" msgid="2826879315743961459">"顯示檔案大小"</string>
- <string name="pref_device_size" msgid="3542106883278997222">"顯示裝置大小"</string>
<string name="empty" msgid="7858882803708117596">"沒有項目"</string>
<string name="toast_no_application" msgid="1339885974067891667">"無法開啟檔案"</string>
<string name="toast_failed_delete" msgid="2180678019407244069">"無法刪除部分文件"</string>
<string name="share_via" msgid="8966594246261344259">"分享方式:"</string>
+ <string name="copy_notification_title" msgid="6374299806748219777">"正在複製檔案"</string>
+ <string name="copy_remaining" msgid="6283790937387975095">"剩餘 <xliff:g id="DURATION">%s</xliff:g>"</string>
+ <plurals name="copy_begin" formatted="false" msgid="9071199452634086365">
+ <item quantity="other">正在複製 <xliff:g id="COUNT_1">%1$d</xliff:g> 個檔案。</item>
+ <item quantity="one">正在複製 <xliff:g id="COUNT_0">%1$d</xliff:g> 個檔案。</item>
+ </plurals>
+ <string name="copy_preparing" msgid="3896202461003039386">"正在準備複製…"</string>
+ <plurals name="copy_error_notification_title" formatted="false" msgid="5267616889076217261">
+ <item quantity="other">無法複製 <xliff:g id="COUNT_1">%1$d</xliff:g> 個檔案</item>
+ <item quantity="one">無法複製 <xliff:g id="COUNT_0">%1$d</xliff:g> 個檔案</item>
+ </plurals>
+ <string name="notification_touch_for_details" msgid="4483108577842961665">"輕觸即可查看詳情"</string>
+ <string name="retry" msgid="7564024179122207376">"重試"</string>
+ <string name="copy_failure_alert_content" msgid="3715575000297709082">"以下檔案未能複製:<xliff:g id="LIST">%1$s</xliff:g>"</string>
</resources>
diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml
index 2e77f21..f42dd96 100644
--- a/res/values-zh-rTW/strings.xml
+++ b/res/values-zh-rTW/strings.xml
@@ -29,8 +29,16 @@
<string name="menu_save" msgid="2394743337684426338">"儲存"</string>
<string name="menu_share" msgid="3075149983979628146">"共用"</string>
<string name="menu_delete" msgid="8138799623850614177">"刪除"</string>
- <string name="menu_select" msgid="8711270657353563424">"選取「<xliff:g id="DIRECTORY">^1</xliff:g>」"</string>
- <string name="mode_selected_count" msgid="459111894725594625">"已選取 <xliff:g id="COUNT">%1$d</xliff:g> 個項目"</string>
+ <string name="menu_select_all" msgid="8323579667348729928">"全選"</string>
+ <string name="menu_copy" msgid="3612326052677229148">"複製到…"</string>
+ <string name="menu_advanced_show" product="nosdcard" msgid="4693652895715631401">"顯示內部儲存空間"</string>
+ <string name="menu_advanced_show" product="default" msgid="5792182900084144261">"顯示 SD 卡"</string>
+ <string name="menu_advanced_hide" product="nosdcard" msgid="4218809952721972589">"隱藏內部儲存空間"</string>
+ <string name="menu_advanced_hide" product="default" msgid="4845869969015718848">"隱藏 SD 卡"</string>
+ <string name="menu_file_size_show" msgid="3240323619260823076">"顯示檔案大小"</string>
+ <string name="menu_file_size_hide" msgid="8881975928502581042">"隱藏檔案大小"</string>
+ <string name="button_select" msgid="527196987259139214">"選取"</string>
+ <string name="button_copy" msgid="8706475544635021302">"複製"</string>
<string name="sort_name" msgid="9183560467917256779">"依名稱"</string>
<string name="sort_date" msgid="586080032956151448">"依修改日期"</string>
<string name="sort_size" msgid="3350681319735474741">"依大小"</string>
@@ -39,17 +47,28 @@
<string name="save_error" msgid="6167009778003223664">"無法儲存文件"</string>
<string name="create_error" msgid="3735649141335444215">"無法建立資料夾"</string>
<string name="query_error" msgid="1222448261663503501">"無法查詢文件"</string>
- <string name="root_recent" msgid="4470053704320518133">"最近存取過"</string>
+ <string name="root_recent" msgid="4470053704320518133">"最近"</string>
<string name="root_available_bytes" msgid="8568452858617033281">"可用空間:<xliff:g id="SIZE">%1$s</xliff:g>"</string>
<string name="root_type_service" msgid="2178854894416775409">"儲存空間服務"</string>
<string name="root_type_shortcut" msgid="3318760609471618093">"捷徑"</string>
<string name="root_type_device" msgid="7121342474653483538">"裝置"</string>
<string name="root_type_apps" msgid="8838065367985945189">"更多應用程式"</string>
- <string name="pref_advanced_devices" msgid="903257239609301276">"顯示進階裝置"</string>
- <string name="pref_file_size" msgid="2826879315743961459">"顯示檔案大小"</string>
- <string name="pref_device_size" msgid="3542106883278997222">"顯示裝置大小"</string>
<string name="empty" msgid="7858882803708117596">"沒有任何項目"</string>
<string name="toast_no_application" msgid="1339885974067891667">"無法開啟檔案"</string>
<string name="toast_failed_delete" msgid="2180678019407244069">"無法刪除部分文件"</string>
<string name="share_via" msgid="8966594246261344259">"分享方式:"</string>
+ <string name="copy_notification_title" msgid="6374299806748219777">"複製檔案"</string>
+ <string name="copy_remaining" msgid="6283790937387975095">"剩餘 <xliff:g id="DURATION">%s</xliff:g>"</string>
+ <plurals name="copy_begin" formatted="false" msgid="9071199452634086365">
+ <item quantity="other">正在複製 <xliff:g id="COUNT_1">%1$d</xliff:g> 個檔案。</item>
+ <item quantity="one">正在複製 <xliff:g id="COUNT_0">%1$d</xliff:g> 個檔案。</item>
+ </plurals>
+ <string name="copy_preparing" msgid="3896202461003039386">"正在準備複製…"</string>
+ <plurals name="copy_error_notification_title" formatted="false" msgid="5267616889076217261">
+ <item quantity="other">無法複製 <xliff:g id="COUNT_1">%1$d</xliff:g> 個檔案</item>
+ <item quantity="one">無法複製 <xliff:g id="COUNT_0">%1$d</xliff:g> 個檔案</item>
+ </plurals>
+ <string name="notification_touch_for_details" msgid="4483108577842961665">"輕觸即可查看詳細資料"</string>
+ <string name="retry" msgid="7564024179122207376">"重試"</string>
+ <string name="copy_failure_alert_content" msgid="3715575000297709082">"未複製這些檔案:<xliff:g id="LIST">%1$s</xliff:g>"</string>
</resources>
diff --git a/res/values-zu/strings.xml b/res/values-zu/strings.xml
index 55e2c75..2f2acb4 100644
--- a/res/values-zu/strings.xml
+++ b/res/values-zu/strings.xml
@@ -29,8 +29,16 @@
<string name="menu_save" msgid="2394743337684426338">"Londoloza"</string>
<string name="menu_share" msgid="3075149983979628146">"Yabelana"</string>
<string name="menu_delete" msgid="8138799623850614177">"Susa"</string>
- <string name="menu_select" msgid="8711270657353563424">"Khetha i-\"<xliff:g id="DIRECTORY">^1</xliff:g>\""</string>
- <string name="mode_selected_count" msgid="459111894725594625">"<xliff:g id="COUNT">%1$d</xliff:g> okukhethiwe"</string>
+ <string name="menu_select_all" msgid="8323579667348729928">"Khetha konke"</string>
+ <string name="menu_copy" msgid="3612326052677229148">"Kopishela ku…"</string>
+ <string name="menu_advanced_show" product="nosdcard" msgid="4693652895715631401">"Bonisa isitoreji sangaphakathi"</string>
+ <string name="menu_advanced_show" product="default" msgid="5792182900084144261">"Bonisa ikhadi le-SD"</string>
+ <string name="menu_advanced_hide" product="nosdcard" msgid="4218809952721972589">"Fihla isitoreji sangaphakathi"</string>
+ <string name="menu_advanced_hide" product="default" msgid="4845869969015718848">"Fihla ikhadi le-SD"</string>
+ <string name="menu_file_size_show" msgid="3240323619260823076">"Bonisa usayizi wefayela"</string>
+ <string name="menu_file_size_hide" msgid="8881975928502581042">"Fihla usayizi wefayela"</string>
+ <string name="button_select" msgid="527196987259139214">"Khetha"</string>
+ <string name="button_copy" msgid="8706475544635021302">"Kopisha"</string>
<string name="sort_name" msgid="9183560467917256779">"Ngegama"</string>
<string name="sort_date" msgid="586080032956151448">"Ngedethi yokuguqula"</string>
<string name="sort_size" msgid="3350681319735474741">"Ngosayizi"</string>
@@ -45,11 +53,22 @@
<string name="root_type_shortcut" msgid="3318760609471618093">"Izinqamuleli"</string>
<string name="root_type_device" msgid="7121342474653483538">"Amadivayisi"</string>
<string name="root_type_apps" msgid="8838065367985945189">"Izinhlelo zokusebenza eziningi"</string>
- <string name="pref_advanced_devices" msgid="903257239609301276">"Bonisa amadivayisi aphakeme"</string>
- <string name="pref_file_size" msgid="2826879315743961459">"Bonisa usayizi wefayela"</string>
- <string name="pref_device_size" msgid="3542106883278997222">"Bonisa usayizi wedivayisi"</string>
<string name="empty" msgid="7858882803708117596">"Azikho izinto"</string>
<string name="toast_no_application" msgid="1339885974067891667">"Ayikwazi ukuvula ifayela"</string>
<string name="toast_failed_delete" msgid="2180678019407244069">"Ayikwazi ukususa amanye amadokhumenti"</string>
<string name="share_via" msgid="8966594246261344259">"Yabelana nge-"</string>
+ <string name="copy_notification_title" msgid="6374299806748219777">"Ikopisha amafayela"</string>
+ <string name="copy_remaining" msgid="6283790937387975095">"<xliff:g id="DURATION">%s</xliff:g> okusele"</string>
+ <plurals name="copy_begin" formatted="false" msgid="9071199452634086365">
+ <item quantity="one">Ikopisha amafayela angu-<xliff:g id="COUNT_1">%1$d</xliff:g>.</item>
+ <item quantity="other">Ikopisha amafayela angu-<xliff:g id="COUNT_1">%1$d</xliff:g>.</item>
+ </plurals>
+ <string name="copy_preparing" msgid="3896202461003039386">"Ilungiselela ukukopisha..."</string>
+ <plurals name="copy_error_notification_title" formatted="false" msgid="5267616889076217261">
+ <item quantity="one">Ayikwazanga ukukopisha amafayela angu-<xliff:g id="COUNT_1">%1$d</xliff:g></item>
+ <item quantity="other">Ayikwazanga ukukopisha amafayela angu-<xliff:g id="COUNT_1">%1$d</xliff:g></item>
+ </plurals>
+ <string name="notification_touch_for_details" msgid="4483108577842961665">"Thinta ukuze ubuke imininingwane"</string>
+ <string name="retry" msgid="7564024179122207376">"Zama futhi"</string>
+ <string name="copy_failure_alert_content" msgid="3715575000297709082">"Lawa mafayela awazange akopishwe: <xliff:g id="LIST">%1$s</xliff:g>"</string>
</resources>
diff --git a/res/values/colors.xml b/res/values/colors.xml
index 2ceb968..2b839d4 100644
--- a/res/values/colors.xml
+++ b/res/values/colors.xml
@@ -15,19 +15,8 @@
-->
<resources>
- <color name="material_grey_50">#fffafafa</color>
<color name="material_grey_300">#ffeeeeee</color>
<color name="item_doc_grid_background">@color/material_grey_300</color>
-
<color name="item_doc_grid_protect_background">#88000000</color>
-
- <color name="item_doc_grid_overlay_activated">#88000000</color>
- <color name="item_doc_grid_overlay_disabled">#88ffffff</color>
-
- <color name="item_doc_list_overlay_disabled">#88ffffff</color>
-
- <!-- 10% alpha of material_deep_teal_500 -->
- <color name="item_doc_list_background_activated">#1a009688</color>
-
</resources>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 268ce18..a4e6ce7 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -44,8 +44,10 @@
<string name="menu_share">Share</string>
<!-- Menu item title that deletes the selected documents [CHAR LIMIT=24] -->
<string name="menu_delete">Delete</string>
- <!-- Menu item title that selects the current directory [CHAR LIMIT=48] -->
- <string name="menu_select">Select \"<xliff:g id="directory" example="My Directory">^1</xliff:g>\"</string>
+ <!-- Menu item title that selects all documents in the current directory [CHAR LIMIT=24] -->
+ <string name="menu_select_all">Select all</string>
+ <!-- Menu item title that copies the selected documents [CHAR LIMIT=24] -->
+ <string name="menu_copy">Copy to\u2026</string>
<!-- Menu item that reveals internal storage built into the device [CHAR LIMIT=24] -->
<string name="menu_advanced_show" product="nosdcard">Show internal storage</string>
@@ -61,8 +63,10 @@
<!-- Menu item that hides the sizes of displayed files [CHAR LIMIT=24] -->
<string name="menu_file_size_hide">Hide file size</string>
- <!-- Action mode title summarizing the number of documents selected [CHAR LIMIT=32] -->
- <string name="mode_selected_count"><xliff:g id="count" example="3">%1$d</xliff:g> selected</string>
+ <!-- Button label that select the current directory [CHAR LIMIT=24] -->
+ <string name="button_select">Select</string>
+ <!-- Button label that copies files to the current directory [CHAR LIMIT=24] -->
+ <string name="button_copy">Copy</string>
<!-- Mode that sorts documents by their display name alphabetically [CHAR LIMIT=24] -->
<string name="sort_name">By name</string>
@@ -108,4 +112,26 @@
<!-- Title of dialog when prompting user to select an app to share documents with [CHAR LIMIT=32] -->
<string name="share_via">Share via</string>
+ <!-- Title of the copy notification [CHAR LIMIT=24] -->
+ <string name="copy_notification_title">Copying files</string>
+ <!-- Text shown on the copy notification to indicate remaining time, in minutes [CHAR LIMIT=24] -->
+ <string name="copy_remaining"><xliff:g id="duration" example="3 minutes">%s</xliff:g> left</string>
+ <!-- Toast shown when a file copy is kicked off -->
+ <plurals name="copy_begin">
+ <item quantity="one">Copying <xliff:g id="count" example="1">%1$d</xliff:g> file.</item>
+ <item quantity="other">Copying <xliff:g id="count" example="3">%1$d</xliff:g> files.</item>
+ </plurals>
+ <!-- Text shown on the copy notification while DocumentsUI performs setup in preparation for copying files [CHAR LIMIT=32] -->
+ <string name="copy_preparing">Preparing for copy\u2026</string>
+ <!-- Title of the copy error notification [CHAR LIMIT=48] -->
+ <plurals name="copy_error_notification_title">
+ <item quantity="one">Couldn\'t copy <xliff:g id="count" example="1">%1$d</xliff:g> file</item>
+ <item quantity="other">Couldn\'t copy <xliff:g id="count" example="2">%1$d</xliff:g> files</item>
+ </plurals>
+ <!-- Second line for notifications saying that more information will be shown after touching [CHAR LIMIT=48] -->
+ <string name="notification_touch_for_details">Touch to view details</string>
+ <!-- Label of a dialog button for retrying a failed operation [CHAR LIMIT=24] -->
+ <string name="retry">Retry</string>
+ <!-- Contents of the copying failure alert dialog. [CHAR LIMIT=48] -->
+ <string name="copy_failure_alert_content">These files weren\'t copied: <xliff:g id="list">%1$s</xliff:g></string>
</resources>
diff --git a/res/values/styles.xml b/res/values/styles.xml
index 04692f6..8c4b777 100644
--- a/res/values/styles.xml
+++ b/res/values/styles.xml
@@ -16,7 +16,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android">
- <style name="DialogWhenReallyLarge" parent="@android:style/Theme.DeviceDefault.Light" />
+ <style name="DialogWhenReallyLarge" parent="@android:style/Theme.DeviceDefault.Light.DarkActionBar" />
<style name="DocumentsTheme" parent="@style/DialogWhenReallyLarge">
<item name="android:actionBarWidgetTheme">@null</item>
@@ -33,13 +33,6 @@
<item name="android:windowActionModeOverlay">true</item>
<item name="android:windowNoTitle">true</item>
- <item name="*android:windowFixedWidthMajor">@null</item>
- <item name="*android:windowFixedWidthMinor">@null</item>
- <item name="*android:windowMinWidthMajor">@null</item>
- <item name="*android:windowMinWidthMinor">@null</item>
- <item name="*android:windowFixedHeightMajor">80%</item>
- <item name="*android:windowFixedHeightMinor">90%</item>
-
<item name="android:windowSoftInputMode">stateUnspecified|adjustUnspecified</item>
</style>
diff --git a/res/xml/preferences.xml b/res/xml/preferences.xml
deleted file mode 100644
index 5589ff1..0000000
--- a/res/xml/preferences.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2013 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
- <CheckBoxPreference
- android:title="@string/pref_advanced_devices"
- android:defaultValue="false"
- android:key="advancedDevices" />
- <CheckBoxPreference
- android:title="@string/pref_file_size"
- android:defaultValue="false"
- android:key="fileSize" />
-</PreferenceScreen>
diff --git a/src/com/android/documentsui/BaseActivity.java b/src/com/android/documentsui/BaseActivity.java
new file mode 100644
index 0000000..fc46716
--- /dev/null
+++ b/src/com/android/documentsui/BaseActivity.java
@@ -0,0 +1,824 @@
+/*
+ * Copyright (C) 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.documentsui;
+
+import static com.android.documentsui.DirectoryFragment.ANIM_NONE;
+import static com.android.documentsui.DirectoryFragment.ANIM_SIDE;
+import static com.android.documentsui.DirectoryFragment.ANIM_UP;
+
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.List;
+import java.util.concurrent.Executor;
+
+import libcore.io.IoUtils;
+import android.app.Activity;
+import android.app.Fragment;
+import android.content.Intent;
+import android.content.pm.ApplicationInfo;
+import android.content.pm.PackageInfo;
+import android.content.pm.PackageManager;
+import android.content.pm.ProviderInfo;
+import android.database.Cursor;
+import android.net.Uri;
+import android.os.AsyncTask;
+import android.os.Bundle;
+import android.os.Parcel;
+import android.os.Parcelable;
+import android.provider.DocumentsContract;
+import android.provider.DocumentsContract.Root;
+import android.util.Log;
+import android.util.SparseArray;
+import android.view.LayoutInflater;
+import android.view.Menu;
+import android.view.MenuItem;
+import android.view.MenuItem.OnActionExpandListener;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.AdapterView;
+import android.widget.AdapterView.OnItemSelectedListener;
+import android.widget.BaseAdapter;
+import android.widget.ImageView;
+import android.widget.SearchView;
+import android.widget.SearchView.OnQueryTextListener;
+import android.widget.TextView;
+
+import com.android.documentsui.RecentsProvider.ResumeColumns;
+import com.android.documentsui.model.DocumentInfo;
+import com.android.documentsui.model.DocumentStack;
+import com.android.documentsui.model.DurableUtils;
+import com.android.documentsui.model.RootInfo;
+import com.google.common.collect.Maps;
+
+abstract class BaseActivity extends Activity {
+
+ static final String EXTRA_STATE = "state";
+
+ RootsCache mRoots;
+ SearchManager mSearchManager;
+
+ private final String mTag;
+
+ public abstract State getDisplayState();
+ public abstract void onDocumentPicked(DocumentInfo doc);
+ public abstract void onDocumentsPicked(List<DocumentInfo> docs);
+ abstract void onTaskFinished(Uri... uris);
+ abstract void onDirectoryChanged(int anim);
+ abstract void updateActionBar();
+ abstract void saveStackBlocking();
+
+ public BaseActivity(String tag) {
+ mTag = tag;
+ }
+
+ @Override
+ public void onCreate(Bundle icicle) {
+ super.onCreate(icicle);
+ mRoots = DocumentsApplication.getRootsCache(this);
+ mSearchManager = new SearchManager();
+ }
+
+ @Override
+ public void onResume() {
+ super.onResume();
+
+ final State state = getDisplayState();
+ final RootInfo root = getCurrentRoot();
+
+ // If we're browsing a specific root, and that root went away, then we
+ // have no reason to hang around
+ if (state.action == State.ACTION_BROWSE && root != null) {
+ if (mRoots.getRootBlocking(root.authority, root.rootId) == null) {
+ finish();
+ }
+ }
+ }
+
+ @Override
+ public boolean onCreateOptionsMenu(Menu menu) {
+ boolean showMenu = super.onCreateOptionsMenu(menu);
+
+ getMenuInflater().inflate(R.menu.activity, menu);
+ mSearchManager.install((DocumentsToolBar) findViewById(R.id.toolbar));
+
+ return showMenu;
+ }
+
+ @Override
+ public boolean onPrepareOptionsMenu(Menu menu) {
+ boolean shown = super.onPrepareOptionsMenu(menu);
+
+ final RootInfo root = getCurrentRoot();
+ final DocumentInfo cwd = getCurrentDirectory();
+
+ final MenuItem sort = menu.findItem(R.id.menu_sort);
+ final MenuItem sortSize = menu.findItem(R.id.menu_sort_size);
+ final MenuItem grid = menu.findItem(R.id.menu_grid);
+ final MenuItem list = menu.findItem(R.id.menu_list);
+
+ final MenuItem advanced = menu.findItem(R.id.menu_advanced);
+ final MenuItem fileSize = menu.findItem(R.id.menu_file_size);
+
+ mSearchManager.update(root);
+
+ // Search uses backend ranking; no sorting
+ sort.setVisible(cwd != null && !mSearchManager.isSearching());
+
+ State state = getDisplayState();
+ grid.setVisible(state.derivedMode != State.MODE_GRID);
+ list.setVisible(state.derivedMode != State.MODE_LIST);
+
+ // Only sort by size when visible
+ sortSize.setVisible(state.showSize);
+
+ advanced.setTitle(LocalPreferences.getDisplayAdvancedDevices(this)
+ ? R.string.menu_advanced_hide : R.string.menu_advanced_show);
+ fileSize.setTitle(LocalPreferences.getDisplayFileSize(this)
+ ? R.string.menu_file_size_hide : R.string.menu_file_size_show);
+
+ return shown;
+ }
+
+ void onStackRestored(boolean restored, boolean external) {}
+
+ void onRootPicked(RootInfo root) {
+ State state = getDisplayState();
+
+ // Clear entire backstack and start in new root
+ state.stack.root = root;
+ state.stack.clear();
+ state.stackTouched = true;
+
+ mSearchManager.update(root);
+
+ // Recents is always in memory, so we just load it directly.
+ // Otherwise we delegate loading data from disk to a task
+ // to ensure a responsive ui.
+ if (mRoots.isRecentsRoot(root)) {
+ onCurrentDirectoryChanged(ANIM_SIDE);
+ } else {
+ new PickRootTask(root).executeOnExecutor(getCurrentExecutor());
+ }
+ }
+
+ void expandMenus(Menu menu) {
+ for (int i = 0; i < menu.size(); i++) {
+ final MenuItem item = menu.getItem(i);
+ switch (item.getItemId()) {
+ case R.id.menu_advanced:
+ case R.id.menu_file_size:
+ break;
+ default:
+ item.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
+ }
+ }
+ }
+
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+ final int id = item.getItemId();
+ if (id == android.R.id.home) {
+ onBackPressed();
+ return true;
+ } else if (id == R.id.menu_create_dir) {
+ CreateDirectoryFragment.show(getFragmentManager());
+ return true;
+ } else if (id == R.id.menu_search) {
+ return false;
+ } else if (id == R.id.menu_sort_name) {
+ setUserSortOrder(State.SORT_ORDER_DISPLAY_NAME);
+ return true;
+ } else if (id == R.id.menu_sort_date) {
+ setUserSortOrder(State.SORT_ORDER_LAST_MODIFIED);
+ return true;
+ } else if (id == R.id.menu_sort_size) {
+ setUserSortOrder(State.SORT_ORDER_SIZE);
+ return true;
+ } else if (id == R.id.menu_grid) {
+ setUserMode(State.MODE_GRID);
+ return true;
+ } else if (id == R.id.menu_list) {
+ setUserMode(State.MODE_LIST);
+ return true;
+ } else if (id == R.id.menu_advanced) {
+ setDisplayAdvancedDevices(!LocalPreferences.getDisplayAdvancedDevices(this));
+ return true;
+ } else if (id == R.id.menu_file_size) {
+ setDisplayFileSize(!LocalPreferences.getDisplayFileSize(this));
+ return true;
+ } else if (id == R.id.menu_settings) {
+ final RootInfo root = getCurrentRoot();
+ final Intent intent = new Intent(DocumentsContract.ACTION_DOCUMENT_ROOT_SETTINGS);
+ intent.setDataAndType(DocumentsContract.buildRootUri(root.authority, root.rootId),
+ DocumentsContract.Root.MIME_TYPE_ITEM);
+ startActivity(intent);
+ return true;
+ }
+
+ return super.onOptionsItemSelected(item);
+ }
+
+ /**
+ * Call this when directory changes. Prior to root fragment update
+ * the (abstract) directoryChanged method will be called.
+ * @param anim
+ */
+ final void onCurrentDirectoryChanged(int anim) {
+ onDirectoryChanged(anim);
+
+ final RootsFragment roots = RootsFragment.get(getFragmentManager());
+ if (roots != null) {
+ roots.onCurrentRootChanged();
+ }
+
+ updateActionBar();
+ invalidateOptionsMenu();
+ }
+
+ final List<String> getExcludedAuthorities() {
+ List<String> authorities = new ArrayList<>();
+ if (getIntent().getBooleanExtra(DocumentsContract.EXTRA_EXCLUDE_SELF, false)) {
+ // Exclude roots provided by the calling package.
+ String packageName = getCallingPackageMaybeExtra();
+ try {
+ PackageInfo pkgInfo = getPackageManager().getPackageInfo(packageName,
+ PackageManager.GET_PROVIDERS);
+ for (ProviderInfo provider: pkgInfo.providers) {
+ authorities.add(provider.authority);
+ }
+ } catch (PackageManager.NameNotFoundException e) {
+ Log.e(mTag, "Calling package name does not resolve: " + packageName);
+ }
+ }
+ return authorities;
+ }
+
+ final String getCallingPackageMaybeExtra() {
+ String callingPackage = getCallingPackage();
+ // System apps can set the calling package name using an extra.
+ try {
+ ApplicationInfo info = getPackageManager().getApplicationInfo(callingPackage, 0);
+ if (info.isSystemApp() || info.isUpdatedSystemApp()) {
+ final String extra = getIntent().getStringExtra(DocumentsContract.EXTRA_PACKAGE_NAME);
+ if (extra != null) {
+ callingPackage = extra;
+ }
+ }
+ } finally {
+ return callingPackage;
+ }
+ }
+
+ public static BaseActivity get(Fragment fragment) {
+ return (BaseActivity) fragment.getActivity();
+ }
+
+ public static abstract class DocumentsIntent {
+ /** Intent action name to open copy destination. */
+ public static String ACTION_OPEN_COPY_DESTINATION =
+ "com.android.documentsui.OPEN_COPY_DESTINATION";
+
+ /**
+ * Extra boolean flag for ACTION_OPEN_COPY_DESTINATION_STRING, which
+ * specifies if the destination directory needs to create new directory or not.
+ */
+ public static String EXTRA_DIRECTORY_COPY = "com.android.documentsui.DIRECTORY_COPY";
+ }
+
+ public static class State implements android.os.Parcelable {
+ public int action;
+ public String[] acceptMimes;
+
+ /** Explicit user choice */
+ public int userMode = MODE_UNKNOWN;
+ /** Derived after loader */
+ public int derivedMode = MODE_LIST;
+
+ /** Explicit user choice */
+ public int userSortOrder = SORT_ORDER_UNKNOWN;
+ /** Derived after loader */
+ public int derivedSortOrder = SORT_ORDER_DISPLAY_NAME;
+
+ public boolean allowMultiple = false;
+ public boolean showSize = false;
+ public boolean localOnly = false;
+ public boolean forceAdvanced = false;
+ public boolean showAdvanced = false;
+ public boolean stackTouched = false;
+ public boolean restored = false;
+ public boolean directoryCopy = false;
+
+ /** Current user navigation stack; empty implies recents. */
+ public DocumentStack stack = new DocumentStack();
+ /** Currently active search, overriding any stack. */
+ public String currentSearch;
+
+ /** Instance state for every shown directory */
+ public HashMap<String, SparseArray<Parcelable>> dirState = Maps.newHashMap();
+
+ /** Currently copying file */
+ public List<DocumentInfo> selectedDocumentsForCopy = new ArrayList<DocumentInfo>();
+
+ /** Name of the package that started DocsUI */
+ public List<String> excludedAuthorities = new ArrayList<>();
+
+ public static final int ACTION_OPEN = 1;
+ public static final int ACTION_CREATE = 2;
+ public static final int ACTION_GET_CONTENT = 3;
+ public static final int ACTION_OPEN_TREE = 4;
+ public static final int ACTION_MANAGE = 5;
+ public static final int ACTION_BROWSE = 6;
+ public static final int ACTION_BROWSE_ALL = 7;
+ public static final int ACTION_OPEN_COPY_DESTINATION = 8;
+
+ public static final int MODE_UNKNOWN = 0;
+ public static final int MODE_LIST = 1;
+ public static final int MODE_GRID = 2;
+
+ public static final int SORT_ORDER_UNKNOWN = 0;
+ public static final int SORT_ORDER_DISPLAY_NAME = 1;
+ public static final int SORT_ORDER_LAST_MODIFIED = 2;
+ public static final int SORT_ORDER_SIZE = 3;
+
+ @Override
+ public int describeContents() {
+ return 0;
+ }
+
+ @Override
+ public void writeToParcel(Parcel out, int flags) {
+ out.writeInt(action);
+ out.writeInt(userMode);
+ out.writeStringArray(acceptMimes);
+ out.writeInt(userSortOrder);
+ out.writeInt(allowMultiple ? 1 : 0);
+ out.writeInt(showSize ? 1 : 0);
+ out.writeInt(localOnly ? 1 : 0);
+ out.writeInt(forceAdvanced ? 1 : 0);
+ out.writeInt(showAdvanced ? 1 : 0);
+ out.writeInt(stackTouched ? 1 : 0);
+ out.writeInt(restored ? 1 : 0);
+ DurableUtils.writeToParcel(out, stack);
+ out.writeString(currentSearch);
+ out.writeMap(dirState);
+ out.writeList(selectedDocumentsForCopy);
+ out.writeList(excludedAuthorities);
+ }
+
+ public static final Creator<State> CREATOR = new Creator<State>() {
+ @Override
+ public State createFromParcel(Parcel in) {
+ final State state = new State();
+ state.action = in.readInt();
+ state.userMode = in.readInt();
+ state.acceptMimes = in.readStringArray();
+ state.userSortOrder = in.readInt();
+ state.allowMultiple = in.readInt() != 0;
+ state.showSize = in.readInt() != 0;
+ state.localOnly = in.readInt() != 0;
+ state.forceAdvanced = in.readInt() != 0;
+ state.showAdvanced = in.readInt() != 0;
+ state.stackTouched = in.readInt() != 0;
+ state.restored = in.readInt() != 0;
+ DurableUtils.readFromParcel(in, state.stack);
+ state.currentSearch = in.readString();
+ in.readMap(state.dirState, null);
+ in.readList(state.selectedDocumentsForCopy, null);
+ in.readList(state.excludedAuthorities, null);
+ return state;
+ }
+
+ @Override
+ public State[] newArray(int size) {
+ return new State[size];
+ }
+ };
+ }
+
+ void setDisplayAdvancedDevices(boolean display) {
+ State state = getDisplayState();
+ LocalPreferences.setDisplayAdvancedDevices(this, display);
+ state.showAdvanced = state.forceAdvanced | display;
+ RootsFragment.get(getFragmentManager()).onDisplayStateChanged();
+ invalidateOptionsMenu();
+ }
+
+ void setDisplayFileSize(boolean display) {
+ LocalPreferences.setDisplayFileSize(this, display);
+ getDisplayState().showSize = display;
+ DirectoryFragment.get(getFragmentManager()).onDisplayStateChanged();
+ invalidateOptionsMenu();
+ }
+
+ void onStateChanged() {
+ invalidateOptionsMenu();
+ }
+
+ /**
+ * Set state sort order based on explicit user action.
+ */
+ void setUserSortOrder(int sortOrder) {
+ getDisplayState().userSortOrder = sortOrder;
+ DirectoryFragment.get(getFragmentManager()).onUserSortOrderChanged();
+ }
+
+ /**
+ * Set state mode based on explicit user action.
+ */
+ void setUserMode(int mode) {
+ getDisplayState().userMode = mode;
+ DirectoryFragment.get(getFragmentManager()).onUserModeChanged();
+ }
+
+ void setPending(boolean pending) {
+ final SaveFragment save = SaveFragment.get(getFragmentManager());
+ if (save != null) {
+ save.setPending(pending);
+ }
+ }
+
+ @Override
+ protected void onSaveInstanceState(Bundle state) {
+ super.onSaveInstanceState(state);
+ state.putParcelable(EXTRA_STATE, getDisplayState());
+ }
+
+ @Override
+ protected void onRestoreInstanceState(Bundle state) {
+ super.onRestoreInstanceState(state);
+ }
+
+ RootInfo getCurrentRoot() {
+ State state = getDisplayState();
+ if (state.stack.root != null) {
+ return state.stack.root;
+ } else {
+ return mRoots.getRecentsRoot();
+ }
+ }
+
+ public DocumentInfo getCurrentDirectory() {
+ return getDisplayState().stack.peek();
+ }
+
+ public Executor getCurrentExecutor() {
+ final DocumentInfo cwd = getCurrentDirectory();
+ if (cwd != null && cwd.authority != null) {
+ return ProviderExecutor.forAuthority(cwd.authority);
+ } else {
+ return AsyncTask.THREAD_POOL_EXECUTOR;
+ }
+ }
+
+ public void onStackPicked(DocumentStack stack) {
+ try {
+ // Update the restored stack to ensure we have freshest data
+ stack.updateDocuments(getContentResolver());
+
+ State state = getDisplayState();
+ state.stack = stack;
+ state.stackTouched = true;
+ onCurrentDirectoryChanged(ANIM_SIDE);
+
+ } catch (FileNotFoundException e) {
+ Log.w(mTag, "Failed to restore stack: " + e);
+ }
+ }
+
+ final class PickRootTask extends AsyncTask<Void, Void, DocumentInfo> {
+ private RootInfo mRoot;
+
+ public PickRootTask(RootInfo root) {
+ mRoot = root;
+ }
+
+ @Override
+ protected DocumentInfo doInBackground(Void... params) {
+ try {
+ final Uri uri = DocumentsContract.buildDocumentUri(
+ mRoot.authority, mRoot.documentId);
+ return DocumentInfo.fromUri(getContentResolver(), uri);
+ } catch (FileNotFoundException e) {
+ Log.w(mTag, "Failed to find root", e);
+ return null;
+ }
+ }
+
+ @Override
+ protected void onPostExecute(DocumentInfo result) {
+ if (result != null) {
+ State state = getDisplayState();
+ state.stack.push(result);
+ state.stackTouched = true;
+ onCurrentDirectoryChanged(ANIM_SIDE);
+ }
+ }
+ }
+
+ final class RestoreStackTask extends AsyncTask<Void, Void, Void> {
+ private volatile boolean mRestoredStack;
+ private volatile boolean mExternal;
+
+ @Override
+ protected Void doInBackground(Void... params) {
+ State state = getDisplayState();
+ RootsCache roots = DocumentsApplication.getRootsCache(BaseActivity.this);
+
+ // Restore last stack for calling package
+ final String packageName = getCallingPackageMaybeExtra();
+ final Cursor cursor = getContentResolver()
+ .query(RecentsProvider.buildResume(packageName), null, null, null, null);
+ try {
+ if (cursor.moveToFirst()) {
+ mExternal = cursor.getInt(cursor.getColumnIndex(ResumeColumns.EXTERNAL)) != 0;
+ final byte[] rawStack = cursor.getBlob(
+ cursor.getColumnIndex(ResumeColumns.STACK));
+ DurableUtils.readFromArray(rawStack, state.stack);
+ mRestoredStack = true;
+ }
+ } catch (IOException e) {
+ Log.w(mTag, "Failed to resume: " + e);
+ } finally {
+ IoUtils.closeQuietly(cursor);
+ }
+
+ if (mRestoredStack) {
+ // Update the restored stack to ensure we have freshest data
+ final Collection<RootInfo> matchingRoots = roots.getMatchingRootsBlocking(state);
+ try {
+ state.stack.updateRoot(matchingRoots);
+ state.stack.updateDocuments(getContentResolver());
+ } catch (FileNotFoundException e) {
+ Log.w(mTag, "Failed to restore stack: " + e);
+ state.stack.reset();
+ mRestoredStack = false;
+ }
+ }
+
+ return null;
+ }
+
+ @Override
+ protected void onPostExecute(Void result) {
+ if (isDestroyed()) return;
+ getDisplayState().restored = true;
+ onCurrentDirectoryChanged(ANIM_NONE);
+
+ onStackRestored(mRestoredStack, mExternal);
+
+ getDisplayState().restored = true;
+ onCurrentDirectoryChanged(ANIM_NONE);
+ }
+ }
+
+ final class ItemSelectedListener implements OnItemSelectedListener {
+
+ boolean mIgnoreNextNavigation;
+
+ @Override
+ public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
+ if (mIgnoreNextNavigation) {
+ mIgnoreNextNavigation = false;
+ return;
+ }
+
+ State state = getDisplayState();
+ while (state.stack.size() > position + 1) {
+ state.stackTouched = true;
+ state.stack.pop();
+ }
+ onCurrentDirectoryChanged(ANIM_UP);
+ }
+
+ @Override
+ public void onNothingSelected(AdapterView<?> parent) {
+ // Ignored
+ }
+ }
+
+ /**
+ * Class providing toolbar with runtime access to useful activity data.
+ */
+ final class StackAdapter extends BaseAdapter {
+ @Override
+ public int getCount() {
+ return getDisplayState().stack.size();
+ }
+
+ @Override
+ public DocumentInfo getItem(int position) {
+ State state = getDisplayState();
+ return state.stack.get(state.stack.size() - position - 1);
+ }
+
+ @Override
+ public long getItemId(int position) {
+ return position;
+ }
+
+ @Override
+ public View getView(int position, View convertView, ViewGroup parent) {
+ if (convertView == null) {
+ convertView = LayoutInflater.from(parent.getContext())
+ .inflate(R.layout.item_subdir_title, parent, false);
+ }
+
+ final TextView title = (TextView) convertView.findViewById(android.R.id.title);
+ final DocumentInfo doc = getItem(position);
+
+ if (position == 0) {
+ final RootInfo root = getCurrentRoot();
+ title.setText(root.title);
+ } else {
+ title.setText(doc.displayName);
+ }
+
+ return convertView;
+ }
+
+ @Override
+ public View getDropDownView(int position, View convertView, ViewGroup parent) {
+ if (convertView == null) {
+ convertView = LayoutInflater.from(parent.getContext())
+ .inflate(R.layout.item_subdir, parent, false);
+ }
+
+ final ImageView subdir = (ImageView) convertView.findViewById(R.id.subdir);
+ final TextView title = (TextView) convertView.findViewById(android.R.id.title);
+ final DocumentInfo doc = getItem(position);
+
+ if (position == 0) {
+ final RootInfo root = getCurrentRoot();
+ title.setText(root.title);
+ subdir.setVisibility(View.GONE);
+ } else {
+ title.setText(doc.displayName);
+ subdir.setVisibility(View.VISIBLE);
+ }
+
+ return convertView;
+ }
+ }
+
+ /**
+ * Facade over the various search parts in the menu.
+ */
+ final class SearchManager implements
+ SearchView.OnCloseListener, OnActionExpandListener, OnQueryTextListener,
+ DocumentsToolBar.OnActionViewCollapsedListener {
+
+ private boolean mSearchExpanded;
+ private boolean mIgnoreNextClose;
+ private boolean mIgnoreNextCollapse;
+
+ private DocumentsToolBar mActionBar;
+ private MenuItem mMenu;
+ private SearchView mView;
+
+ public void install(DocumentsToolBar actionBar) {
+ assert(mActionBar == null);
+ mActionBar = actionBar;
+ mMenu = actionBar.getSearchMenu();
+ mView = (SearchView) mMenu.getActionView();
+
+ mActionBar.setOnActionViewCollapsedListener(this);
+ mMenu.setOnActionExpandListener(this);
+ mView.setOnQueryTextListener(this);
+ mView.setOnCloseListener(this);
+ }
+
+ /**
+ * @param root Info about the current directory.
+ */
+ void update(RootInfo root) {
+ if (mMenu == null) {
+ Log.d(mTag, "update called before Search MenuItem installed.");
+ return;
+ }
+
+ State state = getDisplayState();
+ if (state.currentSearch != null) {
+ mMenu.expandActionView();
+
+ mView.setIconified(false);
+ mView.clearFocus();
+ mView.setQuery(state.currentSearch, false);
+ } else {
+ mView.clearFocus();
+ if (!mView.isIconified()) {
+ mIgnoreNextClose = true;
+ mView.setIconified(true);
+ }
+
+ if (mMenu.isActionViewExpanded()) {
+ mIgnoreNextCollapse = true;
+ mMenu.collapseActionView();
+ }
+ }
+
+ showMenu(root != null
+ && ((root.flags & Root.FLAG_SUPPORTS_SEARCH) != 0));
+ }
+
+ void showMenu(boolean visible) {
+ if (mMenu == null) {
+ Log.d(mTag, "showMenu called before Search MenuItem installed.");
+ return;
+ }
+
+ mMenu.setVisible(visible);
+ if (!visible) {
+ getDisplayState().currentSearch = null;
+ }
+ }
+
+ /**
+ * Cancels current search operation.
+ * @return True if it cancels search. False if it does not operate
+ * search currently.
+ */
+ boolean cancelSearch() {
+ if (mActionBar.hasExpandedActionView()) {
+ mActionBar.collapseActionView();
+ return true;
+ }
+ return false;
+ }
+
+ boolean isSearching() {
+ return getDisplayState().currentSearch != null;
+ }
+
+ boolean isExpanded() {
+ return mSearchExpanded;
+ }
+
+ @Override
+ public boolean onClose() {
+ mSearchExpanded = false;
+ if (mIgnoreNextClose) {
+ mIgnoreNextClose = false;
+ return false;
+ }
+
+ getDisplayState().currentSearch = null;
+ onCurrentDirectoryChanged(ANIM_NONE);
+ return false;
+ }
+
+ @Override
+ public boolean onMenuItemActionExpand(MenuItem item) {
+ mSearchExpanded = true;
+ updateActionBar();
+ return true;
+ }
+
+ @Override
+ public boolean onMenuItemActionCollapse(MenuItem item) {
+ mSearchExpanded = false;
+ if (mIgnoreNextCollapse) {
+ mIgnoreNextCollapse = false;
+ return true;
+ }
+ getDisplayState().currentSearch = null;
+ onCurrentDirectoryChanged(ANIM_NONE);
+ return true;
+ }
+
+ @Override
+ public boolean onQueryTextSubmit(String query) {
+ mSearchExpanded = true;
+ getDisplayState().currentSearch = query;
+ mView.clearFocus();
+ onCurrentDirectoryChanged(ANIM_NONE);
+ return true;
+ }
+
+ @Override
+ public boolean onQueryTextChange(String newText) {
+ return false;
+ }
+
+ @Override
+ public void onActionViewCollapsed() {
+ updateActionBar();
+ }
+ }
+}
diff --git a/src/com/android/documentsui/CopyService.java b/src/com/android/documentsui/CopyService.java
new file mode 100644
index 0000000..506ec58
--- /dev/null
+++ b/src/com/android/documentsui/CopyService.java
@@ -0,0 +1,504 @@
+/*
+ * Copyright (C) 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.documentsui;
+
+import static com.android.documentsui.model.DocumentInfo.getCursorLong;
+import static com.android.documentsui.model.DocumentInfo.getCursorString;
+
+import android.app.IntentService;
+import android.app.Notification;
+import android.app.NotificationManager;
+import android.app.PendingIntent;
+import android.content.ContentProviderClient;
+import android.content.Context;
+import android.content.Intent;
+import android.content.res.Resources;
+import android.database.Cursor;
+import android.net.Uri;
+import android.os.CancellationSignal;
+import android.os.ParcelFileDescriptor;
+import android.os.Parcelable;
+import android.os.RemoteException;
+import android.os.SystemClock;
+import android.provider.DocumentsContract;
+import android.provider.DocumentsContract.Document;
+import android.text.format.DateUtils;
+import android.util.Log;
+import android.widget.Toast;
+
+import com.android.documentsui.model.DocumentInfo;
+import com.android.documentsui.model.DocumentStack;
+
+import libcore.io.IoUtils;
+
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.text.NumberFormat;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Objects;
+
+public class CopyService extends IntentService {
+ public static final String TAG = "CopyService";
+
+ private static final String EXTRA_CANCEL = "com.android.documentsui.CANCEL";
+ public static final String EXTRA_SRC_LIST = "com.android.documentsui.SRC_LIST";
+ public static final String EXTRA_STACK = "com.android.documentsui.STACK";
+ public static final String EXTRA_FAILURE = "com.android.documentsui.FAILURE";
+
+ // TODO: Move it to a shared file when more operations are implemented.
+ public static final int FAILURE_COPY = 1;
+
+ private NotificationManager mNotificationManager;
+ private Notification.Builder mProgressBuilder;
+
+ // Jobs are serialized but a job ID is used, to avoid mixing up cancellation requests.
+ private String mJobId;
+ private volatile boolean mIsCancelled;
+ // Parameters of the copy job. Requests to an IntentService are serialized so this code only
+ // needs to deal with one job at a time.
+ private final ArrayList<DocumentInfo> mFailedFiles;
+ private long mBatchSize;
+ private long mBytesCopied;
+ private long mStartTime;
+ private long mLastNotificationTime;
+ // Speed estimation
+ private long mBytesCopiedSample;
+ private long mSampleTime;
+ private long mSpeed;
+ private long mRemainingTime;
+ // Provider clients are acquired for the duration of each copy job. Note that there is an
+ // implicit assumption that all srcs come from the same authority.
+ private ContentProviderClient mSrcClient;
+ private ContentProviderClient mDstClient;
+
+ public CopyService() {
+ super("CopyService");
+
+ mFailedFiles = new ArrayList<DocumentInfo>();
+ }
+
+ /**
+ * Starts the service for a copy operation.
+ *
+ * @param context Context for the intent.
+ * @param srcDocs A list of src files to copy.
+ * @param dstStack The copy destination stack.
+ */
+ public static void start(Context context, List<DocumentInfo> srcDocs, DocumentStack dstStack) {
+ final Resources res = context.getResources();
+ final Intent copyIntent = new Intent(context, CopyService.class);
+ copyIntent.putParcelableArrayListExtra(
+ EXTRA_SRC_LIST, new ArrayList<DocumentInfo>(srcDocs));
+ copyIntent.putExtra(EXTRA_STACK, (Parcelable) dstStack);
+
+ Toast.makeText(context,
+ res.getQuantityString(R.plurals.copy_begin, srcDocs.size(), srcDocs.size()),
+ Toast.LENGTH_SHORT).show();
+ context.startService(copyIntent);
+ }
+
+ @Override
+ public int onStartCommand(Intent intent, int flags, int startId) {
+ if (intent.hasExtra(EXTRA_CANCEL)) {
+ handleCancel(intent);
+ }
+ return super.onStartCommand(intent, flags, startId);
+ }
+
+ @Override
+ protected void onHandleIntent(Intent intent) {
+ if (intent.hasExtra(EXTRA_CANCEL)) {
+ handleCancel(intent);
+ return;
+ }
+
+ final ArrayList<DocumentInfo> srcs = intent.getParcelableArrayListExtra(EXTRA_SRC_LIST);
+ final DocumentStack stack = intent.getParcelableExtra(EXTRA_STACK);
+
+ try {
+ // Acquire content providers.
+ mSrcClient = DocumentsApplication.acquireUnstableProviderOrThrow(getContentResolver(),
+ srcs.get(0).authority);
+ mDstClient = DocumentsApplication.acquireUnstableProviderOrThrow(getContentResolver(),
+ stack.peek().authority);
+
+ setupCopyJob(srcs, stack);
+
+ for (int i = 0; i < srcs.size() && !mIsCancelled; ++i) {
+ copy(srcs.get(i), stack.peek());
+ }
+ } catch (Exception e) {
+ // Catch-all to prevent any copy errors from wedging the app.
+ Log.e(TAG, "Exceptions occurred during copying", e);
+ } finally {
+ ContentProviderClient.releaseQuietly(mSrcClient);
+ ContentProviderClient.releaseQuietly(mDstClient);
+
+ // Dismiss the ongoing copy notification when the copy is done.
+ mNotificationManager.cancel(mJobId, 0);
+
+ if (mFailedFiles.size() > 0) {
+ final Context context = getApplicationContext();
+ final Intent navigateIntent = new Intent(context, DocumentsActivity.class);
+ navigateIntent.putExtra(EXTRA_STACK, (Parcelable) stack);
+ navigateIntent.putExtra(EXTRA_FAILURE, FAILURE_COPY);
+ navigateIntent.putParcelableArrayListExtra(EXTRA_SRC_LIST, mFailedFiles);
+
+ final Notification.Builder errorBuilder = new Notification.Builder(this)
+ .setContentTitle(context.getResources().
+ getQuantityString(R.plurals.copy_error_notification_title,
+ mFailedFiles.size(), mFailedFiles.size()))
+ .setContentText(getString(R.string.notification_touch_for_details))
+ .setContentIntent(PendingIntent.getActivity(context, 0, navigateIntent,
+ PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_ONE_SHOT))
+ .setCategory(Notification.CATEGORY_ERROR)
+ .setSmallIcon(R.drawable.ic_menu_copy)
+ .setAutoCancel(true);
+ mNotificationManager.notify(mJobId, 0, errorBuilder.build());
+ }
+ }
+ }
+
+ @Override
+ public void onCreate() {
+ super.onCreate();
+ mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
+ }
+
+ /**
+ * Sets up the CopyService to start tracking and sending notifications for the given batch of
+ * files.
+ *
+ * @param srcs A list of src files to copy.
+ * @param stack The copy destination stack.
+ * @throws RemoteException
+ */
+ private void setupCopyJob(ArrayList<DocumentInfo> srcs, DocumentStack stack)
+ throws RemoteException {
+ // Create an ID for this copy job. Use the timestamp.
+ mJobId = String.valueOf(SystemClock.elapsedRealtime());
+ // Reset the cancellation flag.
+ mIsCancelled = false;
+
+ final Context context = getApplicationContext();
+ final Intent navigateIntent = new Intent(context, DocumentsActivity.class);
+ navigateIntent.putExtra(EXTRA_STACK, (Parcelable) stack);
+
+ mProgressBuilder = new Notification.Builder(this)
+ .setContentTitle(getString(R.string.copy_notification_title))
+ .setContentIntent(PendingIntent.getActivity(context, 0, navigateIntent, 0))
+ .setCategory(Notification.CATEGORY_PROGRESS)
+ .setSmallIcon(R.drawable.ic_menu_copy)
+ .setOngoing(true);
+
+ final Intent cancelIntent = new Intent(this, CopyService.class);
+ cancelIntent.putExtra(EXTRA_CANCEL, mJobId);
+ mProgressBuilder.addAction(R.drawable.ic_cab_cancel,
+ getString(android.R.string.cancel), PendingIntent.getService(this, 0,
+ cancelIntent,
+ PendingIntent.FLAG_ONE_SHOT | PendingIntent.FLAG_CANCEL_CURRENT));
+
+ // Send an initial progress notification.
+ mProgressBuilder.setProgress(0, 0, true); // Indeterminate progress while setting up.
+ mProgressBuilder.setContentText(getString(R.string.copy_preparing));
+ mNotificationManager.notify(mJobId, 0, mProgressBuilder.build());
+
+ // Reset batch parameters.
+ mFailedFiles.clear();
+ mBatchSize = calculateFileSizes(srcs);
+ mBytesCopied = 0;
+ mStartTime = SystemClock.elapsedRealtime();
+ mLastNotificationTime = 0;
+ mBytesCopiedSample = 0;
+ mSampleTime = 0;
+ mSpeed = 0;
+ mRemainingTime = 0;
+
+ // TODO: Check preconditions for copy.
+ // - check that the destination has enough space and is writeable?
+ // - check MIME types?
+ }
+
+ /**
+ * Calculates the cumulative size of all the documents in the list. Directories are recursed
+ * into and totaled up.
+ *
+ * @param srcs
+ * @return Size in bytes.
+ * @throws RemoteException
+ */
+ private long calculateFileSizes(List<DocumentInfo> srcs) throws RemoteException {
+ long result = 0;
+ for (DocumentInfo src : srcs) {
+ if (Document.MIME_TYPE_DIR.equals(src.mimeType)) {
+ // Directories need to be recursed into.
+ result += calculateFileSizesHelper(src.derivedUri);
+ } else {
+ result += src.size;
+ }
+ }
+ return result;
+ }
+
+ /**
+ * Calculates (recursively) the cumulative size of all the files under the given directory.
+ *
+ * @throws RemoteException
+ */
+ private long calculateFileSizesHelper(Uri uri) throws RemoteException {
+ final String authority = uri.getAuthority();
+ final Uri queryUri = DocumentsContract.buildChildDocumentsUri(authority,
+ DocumentsContract.getDocumentId(uri));
+ final String queryColumns[] = new String[] {
+ Document.COLUMN_DOCUMENT_ID,
+ Document.COLUMN_MIME_TYPE,
+ Document.COLUMN_SIZE
+ };
+
+ long result = 0;
+ Cursor cursor = null;
+ try {
+ cursor = mSrcClient.query(queryUri, queryColumns, null, null, null);
+ while (cursor.moveToNext()) {
+ if (Document.MIME_TYPE_DIR.equals(
+ getCursorString(cursor, Document.COLUMN_MIME_TYPE))) {
+ // Recurse into directories.
+ final Uri subdirUri = DocumentsContract.buildDocumentUri(authority,
+ getCursorString(cursor, Document.COLUMN_DOCUMENT_ID));
+ result += calculateFileSizesHelper(subdirUri);
+ } else {
+ // This may return -1 if the size isn't defined. Ignore those cases.
+ long size = getCursorLong(cursor, Document.COLUMN_SIZE);
+ result += size > 0 ? size : 0;
+ }
+ }
+ } finally {
+ IoUtils.closeQuietly(cursor);
+ }
+
+ return result;
+ }
+
+ /**
+ * Cancels the current copy job, if its ID matches the given ID.
+ *
+ * @param intent The cancellation intent.
+ */
+ private void handleCancel(Intent intent) {
+ final String cancelledId = intent.getStringExtra(EXTRA_CANCEL);
+ // Do nothing if the cancelled ID doesn't match the current job ID. This prevents racey
+ // cancellation requests from affecting unrelated copy jobs. However, if the current job ID
+ // is null, the service most likely crashed and was revived by the incoming cancel intent.
+ // In that case, always allow the cancellation to proceed.
+ if (Objects.equals(mJobId, cancelledId) || mJobId == null) {
+ // Set the cancel flag. This causes the copy loops to exit.
+ mIsCancelled = true;
+ // Dismiss the progress notification here rather than in the copy loop. This preserves
+ // interactivity for the user in case the copy loop is stalled.
+ mNotificationManager.cancel(cancelledId, 0);
+ }
+ }
+
+ /**
+ * Logs progress on the current copy operation. Displays/Updates the progress notification.
+ *
+ * @param bytesCopied
+ */
+ private void makeProgress(long bytesCopied) {
+ mBytesCopied += bytesCopied;
+ double done = (double) mBytesCopied / mBatchSize;
+ String percent = NumberFormat.getPercentInstance().format(done);
+
+ // Update time estimate
+ long currentTime = SystemClock.elapsedRealtime();
+ long elapsedTime = currentTime - mStartTime;
+
+ // Send out progress notifications once a second.
+ if (currentTime - mLastNotificationTime > 1000) {
+ updateRemainingTimeEstimate(elapsedTime);
+ mProgressBuilder.setProgress(100, (int) (done * 100), false);
+ mProgressBuilder.setContentInfo(percent);
+ if (mRemainingTime > 0) {
+ mProgressBuilder.setContentText(getString(R.string.copy_remaining,
+ DateUtils.formatDuration(mRemainingTime)));
+ } else {
+ mProgressBuilder.setContentText(null);
+ }
+ mNotificationManager.notify(mJobId, 0, mProgressBuilder.build());
+ mLastNotificationTime = currentTime;
+ }
+ }
+
+ /**
+ * Generates an estimate of the remaining time in the copy.
+ *
+ * @param elapsedTime The time elapsed so far.
+ */
+ private void updateRemainingTimeEstimate(long elapsedTime) {
+ final long sampleDuration = elapsedTime - mSampleTime;
+ final long sampleSpeed = ((mBytesCopied - mBytesCopiedSample) * 1000) / sampleDuration;
+ if (mSpeed == 0) {
+ mSpeed = sampleSpeed;
+ } else {
+ mSpeed = ((3 * mSpeed) + sampleSpeed) / 4;
+ }
+
+ if (mSampleTime > 0 && mSpeed > 0) {
+ mRemainingTime = ((mBatchSize - mBytesCopied) * 1000) / mSpeed;
+ } else {
+ mRemainingTime = 0;
+ }
+
+ mSampleTime = elapsedTime;
+ mBytesCopiedSample = mBytesCopied;
+ }
+
+ /**
+ * Copies a the given documents to the given location.
+ *
+ * @param srcInfo DocumentInfos for the documents to copy.
+ * @param dstDirInfo The destination directory.
+ * @throws RemoteException
+ */
+ private void copy(DocumentInfo srcInfo, DocumentInfo dstDirInfo) throws RemoteException {
+ final Uri dstUri = DocumentsContract.createDocument(mDstClient, dstDirInfo.derivedUri,
+ srcInfo.mimeType, srcInfo.displayName);
+ if (dstUri == null) {
+ // If this is a directory, the entire subdir will not be copied over.
+ Log.e(TAG, "Error while copying " + srcInfo.displayName);
+ mFailedFiles.add(srcInfo);
+ return;
+ }
+
+ if (Document.MIME_TYPE_DIR.equals(srcInfo.mimeType)) {
+ copyDirectoryHelper(srcInfo.derivedUri, dstUri);
+ } else {
+ copyFileHelper(srcInfo.derivedUri, dstUri);
+ }
+ }
+
+ /**
+ * Handles recursion into a directory and copying its contents. Note that in linux terms, this
+ * does the equivalent of "cp src/* dst", not "cp -r src dst".
+ *
+ * @param srcDirUri URI of the directory to copy from. The routine will copy the directory's
+ * contents, not the directory itself.
+ * @param dstDirUri URI of the directory to copy to. Must be created beforehand.
+ * @throws RemoteException
+ */
+ private void copyDirectoryHelper(Uri srcDirUri, Uri dstDirUri) throws RemoteException {
+ // Recurse into directories. Copy children into the new subdirectory.
+ final String queryColumns[] = new String[] {
+ Document.COLUMN_DISPLAY_NAME,
+ Document.COLUMN_DOCUMENT_ID,
+ Document.COLUMN_MIME_TYPE,
+ Document.COLUMN_SIZE
+ };
+ final Uri queryUri = DocumentsContract.buildChildDocumentsUri(srcDirUri.getAuthority(),
+ DocumentsContract.getDocumentId(srcDirUri));
+ Cursor cursor = null;
+ try {
+ // Iterate over srcs in the directory; copy to the destination directory.
+ cursor = mSrcClient.query(queryUri, queryColumns, null, null, null);
+ while (cursor.moveToNext()) {
+ final String childMimeType = getCursorString(cursor, Document.COLUMN_MIME_TYPE);
+ final Uri dstUri = DocumentsContract.createDocument(mDstClient, dstDirUri,
+ childMimeType, getCursorString(cursor, Document.COLUMN_DISPLAY_NAME));
+ final Uri childUri = DocumentsContract.buildDocumentUri(srcDirUri.getAuthority(),
+ getCursorString(cursor, Document.COLUMN_DOCUMENT_ID));
+ if (Document.MIME_TYPE_DIR.equals(childMimeType)) {
+ copyDirectoryHelper(childUri, dstUri);
+ } else {
+ copyFileHelper(childUri, dstUri);
+ }
+ }
+ } finally {
+ IoUtils.closeQuietly(cursor);
+ }
+ }
+
+ /**
+ * Handles copying a single file.
+ *
+ * @param srcUri URI of the file to copy from.
+ * @param dstUri URI of the *file* to copy to. Must be created beforehand.
+ * @throws RemoteException
+ */
+ private void copyFileHelper(Uri srcUri, Uri dstUri) throws RemoteException {
+ // Copy an individual file.
+ CancellationSignal canceller = new CancellationSignal();
+ ParcelFileDescriptor srcFile = null;
+ ParcelFileDescriptor dstFile = null;
+ InputStream src = null;
+ OutputStream dst = null;
+
+ IOException copyError = null;
+ try {
+ srcFile = mSrcClient.openFile(srcUri, "r", canceller);
+ dstFile = mDstClient.openFile(dstUri, "w", canceller);
+ src = new ParcelFileDescriptor.AutoCloseInputStream(srcFile);
+ dst = new ParcelFileDescriptor.AutoCloseOutputStream(dstFile);
+
+ byte[] buffer = new byte[8192];
+ int len;
+ while (!mIsCancelled && ((len = src.read(buffer)) != -1)) {
+ dst.write(buffer, 0, len);
+ makeProgress(len);
+ }
+
+ srcFile.checkError();
+ } catch (IOException e) {
+ copyError = e;
+ try {
+ dstFile.closeWithError(copyError.getMessage());
+ } catch (IOException closeError) {
+ Log.e(TAG, "Error closing destination", closeError);
+ }
+ } finally {
+ // This also ensures the file descriptors are closed.
+ IoUtils.closeQuietly(src);
+ IoUtils.closeQuietly(dst);
+ }
+
+ if (copyError != null) {
+ // Log errors.
+ Log.e(TAG, "Error while copying " + srcUri.toString(), copyError);
+ try {
+ mFailedFiles.add(DocumentInfo.fromUri(getContentResolver(), srcUri));
+ } catch (FileNotFoundException ignore) {
+ Log.w(TAG, "Source file gone: " + srcUri, copyError);
+ // The source file is gone.
+ }
+ }
+
+ if (copyError != null || mIsCancelled) {
+ // Clean up half-copied files.
+ canceller.cancel();
+ try {
+ DocumentsContract.deleteDocument(mDstClient, dstUri);
+ } catch (RemoteException e) {
+ Log.w(TAG, "Failed to clean up: " + srcUri, e);
+ // RemoteExceptions usually signal that the connection is dead, so there's no point
+ // attempting to continue. Propagate the exception up so the copy job is cancelled.
+ throw e;
+ }
+ }
+ }
+}
diff --git a/src/com/android/documentsui/CreateDirectoryFragment.java b/src/com/android/documentsui/CreateDirectoryFragment.java
index ba8c35f..1f7b41e 100644
--- a/src/com/android/documentsui/CreateDirectoryFragment.java
+++ b/src/com/android/documentsui/CreateDirectoryFragment.java
@@ -56,7 +56,11 @@
final Context context = getActivity();
final ContentResolver resolver = context.getContentResolver();
- final AlertDialog.Builder builder = new AlertDialog.Builder(context);
+ // We need to specify android.R.style.Theme_DeviceDefault_Dialog explicitly,
+ // because the application theme 'DialogWhenReallyLarge' has
+ // fixed window size properties for large screen devices.
+ final AlertDialog.Builder builder = new AlertDialog.Builder(
+ context, AlertDialog.THEME_DEVICE_DEFAULT_LIGHT);
final LayoutInflater dialogInflater = LayoutInflater.from(builder.getContext());
final View view = dialogInflater.inflate(R.layout.dialog_create_dir, null, false);
@@ -70,7 +74,7 @@
public void onClick(DialogInterface dialog, int which) {
final String displayName = text1.getText().toString();
- final DocumentsActivity activity = (DocumentsActivity) getActivity();
+ final BaseActivity activity = (BaseActivity) getActivity();
final DocumentInfo cwd = activity.getCurrentDirectory();
new CreateDirectoryTask(activity, cwd, displayName).executeOnExecutor(
@@ -83,12 +87,12 @@
}
private class CreateDirectoryTask extends AsyncTask<Void, Void, DocumentInfo> {
- private final DocumentsActivity mActivity;
+ private final BaseActivity mActivity;
private final DocumentInfo mCwd;
private final String mDisplayName;
public CreateDirectoryTask(
- DocumentsActivity activity, DocumentInfo cwd, String displayName) {
+ BaseActivity activity, DocumentInfo cwd, String displayName) {
mActivity = activity;
mCwd = cwd;
mDisplayName = displayName;
diff --git a/src/com/android/documentsui/DirectoryFragment.java b/src/com/android/documentsui/DirectoryFragment.java
index 39c2252..f4be9c5 100644
--- a/src/com/android/documentsui/DirectoryFragment.java
+++ b/src/com/android/documentsui/DirectoryFragment.java
@@ -16,17 +16,19 @@
package com.android.documentsui;
+import static com.android.documentsui.BaseActivity.State.ACTION_BROWSE;
+import static com.android.documentsui.BaseActivity.State.ACTION_BROWSE_ALL;
+import static com.android.documentsui.BaseActivity.State.ACTION_CREATE;
+import static com.android.documentsui.BaseActivity.State.ACTION_MANAGE;
+import static com.android.documentsui.BaseActivity.State.MODE_GRID;
+import static com.android.documentsui.BaseActivity.State.MODE_LIST;
+import static com.android.documentsui.BaseActivity.State.MODE_UNKNOWN;
+import static com.android.documentsui.BaseActivity.State.SORT_ORDER_UNKNOWN;
import static com.android.documentsui.DocumentsActivity.TAG;
-import static com.android.documentsui.DocumentsActivity.State.ACTION_CREATE;
-import static com.android.documentsui.DocumentsActivity.State.ACTION_MANAGE;
-import static com.android.documentsui.DocumentsActivity.State.MODE_GRID;
-import static com.android.documentsui.DocumentsActivity.State.MODE_LIST;
-import static com.android.documentsui.DocumentsActivity.State.MODE_UNKNOWN;
-import static com.android.documentsui.DocumentsActivity.State.SORT_ORDER_UNKNOWN;
import static com.android.documentsui.model.DocumentInfo.getCursorInt;
import static com.android.documentsui.model.DocumentInfo.getCursorLong;
import static com.android.documentsui.model.DocumentInfo.getCursorString;
-
+import android.app.Activity;
import android.app.ActivityManager;
import android.app.Fragment;
import android.app.FragmentManager;
@@ -52,6 +54,7 @@
import android.os.Parcelable;
import android.provider.DocumentsContract;
import android.provider.DocumentsContract.Document;
+import android.text.TextUtils;
import android.text.format.DateUtils;
import android.text.format.Formatter;
import android.text.format.Time;
@@ -76,10 +79,11 @@
import android.widget.TextView;
import android.widget.Toast;
-import com.android.documentsui.DocumentsActivity.State;
+import com.android.documentsui.BaseActivity.State;
import com.android.documentsui.ProviderExecutor.Preemptable;
import com.android.documentsui.RecentsProvider.StateColumns;
import com.android.documentsui.model.DocumentInfo;
+import com.android.documentsui.model.DocumentStack;
import com.android.documentsui.model.RootInfo;
import com.google.android.collect.Lists;
@@ -106,6 +110,8 @@
public static final int ANIM_DOWN = 3;
public static final int ANIM_UP = 4;
+ public static final int REQUEST_COPY_DESTINATION = 1;
+
private int mType = TYPE_NORMAL;
private String mStateKey;
@@ -301,12 +307,13 @@
state.derivedMode = result.mode;
}
state.derivedSortOrder = result.sortOrder;
- ((DocumentsActivity) context).onStateChanged();
+ ((BaseActivity) context).onStateChanged();
updateDisplayState();
// When launched into empty recents, show drawer
- if (mType == TYPE_RECENT_OPEN && mAdapter.isEmpty() && !state.stackTouched) {
+ if (mType == TYPE_RECENT_OPEN && mAdapter.isEmpty() && !state.stackTouched &&
+ context instanceof DocumentsActivity) {
((DocumentsActivity) context).setRootsDrawerOpen(true);
}
@@ -335,6 +342,23 @@
}
@Override
+ public void onActivityResult(int requestCode, int resultCode, Intent data) {
+ // There's only one request code right now. Replace this with a switch statement or
+ // something more scalable when more codes are added.
+ if (requestCode != REQUEST_COPY_DESTINATION) {
+ return;
+ }
+ if (resultCode == Activity.RESULT_CANCELED || data == null) {
+ // User pressed the back button or otherwise cancelled the destination pick. Don't
+ // proceed with the copy.
+ return;
+ }
+
+ CopyService.start(getActivity(), getDisplayState(this).selectedDocumentsForCopy,
+ (DocumentStack) data.getParcelableExtra(CopyService.EXTRA_STACK));
+ }
+
+ @Override
public void onStop() {
super.onStop();
@@ -386,7 +410,7 @@
// Mode change is just visual change; no need to kick loader, and
// deliver change event immediately.
state.derivedMode = state.userMode;
- ((DocumentsActivity) getActivity()).onStateChanged();
+ ((BaseActivity) getActivity()).onStateChanged();
updateDisplayState();
}
@@ -441,7 +465,7 @@
final int docFlags = getCursorInt(cursor, Document.COLUMN_FLAGS);
if (isDocumentEnabled(docMimeType, docFlags)) {
final DocumentInfo doc = DocumentInfo.fromDirectoryCursor(cursor);
- ((DocumentsActivity) getActivity()).onDocumentPicked(doc);
+ ((BaseActivity) getActivity()).onDocumentPicked(doc);
}
}
}
@@ -451,8 +475,7 @@
@Override
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
mode.getMenuInflater().inflate(R.menu.mode_directory, menu);
- mode.setTitle(getResources()
- .getString(R.string.mode_selected_count, mCurrentView.getCheckedItemCount()));
+ mode.setTitle(TextUtils.formatSelectedCount(mCurrentView.getCheckedItemCount()));
return true;
}
@@ -463,11 +486,16 @@
final MenuItem open = menu.findItem(R.id.menu_open);
final MenuItem share = menu.findItem(R.id.menu_share);
final MenuItem delete = menu.findItem(R.id.menu_delete);
+ final MenuItem copy = menu.findItem(R.id.menu_copy);
- final boolean manageMode = state.action == ACTION_MANAGE;
- open.setVisible(!manageMode);
- share.setVisible(manageMode);
- delete.setVisible(manageMode);
+ final boolean manageOrBrowse = (state.action == ACTION_MANAGE
+ || state.action == ACTION_BROWSE || state.action == ACTION_BROWSE_ALL);
+
+ open.setVisible(!manageOrBrowse);
+ share.setVisible(manageOrBrowse);
+ delete.setVisible(manageOrBrowse);
+ // Disable copying from the Recents view.
+ copy.setVisible(manageOrBrowse && mType != TYPE_RECENT_OPEN);
return true;
}
@@ -487,7 +515,7 @@
final int id = item.getItemId();
if (id == R.id.menu_open) {
- DocumentsActivity.get(DirectoryFragment.this).onDocumentsPicked(docs);
+ BaseActivity.get(DirectoryFragment.this).onDocumentsPicked(docs);
mode.finish();
return true;
@@ -501,6 +529,19 @@
mode.finish();
return true;
+ } else if (id == R.id.menu_copy) {
+ onCopyDocuments(docs);
+ mode.finish();
+ return true;
+
+ } else if (id == R.id.menu_select_all) {
+ int count = mCurrentView.getCount();
+ for (int i = 0; i < count; i++) {
+ mCurrentView.setItemChecked(i, true);
+ }
+ updateDisplayState();
+ return true;
+
} else {
return false;
}
@@ -522,9 +563,7 @@
if (cursor != null) {
final String docMimeType = getCursorString(cursor, Document.COLUMN_MIME_TYPE);
final int docFlags = getCursorInt(cursor, Document.COLUMN_FLAGS);
- if (!Document.MIME_TYPE_DIR.equals(docMimeType)) {
- valid = isDocumentEnabled(docMimeType, docFlags);
- }
+ valid = isDocumentEnabled(docMimeType, docFlags);
}
if (!valid) {
@@ -532,8 +571,7 @@
}
}
- mode.setTitle(getResources()
- .getString(R.string.mode_selected_count, mCurrentView.getCheckedItemCount()));
+ mode.setTitle(TextUtils.formatSelectedCount(mCurrentView.getCheckedItemCount()));
}
};
@@ -553,8 +591,17 @@
private void onShareDocuments(List<DocumentInfo> docs) {
Intent intent;
- if (docs.size() == 1) {
- final DocumentInfo doc = docs.get(0);
+
+ // Filter out directories - those can't be shared.
+ List<DocumentInfo> docsForSend = Lists.newArrayList();
+ for (DocumentInfo doc: docs) {
+ if (!Document.MIME_TYPE_DIR.equals(doc.mimeType)) {
+ docsForSend.add(doc);
+ }
+ }
+
+ if (docsForSend.size() == 1) {
+ final DocumentInfo doc = docsForSend.get(0);
intent = new Intent(Intent.ACTION_SEND);
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
@@ -562,14 +609,14 @@
intent.setType(doc.mimeType);
intent.putExtra(Intent.EXTRA_STREAM, doc.derivedUri);
- } else if (docs.size() > 1) {
+ } else if (docsForSend.size() > 1) {
intent = new Intent(Intent.ACTION_SEND_MULTIPLE);
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
intent.addCategory(Intent.CATEGORY_DEFAULT);
final ArrayList<String> mimeTypes = Lists.newArrayList();
final ArrayList<Uri> uris = Lists.newArrayList();
- for (DocumentInfo doc : docs) {
+ for (DocumentInfo doc : docsForSend) {
mimeTypes.add(doc.mimeType);
uris.add(doc.derivedUri);
}
@@ -615,8 +662,29 @@
}
}
+ private void onCopyDocuments(List<DocumentInfo> docs) {
+ getDisplayState(this).selectedDocumentsForCopy = docs;
+
+ // Pop up a dialog to pick a destination. This is inadequate but works for now.
+ // TODO: Implement a picker that is to spec.
+ final Intent intent = new Intent(
+ BaseActivity.DocumentsIntent.ACTION_OPEN_COPY_DESTINATION,
+ Uri.EMPTY,
+ getActivity(),
+ DocumentsActivity.class);
+ boolean directoryCopy = false;
+ for (DocumentInfo info : docs) {
+ if (Document.MIME_TYPE_DIR.equals(info.mimeType)) {
+ directoryCopy = true;
+ break;
+ }
+ }
+ intent.putExtra(BaseActivity.DocumentsIntent.EXTRA_DIRECTORY_COPY, directoryCopy);
+ startActivityForResult(intent, REQUEST_COPY_DESTINATION);
+ }
+
private static State getDisplayState(Fragment fragment) {
- return ((DocumentsActivity) fragment.getActivity()).getDisplayState();
+ return ((BaseActivity) fragment.getActivity()).getDisplayState();
}
private static abstract class Footer {
diff --git a/src/com/android/documentsui/DirectoryLoader.java b/src/com/android/documentsui/DirectoryLoader.java
index 163615d..8e4ec8c 100644
--- a/src/com/android/documentsui/DirectoryLoader.java
+++ b/src/com/android/documentsui/DirectoryLoader.java
@@ -17,11 +17,11 @@
package com.android.documentsui;
import static com.android.documentsui.DocumentsActivity.TAG;
-import static com.android.documentsui.DocumentsActivity.State.MODE_UNKNOWN;
-import static com.android.documentsui.DocumentsActivity.State.SORT_ORDER_DISPLAY_NAME;
-import static com.android.documentsui.DocumentsActivity.State.SORT_ORDER_LAST_MODIFIED;
-import static com.android.documentsui.DocumentsActivity.State.SORT_ORDER_SIZE;
-import static com.android.documentsui.DocumentsActivity.State.SORT_ORDER_UNKNOWN;
+import static com.android.documentsui.BaseActivity.State.MODE_UNKNOWN;
+import static com.android.documentsui.BaseActivity.State.SORT_ORDER_DISPLAY_NAME;
+import static com.android.documentsui.BaseActivity.State.SORT_ORDER_LAST_MODIFIED;
+import static com.android.documentsui.BaseActivity.State.SORT_ORDER_SIZE;
+import static com.android.documentsui.BaseActivity.State.SORT_ORDER_UNKNOWN;
import static com.android.documentsui.model.DocumentInfo.getCursorInt;
import android.content.AsyncTaskLoader;
@@ -36,7 +36,7 @@
import android.provider.DocumentsContract.Document;
import android.util.Log;
-import com.android.documentsui.DocumentsActivity.State;
+import com.android.documentsui.BaseActivity.State;
import com.android.documentsui.RecentsProvider.StateColumns;
import com.android.documentsui.model.DocumentInfo;
import com.android.documentsui.model.RootInfo;
diff --git a/src/com/android/documentsui/DirectoryView.java b/src/com/android/documentsui/DirectoryView.java
index 4f52a03..4893652 100644
--- a/src/com/android/documentsui/DirectoryView.java
+++ b/src/com/android/documentsui/DirectoryView.java
@@ -17,9 +17,6 @@
package com.android.documentsui;
import android.content.Context;
-import android.graphics.Rect;
-import android.graphics.drawable.Drawable;
-import android.graphics.drawable.InsetDrawable;
import android.util.AttributeSet;
import android.widget.FrameLayout;
diff --git a/src/com/android/documentsui/DocumentsActivity.java b/src/com/android/documentsui/DocumentsActivity.java
index 8778f11..c541bca 100644
--- a/src/com/android/documentsui/DocumentsActivity.java
+++ b/src/com/android/documentsui/DocumentsActivity.java
@@ -16,18 +16,22 @@
package com.android.documentsui;
+import static com.android.documentsui.BaseActivity.State.ACTION_BROWSE;
+import static com.android.documentsui.BaseActivity.State.ACTION_CREATE;
+import static com.android.documentsui.BaseActivity.State.ACTION_GET_CONTENT;
+import static com.android.documentsui.BaseActivity.State.ACTION_MANAGE;
+import static com.android.documentsui.BaseActivity.State.ACTION_OPEN;
+import static com.android.documentsui.BaseActivity.State.ACTION_OPEN_COPY_DESTINATION;
+import static com.android.documentsui.BaseActivity.State.ACTION_OPEN_TREE;
import static com.android.documentsui.DirectoryFragment.ANIM_DOWN;
import static com.android.documentsui.DirectoryFragment.ANIM_NONE;
-import static com.android.documentsui.DirectoryFragment.ANIM_SIDE;
import static com.android.documentsui.DirectoryFragment.ANIM_UP;
-import static com.android.documentsui.DocumentsActivity.State.ACTION_CREATE;
-import static com.android.documentsui.DocumentsActivity.State.ACTION_GET_CONTENT;
-import static com.android.documentsui.DocumentsActivity.State.ACTION_MANAGE;
-import static com.android.documentsui.DocumentsActivity.State.ACTION_OPEN;
-import static com.android.documentsui.DocumentsActivity.State.ACTION_OPEN_TREE;
-import static com.android.documentsui.DocumentsActivity.State.MODE_GRID;
-import static com.android.documentsui.DocumentsActivity.State.MODE_LIST;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import android.app.ActionBar;
import android.app.Activity;
import android.app.Fragment;
import android.app.FragmentManager;
@@ -41,12 +45,10 @@
import android.content.Intent;
import android.content.pm.ResolveInfo;
import android.content.res.Resources;
-import android.database.Cursor;
import android.graphics.Point;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Bundle;
-import android.os.Parcel;
import android.os.Parcelable;
import android.provider.DocumentsContract;
import android.provider.DocumentsContract.Root;
@@ -54,22 +56,12 @@
import android.support.v4.widget.DrawerLayout;
import android.support.v4.widget.DrawerLayout.DrawerListener;
import android.util.Log;
-import android.util.SparseArray;
-import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
-import android.view.MenuItem.OnActionExpandListener;
import android.view.View;
-import android.view.ViewGroup;
import android.view.WindowManager;
-import android.widget.AdapterView;
-import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.BaseAdapter;
-import android.widget.ImageView;
-import android.widget.SearchView;
-import android.widget.SearchView.OnQueryTextListener;
import android.widget.Spinner;
-import android.widget.TextView;
import android.widget.Toast;
import android.widget.Toolbar;
@@ -79,29 +71,13 @@
import com.android.documentsui.model.DocumentStack;
import com.android.documentsui.model.DurableUtils;
import com.android.documentsui.model.RootInfo;
-import com.google.common.collect.Maps;
-import libcore.io.IoUtils;
-
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.List;
-import java.util.concurrent.Executor;
-
-public class DocumentsActivity extends Activity {
+public class DocumentsActivity extends BaseActivity {
+ private static final int CODE_FORWARD = 42;
public static final String TAG = "Documents";
- private static final String EXTRA_STATE = "state";
-
- private static final int CODE_FORWARD = 42;
-
private boolean mShowAsDialog;
- private SearchView mSearchView;
-
private Toolbar mToolbar;
private Spinner mToolbarStack;
@@ -113,21 +89,19 @@
private DirectoryContainerView mDirectoryContainer;
- private boolean mIgnoreNextNavigation;
- private boolean mIgnoreNextClose;
- private boolean mIgnoreNextCollapse;
-
- private boolean mSearchExpanded;
-
- private RootsCache mRoots;
private State mState;
+ private ItemSelectedListener mStackListener;
+ private BaseAdapter mStackAdapter;
+
+ public DocumentsActivity() {
+ super(TAG);
+ }
+
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
- mRoots = DocumentsApplication.getRootsCache(this);
-
setResult(Activity.RESULT_CANCELED);
setContentView(R.layout.activity);
@@ -160,16 +134,16 @@
mDirectoryContainer = (DirectoryContainerView) findViewById(R.id.container_directory);
- if (icicle != null) {
- mState = icicle.getParcelable(EXTRA_STATE);
- } else {
- buildDefaultState();
- }
+ mState = (icicle != null)
+ ? icicle.<State>getParcelable(EXTRA_STATE)
+ : buildDefaultState();
mToolbar = (Toolbar) findViewById(R.id.toolbar);
mToolbar.setTitleTextAppearance(context,
android.R.style.TextAppearance_DeviceDefault_Widget_ActionBar_Title);
+ mStackAdapter = new StackAdapter();
+ mStackListener = new ItemSelectedListener();
mToolbarStack = (Spinner) findViewById(R.id.stack);
mToolbarStack.setOnItemSelectedListener(mStackListener);
@@ -182,7 +156,7 @@
setActionBar(mToolbar);
// Hide roots when we're managing a specific root
- if (mState.action == ACTION_MANAGE) {
+ if (mState.action == ACTION_MANAGE || mState.action == ACTION_BROWSE) {
if (mShowAsDialog) {
findViewById(R.id.container_roots).setVisibility(View.GONE);
} else {
@@ -194,7 +168,8 @@
final String mimeType = getIntent().getType();
final String title = getIntent().getStringExtra(Intent.EXTRA_TITLE);
SaveFragment.show(getFragmentManager(), mimeType, title);
- } else if (mState.action == ACTION_OPEN_TREE) {
+ } else if (mState.action == ACTION_OPEN_TREE ||
+ mState.action == ACTION_OPEN_COPY_DESTINATION) {
PickFragment.show(getFragmentManager());
}
@@ -203,64 +178,91 @@
moreApps.setComponent(null);
moreApps.setPackage(null);
RootsFragment.show(getFragmentManager(), moreApps);
- } else if (mState.action == ACTION_OPEN || mState.action == ACTION_CREATE
- || mState.action == ACTION_OPEN_TREE) {
+ } else if (mState.action == ACTION_OPEN ||
+ mState.action == ACTION_CREATE ||
+ mState.action == ACTION_OPEN_TREE ||
+ mState.action == ACTION_OPEN_COPY_DESTINATION) {
RootsFragment.show(getFragmentManager(), null);
}
if (!mState.restored) {
- if (mState.action == ACTION_MANAGE) {
+ // In this case, we set the activity title in AsyncTask.onPostExecute(). To prevent
+ // talkback from reading aloud the default title, we clear it here.
+ setTitle("");
+ if (mState.action == ACTION_MANAGE || mState.action == ACTION_BROWSE) {
final Uri rootUri = getIntent().getData();
new RestoreRootTask(rootUri).executeOnExecutor(getCurrentExecutor());
} else {
new RestoreStackTask().execute();
}
+
+ // Show a failure dialog if there was a failed operation.
+ final Intent intent = getIntent();
+ final DocumentStack dstStack = intent.getParcelableExtra(CopyService.EXTRA_STACK);
+ final int failure = intent.getIntExtra(CopyService.EXTRA_FAILURE, 0);
+ if (failure != 0) {
+ final ArrayList<DocumentInfo> failedSrcList =
+ intent.getParcelableArrayListExtra(CopyService.EXTRA_SRC_LIST);
+ FailureDialogFragment.show(getFragmentManager(), failure, failedSrcList, dstStack);
+ }
} else {
onCurrentDirectoryChanged(ANIM_NONE);
}
}
- private void buildDefaultState() {
- mState = new State();
+ private State buildDefaultState() {
+ State state = new State();
final Intent intent = getIntent();
final String action = intent.getAction();
if (Intent.ACTION_OPEN_DOCUMENT.equals(action)) {
- mState.action = ACTION_OPEN;
+ state.action = ACTION_OPEN;
} else if (Intent.ACTION_CREATE_DOCUMENT.equals(action)) {
- mState.action = ACTION_CREATE;
+ state.action = ACTION_CREATE;
} else if (Intent.ACTION_GET_CONTENT.equals(action)) {
- mState.action = ACTION_GET_CONTENT;
+ state.action = ACTION_GET_CONTENT;
} else if (Intent.ACTION_OPEN_DOCUMENT_TREE.equals(action)) {
- mState.action = ACTION_OPEN_TREE;
+ state.action = ACTION_OPEN_TREE;
} else if (DocumentsContract.ACTION_MANAGE_ROOT.equals(action)) {
- mState.action = ACTION_MANAGE;
+ state.action = ACTION_MANAGE;
+ } else if (DocumentsContract.ACTION_BROWSE_DOCUMENT_ROOT.equals(action)) {
+ state.action = ACTION_BROWSE;
+ } else if (DocumentsIntent.ACTION_OPEN_COPY_DESTINATION.equals(action)) {
+ state.action = ACTION_OPEN_COPY_DESTINATION;
}
- if (mState.action == ACTION_OPEN || mState.action == ACTION_GET_CONTENT) {
- mState.allowMultiple = intent.getBooleanExtra(
+ if (state.action == ACTION_OPEN || state.action == ACTION_GET_CONTENT) {
+ state.allowMultiple = intent.getBooleanExtra(
Intent.EXTRA_ALLOW_MULTIPLE, false);
}
- if (mState.action == ACTION_MANAGE) {
- mState.acceptMimes = new String[] { "*/*" };
- mState.allowMultiple = true;
+ if (state.action == ACTION_MANAGE || state.action == ACTION_BROWSE) {
+ state.acceptMimes = new String[] { "*/*" };
+ state.allowMultiple = true;
} else if (intent.hasExtra(Intent.EXTRA_MIME_TYPES)) {
- mState.acceptMimes = intent.getStringArrayExtra(Intent.EXTRA_MIME_TYPES);
+ state.acceptMimes = intent.getStringArrayExtra(Intent.EXTRA_MIME_TYPES);
} else {
- mState.acceptMimes = new String[] { intent.getType() };
+ state.acceptMimes = new String[] { intent.getType() };
}
- mState.localOnly = intent.getBooleanExtra(Intent.EXTRA_LOCAL_ONLY, false);
- mState.forceAdvanced = intent.getBooleanExtra(DocumentsContract.EXTRA_SHOW_ADVANCED, false);
- mState.showAdvanced = mState.forceAdvanced
+ state.localOnly = intent.getBooleanExtra(Intent.EXTRA_LOCAL_ONLY, false);
+ state.forceAdvanced = intent.getBooleanExtra(DocumentsContract.EXTRA_SHOW_ADVANCED, false);
+ state.showAdvanced = state.forceAdvanced
| LocalPreferences.getDisplayAdvancedDevices(this);
- if (mState.action == ACTION_MANAGE) {
- mState.showSize = true;
+ if (state.action == ACTION_MANAGE || state.action == ACTION_BROWSE) {
+ state.showSize = true;
} else {
- mState.showSize = LocalPreferences.getDisplayFileSize(this);
+ state.showSize = LocalPreferences.getDisplayFileSize(this);
}
+ if (state.action == ACTION_OPEN_COPY_DESTINATION) {
+ state.directoryCopy = intent.getBooleanExtra(
+ BaseActivity.DocumentsIntent.EXTRA_DIRECTORY_COPY, false);
+ }
+
+ state.excludedAuthorities = getExcludedAuthorities();
+
+ return state;
}
private class RestoreRootTask extends AsyncTask<Void, Void, RootInfo> {
@@ -282,7 +284,7 @@
mState.restored = true;
if (root != null) {
- onRootPicked(root, true);
+ onRootPicked(root);
} else {
Log.w(TAG, "Failed to find root: " + mRootUri);
finish();
@@ -290,71 +292,55 @@
}
}
- private class RestoreStackTask extends AsyncTask<Void, Void, Void> {
- private volatile boolean mRestoredStack;
- private volatile boolean mExternal;
+ @Override
+ void onStackRestored(boolean restored, boolean external) {
+ // Show drawer when no stack restored, but only when requesting
+ // non-visual content. However, if we last used an external app,
+ // drawer is always shown.
- @Override
- protected Void doInBackground(Void... params) {
- // Restore last stack for calling package
- final String packageName = getCallingPackageMaybeExtra();
- final Cursor cursor = getContentResolver()
- .query(RecentsProvider.buildResume(packageName), null, null, null, null);
- try {
- if (cursor.moveToFirst()) {
- mExternal = cursor.getInt(cursor.getColumnIndex(ResumeColumns.EXTERNAL)) != 0;
- final byte[] rawStack = cursor.getBlob(
- cursor.getColumnIndex(ResumeColumns.STACK));
- DurableUtils.readFromArray(rawStack, mState.stack);
- mRestoredStack = true;
- }
- } catch (IOException e) {
- Log.w(TAG, "Failed to resume: " + e);
- } finally {
- IoUtils.closeQuietly(cursor);
- }
-
- if (mRestoredStack) {
- // Update the restored stack to ensure we have freshest data
- final Collection<RootInfo> matchingRoots = mRoots.getMatchingRootsBlocking(mState);
- try {
- mState.stack.updateRoot(matchingRoots);
- mState.stack.updateDocuments(getContentResolver());
- } catch (FileNotFoundException e) {
- Log.w(TAG, "Failed to restore stack: " + e);
- mState.stack.reset();
- mRestoredStack = false;
- }
- }
-
- return null;
+ boolean showDrawer = false;
+ if (!restored) {
+ showDrawer = true;
+ }
+ if (MimePredicate.mimeMatches(MimePredicate.VISUAL_MIMES, mState.acceptMimes)) {
+ showDrawer = false;
+ }
+ if (external && mState.action == ACTION_GET_CONTENT) {
+ showDrawer = true;
}
- @Override
- protected void onPostExecute(Void result) {
- if (isDestroyed()) return;
- mState.restored = true;
+ if (showDrawer) {
+ setRootsDrawerOpen(true);
+ }
+ }
- // Show drawer when no stack restored, but only when requesting
- // non-visual content. However, if we last used an external app,
- // drawer is always shown.
+ public void onAppPicked(ResolveInfo info) {
+ final Intent intent = new Intent(getIntent());
+ intent.setFlags(intent.getFlags() & ~Intent.FLAG_ACTIVITY_FORWARD_RESULT);
+ intent.setComponent(new ComponentName(
+ info.activityInfo.applicationInfo.packageName, info.activityInfo.name));
+ startActivityForResult(intent, CODE_FORWARD);
+ }
- boolean showDrawer = false;
- if (!mRestoredStack) {
- showDrawer = true;
- }
- if (MimePredicate.mimeMatches(MimePredicate.VISUAL_MIMES, mState.acceptMimes)) {
- showDrawer = false;
- }
- if (mExternal && mState.action == ACTION_GET_CONTENT) {
- showDrawer = true;
- }
+ @Override
+ protected void onActivityResult(int requestCode, int resultCode, Intent data) {
+ Log.d(TAG, "onActivityResult() code=" + resultCode);
- if (showDrawer) {
- setRootsDrawerOpen(true);
- }
+ // Only relay back results when not canceled; otherwise stick around to
+ // let the user pick another app/backend.
+ if (requestCode == CODE_FORWARD && resultCode != RESULT_CANCELED) {
- onCurrentDirectoryChanged(ANIM_NONE);
+ // Remember that we last picked via external app
+ final String packageName = getCallingPackageMaybeExtra();
+ final ContentValues values = new ContentValues();
+ values.put(ResumeColumns.EXTERNAL, 1);
+ getContentResolver().insert(RecentsProvider.buildResume(packageName), values);
+
+ // Pass back result to original caller
+ setResult(resultCode, data);
+ finish();
+ } else {
+ super.onActivityResult(requestCode, resultCode, data);
}
}
@@ -407,24 +393,26 @@
}
}
+ @Override
public void updateActionBar() {
if (mRootsToolbar != null) {
- if (mState.action == ACTION_OPEN || mState.action == ACTION_GET_CONTENT
- || mState.action == ACTION_OPEN_TREE) {
- mRootsToolbar.setTitle(R.string.title_open);
- } else if (mState.action == ACTION_CREATE) {
- mRootsToolbar.setTitle(R.string.title_save);
+ final String prompt = getIntent().getStringExtra(DocumentsContract.EXTRA_PROMPT);
+ if (prompt != null) {
+ mRootsToolbar.setTitle(prompt);
+ } else {
+ if (mState.action == ACTION_OPEN ||
+ mState.action == ACTION_GET_CONTENT ||
+ mState.action == ACTION_OPEN_TREE) {
+ mRootsToolbar.setTitle(R.string.title_open);
+ } else if (mState.action == ACTION_CREATE ||
+ mState.action == ACTION_OPEN_COPY_DESTINATION) {
+ mRootsToolbar.setTitle(R.string.title_save);
+ }
}
}
- final RootInfo root = getCurrentRoot();
- final boolean showRootIcon = mShowAsDialog || (mState.action == ACTION_MANAGE);
- if (showRootIcon) {
- mToolbar.setNavigationIcon(
- root != null ? root.loadToolbarIcon(mToolbar.getContext()) : null);
- mToolbar.setNavigationContentDescription(R.string.drawer_open);
- mToolbar.setNavigationOnClickListener(null);
- } else {
+ if (!mShowAsDialog && mDrawerLayout.getDrawerLockMode(mRootsDrawer) ==
+ DrawerLayout.LOCK_MODE_UNLOCKED) {
mToolbar.setNavigationIcon(R.drawable.ic_hamburger);
mToolbar.setNavigationContentDescription(R.string.drawer_open);
mToolbar.setNavigationOnClickListener(new View.OnClickListener() {
@@ -433,15 +421,19 @@
setRootsDrawerOpen(true);
}
});
+ } else {
+ mToolbar.setNavigationIcon(null);
+ mToolbar.setNavigationContentDescription(R.string.drawer_open);
+ mToolbar.setNavigationOnClickListener(null);
}
- if (mSearchExpanded) {
+ if (mSearchManager.isExpanded()) {
mToolbar.setTitle(null);
mToolbarStack.setVisibility(View.GONE);
mToolbarStack.setAdapter(null);
} else {
if (mState.stack.size() <= 1) {
- mToolbar.setTitle(root.title);
+ mToolbar.setTitle(getCurrentRoot().title);
mToolbarStack.setVisibility(View.GONE);
mToolbarStack.setAdapter(null);
} else {
@@ -449,7 +441,7 @@
mToolbarStack.setVisibility(View.VISIBLE);
mToolbarStack.setAdapter(mStackAdapter);
- mIgnoreNextNavigation = true;
+ mStackListener.mIgnoreNextNavigation = true;
mToolbarStack.setSelection(mStackAdapter.getCount() - 1);
}
}
@@ -457,129 +449,36 @@
@Override
public boolean onCreateOptionsMenu(Menu menu) {
- super.onCreateOptionsMenu(menu);
- getMenuInflater().inflate(R.menu.activity, menu);
+ boolean showMenu = super.onCreateOptionsMenu(menu);
// Most actions are visible when showing as dialog
if (mShowAsDialog) {
- for (int i = 0; i < menu.size(); i++) {
- final MenuItem item = menu.getItem(i);
- switch (item.getItemId()) {
- case R.id.menu_advanced:
- case R.id.menu_file_size:
- break;
- default:
- item.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
- }
- }
+ expandMenus(menu);
}
-
- final MenuItem searchMenu = menu.findItem(R.id.menu_search);
- mSearchView = (SearchView) searchMenu.getActionView();
- mSearchView.setOnQueryTextListener(new OnQueryTextListener() {
- @Override
- public boolean onQueryTextSubmit(String query) {
- mSearchExpanded = true;
- mState.currentSearch = query;
- mSearchView.clearFocus();
- onCurrentDirectoryChanged(ANIM_NONE);
- return true;
- }
-
- @Override
- public boolean onQueryTextChange(String newText) {
- return false;
- }
- });
-
- searchMenu.setOnActionExpandListener(new OnActionExpandListener() {
- @Override
- public boolean onMenuItemActionExpand(MenuItem item) {
- mSearchExpanded = true;
- updateActionBar();
- return true;
- }
-
- @Override
- public boolean onMenuItemActionCollapse(MenuItem item) {
- mSearchExpanded = false;
- if (mIgnoreNextCollapse) {
- mIgnoreNextCollapse = false;
- return true;
- }
-
- mState.currentSearch = null;
- onCurrentDirectoryChanged(ANIM_NONE);
- return true;
- }
- });
-
- mSearchView.setOnCloseListener(new SearchView.OnCloseListener() {
- @Override
- public boolean onClose() {
- mSearchExpanded = false;
- if (mIgnoreNextClose) {
- mIgnoreNextClose = false;
- return false;
- }
-
- mState.currentSearch = null;
- onCurrentDirectoryChanged(ANIM_NONE);
- return false;
- }
- });
-
- return true;
+ return showMenu;
}
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
super.onPrepareOptionsMenu(menu);
- final FragmentManager fm = getFragmentManager();
-
final RootInfo root = getCurrentRoot();
final DocumentInfo cwd = getCurrentDirectory();
final MenuItem createDir = menu.findItem(R.id.menu_create_dir);
- final MenuItem search = menu.findItem(R.id.menu_search);
- final MenuItem sort = menu.findItem(R.id.menu_sort);
- final MenuItem sortSize = menu.findItem(R.id.menu_sort_size);
final MenuItem grid = menu.findItem(R.id.menu_grid);
final MenuItem list = menu.findItem(R.id.menu_list);
final MenuItem advanced = menu.findItem(R.id.menu_advanced);
final MenuItem fileSize = menu.findItem(R.id.menu_file_size);
+ final MenuItem settings = menu.findItem(R.id.menu_settings);
- sort.setVisible(cwd != null);
- grid.setVisible(mState.derivedMode != MODE_GRID);
- list.setVisible(mState.derivedMode != MODE_LIST);
-
- if (mState.currentSearch != null) {
- // Search uses backend ranking; no sorting
- sort.setVisible(false);
-
- search.expandActionView();
-
- mSearchView.setIconified(false);
- mSearchView.clearFocus();
- mSearchView.setQuery(mState.currentSearch, false);
- } else {
- mIgnoreNextClose = true;
- mSearchView.setIconified(true);
- mSearchView.clearFocus();
-
- mIgnoreNextCollapse = true;
- search.collapseActionView();
- }
-
- // Only sort by size when visible
- sortSize.setVisible(mState.showSize);
-
- boolean searchVisible;
- boolean fileSizeVisible = mState.action != ACTION_MANAGE;
- if (mState.action == ACTION_CREATE || mState.action == ACTION_OPEN_TREE) {
+ boolean fileSizeVisible = !(mState.action == ACTION_MANAGE
+ || mState.action == ACTION_BROWSE);
+ if (mState.action == ACTION_CREATE
+ || mState.action == ACTION_OPEN_TREE
+ || mState.action == ACTION_OPEN_COPY_DESTINATION) {
createDir.setVisible(cwd != null && cwd.isCreateSupported());
- searchVisible = false;
+ mSearchManager.showMenu(false);
// No display options in recent directories
if (cwd == null) {
@@ -589,26 +488,19 @@
}
if (mState.action == ACTION_CREATE) {
+ final FragmentManager fm = getFragmentManager();
SaveFragment.get(fm).setSaveEnabled(cwd != null && cwd.isCreateSupported());
}
} else {
createDir.setVisible(false);
-
- searchVisible = root != null
- && ((root.flags & Root.FLAG_SUPPORTS_SEARCH) != 0);
}
- // TODO: close any search in-progress when hiding
- search.setVisible(searchVisible);
-
- advanced.setTitle(LocalPreferences.getDisplayAdvancedDevices(this)
- ? R.string.menu_advanced_hide : R.string.menu_advanced_show);
- fileSize.setTitle(LocalPreferences.getDisplayFileSize(this)
- ? R.string.menu_file_size_hide : R.string.menu_file_size_show);
-
- advanced.setVisible(mState.action != ACTION_MANAGE);
+ advanced.setVisible(!(mState.action == ACTION_MANAGE || mState.action == ACTION_BROWSE));
fileSize.setVisible(fileSizeVisible);
+ settings.setVisible((mState.action == ACTION_MANAGE || mState.action == ACTION_BROWSE)
+ && (root.flags & Root.FLAG_HAS_SETTINGS) != 0);
+
return true;
}
@@ -617,88 +509,16 @@
if (mDrawerToggle != null && mDrawerToggle.onOptionsItemSelected(item)) {
return true;
}
-
- final int id = item.getItemId();
- if (id == android.R.id.home) {
- onBackPressed();
- return true;
- } else if (id == R.id.menu_create_dir) {
- CreateDirectoryFragment.show(getFragmentManager());
- return true;
- } else if (id == R.id.menu_search) {
- return false;
- } else if (id == R.id.menu_sort_name) {
- setUserSortOrder(State.SORT_ORDER_DISPLAY_NAME);
- return true;
- } else if (id == R.id.menu_sort_date) {
- setUserSortOrder(State.SORT_ORDER_LAST_MODIFIED);
- return true;
- } else if (id == R.id.menu_sort_size) {
- setUserSortOrder(State.SORT_ORDER_SIZE);
- return true;
- } else if (id == R.id.menu_grid) {
- setUserMode(State.MODE_GRID);
- return true;
- } else if (id == R.id.menu_list) {
- setUserMode(State.MODE_LIST);
- return true;
- } else if (id == R.id.menu_advanced) {
- setDisplayAdvancedDevices(!LocalPreferences.getDisplayAdvancedDevices(this));
- return true;
- } else if (id == R.id.menu_file_size) {
- setDisplayFileSize(!LocalPreferences.getDisplayFileSize(this));
- return true;
- } else {
- return super.onOptionsItemSelected(item);
- }
- }
-
- private void setDisplayAdvancedDevices(boolean display) {
- LocalPreferences.setDisplayAdvancedDevices(this, display);
- mState.showAdvanced = mState.forceAdvanced | display;
- RootsFragment.get(getFragmentManager()).onDisplayStateChanged();
- invalidateOptionsMenu();
- }
-
- private void setDisplayFileSize(boolean display) {
- LocalPreferences.setDisplayFileSize(this, display);
- mState.showSize = display;
- DirectoryFragment.get(getFragmentManager()).onDisplayStateChanged();
- invalidateOptionsMenu();
- }
-
- /**
- * Update UI to reflect internal state changes not from user.
- */
- public void onStateChanged() {
- invalidateOptionsMenu();
- }
-
- /**
- * Set state sort order based on explicit user action.
- */
- private void setUserSortOrder(int sortOrder) {
- mState.userSortOrder = sortOrder;
- DirectoryFragment.get(getFragmentManager()).onUserSortOrderChanged();
- }
-
- /**
- * Set state mode based on explicit user action.
- */
- private void setUserMode(int mode) {
- mState.userMode = mode;
- DirectoryFragment.get(getFragmentManager()).onUserModeChanged();
- }
-
- public void setPending(boolean pending) {
- final SaveFragment save = SaveFragment.get(getFragmentManager());
- if (save != null) {
- save.setPending(pending);
- }
+ return super.onOptionsItemSelected(item);
}
@Override
public void onBackPressed() {
+ // While action bar is expanded, the state stack UI is hidden.
+ if (mSearchManager.cancelSearch()) {
+ return;
+ }
+
if (!mState.stackTouched) {
super.onBackPressed();
return;
@@ -717,128 +537,12 @@
}
@Override
- protected void onSaveInstanceState(Bundle state) {
- super.onSaveInstanceState(state);
- state.putParcelable(EXTRA_STATE, mState);
- }
-
- @Override
- protected void onRestoreInstanceState(Bundle state) {
- super.onRestoreInstanceState(state);
- }
-
- private BaseAdapter mStackAdapter = new BaseAdapter() {
- @Override
- public int getCount() {
- return mState.stack.size();
- }
-
- @Override
- public DocumentInfo getItem(int position) {
- return mState.stack.get(mState.stack.size() - position - 1);
- }
-
- @Override
- public long getItemId(int position) {
- return position;
- }
-
- @Override
- public View getView(int position, View convertView, ViewGroup parent) {
- if (convertView == null) {
- convertView = LayoutInflater.from(parent.getContext())
- .inflate(R.layout.item_subdir_title, parent, false);
- }
-
- final TextView title = (TextView) convertView.findViewById(android.R.id.title);
- final DocumentInfo doc = getItem(position);
-
- if (position == 0) {
- final RootInfo root = getCurrentRoot();
- title.setText(root.title);
- } else {
- title.setText(doc.displayName);
- }
-
- return convertView;
- }
-
- @Override
- public View getDropDownView(int position, View convertView, ViewGroup parent) {
- if (convertView == null) {
- convertView = LayoutInflater.from(parent.getContext())
- .inflate(R.layout.item_subdir, parent, false);
- }
-
- final ImageView subdir = (ImageView) convertView.findViewById(R.id.subdir);
- final TextView title = (TextView) convertView.findViewById(android.R.id.title);
- final DocumentInfo doc = getItem(position);
-
- if (position == 0) {
- final RootInfo root = getCurrentRoot();
- title.setText(root.title);
- subdir.setVisibility(View.GONE);
- } else {
- title.setText(doc.displayName);
- subdir.setVisibility(View.VISIBLE);
- }
-
- return convertView;
- }
- };
-
- private OnItemSelectedListener mStackListener = new OnItemSelectedListener() {
- @Override
- public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
- if (mIgnoreNextNavigation) {
- mIgnoreNextNavigation = false;
- return;
- }
-
- while (mState.stack.size() > position + 1) {
- mState.stackTouched = true;
- mState.stack.pop();
- }
- onCurrentDirectoryChanged(ANIM_UP);
- }
-
- @Override
- public void onNothingSelected(AdapterView<?> parent) {
- // Ignored
- }
- };
-
- public RootInfo getCurrentRoot() {
- if (mState.stack.root != null) {
- return mState.stack.root;
- } else {
- return mRoots.getRecentsRoot();
- }
- }
-
- public DocumentInfo getCurrentDirectory() {
- return mState.stack.peek();
- }
-
- private String getCallingPackageMaybeExtra() {
- final String extra = getIntent().getStringExtra(DocumentsContract.EXTRA_PACKAGE_NAME);
- return (extra != null) ? extra : getCallingPackage();
- }
-
- public Executor getCurrentExecutor() {
- final DocumentInfo cwd = getCurrentDirectory();
- if (cwd != null && cwd.authority != null) {
- return ProviderExecutor.forAuthority(cwd.authority);
- } else {
- return AsyncTask.THREAD_POOL_EXECUTOR;
- }
- }
-
public State getDisplayState() {
return mState;
}
- private void onCurrentDirectoryChanged(int anim) {
+ @Override
+ void onDirectoryChanged(int anim) {
final FragmentManager fm = getFragmentManager();
final RootInfo root = getCurrentRoot();
final DocumentInfo cwd = getCurrentDirectory();
@@ -847,7 +551,9 @@
if (cwd == null) {
// No directory means recents
- if (mState.action == ACTION_CREATE || mState.action == ACTION_OPEN_TREE) {
+ if (mState.action == ACTION_CREATE ||
+ mState.action == ACTION_OPEN_TREE ||
+ mState.action == ACTION_OPEN_COPY_DESTINATION) {
RecentsCreateFragment.show(fm);
} else {
DirectoryFragment.showRecentsOpen(fm, anim);
@@ -855,7 +561,7 @@
// Start recents in grid when requesting visual things
final boolean visualMimes = MimePredicate.mimeMatches(
MimePredicate.VISUAL_MIMES, mState.acceptMimes);
- mState.userMode = visualMimes ? MODE_GRID : MODE_LIST;
+ mState.userMode = visualMimes ? State.MODE_GRID : State.MODE_LIST;
mState.derivedMode = mState.userMode;
}
} else {
@@ -876,115 +582,30 @@
}
}
- if (mState.action == ACTION_OPEN_TREE) {
+ if (mState.action == ACTION_OPEN_TREE ||
+ mState.action == ACTION_OPEN_COPY_DESTINATION) {
final PickFragment pick = PickFragment.get(fm);
if (pick != null) {
- final CharSequence displayName = (mState.stack.size() <= 1) ? root.title
- : cwd.displayName;
- pick.setPickTarget(cwd, displayName);
- }
- }
-
- final RootsFragment roots = RootsFragment.get(fm);
- if (roots != null) {
- roots.onCurrentRootChanged();
- }
-
- updateActionBar();
- invalidateOptionsMenu();
- dumpStack();
- }
-
- public void onStackPicked(DocumentStack stack) {
- try {
- // Update the restored stack to ensure we have freshest data
- stack.updateDocuments(getContentResolver());
-
- mState.stack = stack;
- mState.stackTouched = true;
- onCurrentDirectoryChanged(ANIM_SIDE);
-
- } catch (FileNotFoundException e) {
- Log.w(TAG, "Failed to restore stack: " + e);
- }
- }
-
- public void onRootPicked(RootInfo root, boolean closeDrawer) {
- // Clear entire backstack and start in new root
- mState.stack.root = root;
- mState.stack.clear();
- mState.stackTouched = true;
-
- if (!mRoots.isRecentsRoot(root)) {
- new PickRootTask(root).executeOnExecutor(getCurrentExecutor());
- } else {
- onCurrentDirectoryChanged(ANIM_SIDE);
- }
-
- if (closeDrawer) {
- setRootsDrawerOpen(false);
- }
- }
-
- private class PickRootTask extends AsyncTask<Void, Void, DocumentInfo> {
- private RootInfo mRoot;
-
- public PickRootTask(RootInfo root) {
- mRoot = root;
- }
-
- @Override
- protected DocumentInfo doInBackground(Void... params) {
- try {
- final Uri uri = DocumentsContract.buildDocumentUri(
- mRoot.authority, mRoot.documentId);
- return DocumentInfo.fromUri(getContentResolver(), uri);
- } catch (FileNotFoundException e) {
- Log.w(TAG, "Failed to find root", e);
- return null;
- }
- }
-
- @Override
- protected void onPostExecute(DocumentInfo result) {
- if (result != null) {
- mState.stack.push(result);
- mState.stackTouched = true;
- onCurrentDirectoryChanged(ANIM_SIDE);
+ pick.setPickTarget(mState.action, cwd);
}
}
}
- public void onAppPicked(ResolveInfo info) {
- final Intent intent = new Intent(getIntent());
- intent.setFlags(intent.getFlags() & ~Intent.FLAG_ACTIVITY_FORWARD_RESULT);
- intent.setComponent(new ComponentName(
- info.activityInfo.applicationInfo.packageName, info.activityInfo.name));
- startActivityForResult(intent, CODE_FORWARD);
+ void onSaveRequested(DocumentInfo replaceTarget) {
+ new ExistingFinishTask(replaceTarget.derivedUri).executeOnExecutor(getCurrentExecutor());
+ }
+
+ void onSaveRequested(String mimeType, String displayName) {
+ new CreateFinishTask(mimeType, displayName).executeOnExecutor(getCurrentExecutor());
}
@Override
- protected void onActivityResult(int requestCode, int resultCode, Intent data) {
- Log.d(TAG, "onActivityResult() code=" + resultCode);
-
- // Only relay back results when not canceled; otherwise stick around to
- // let the user pick another app/backend.
- if (requestCode == CODE_FORWARD && resultCode != RESULT_CANCELED) {
-
- // Remember that we last picked via external app
- final String packageName = getCallingPackageMaybeExtra();
- final ContentValues values = new ContentValues();
- values.put(ResumeColumns.EXTERNAL, 1);
- getContentResolver().insert(RecentsProvider.buildResume(packageName), values);
-
- // Pass back result to original caller
- setResult(resultCode, data);
- finish();
- } else {
- super.onActivityResult(requestCode, resultCode, data);
- }
+ void onRootPicked(RootInfo root) {
+ super.onRootPicked(root);
+ setRootsDrawerOpen(false);
}
+ @Override
public void onDocumentPicked(DocumentInfo doc) {
final FragmentManager fm = getFragmentManager();
if (doc.isDirectory()) {
@@ -1017,9 +638,21 @@
Toast.makeText(this, R.string.toast_no_application, Toast.LENGTH_SHORT).show();
}
}
+ } else if (mState.action == ACTION_BROWSE) {
+ // Go straight to viewing
+ final Intent view = new Intent(Intent.ACTION_VIEW);
+ view.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
+ view.setData(doc.derivedUri);
+
+ try {
+ startActivity(view);
+ } catch (ActivityNotFoundException ex) {
+ Toast.makeText(this, R.string.toast_no_application, Toast.LENGTH_SHORT).show();
+ }
}
}
+ @Override
public void onDocumentsPicked(List<DocumentInfo> docs) {
if (mState.action == ACTION_OPEN || mState.action == ACTION_GET_CONTENT) {
final int size = docs.size();
@@ -1031,26 +664,29 @@
}
}
- public void onSaveRequested(DocumentInfo replaceTarget) {
- new ExistingFinishTask(replaceTarget.derivedUri).executeOnExecutor(getCurrentExecutor());
- }
-
- public void onSaveRequested(String mimeType, String displayName) {
- new CreateFinishTask(mimeType, displayName).executeOnExecutor(getCurrentExecutor());
- }
-
public void onPickRequested(DocumentInfo pickTarget) {
- final Uri viaUri = DocumentsContract.buildTreeDocumentUri(pickTarget.authority,
- pickTarget.documentId);
- new PickFinishTask(viaUri).executeOnExecutor(getCurrentExecutor());
+ Uri result;
+ if (mState.action == ACTION_OPEN_TREE) {
+ result = DocumentsContract.buildTreeDocumentUri(
+ pickTarget.authority, pickTarget.documentId);
+ } else if (mState.action == ACTION_OPEN_COPY_DESTINATION) {
+ result = pickTarget.derivedUri;
+ } else {
+ // Should not be reached.
+ throw new IllegalStateException("Invalid mState.action.");
+ }
+ new PickFinishTask(result).executeOnExecutor(getCurrentExecutor());
}
- private void saveStackBlocking() {
+ @Override
+ void saveStackBlocking() {
final ContentResolver resolver = getContentResolver();
final ContentValues values = new ContentValues();
final byte[] rawStack = DurableUtils.writeToArrayOrNull(mState.stack);
- if (mState.action == ACTION_CREATE || mState.action == ACTION_OPEN_TREE) {
+ if (mState.action == ACTION_CREATE ||
+ mState.action == ACTION_OPEN_TREE ||
+ mState.action == ACTION_OPEN_COPY_DESTINATION) {
// Remember stack for last create
values.clear();
values.put(RecentColumns.KEY, mState.stack.buildKey());
@@ -1066,7 +702,8 @@
resolver.insert(RecentsProvider.buildResume(packageName), values);
}
- private void onFinished(Uri... uris) {
+ @Override
+ void onTaskFinished(Uri... uris) {
Log.d(TAG, "onFinished() " + Arrays.toString(uris));
final Intent intent = new Intent();
@@ -1083,11 +720,14 @@
if (mState.action == ACTION_GET_CONTENT) {
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
- } else if (mState.action == ACTION_OPEN_TREE) {
+ } else if (mState.action == ACTION_OPEN_TREE ||
+ mState.action == ACTION_OPEN_COPY_DESTINATION) {
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION
| Intent.FLAG_GRANT_WRITE_URI_PERMISSION
| Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION
| Intent.FLAG_GRANT_PREFIX_URI_PERMISSION);
+ // TODO: Move passing the stack to the separate ACTION_COPY action once it's implemented.
+ intent.putExtra(CopyService.EXTRA_STACK, (Parcelable)mState.stack);
} else {
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION
| Intent.FLAG_GRANT_WRITE_URI_PERMISSION
@@ -1098,7 +738,52 @@
finish();
}
- private class CreateFinishTask extends AsyncTask<Void, Void, Uri> {
+ public static DocumentsActivity get(Fragment fragment) {
+ return (DocumentsActivity) fragment.getActivity();
+ }
+
+ private final class PickFinishTask extends AsyncTask<Void, Void, Void> {
+ private final Uri mUri;
+
+ public PickFinishTask(Uri uri) {
+ mUri = uri;
+ }
+
+ @Override
+ protected Void doInBackground(Void... params) {
+ saveStackBlocking();
+ return null;
+ }
+
+ @Override
+ protected void onPostExecute(Void result) {
+ onTaskFinished(mUri);
+ }
+ }
+
+ final class ExistingFinishTask extends AsyncTask<Void, Void, Void> {
+ private final Uri[] mUris;
+
+ public ExistingFinishTask(Uri... uris) {
+ mUris = uris;
+ }
+
+ @Override
+ protected Void doInBackground(Void... params) {
+ saveStackBlocking();
+ return null;
+ }
+
+ @Override
+ protected void onPostExecute(Void result) {
+ onTaskFinished(mUris);
+ }
+ }
+
+ /**
+ * Task that creates a new document in the background.
+ */
+ final class CreateFinishTask extends AsyncTask<Void, Void, Uri> {
private final String mMimeType;
private final String mDisplayName;
@@ -1140,7 +825,7 @@
@Override
protected void onPostExecute(Uri result) {
if (result != null) {
- onFinished(result);
+ onTaskFinished(result);
} else {
Toast.makeText(DocumentsActivity.this, R.string.save_error, Toast.LENGTH_SHORT)
.show();
@@ -1149,150 +834,4 @@
setPending(false);
}
}
-
- private class ExistingFinishTask extends AsyncTask<Void, Void, Void> {
- private final Uri[] mUris;
-
- public ExistingFinishTask(Uri... uris) {
- mUris = uris;
- }
-
- @Override
- protected Void doInBackground(Void... params) {
- saveStackBlocking();
- return null;
- }
-
- @Override
- protected void onPostExecute(Void result) {
- onFinished(mUris);
- }
- }
-
- private class PickFinishTask extends AsyncTask<Void, Void, Void> {
- private final Uri mUri;
-
- public PickFinishTask(Uri uri) {
- mUri = uri;
- }
-
- @Override
- protected Void doInBackground(Void... params) {
- saveStackBlocking();
- return null;
- }
-
- @Override
- protected void onPostExecute(Void result) {
- onFinished(mUri);
- }
- }
-
- public static class State implements android.os.Parcelable {
- public int action;
- public String[] acceptMimes;
-
- /** Explicit user choice */
- public int userMode = MODE_UNKNOWN;
- /** Derived after loader */
- public int derivedMode = MODE_LIST;
-
- /** Explicit user choice */
- public int userSortOrder = SORT_ORDER_UNKNOWN;
- /** Derived after loader */
- public int derivedSortOrder = SORT_ORDER_DISPLAY_NAME;
-
- public boolean allowMultiple = false;
- public boolean showSize = false;
- public boolean localOnly = false;
- public boolean forceAdvanced = false;
- public boolean showAdvanced = false;
- public boolean stackTouched = false;
- public boolean restored = false;
-
- /** Current user navigation stack; empty implies recents. */
- public DocumentStack stack = new DocumentStack();
- /** Currently active search, overriding any stack. */
- public String currentSearch;
-
- /** Instance state for every shown directory */
- public HashMap<String, SparseArray<Parcelable>> dirState = Maps.newHashMap();
-
- public static final int ACTION_OPEN = 1;
- public static final int ACTION_CREATE = 2;
- public static final int ACTION_GET_CONTENT = 3;
- public static final int ACTION_OPEN_TREE = 4;
- public static final int ACTION_MANAGE = 5;
-
- public static final int MODE_UNKNOWN = 0;
- public static final int MODE_LIST = 1;
- public static final int MODE_GRID = 2;
-
- public static final int SORT_ORDER_UNKNOWN = 0;
- public static final int SORT_ORDER_DISPLAY_NAME = 1;
- public static final int SORT_ORDER_LAST_MODIFIED = 2;
- public static final int SORT_ORDER_SIZE = 3;
-
- @Override
- public int describeContents() {
- return 0;
- }
-
- @Override
- public void writeToParcel(Parcel out, int flags) {
- out.writeInt(action);
- out.writeInt(userMode);
- out.writeStringArray(acceptMimes);
- out.writeInt(userSortOrder);
- out.writeInt(allowMultiple ? 1 : 0);
- out.writeInt(showSize ? 1 : 0);
- out.writeInt(localOnly ? 1 : 0);
- out.writeInt(forceAdvanced ? 1 : 0);
- out.writeInt(showAdvanced ? 1 : 0);
- out.writeInt(stackTouched ? 1 : 0);
- out.writeInt(restored ? 1 : 0);
- DurableUtils.writeToParcel(out, stack);
- out.writeString(currentSearch);
- out.writeMap(dirState);
- }
-
- public static final Creator<State> CREATOR = new Creator<State>() {
- @Override
- public State createFromParcel(Parcel in) {
- final State state = new State();
- state.action = in.readInt();
- state.userMode = in.readInt();
- state.acceptMimes = in.readStringArray();
- state.userSortOrder = in.readInt();
- state.allowMultiple = in.readInt() != 0;
- state.showSize = in.readInt() != 0;
- state.localOnly = in.readInt() != 0;
- state.forceAdvanced = in.readInt() != 0;
- state.showAdvanced = in.readInt() != 0;
- state.stackTouched = in.readInt() != 0;
- state.restored = in.readInt() != 0;
- DurableUtils.readFromParcel(in, state.stack);
- state.currentSearch = in.readString();
- in.readMap(state.dirState, null);
- return state;
- }
-
- @Override
- public State[] newArray(int size) {
- return new State[size];
- }
- };
- }
-
- private void dumpStack() {
- Log.d(TAG, "Current stack: ");
- Log.d(TAG, " * " + mState.stack.root);
- for (DocumentInfo doc : mState.stack) {
- Log.d(TAG, " +-- " + doc);
- }
- }
-
- public static DocumentsActivity get(Fragment fragment) {
- return (DocumentsActivity) fragment.getActivity();
- }
}
diff --git a/src/com/android/documentsui/DocumentsToolBar.java b/src/com/android/documentsui/DocumentsToolBar.java
new file mode 100644
index 0000000..36b7646
--- /dev/null
+++ b/src/com/android/documentsui/DocumentsToolBar.java
@@ -0,0 +1,72 @@
+/*
+ * Copyright (C) 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.documentsui;
+
+import android.content.Context;
+import android.util.AttributeSet;
+import android.view.MenuItem;
+import android.widget.Toolbar;
+
+/**
+ * ToolBar of Documents UI.
+ */
+public class DocumentsToolBar extends Toolbar {
+ interface OnActionViewCollapsedListener {
+ void onActionViewCollapsed();
+ }
+
+ private OnActionViewCollapsedListener mOnActionViewCollapsedListener;
+
+ public DocumentsToolBar(Context context, AttributeSet attrs,
+ int defStyleAttr, int defStyleRes) {
+ super(context, attrs, defStyleAttr, defStyleRes);
+ }
+
+ public DocumentsToolBar(Context context, AttributeSet attrs,
+ int defStyleAttr) {
+ super(context, attrs, defStyleAttr);
+ }
+
+ public DocumentsToolBar(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ }
+
+ public DocumentsToolBar(Context context) {
+ super(context);
+ }
+
+ @Override
+ public void collapseActionView() {
+ super.collapseActionView();
+ if (mOnActionViewCollapsedListener != null) {
+ mOnActionViewCollapsedListener.onActionViewCollapsed();
+ }
+ }
+
+ /**
+ * Adds a listener that is invoked after collapsing the action view.
+ * @param listener
+ */
+ public void setOnActionViewCollapsedListener(
+ OnActionViewCollapsedListener listener) {
+ mOnActionViewCollapsedListener = listener;
+ }
+
+ public MenuItem getSearchMenu() {
+ return getMenu().findItem(R.id.menu_search);
+ }
+}
diff --git a/src/com/android/documentsui/FailureDialogFragment.java b/src/com/android/documentsui/FailureDialogFragment.java
new file mode 100644
index 0000000..00b0f78
--- /dev/null
+++ b/src/com/android/documentsui/FailureDialogFragment.java
@@ -0,0 +1,97 @@
+/*
+ * Copyright (C) 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.documentsui;
+
+import android.app.Activity;
+import android.app.AlertDialog;
+import android.app.Dialog;
+import android.app.DialogFragment;
+import android.app.Fragment;
+import android.app.FragmentManager;
+import android.app.FragmentTransaction;
+import android.content.DialogInterface;
+import android.net.Uri;
+import android.os.Bundle;
+import android.text.Html;
+
+import com.android.documentsui.CopyService;
+import com.android.documentsui.model.DocumentInfo;
+import com.android.documentsui.model.DocumentStack;
+
+import java.io.FileNotFoundException;
+import java.util.ArrayList;
+
+/**
+ * Alert dialog for failed operations.
+ */
+public class FailureDialogFragment extends DialogFragment
+ implements DialogInterface.OnClickListener {
+ private static final String TAG = "FailureDialogFragment";
+
+ private int mFailure;
+ private ArrayList<DocumentInfo> mFailedSrcList;
+
+ public static void show(FragmentManager fm, int failure,
+ ArrayList<DocumentInfo> failedSrcList, DocumentStack dstStack) {
+ // TODO: Add support for other failures than copy.
+ if (failure != CopyService.FAILURE_COPY) {
+ return;
+ }
+
+ final Bundle args = new Bundle();
+ args.putInt(CopyService.EXTRA_FAILURE, failure);
+ args.putParcelableArrayList(CopyService.EXTRA_SRC_LIST, failedSrcList);
+
+ final FragmentTransaction ft = fm.beginTransaction();
+ final FailureDialogFragment fragment = new FailureDialogFragment();
+ fragment.setArguments(args);
+
+ ft.add(fragment, TAG);
+ ft.commitAllowingStateLoss();
+ }
+
+ @Override
+ public void onClick(DialogInterface dialog, int whichButton) {
+ if (whichButton == DialogInterface.BUTTON_POSITIVE) {
+ CopyService.start(getActivity(), mFailedSrcList,
+ (DocumentStack) getActivity().getIntent().getParcelableExtra(
+ CopyService.EXTRA_STACK));
+ }
+ }
+
+ @Override
+ public Dialog onCreateDialog(Bundle inState) {
+ super.onCreate(inState);
+
+ mFailure = getArguments().getInt(CopyService.EXTRA_FAILURE);
+ mFailedSrcList = getArguments().getParcelableArrayList(CopyService.EXTRA_SRC_LIST);
+
+ final StringBuilder list = new StringBuilder("<p>");
+ for (DocumentInfo documentInfo : mFailedSrcList) {
+ list.append(String.format("• %s<br>", documentInfo.displayName));
+ }
+ list.append("</p>");
+ final String message = String.format(getString(R.string.copy_failure_alert_content),
+ list.toString());
+
+ return new AlertDialog.Builder(getActivity())
+ .setMessage(Html.fromHtml(message))
+ .setPositiveButton(R.string.retry, this)
+ .setNegativeButton(android.R.string.cancel, this)
+ .create();
+ }
+}
diff --git a/src/com/android/documentsui/IconUtils.java b/src/com/android/documentsui/IconUtils.java
index 416aeb0..b43fedf 100644
--- a/src/com/android/documentsui/IconUtils.java
+++ b/src/com/android/documentsui/IconUtils.java
@@ -19,7 +19,6 @@
import android.content.Context;
import android.content.pm.PackageManager;
import android.content.pm.ProviderInfo;
-import android.content.res.Resources;
import android.graphics.drawable.Drawable;
import android.provider.DocumentsContract.Document;
import android.util.TypedValue;
@@ -269,7 +268,7 @@
public static Drawable applyTintColor(Context context, int drawableId, int tintColorId) {
final Drawable icon = context.getDrawable(drawableId);
icon.mutate();
- icon.setTintList(context.getResources().getColorStateList(tintColorId));
+ icon.setTintList(context.getColorStateList(tintColorId));
return icon;
}
diff --git a/src/com/android/documentsui/PickFragment.java b/src/com/android/documentsui/PickFragment.java
index 5112c92..d9b8568 100644
--- a/src/com/android/documentsui/PickFragment.java
+++ b/src/com/android/documentsui/PickFragment.java
@@ -16,6 +16,8 @@
package com.android.documentsui;
+import android.R.string;
+import android.app.Activity;
import android.app.Fragment;
import android.app.FragmentManager;
import android.app.FragmentTransaction;
@@ -36,14 +38,19 @@
public class PickFragment extends Fragment {
public static final String TAG = "PickFragment";
+ private int mAction;
private DocumentInfo mPickTarget;
-
private View mContainer;
private Button mPick;
+ private Button mCancel;
public static void show(FragmentManager fm) {
- final PickFragment fragment = new PickFragment();
+ // Fragment can be restored by FragmentManager automatically.
+ if (get(fm) != null) {
+ return;
+ }
+ final PickFragment fragment = new PickFragment();
final FragmentTransaction ft = fm.beginTransaction();
ft.replace(R.id.container_save, fragment, TAG);
ft.commitAllowingStateLoss();
@@ -61,8 +68,10 @@
mPick = (Button) mContainer.findViewById(android.R.id.button1);
mPick.setOnClickListener(mPickListener);
- setPickTarget(null, null);
+ mCancel = (Button) mContainer.findViewById(android.R.id.button2);
+ mCancel.setOnClickListener(mCancelListener);
+ updateView();
return mContainer;
}
@@ -74,18 +83,50 @@
}
};
- public void setPickTarget(DocumentInfo pickTarget, CharSequence displayName) {
- mPickTarget = pickTarget;
+ private View.OnClickListener mCancelListener = new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ final BaseActivity activity = BaseActivity.get(PickFragment.this);
+ activity.setResult(Activity.RESULT_CANCELED);
+ activity.finish();
+ }
+ };
+ /**
+ * @param action Which action defined in BaseActivity.State is the picker shown for.
+ */
+ public void setPickTarget(int action, DocumentInfo pickTarget) {
+ mAction = action;
+ mPickTarget = pickTarget;
if (mContainer != null) {
- if (mPickTarget != null) {
- mContainer.setVisibility(View.VISIBLE);
- final Locale locale = getResources().getConfiguration().locale;
- final String raw = getString(R.string.menu_select).toUpperCase(locale);
- mPick.setText(TextUtils.expandTemplate(raw, displayName));
- } else {
+ updateView();
+ }
+ }
+
+ /**
+ * Applies the state of fragment to the view components.
+ */
+ private void updateView() {
+ switch (mAction) {
+ case BaseActivity.State.ACTION_OPEN_TREE:
+ mPick.setText(R.string.button_select);
+ mCancel.setVisibility(View.GONE);
+ break;
+ case BaseActivity.State.ACTION_OPEN_COPY_DESTINATION:
+ mPick.setText(R.string.button_copy);
+ mCancel.setVisibility(View.VISIBLE);
+ break;
+ default:
mContainer.setVisibility(View.GONE);
- }
+ return;
+ }
+
+ if (mPickTarget != null && (
+ mAction == BaseActivity.State.ACTION_OPEN_TREE ||
+ mPickTarget.isCreateSupported())) {
+ mContainer.setVisibility(View.VISIBLE);
+ } else {
+ mContainer.setVisibility(View.GONE);
}
}
}
diff --git a/src/com/android/documentsui/RecentLoader.java b/src/com/android/documentsui/RecentLoader.java
index 34ce42d..f5908c5 100644
--- a/src/com/android/documentsui/RecentLoader.java
+++ b/src/com/android/documentsui/RecentLoader.java
@@ -17,7 +17,7 @@
package com.android.documentsui;
import static com.android.documentsui.DocumentsActivity.TAG;
-import static com.android.documentsui.DocumentsActivity.State.SORT_ORDER_LAST_MODIFIED;
+import static com.android.documentsui.BaseActivity.State.SORT_ORDER_LAST_MODIFIED;
import android.app.ActivityManager;
import android.content.AsyncTaskLoader;
@@ -34,7 +34,7 @@
import android.text.format.DateUtils;
import android.util.Log;
-import com.android.documentsui.DocumentsActivity.State;
+import com.android.documentsui.BaseActivity.State;
import com.android.documentsui.model.RootInfo;
import com.google.android.collect.Maps;
import com.google.common.collect.Lists;
diff --git a/src/com/android/documentsui/RecentsCreateFragment.java b/src/com/android/documentsui/RecentsCreateFragment.java
index dd75dbd..e11d7d9 100644
--- a/src/com/android/documentsui/RecentsCreateFragment.java
+++ b/src/com/android/documentsui/RecentsCreateFragment.java
@@ -45,7 +45,7 @@
import android.widget.ListView;
import android.widget.TextView;
-import com.android.documentsui.DocumentsActivity.State;
+import com.android.documentsui.BaseActivity.State;
import com.android.documentsui.RecentsProvider.RecentColumns;
import com.android.documentsui.model.DocumentStack;
import com.android.documentsui.model.DurableUtils;
@@ -95,7 +95,7 @@
mListView.setAdapter(mAdapter);
final RootsCache roots = DocumentsApplication.getRootsCache(context);
- final State state = ((DocumentsActivity) getActivity()).getDisplayState();
+ final State state = ((BaseActivity) getActivity()).getDisplayState();
mCallbacks = new LoaderCallbacks<List<DocumentStack>>() {
@Override
@@ -109,7 +109,8 @@
mAdapter.swapStacks(data);
// When launched into empty recents, show drawer
- if (mAdapter.isEmpty() && !state.stackTouched) {
+ if (mAdapter.isEmpty() && !state.stackTouched &&
+ context instanceof DocumentsActivity) {
((DocumentsActivity) context).setRootsDrawerOpen(true);
}
}
@@ -139,7 +140,7 @@
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
final DocumentStack stack = mAdapter.getItem(position);
- ((DocumentsActivity) getActivity()).onStackPicked(stack);
+ ((BaseActivity) getActivity()).onStackPicked(stack);
}
};
diff --git a/src/com/android/documentsui/RootsCache.java b/src/com/android/documentsui/RootsCache.java
index d72db1d..fbcb938 100644
--- a/src/com/android/documentsui/RootsCache.java
+++ b/src/com/android/documentsui/RootsCache.java
@@ -36,7 +36,7 @@
import android.provider.DocumentsContract.Root;
import android.util.Log;
-import com.android.documentsui.DocumentsActivity.State;
+import com.android.documentsui.BaseActivity.State;
import com.android.documentsui.model.RootInfo;
import com.android.internal.annotations.GuardedBy;
import com.android.internal.annotations.VisibleForTesting;
@@ -360,14 +360,20 @@
// Exclude read-only devices when creating
if (state.action == State.ACTION_CREATE && !supportsCreate) continue;
+ if (state.action == State.ACTION_OPEN_COPY_DESTINATION && !supportsCreate) continue;
// Exclude roots that don't support directory picking
if (state.action == State.ACTION_OPEN_TREE && !supportsIsChild) continue;
// Exclude advanced devices when not requested
if (!state.showAdvanced && advanced) continue;
// Exclude non-local devices when local only
if (state.localOnly && !localOnly) continue;
+ // Exclude downloads roots that don't support directory creation
+ // TODO: Add flag to check the root supports directory creation or not.
+ if (state.directoryCopy && root.isDownloads()) continue;
// Only show empty roots when creating
- if (state.action != State.ACTION_CREATE && empty) continue;
+ if ((state.action != State.ACTION_CREATE ||
+ state.action != State.ACTION_OPEN_TREE ||
+ state.action != State.ACTION_OPEN_COPY_DESTINATION) && empty) continue;
// Only include roots that serve requested content
final boolean overlap =
@@ -377,6 +383,12 @@
continue;
}
+ // Exclude roots from the calling package.
+ if (state.excludedAuthorities.contains(root.authority)) {
+ if (LOGD) Log.d(TAG, "Excluding root " + root.authority + " from calling package.");
+ continue;
+ }
+
matching.add(root);
}
return matching;
diff --git a/src/com/android/documentsui/RootsFragment.java b/src/com/android/documentsui/RootsFragment.java
index 884cf31..fd67a77 100644
--- a/src/com/android/documentsui/RootsFragment.java
+++ b/src/com/android/documentsui/RootsFragment.java
@@ -16,8 +16,6 @@
package com.android.documentsui;
-import static com.android.documentsui.DocumentsActivity.State.ACTION_GET_CONTENT;
-
import android.app.Fragment;
import android.app.FragmentManager;
import android.app.FragmentTransaction;
@@ -43,7 +41,7 @@
import android.widget.ListView;
import android.widget.TextView;
-import com.android.documentsui.DocumentsActivity.State;
+import com.android.documentsui.BaseActivity.State;
import com.android.documentsui.model.DocumentInfo;
import com.android.documentsui.model.RootInfo;
import com.google.common.collect.Lists;
@@ -101,7 +99,7 @@
final Context context = getActivity();
final RootsCache roots = DocumentsApplication.getRootsCache(context);
- final State state = ((DocumentsActivity) context).getDisplayState();
+ final State state = ((BaseActivity) context).getDisplayState();
mCallbacks = new LoaderCallbacks<Collection<RootInfo>>() {
@Override
@@ -138,9 +136,9 @@
public void onDisplayStateChanged() {
final Context context = getActivity();
- final State state = ((DocumentsActivity) context).getDisplayState();
+ final State state = ((BaseActivity) context).getDisplayState();
- if (state.action == ACTION_GET_CONTENT) {
+ if (state.action == State.ACTION_GET_CONTENT) {
mList.setOnItemLongClickListener(mItemLongClickListener);
} else {
mList.setOnItemLongClickListener(null);
@@ -153,7 +151,7 @@
public void onCurrentRootChanged() {
if (mAdapter == null) return;
- final RootInfo root = ((DocumentsActivity) getActivity()).getCurrentRoot();
+ final RootInfo root = ((BaseActivity) getActivity()).getCurrentRoot();
for (int i = 0; i < mAdapter.getCount(); i++) {
final Object item = mAdapter.getItem(i);
if (item instanceof RootItem) {
@@ -176,11 +174,12 @@
private OnItemClickListener mItemListener = new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
- final DocumentsActivity activity = DocumentsActivity.get(RootsFragment.this);
- final Item item = mAdapter.getItem(position);
+ Item item = mAdapter.getItem(position);
if (item instanceof RootItem) {
- activity.onRootPicked(((RootItem) item).root, true);
+ BaseActivity activity = BaseActivity.get(RootsFragment.this);
+ activity.onRootPicked(((RootItem) item).root);
} else if (item instanceof AppItem) {
+ DocumentsActivity activity = DocumentsActivity.get(RootsFragment.this);
activity.onAppPicked(((AppItem) item).info);
} else {
throw new IllegalStateException("Unknown root: " + item);
diff --git a/src/com/android/documentsui/RootsLoader.java b/src/com/android/documentsui/RootsLoader.java
index 8d37cdf..49651b4 100644
--- a/src/com/android/documentsui/RootsLoader.java
+++ b/src/com/android/documentsui/RootsLoader.java
@@ -19,7 +19,7 @@
import android.content.AsyncTaskLoader;
import android.content.Context;
-import com.android.documentsui.DocumentsActivity.State;
+import com.android.documentsui.BaseActivity.State;
import com.android.documentsui.model.RootInfo;
import java.util.Collection;
diff --git a/src/com/android/documentsui/SortingCursorWrapper.java b/src/com/android/documentsui/SortingCursorWrapper.java
index 6c8ca20..3ec3d1c 100644
--- a/src/com/android/documentsui/SortingCursorWrapper.java
+++ b/src/com/android/documentsui/SortingCursorWrapper.java
@@ -16,9 +16,9 @@
package com.android.documentsui;
-import static com.android.documentsui.DocumentsActivity.State.SORT_ORDER_DISPLAY_NAME;
-import static com.android.documentsui.DocumentsActivity.State.SORT_ORDER_LAST_MODIFIED;
-import static com.android.documentsui.DocumentsActivity.State.SORT_ORDER_SIZE;
+import static com.android.documentsui.BaseActivity.State.SORT_ORDER_DISPLAY_NAME;
+import static com.android.documentsui.BaseActivity.State.SORT_ORDER_LAST_MODIFIED;
+import static com.android.documentsui.BaseActivity.State.SORT_ORDER_SIZE;
import static com.android.documentsui.model.DocumentInfo.getCursorLong;
import static com.android.documentsui.model.DocumentInfo.getCursorString;
diff --git a/src/com/android/documentsui/model/DocumentInfo.java b/src/com/android/documentsui/model/DocumentInfo.java
index 1c5ca86..5d5f2eb 100644
--- a/src/com/android/documentsui/model/DocumentInfo.java
+++ b/src/com/android/documentsui/model/DocumentInfo.java
@@ -24,6 +24,7 @@
import android.os.Parcelable;
import android.provider.DocumentsContract;
import android.provider.DocumentsContract.Document;
+import android.provider.DocumentsContract.Root;
import android.provider.DocumentsProvider;
import android.text.TextUtils;
@@ -161,8 +162,6 @@
this.authority = authority;
this.documentId = getCursorString(cursor, Document.COLUMN_DOCUMENT_ID);
this.mimeType = getCursorString(cursor, Document.COLUMN_MIME_TYPE);
- this.documentId = getCursorString(cursor, Document.COLUMN_DOCUMENT_ID);
- this.mimeType = getCursorString(cursor, Document.COLUMN_MIME_TYPE);
this.displayName = getCursorString(cursor, Document.COLUMN_DISPLAY_NAME);
this.lastModified = getCursorLong(cursor, Document.COLUMN_LAST_MODIFIED);
this.flags = getCursorInt(cursor, Document.COLUMN_FLAGS);
diff --git a/src/com/android/documentsui/model/DocumentStack.java b/src/com/android/documentsui/model/DocumentStack.java
index 28bab6c..34bd696 100644
--- a/src/com/android/documentsui/model/DocumentStack.java
+++ b/src/com/android/documentsui/model/DocumentStack.java
@@ -17,6 +17,8 @@
package com.android.documentsui.model;
import android.content.ContentResolver;
+import android.os.Parcel;
+import android.os.Parcelable;
import android.provider.DocumentsProvider;
import java.io.DataInputStream;
@@ -31,7 +33,7 @@
* Representation of a stack of {@link DocumentInfo}, usually the result of a
* user-driven traversal.
*/
-public class DocumentStack extends LinkedList<DocumentInfo> implements Durable {
+public class DocumentStack extends LinkedList<DocumentInfo> implements Durable, Parcelable {
private static final int VERSION_INIT = 1;
private static final int VERSION_ADD_ROOT = 2;
@@ -135,4 +137,28 @@
doc.write(out);
}
}
+
+ @Override
+ public int describeContents() {
+ return 0;
+ }
+
+ @Override
+ public void writeToParcel(Parcel dest, int flags) {
+ DurableUtils.writeToParcel(dest, this);
+ }
+
+ public static final Creator<DocumentStack> CREATOR = new Creator<DocumentStack>() {
+ @Override
+ public DocumentStack createFromParcel(Parcel in) {
+ final DocumentStack stack = new DocumentStack();
+ DurableUtils.readFromParcel(in, stack);
+ return stack;
+ }
+
+ @Override
+ public DocumentStack[] newArray(int size) {
+ return new DocumentStack[size];
+ }
+ };
}
diff --git a/src/com/android/documentsui/model/RootInfo.java b/src/com/android/documentsui/model/RootInfo.java
index 97d8ed0..ecf4d6c 100644
--- a/src/com/android/documentsui/model/RootInfo.java
+++ b/src/com/android/documentsui/model/RootInfo.java
@@ -55,7 +55,6 @@
public String mimeTypes;
/** Derived fields that aren't persisted */
- public String derivedPackageName;
public String[] derivedMimeTypes;
public int derivedIcon;
@@ -75,7 +74,6 @@
availableBytes = -1;
mimeTypes = null;
- derivedPackageName = null;
derivedMimeTypes = null;
derivedIcon = 0;
}
diff --git a/tests/Android.mk b/tests/Android.mk
index fdf4fab..3f191a9 100644
--- a/tests/Android.mk
+++ b/tests/Android.mk
@@ -7,6 +7,7 @@
LOCAL_SRC_FILES := $(call all-java-files-under, src)
LOCAL_JAVA_LIBRARIES := android.test.runner
+LOCAL_STATIC_JAVA_LIBRARIES := android-support-v4 mockito-target guava
LOCAL_PACKAGE_NAME := DocumentsUITests
LOCAL_INSTRUMENTATION_FOR := DocumentsUI
diff --git a/tests/AndroidManifest.xml b/tests/AndroidManifest.xml
index 81a2889..a312427 100644
--- a/tests/AndroidManifest.xml
+++ b/tests/AndroidManifest.xml
@@ -4,6 +4,17 @@
<application>
<uses-library android:name="android.test.runner" />
+ <provider
+ android:name="com.android.documentsui.StubProvider"
+ android:authorities="com.android.documentsui.stubprovider"
+ android:exported="true"
+ android:grantUriPermissions="true"
+ android:permission="android.permission.MANAGE_DOCUMENTS"
+ android:enabled="true">
+ <intent-filter>
+ <action android:name="android.content.action.DOCUMENTS_PROVIDER" />
+ </intent-filter>
+ </provider>
</application>
<instrumentation android:name="android.test.InstrumentationTestRunner"
diff --git a/tests/src/com/android/documentsui/CopyTest.java b/tests/src/com/android/documentsui/CopyTest.java
new file mode 100644
index 0000000..b1c84dd
--- /dev/null
+++ b/tests/src/com/android/documentsui/CopyTest.java
@@ -0,0 +1,329 @@
+/*
+ * Copyright (C) 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.documentsui;
+
+import android.content.ContentProviderClient;
+import android.content.ContentResolver;
+import android.content.Context;
+import android.content.ContextWrapper;
+import android.content.Intent;
+import android.content.pm.ProviderInfo;
+import android.database.ContentObserver;
+import android.database.Cursor;
+import android.net.Uri;
+import android.os.Parcelable;
+import android.os.RemoteException;
+import android.provider.DocumentsContract;
+import android.test.MoreAsserts;
+import android.test.ServiceTestCase;
+import android.test.mock.MockContentResolver;
+import android.util.Log;
+
+import com.android.documentsui.model.DocumentInfo;
+import com.android.documentsui.model.DocumentStack;
+import com.android.documentsui.model.RootInfo;
+import com.google.common.collect.Lists;
+
+import libcore.io.IoUtils;
+import libcore.io.Streams;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.TimeoutException;
+
+public class CopyTest extends ServiceTestCase<CopyService> {
+
+ /**
+ * A test resolver that enables this test suite to listen for notifications that mark when copy
+ * operations are done.
+ */
+ class TestContentResolver extends MockContentResolver {
+ private CountDownLatch mReadySignal;
+ private CountDownLatch mNotificationSignal;
+
+ public TestContentResolver() {
+ mReadySignal = new CountDownLatch(1);
+ }
+
+ /**
+ * Wait for the given number of files to be copied to destination. Times out after 1 sec.
+ */
+ public void waitForChanges(int count) throws Exception {
+ // Wait for no more than 1 second by default.
+ waitForChanges(count, 1000);
+ }
+
+ /**
+ * Wait for files to be copied to destination.
+ *
+ * @param count Number of files to wait for.
+ * @param timeOut Timeout in ms. TimeoutException will be thrown if this function times out.
+ */
+ public void waitForChanges(int count, int timeOut) throws Exception {
+ mNotificationSignal = new CountDownLatch(count);
+ // Signal that the test is now waiting for files.
+ mReadySignal.countDown();
+ if (!mNotificationSignal.await(timeOut, TimeUnit.MILLISECONDS)) {
+ throw new TimeoutException("Timed out waiting for files to be copied.");
+ }
+ }
+
+ @Override
+ public void notifyChange(Uri uri, ContentObserver observer, boolean syncToNetwork) {
+ // Wait until the test is ready to receive file notifications.
+ try {
+ mReadySignal.await();
+ } catch (InterruptedException e) {
+ Log.d(TAG, "Interrupted while waiting for file copy readiness");
+ Thread.currentThread().interrupt();
+ }
+ if (DocumentsContract.isDocumentUri(mContext, uri)) {
+ Log.d(TAG, "Notification: " + uri);
+ // Watch for document URI change notifications - this signifies the end of a copy.
+ mNotificationSignal.countDown();
+ }
+ }
+ };
+
+ public CopyTest() {
+ super(CopyService.class);
+ }
+
+ private static String AUTHORITY = "com.android.documentsui.stubprovider";
+ private static String DST = "sd1";
+ private static String SRC = "sd0";
+ private static String TAG = "CopyTest";
+ private List<RootInfo> mRoots;
+ private Context mContext;
+ private TestContentResolver mResolver;
+ private ContentProviderClient mClient;
+ private StubProvider mStorage;
+ private Context mSystemContext;
+
+ @Override
+ protected void setUp() throws Exception {
+ super.setUp();
+
+ setupTestContext();
+ mClient = mResolver.acquireContentProviderClient(AUTHORITY);
+
+ // Reset the stub provider's storage.
+ mStorage.clearCacheAndBuildRoots();
+
+ mRoots = Lists.newArrayList();
+ Uri queryUri = DocumentsContract.buildRootsUri(AUTHORITY);
+ Cursor cursor = null;
+ try {
+ cursor = mClient.query(queryUri, null, null, null, null);
+ while (cursor.moveToNext()) {
+ mRoots.add(RootInfo.fromRootsCursor(AUTHORITY, cursor));
+ }
+ } finally {
+ IoUtils.closeQuietly(cursor);
+ }
+
+ }
+
+ @Override
+ protected void tearDown() throws Exception {
+ mClient.release();
+ super.tearDown();
+ }
+
+ /**
+ * Test copying a single file.
+ */
+ public void testCopyFile() throws Exception {
+ String srcPath = "/test0.txt";
+ Uri testFile = mStorage.createFile(SRC, srcPath, "text/plain",
+ "The five boxing wizards jump quickly".getBytes());
+
+ assertDstFileCountEquals(0);
+
+ copyToDestination(Lists.newArrayList(testFile));
+
+ // 2 operations: file creation, then writing data.
+ mResolver.waitForChanges(2);
+
+ // Verify that one file was copied; check file contents.
+ assertDstFileCountEquals(1);
+ assertCopied(srcPath);
+ }
+
+ /**
+ * Test copying multiple files.
+ */
+ public void testCopyMultipleFiles() throws Exception {
+ String testContent[] = {
+ "The five boxing wizards jump quickly",
+ "The quick brown fox jumps over the lazy dog",
+ "Jackdaws love my big sphinx of quartz"
+ };
+ String srcPaths[] = {
+ "/test0.txt",
+ "/test1.txt",
+ "/test2.txt"
+ };
+ List<Uri> testFiles = Lists.newArrayList(
+ mStorage.createFile(SRC, srcPaths[0], "text/plain", testContent[0].getBytes()),
+ mStorage.createFile(SRC, srcPaths[1], "text/plain", testContent[1].getBytes()),
+ mStorage.createFile(SRC, srcPaths[2], "text/plain", testContent[2].getBytes()));
+
+ assertDstFileCountEquals(0);
+
+ // Copy all the test files.
+ copyToDestination(testFiles);
+
+ // 3 file creations, 3 file writes.
+ mResolver.waitForChanges(6);
+
+ assertDstFileCountEquals(3);
+ for (String path : srcPaths) {
+ assertCopied(path);
+ }
+ }
+
+ public void testCopyEmptyDir() throws Exception {
+ String srcPath = "/emptyDir";
+ Uri testDir = mStorage.createFile(SRC, srcPath, DocumentsContract.Document.MIME_TYPE_DIR,
+ null);
+
+ assertDstFileCountEquals(0);
+
+ copyToDestination(Lists.newArrayList(testDir));
+
+ // Just 1 operation: Directory creation.
+ mResolver.waitForChanges(1);
+
+ assertDstFileCountEquals(1);
+
+ File dst = mStorage.getFile(DST, srcPath);
+ assertTrue(dst.isDirectory());
+ }
+
+ public void testReadErrors() throws Exception {
+ String srcPath = "/test0.txt";
+ Uri testFile = mStorage.createFile(SRC, srcPath, "text/plain",
+ "The five boxing wizards jump quickly".getBytes());
+
+ assertDstFileCountEquals(0);
+
+ mStorage.simulateReadErrors(true);
+
+ copyToDestination(Lists.newArrayList(testFile));
+
+ // 3 operations: file creation, writing, then deletion (due to failed copy).
+ mResolver.waitForChanges(3);
+
+ assertDstFileCountEquals(0);
+ }
+
+ /**
+ * Copies the given files to a pre-determined destination.
+ *
+ * @throws FileNotFoundException
+ */
+ private void copyToDestination(List<Uri> srcs) throws FileNotFoundException {
+ final ArrayList<DocumentInfo> srcDocs = Lists.newArrayList();
+ for (Uri src : srcs) {
+ srcDocs.add(DocumentInfo.fromUri(mResolver, src));
+ }
+
+ final Uri dst = DocumentsContract.buildDocumentUri(AUTHORITY, mRoots.get(1).documentId);
+ DocumentStack stack = new DocumentStack();
+ stack.push(DocumentInfo.fromUri(mResolver, dst));
+ final Intent copyIntent = new Intent(mContext, CopyService.class);
+ copyIntent.putParcelableArrayListExtra(CopyService.EXTRA_SRC_LIST, srcDocs);
+ copyIntent.putExtra(CopyService.EXTRA_STACK, (Parcelable) stack);
+
+ startService(copyIntent);
+ }
+
+ /**
+ * Returns a count of the files in the given directory.
+ */
+ private void assertDstFileCountEquals(int expected) throws RemoteException {
+ final Uri queryUri = DocumentsContract.buildChildDocumentsUri(AUTHORITY,
+ mRoots.get(1).documentId);
+ Cursor c = null;
+ int count = 0;
+ try {
+ c = mClient.query(queryUri, null, null, null, null);
+ count = c.getCount();
+ } finally {
+ IoUtils.closeQuietly(c);
+ }
+ assertEquals("Incorrect file count after copy", expected, count);
+ }
+
+ private void assertCopied(String path) throws Exception {
+ File srcFile = mStorage.getFile(SRC, path);
+ File dstFile = mStorage.getFile(DST, path);
+ assertNotNull(dstFile);
+
+ FileInputStream src = null;
+ FileInputStream dst = null;
+ try {
+ src = new FileInputStream(srcFile);
+ dst = new FileInputStream(dstFile);
+ byte[] srcbuf = Streams.readFully(src);
+ byte[] dstbuf = Streams.readFully(dst);
+
+ MoreAsserts.assertEquals(srcbuf, dstbuf);
+ } finally {
+ IoUtils.closeQuietly(src);
+ IoUtils.closeQuietly(dst);
+ }
+ }
+
+ /**
+ * Sets up a ContextWrapper that substitutes a stub NotificationManager. This allows the test to
+ * listen for notification events, to gauge copy progress.
+ *
+ * @throws FileNotFoundException
+ */
+ private void setupTestContext() throws FileNotFoundException {
+ mSystemContext = getSystemContext();
+
+ // Set up the context with the test content resolver.
+ mResolver = new TestContentResolver();
+ mContext = new ContextWrapper(mSystemContext) {
+ @Override
+ public ContentResolver getContentResolver() {
+ return mResolver;
+ }
+ };
+ setContext(mContext);
+
+ // Create a local stub provider and add it to the content resolver.
+ ProviderInfo info = new ProviderInfo();
+ info.authority = AUTHORITY;
+ info.exported = true;
+ info.grantUriPermissions = true;
+ info.readPermission = android.Manifest.permission.MANAGE_DOCUMENTS;
+ info.writePermission = android.Manifest.permission.MANAGE_DOCUMENTS;
+
+ mStorage = new StubProvider();
+ mStorage.attachInfo(mContext, info);
+ mResolver.addProvider(AUTHORITY, mStorage);
+ }
+}
diff --git a/tests/src/com/android/documentsui/RootsCacheTest.java b/tests/src/com/android/documentsui/RootsCacheTest.java
index cdb6b33..8c5bac1 100644
--- a/tests/src/com/android/documentsui/RootsCacheTest.java
+++ b/tests/src/com/android/documentsui/RootsCacheTest.java
@@ -19,7 +19,7 @@
import android.test.AndroidTestCase;
import android.test.suitebuilder.annotation.SmallTest;
-import com.android.documentsui.DocumentsActivity.State;
+import com.android.documentsui.BaseActivity.State;
import com.android.documentsui.model.RootInfo;
import com.google.android.collect.Lists;
@@ -114,6 +114,31 @@
RootsCache.getMatchingRoots(mRoots, mState));
}
+ public void testExcludedAuthorities() throws Exception {
+ final List<RootInfo> roots = Lists.newArrayList();
+
+ // Set up some roots
+ for (int i = 0; i < 5; ++i) {
+ RootInfo root = new RootInfo();
+ root.authority = "authority" + i;
+ roots.add(root);
+ }
+ // Make some allowed authorities
+ List<RootInfo> allowedRoots = Lists.newArrayList(
+ roots.get(0), roots.get(2), roots.get(4));
+ // Set up the excluded authority list
+ for (RootInfo root: roots) {
+ if (!allowedRoots.contains(root)) {
+ mState.excludedAuthorities.add(root.authority);
+ }
+ }
+ mState.acceptMimes = new String[] { "*/*" };
+
+ assertContainsExactly(
+ allowedRoots,
+ RootsCache.getMatchingRoots(roots, mState));
+ }
+
private static void assertContainsExactly(List<?> expected, List<?> actual) {
assertEquals(expected.size(), actual.size());
for (Object o : expected) {
diff --git a/tests/src/com/android/documentsui/StubProvider.java b/tests/src/com/android/documentsui/StubProvider.java
new file mode 100644
index 0000000..8cef433
--- /dev/null
+++ b/tests/src/com/android/documentsui/StubProvider.java
@@ -0,0 +1,506 @@
+/*
+ * Copyright (C) 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.documentsui;
+
+import android.content.Context;
+import android.content.SharedPreferences;
+import android.content.pm.ProviderInfo;
+import android.content.res.AssetFileDescriptor;
+import android.database.Cursor;
+import android.database.MatrixCursor;
+import android.database.MatrixCursor.RowBuilder;
+import android.graphics.Point;
+import android.net.Uri;
+import android.os.Bundle;
+import android.os.CancellationSignal;
+import android.os.FileUtils;
+import android.os.ParcelFileDescriptor;
+import android.provider.DocumentsContract;
+import android.provider.DocumentsContract.Document;
+import android.provider.DocumentsContract.Root;
+import android.provider.DocumentsProvider;
+import android.support.annotation.VisibleForTesting;
+import android.util.Log;
+
+import com.google.android.collect.Maps;
+
+import libcore.io.IoUtils;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Map;
+
+public class StubProvider extends DocumentsProvider {
+ private static final String EXTRA_SIZE = "com.android.documentsui.stubprovider.SIZE";
+ private static final String EXTRA_ROOT = "com.android.documentsui.stubprovider.ROOT";
+ private static final String STORAGE_SIZE_KEY = "documentsui.stubprovider.size";
+ private static int DEFAULT_SIZE = 1024 * 1024; // 1 MB.
+ private static final String TAG = "StubProvider";
+ private static final String MY_ROOT_ID = "sd0";
+ private static final String[] DEFAULT_ROOT_PROJECTION = new String[] {
+ Root.COLUMN_ROOT_ID, Root.COLUMN_FLAGS, Root.COLUMN_TITLE, Root.COLUMN_DOCUMENT_ID,
+ Root.COLUMN_AVAILABLE_BYTES
+ };
+ private static final String[] DEFAULT_DOCUMENT_PROJECTION = new String[] {
+ Document.COLUMN_DOCUMENT_ID, Document.COLUMN_MIME_TYPE, Document.COLUMN_DISPLAY_NAME,
+ Document.COLUMN_LAST_MODIFIED, Document.COLUMN_FLAGS, Document.COLUMN_SIZE,
+ };
+
+ private HashMap<String, StubDocument> mStorage = new HashMap<String, StubDocument>();
+ private Object mWriteLock = new Object();
+ private String mAuthority;
+ private SharedPreferences mPrefs;
+ private Map<String, RootInfo> mRoots;
+ private boolean mSimulateReadErrors;
+
+ @Override
+ public void attachInfo(Context context, ProviderInfo info) {
+ mAuthority = info.authority;
+ super.attachInfo(context, info);
+ }
+
+ @Override
+ public boolean onCreate() {
+ clearCacheAndBuildRoots();
+ return true;
+ }
+
+ @VisibleForTesting
+ public void clearCacheAndBuildRoots() {
+ final File cacheDir = getContext().getCacheDir();
+ removeRecursively(cacheDir);
+ mStorage.clear();
+
+ mPrefs = getContext().getSharedPreferences(
+ "com.android.documentsui.stubprovider.preferences", Context.MODE_PRIVATE);
+ Collection<String> rootIds = mPrefs.getStringSet("roots", null);
+ if (rootIds == null) {
+ rootIds = Arrays.asList(new String[] {
+ "sd0", "sd1"
+ });
+ }
+ // Create new roots.
+ mRoots = Maps.newHashMap();
+ for (String rootId : rootIds) {
+ final RootInfo rootInfo = new RootInfo(rootId, getSize(rootId));
+ mRoots.put(rootId, rootInfo);
+ }
+ }
+
+ /**
+ * @return Storage size, in bytes.
+ */
+ private long getSize(String rootId) {
+ final String key = STORAGE_SIZE_KEY + "." + rootId;
+ return mPrefs.getLong(key, DEFAULT_SIZE);
+ }
+
+ @Override
+ public Cursor queryRoots(String[] projection) throws FileNotFoundException {
+ final MatrixCursor result = new MatrixCursor(projection != null ? projection
+ : DEFAULT_ROOT_PROJECTION);
+ for (Map.Entry<String, RootInfo> entry : mRoots.entrySet()) {
+ final String id = entry.getKey();
+ final RootInfo info = entry.getValue();
+ final RowBuilder row = result.newRow();
+ row.add(Root.COLUMN_ROOT_ID, id);
+ row.add(Root.COLUMN_FLAGS, Root.FLAG_SUPPORTS_CREATE | Root.FLAG_SUPPORTS_IS_CHILD);
+ row.add(Root.COLUMN_TITLE, id);
+ row.add(Root.COLUMN_DOCUMENT_ID, info.rootDocument.documentId);
+ row.add(Root.COLUMN_AVAILABLE_BYTES, info.getRemainingCapacity());
+ }
+ return result;
+ }
+
+ @Override
+ public Cursor queryDocument(String documentId, String[] projection)
+ throws FileNotFoundException {
+ final MatrixCursor result = new MatrixCursor(projection != null ? projection
+ : DEFAULT_DOCUMENT_PROJECTION);
+ final StubDocument file = mStorage.get(documentId);
+ if (file == null) {
+ throw new FileNotFoundException();
+ }
+ includeDocument(result, file);
+ return result;
+ }
+
+ @Override
+ public boolean isChildDocument(String parentDocId, String docId) {
+ final StubDocument parentDocument = mStorage.get(parentDocId);
+ final StubDocument childDocument = mStorage.get(docId);
+ return FileUtils.contains(parentDocument.file, childDocument.file);
+ }
+
+ @Override
+ public String createDocument(String parentDocumentId, String mimeType, String displayName)
+ throws FileNotFoundException {
+ final StubDocument parentDocument = mStorage.get(parentDocumentId);
+ if (parentDocument == null || !parentDocument.file.isDirectory()) {
+ throw new FileNotFoundException();
+ }
+ final File file = new File(parentDocument.file, displayName);
+ if (mimeType.equals(Document.MIME_TYPE_DIR)) {
+ if (!file.mkdirs()) {
+ throw new FileNotFoundException();
+ }
+ } else {
+ try {
+ if (!file.createNewFile()) {
+ throw new IllegalStateException("The file " + file.getPath() + " already exists");
+ }
+ } catch (IOException e) {
+ throw new FileNotFoundException();
+ }
+ }
+
+ final StubDocument document = new StubDocument(file, mimeType, parentDocument);
+ notifyParentChanged(document.parentId);
+ getContext().getContentResolver().notifyChange(
+ DocumentsContract.buildDocumentUri(mAuthority, document.documentId),
+ null, false);
+
+ return document.documentId;
+ }
+
+ @Override
+ public void deleteDocument(String documentId)
+ throws FileNotFoundException {
+ final StubDocument document = mStorage.get(documentId);
+ final long fileSize = document.file.length();
+ if (document == null || !document.file.delete())
+ throw new FileNotFoundException();
+ synchronized (mWriteLock) {
+ document.rootInfo.size -= fileSize;
+ }
+ notifyParentChanged(document.parentId);
+ getContext().getContentResolver().notifyChange(
+ DocumentsContract.buildDocumentUri(mAuthority, document.documentId),
+ null, false);
+ }
+
+ @Override
+ public Cursor queryChildDocuments(String parentDocumentId, String[] projection, String sortOrder)
+ throws FileNotFoundException {
+ final StubDocument parentDocument = mStorage.get(parentDocumentId);
+ if (parentDocument == null || parentDocument.file.isFile()) {
+ throw new FileNotFoundException();
+ }
+ final MatrixCursor result = new MatrixCursor(projection != null ? projection
+ : DEFAULT_DOCUMENT_PROJECTION);
+ result.setNotificationUri(getContext().getContentResolver(),
+ DocumentsContract.buildChildDocumentsUri(mAuthority, parentDocumentId));
+ StubDocument document;
+ for (File file : parentDocument.file.listFiles()) {
+ document = mStorage.get(getDocumentIdForFile(file));
+ if (document != null) {
+ includeDocument(result, document);
+ }
+ }
+ return result;
+ }
+
+ @Override
+ public Cursor queryRecentDocuments(String rootId, String[] projection)
+ throws FileNotFoundException {
+ final MatrixCursor result = new MatrixCursor(projection != null ? projection
+ : DEFAULT_DOCUMENT_PROJECTION);
+ return result;
+ }
+
+ @Override
+ public ParcelFileDescriptor openDocument(String docId, String mode, CancellationSignal signal)
+ throws FileNotFoundException {
+ final StubDocument document = mStorage.get(docId);
+ if (document == null || !document.file.isFile())
+ throw new FileNotFoundException();
+
+ if ("r".equals(mode)) {
+ ParcelFileDescriptor pfd = ParcelFileDescriptor.open(document.file,
+ ParcelFileDescriptor.MODE_READ_ONLY);
+ if (mSimulateReadErrors) {
+ pfd = new ParcelFileDescriptor(pfd) {
+ @Override
+ public void checkError() throws IOException {
+ throw new IOException("Test error");
+ }
+ };
+ }
+ return pfd;
+ }
+ if ("w".equals(mode)) {
+ return startWrite(document);
+ }
+
+ throw new FileNotFoundException();
+ }
+
+ @VisibleForTesting
+ public void simulateReadErrors(boolean b) {
+ mSimulateReadErrors = b;
+ }
+
+ @Override
+ public AssetFileDescriptor openDocumentThumbnail(
+ String docId, Point sizeHint, CancellationSignal signal) throws FileNotFoundException {
+ throw new FileNotFoundException();
+ }
+
+ private ParcelFileDescriptor startWrite(final StubDocument document)
+ throws FileNotFoundException {
+ ParcelFileDescriptor[] pipe;
+ try {
+ pipe = ParcelFileDescriptor.createReliablePipe();
+ } catch (IOException exception) {
+ throw new FileNotFoundException();
+ }
+ final ParcelFileDescriptor readPipe = pipe[0];
+ final ParcelFileDescriptor writePipe = pipe[1];
+
+ new Thread() {
+ @Override
+ public void run() {
+ InputStream inputStream = null;
+ OutputStream outputStream = null;
+ try {
+ inputStream = new ParcelFileDescriptor.AutoCloseInputStream(readPipe);
+ outputStream = new FileOutputStream(document.file);
+ byte[] buffer = new byte[32 * 1024];
+ int bytesToRead;
+ int bytesRead = 0;
+ while (bytesRead != -1) {
+ synchronized (mWriteLock) {
+ // This cast is safe because the max possible value is buffer.length.
+ bytesToRead = (int) Math.min(document.rootInfo.getRemainingCapacity(),
+ buffer.length);
+ if (bytesToRead == 0) {
+ closePipeWithErrorSilently(readPipe, "Not enough space.");
+ break;
+ }
+ bytesRead = inputStream.read(buffer, 0, bytesToRead);
+ if (bytesRead == -1) {
+ break;
+ }
+ outputStream.write(buffer, 0, bytesRead);
+ document.rootInfo.size += bytesRead;
+ }
+ }
+ } catch (IOException e) {
+ Log.e(TAG, "Error on close", e);
+ closePipeWithErrorSilently(readPipe, e.getMessage());
+ } finally {
+ IoUtils.closeQuietly(inputStream);
+ IoUtils.closeQuietly(outputStream);
+ notifyParentChanged(document.parentId);
+ getContext().getContentResolver().notifyChange(
+ DocumentsContract.buildDocumentUri(mAuthority, document.documentId),
+ null, false);
+ }
+ }
+ }.start();
+
+ return writePipe;
+ }
+
+ private void closePipeWithErrorSilently(ParcelFileDescriptor pipe, String error) {
+ try {
+ pipe.closeWithError(error);
+ } catch (IOException ignore) {
+ }
+ }
+
+ @Override
+ public Bundle call(String method, String arg, Bundle extras) {
+ switch (method) {
+ case "clear":
+ clearCacheAndBuildRoots();
+ return null;
+ case "configure":
+ configure(arg, extras);
+ return null;
+ default:
+ return super.call(method, arg, extras);
+ }
+ }
+
+ private void configure(String arg, Bundle extras) {
+ Log.d(TAG, "Configure " + arg);
+ String rootName = extras.getString(EXTRA_ROOT, MY_ROOT_ID);
+ long rootSize = extras.getLong(EXTRA_SIZE, 1) * 1024 * 1024;
+ setSize(rootName, rootSize);
+ }
+
+ private void notifyParentChanged(String parentId) {
+ getContext().getContentResolver().notifyChange(
+ DocumentsContract.buildChildDocumentsUri(mAuthority, parentId), null, false);
+ // Notify also about possible change in remaining space on the root.
+ getContext().getContentResolver().notifyChange(DocumentsContract.buildRootsUri(mAuthority),
+ null, false);
+ }
+
+ private void includeDocument(MatrixCursor result, StubDocument document) {
+ final RowBuilder row = result.newRow();
+ row.add(Document.COLUMN_DOCUMENT_ID, document.documentId);
+ row.add(Document.COLUMN_DISPLAY_NAME, document.file.getName());
+ row.add(Document.COLUMN_SIZE, document.file.length());
+ row.add(Document.COLUMN_MIME_TYPE, document.mimeType);
+ int flags = Document.FLAG_SUPPORTS_DELETE;
+ // TODO: Add support for renaming.
+ if (document.file.isDirectory()) {
+ flags |= Document.FLAG_DIR_SUPPORTS_CREATE;
+ } else {
+ flags |= Document.FLAG_SUPPORTS_WRITE;
+ }
+ row.add(Document.COLUMN_FLAGS, flags);
+ row.add(Document.COLUMN_LAST_MODIFIED, document.file.lastModified());
+ }
+
+ private void removeRecursively(File file) {
+ for (File childFile : file.listFiles()) {
+ if (childFile.isDirectory()) {
+ removeRecursively(childFile);
+ }
+ childFile.delete();
+ }
+ }
+
+ public void setSize(String rootId, long rootSize) {
+ RootInfo root = mRoots.get(rootId);
+ if (root != null) {
+ final String key = STORAGE_SIZE_KEY + "." + rootId;
+ Log.d(TAG, "Set size of " + key + " : " + rootSize);
+
+ // Persist the size.
+ SharedPreferences.Editor editor = mPrefs.edit();
+ editor.putLong(key, rootSize);
+ editor.apply();
+ // Apply the size in the current instance of this provider.
+ root.capacity = rootSize;
+ getContext().getContentResolver().notifyChange(
+ DocumentsContract.buildRootsUri(mAuthority),
+ null, false);
+ } else {
+ Log.e(TAG, "Attempt to configure non-existent root: " + rootId);
+ }
+ }
+
+ @VisibleForTesting
+ public Uri createFile(String rootId, String path, String mimeType, byte[] content)
+ throws FileNotFoundException, IOException {
+ StubDocument root = mRoots.get(rootId).rootDocument;
+ if (root == null) {
+ throw new FileNotFoundException("No roots with the ID " + rootId + " were found");
+ }
+ File file = new File(root.file, path.substring(1));
+ StubDocument parent = mStorage.get(getDocumentIdForFile(file.getParentFile()));
+ if (parent == null) {
+ parent = mStorage.get(createFile(rootId, file.getParentFile().getPath(),
+ DocumentsContract.Document.MIME_TYPE_DIR, null));
+ }
+
+ if (DocumentsContract.Document.MIME_TYPE_DIR.equals(mimeType)) {
+ if (!file.mkdirs()) {
+ throw new FileNotFoundException("Couldn't create directory " + file.getPath());
+ }
+ } else {
+ if (!file.createNewFile()) {
+ throw new FileNotFoundException("Couldn't create file " + file.getPath());
+ }
+ // Add content to the file.
+ FileOutputStream fout = new FileOutputStream(file);
+ fout.write(content);
+ fout.close();
+ }
+ final StubDocument document = new StubDocument(file, mimeType, parent);
+ return DocumentsContract.buildDocumentUri(mAuthority, document.documentId);
+ }
+
+ @VisibleForTesting
+ public File getFile(String rootId, String path) throws FileNotFoundException {
+ StubDocument root = mRoots.get(rootId).rootDocument;
+ if (root == null) {
+ throw new FileNotFoundException("No roots with the ID " + rootId + " were found");
+ }
+ // Convert the path string into a path that's relative to the root.
+ File needle = new File(root.file, path.substring(1));
+
+ StubDocument found = mStorage.get(getDocumentIdForFile(needle));
+ if (found == null) {
+ return null;
+ }
+ return found.file;
+ }
+
+ final class RootInfo {
+ public final String name;
+ public final StubDocument rootDocument;
+ public long capacity;
+ public long size;
+
+ RootInfo(String name, long capacity) {
+ this.name = name;
+ this.capacity = 1024 * 1024;
+ // Make a subdir in the cache dir for each root.
+ File rootDir = new File(getContext().getCacheDir(), name);
+ rootDir.mkdir();
+ this.rootDocument = new StubDocument(rootDir, Document.MIME_TYPE_DIR, this);
+ this.capacity = capacity;
+ this.size = 0;
+ }
+
+ public long getRemainingCapacity() {
+ return capacity - size;
+ }
+ }
+
+ final class StubDocument {
+ public final File file;
+ public final String mimeType;
+ public final String documentId;
+ public final String parentId;
+ public final RootInfo rootInfo;
+
+ StubDocument(File file, String mimeType, StubDocument parent) {
+ this.file = file;
+ this.mimeType = mimeType;
+ this.documentId = getDocumentIdForFile(file);
+ this.parentId = parent.documentId;
+ this.rootInfo = parent.rootInfo;
+ mStorage.put(this.documentId, this);
+ }
+
+ StubDocument(File file, String mimeType, RootInfo rootInfo) {
+ this.file = file;
+ this.mimeType = mimeType;
+ this.documentId = getDocumentIdForFile(file);
+ this.parentId = null;
+ this.rootInfo = rootInfo;
+ mStorage.put(this.documentId, this);
+ }
+ }
+
+ private static String getDocumentIdForFile(File file) {
+ return file.getAbsolutePath();
+ }
+}