Merge pi-platform-release to stage-aosp-master - DO NOT MERGE
Change-Id: I6fa0e584d4bae34b211412d77a0886e8933c449e
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 3961e09..c264285 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -29,6 +29,8 @@
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.SET_PREFERRED_APPLICATIONS" />
+ <uses-sdk android:minSdkVersion="21"/>
+
<application
android:name=".DocumentsApplication"
android:label="@string/app_label"
diff --git a/res/values-as/inspector_strings.xml b/res/values-as/inspector_strings.xml
deleted file mode 100644
index 6d5f90e..0000000
--- a/res/values-as/inspector_strings.xml
+++ /dev/null
@@ -1,49 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2017 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="inspector_title" msgid="1924760928091740238">"তথ্য"</string>
- <string name="inspector_load_error" msgid="7522190243413249291">"ফাইলৰ তথ্য ল\'ড কৰিবপৰা নগ\'ল"</string>
- <string name="inspector_debug_section" msgid="2576052661505700421">"ডিবাগ তথ্য (বিকাশকৰ্তা মাত্ৰ)"</string>
- <string name="inspector_debug_metadata_section" msgid="5875140675600744846">"ৰ\' মেটাডেটা: <xliff:g id="METADATATYPE">%1$s</xliff:g>"</string>
- <string name="inspector_metadata_section" msgid="6077622515328240575">"মিডিয়াৰ সবিশেষ"</string>
- <string name="handler_app_file_opens_with" msgid="5272329600389613550">"এইধৰণৰ ফাইল ই খুলিব পাৰে"</string>
- <string name="handler_app_belongs_to" msgid="5444507329303253553">"ই এই ফাইলটো যোগান ধৰিছে"</string>
- <string name="handler_app_not_selected" msgid="1294439257183908786">"বাছনি কৰা হোৱা নাই"</string>
- <string name="handler_app_unknown" msgid="5911661530593229287">"অজ্ঞাত"</string>
- <string name="metadata_dimensions" msgid="6112907724016659801">"দীঘ-প্ৰস্থ"</string>
- <string name="metadata_dimensions_format" msgid="6138765871412005962">"<xliff:g id="WIDTH">%1$d</xliff:g> x <xliff:g id="HEIGHT">%2$d</xliff:g> - <xliff:g id="MEGAPIXELS">%3$,.1f</xliff:g>মে.পি."</string>
- <string name="metadata_coordinates" msgid="6897383227370702734">"স্থানাংক"</string>
- <string name="metadata_coordinates_format" msgid="1402724596764547761">"<xliff:g id="LATITUDE">%1$,.3f</xliff:g>, <xliff:g id="LONGITUDE">%2$,.3f</xliff:g>"</string>
- <string name="metadata_altitude" msgid="8063792127436794294">"উচ্চতা"</string>
- <string name="metadata_camera" msgid="2363009732801281319">"কেমেৰা"</string>
- <string name="metadata_camera_format" msgid="1494489751904311612">"<xliff:g id="MAKE">%1$s</xliff:g> <xliff:g id="MODEL">%2$s</xliff:g>"</string>
- <string name="metadata_aperture" msgid="6538741952698935357">"এপাৰচ্চাৰ"</string>
- <string name="metadata_shutter_speed" msgid="8204739885103326131">"শ্বাটাৰৰ বেগ"</string>
- <string name="metadata_duration" msgid="3115494422055472715">"কালদৈৰ্ঘ্য"</string>
- <string name="metadata_date_time" msgid="1090351199248114406">"তোলাৰ সময়"</string>
- <string name="metadata_focal_length" msgid="3440735161407699893">"ফ\'কেল দৈৰ্ঘ্য"</string>
- <string name="metadata_focal_format" msgid="8542211707962355623">"<xliff:g id="LENGTH">%1$.2f </xliff:g>মি.মি."</string>
- <string name="metadata_iso_speed_ratings" msgid="1699781252899759058">"আইএছঅ\' সমতুল্য"</string>
- <string name="metadata_iso_format" msgid="4153285204012694861">"আইএছঅ\' <xliff:g id="ISO_SPEED">%1$d</xliff:g>"</string>
- <string name="metadata_artist" msgid="8972421485694988540">"শিল্পী"</string>
- <string name="metadata_composer" msgid="4696926808308256056">"সুৰকাৰ"</string>
- <string name="metadata_album" msgid="1661699531214720236">"এলবাম"</string>
- <string name="metadata_address" msgid="1849921023707744640">"অৱস্থান"</string>
- <string name="debug_stream_types" msgid="2088565280360139333">"ষ্ট্ৰীমৰ প্ৰকাৰ"</string>
- <string name="debug_raw_size" msgid="7487139640175650185">"ডিবাগ ফাইলৰ আকাৰ (বাইট)"</string>
-</resources>
diff --git a/res/values-as/mimes.xml b/res/values-as/mimes.xml
deleted file mode 100644
index d5b4102..0000000
--- a/res/values-as/mimes.xml
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- ~ Copyright (C) 2017 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="generic_extention_file_type" msgid="5947398320635880291">"<xliff:g id="EXTENSION">%1$s</xliff:g> ফাইল"</string>
- <string name="generic_file_type" msgid="1415477154743494280">"ফাইল"</string>
- <string name="image_file_type" msgid="3011633523704887793">"চিত্ৰ"</string>
- <string name="image_extension_file_type" msgid="992617216367594851">"<xliff:g id="FILETYPE">%1$s</xliff:g> চিত্ৰ"</string>
- <string name="audio_file_type" msgid="3790525543519624632">"অডিঅ’"</string>
- <string name="audio_extension_file_type" msgid="6334293531796491314">"<xliff:g id="FILETYPE">%1$s</xliff:g> অডিঅ\'"</string>
- <string name="video_file_type" msgid="7290473366042482095">"ভিডিঅ\'"</string>
- <string name="video_extension_file_type" msgid="6352763029831291433">"<xliff:g id="FILETYPE">%1$s</xliff:g> ভিডিঅ\'"</string>
- <string name="archive_file_type" msgid="1463432996680398798">"<xliff:g id="FILETYPE">%1$s</xliff:g> আৰ্কাইভ"</string>
- <string name="apk_file_type" msgid="6004275470389462277">"Android এপ্লিকেশ্বন"</string>
- <string name="txt_file_type" msgid="4677767777860724696">"সাধাৰণ পাঠ"</string>
- <string name="html_file_type" msgid="2034229603117527970">"HTML নথি"</string>
- <string name="pdf_file_type" msgid="3382260303795039988">"PDF নথি"</string>
- <string name="word_file_type" msgid="2366349268129894972">"Word নথি"</string>
- <string name="ppt_file_type" msgid="2570841599899893925">"PowerPoint উপস্থাপন"</string>
- <string name="excel_file_type" msgid="8363932635044575463">"Excel স্প্ৰেডশ্বীট"</string>
- <string name="gdoc_file_type" msgid="242328101061228382">"Google নথি"</string>
- <string name="gsheet_file_type" msgid="8055591929133067952">"Google স্প্ৰেডশ্বীট"</string>
- <string name="gslides_file_type" msgid="8359750985956690177">"Google উপস্থাপন"</string>
- <string name="gdraw_file_type" msgid="655688091676820371">"Google অংকন"</string>
- <string name="gtable_file_type" msgid="7332773878374650335">"Google তালিকা"</string>
- <string name="gform_file_type" msgid="4803176103746107611">"Google ফৰ্ম"</string>
- <string name="gmap_file_type" msgid="6684180781808007016">"Google মেপ"</string>
- <string name="gsite_file_type" msgid="3742812051249149526">"Google ছাইট"</string>
- <string name="directory_type" msgid="2702987727566226354">"ফ\'ল্ডাৰ"</string>
-</resources>
diff --git a/res/values-as/strings.xml b/res/values-as/strings.xml
index 1d21c9a..4a93e16 100644
--- a/res/values-as/strings.xml
+++ b/res/values-as/strings.xml
@@ -17,80 +17,143 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="files_label" msgid="771781190045103748">"ফাইলবোৰ"</string>
- <string name="downloads_label" msgid="5462789470049501103">"ডাউনল\'ডসমূহ"</string>
+ <!-- no translation found for downloads_label (5462789470049501103) -->
+ <skip />
<!-- no translation found for app_label (8089292432455111409) -->
<skip />
<!-- no translation found for launcher_label (799410258349837668) -->
<skip />
- <string name="title_open" msgid="3165686459158020921">"ইয়াৰ পৰা খোলক"</string>
- <string name="title_save" msgid="4384490653102710025">"ইয়াত ছেভ কৰক"</string>
- <string name="menu_create_dir" msgid="2413624798689091042">"নতুন ফ\'ল্ডাৰ"</string>
- <string name="menu_grid" msgid="1453636521731880680">"গ্ৰিড হিচাপে চোৱাৰ সুবিধা"</string>
- <string name="menu_list" msgid="6714267452146410402">"সূচী অনুসৰি চোৱাৰ সুবিধা"</string>
- <string name="menu_search" msgid="1876699106790719849">"অনুসন্ধান কৰক"</string>
- <string name="menu_settings" msgid="6520844520117939047">"সঞ্চয়াগাৰৰ ছেটিংসমূহ"</string>
- <string name="menu_open" msgid="9092138100049759315">"খোলক"</string>
- <string name="menu_open_with" msgid="5507647065467520229">"ইয়াৰ জৰিয়তে খোলক"</string>
- <string name="menu_open_in_new_window" msgid="6686563636123311276">"নতুন ৱিণ্ড\'ত খোলক"</string>
- <string name="menu_save" msgid="5195367497138965168">"ছেভ কৰক"</string>
- <string name="menu_share" msgid="4307140947108068356">"শ্বেয়াৰ কৰক"</string>
- <string name="menu_delete" msgid="1022254131543256626">"মচক"</string>
- <string name="menu_select_all" msgid="7600576812185570403">"সকলো বাছনি কৰক"</string>
- <string name="menu_copy" msgid="7404820171352314754">"ইয়াত প্ৰতিলিপি কৰক…"</string>
- <string name="menu_move" msgid="2310760789561129882">"ইয়ালৈ স্থানান্তৰ কৰক…"</string>
+ <!-- no translation found for title_open (3165686459158020921) -->
+ <skip />
+ <!-- no translation found for title_save (4384490653102710025) -->
+ <skip />
+ <!-- no translation found for menu_create_dir (2413624798689091042) -->
+ <skip />
+ <!-- no translation found for menu_grid (1453636521731880680) -->
+ <skip />
+ <!-- no translation found for menu_list (6714267452146410402) -->
+ <skip />
+ <!-- no translation found for menu_search (1876699106790719849) -->
+ <skip />
+ <!-- no translation found for menu_settings (6520844520117939047) -->
+ <skip />
+ <!-- no translation found for menu_open (9092138100049759315) -->
+ <skip />
+ <!-- no translation found for menu_open_with (5507647065467520229) -->
+ <skip />
+ <!-- no translation found for menu_open_in_new_window (6686563636123311276) -->
+ <skip />
+ <!-- no translation found for menu_save (5195367497138965168) -->
+ <skip />
+ <!-- no translation found for menu_share (4307140947108068356) -->
+ <skip />
+ <!-- no translation found for menu_delete (1022254131543256626) -->
+ <skip />
+ <!-- no translation found for menu_select_all (7600576812185570403) -->
+ <skip />
+ <!-- no translation found for menu_copy (7404820171352314754) -->
+ <skip />
+ <!-- no translation found for menu_move (2310760789561129882) -->
+ <skip />
<string name="menu_compress" msgid="37539111904724188">"সংকুচিত কৰক"</string>
<string name="menu_extract" msgid="8171946945982532262">"ইয়ালৈ আহৰণ কৰক…"</string>
- <string name="menu_rename" msgid="1883113442688817554">"নতুন নাম দিয়ক"</string>
- <string name="menu_inspect" msgid="7279855349299446224">"তথ্য পাওক"</string>
+ <!-- no translation found for menu_rename (1883113442688817554) -->
+ <skip />
+ <!-- no translation found for menu_inspect (7279855349299446224) -->
+ <skip />
<string name="menu_view_in_owner" msgid="7228948660557554770">"<xliff:g id="SOURCE">%1$s</xliff:g>ত চাওক"</string>
- <string name="menu_new_window" msgid="2947837751796109126">"নতুন ৱিণ্ড\'"</string>
- <string name="menu_cut_to_clipboard" msgid="2878752142015026229">"কাট কৰক"</string>
- <string name="menu_copy_to_clipboard" msgid="5064081159073330776">"প্ৰতিলিপি কৰক"</string>
- <string name="menu_paste_from_clipboard" msgid="360947260414135827">"পেইষ্ট কৰক"</string>
- <string name="menu_paste_into_folder" msgid="8000644546983240101">"ফ\'ল্ডাৰত পেইষ্ট কৰক"</string>
- <string name="menu_advanced_show" msgid="7558626506462906726">"আভ্যন্তৰীণ সঞ্চয়াগাৰ দেখুৱাওক"</string>
- <string name="menu_advanced_hide" msgid="6488381508009246334">"আভ্যন্তৰীণ সঞ্চয়াগাৰ লুকুৱাওক"</string>
- <string name="button_select" msgid="240863497069321364">"বাছনি কৰক"</string>
- <string name="button_copy" msgid="8219059853840996027">"প্ৰতিলিপি কৰক"</string>
+ <!-- no translation found for menu_new_window (2947837751796109126) -->
+ <skip />
+ <!-- no translation found for menu_cut_to_clipboard (2878752142015026229) -->
+ <skip />
+ <!-- no translation found for menu_copy_to_clipboard (5064081159073330776) -->
+ <skip />
+ <!-- no translation found for menu_paste_from_clipboard (360947260414135827) -->
+ <skip />
+ <!-- no translation found for menu_paste_into_folder (8000644546983240101) -->
+ <skip />
+ <!-- no translation found for menu_advanced_show (7558626506462906726) -->
+ <skip />
+ <!-- no translation found for menu_advanced_hide (6488381508009246334) -->
+ <skip />
+ <!-- no translation found for button_select (240863497069321364) -->
+ <skip />
+ <!-- no translation found for button_copy (8219059853840996027) -->
+ <skip />
<string name="button_compress" msgid="8951561310857223966">"সংকুচিত কৰক"</string>
<string name="button_extract" msgid="1038674453689912247">"আহৰণ কৰক"</string>
- <string name="button_move" msgid="8596460499325291272">"স্থানান্তৰ কৰক"</string>
- <string name="button_dismiss" msgid="7235249361023803349">"প্ৰত্যাখ্যান কৰক"</string>
- <string name="button_retry" msgid="4011461781916631389">"আকৌ চেষ্টা কৰক"</string>
- <string name="button_clear" msgid="5412304437764369441">"মচক"</string>
- <string name="button_show_provider" msgid="6905880493806292753">"যোগানকাৰীত দেখুৱাওক"</string>
- <string name="not_sorted" msgid="7813496644889115530">"ক্ৰমবদ্ধ কৰা হোৱা নাই"</string>
- <string name="sort_dimension_name" msgid="6325591541414177579">"নাম"</string>
- <string name="sort_dimension_summary" msgid="7724534446881397860">"সাৰাংশ"</string>
- <string name="sort_dimension_file_type" msgid="5779709622922085381">"প্রকাৰ"</string>
- <string name="sort_dimension_size" msgid="2190547351159472884">"আকাৰ"</string>
- <string name="sort_dimension_date" msgid="4231005651895254033">"সংশোধন কৰা হ\'ল"</string>
- <string name="directory_items" msgid="6645621978998614003">"সমলৰ সংখ্যা"</string>
- <string name="sort_direction_ascending" msgid="5882787683763248102">"ঊৰ্ধ্বক্ৰমিক"</string>
- <string name="sort_direction_descending" msgid="1729187589765894076">"অধঃক্ৰমিক"</string>
- <string name="drawer_open" msgid="8071673398187261741">"ৰুটসমূহ দেখুৱাওক"</string>
- <string name="drawer_close" msgid="4263880768630848848">"ৰুটসমূহ লুকুৱাওক"</string>
- <string name="save_error" msgid="8631128801982095782">"নথি-পত্ৰ ছেভ কৰিব পৰা নগ\'ল"</string>
- <string name="create_error" msgid="3092144450044861994">"ফ\'ল্ডাৰ সৃষ্টি কৰিব পৰা নগ\'ল"</string>
- <string name="query_error" msgid="6625421453613879336">"এই মুহূৰ্তত সমল ল\'ড কৰিব নোৱাৰি"</string>
- <string name="root_recent" msgid="1080156975424341623">"শেহতীয়া"</string>
- <string name="root_available_bytes" msgid="8269870862691408864">"<xliff:g id="SIZE">%1$s</xliff:g> খালী আছে"</string>
- <string name="root_type_service" msgid="6521366147466512289">"সঞ্চয়াগাৰৰ সেৱাসমূহ"</string>
- <string name="root_type_shortcut" msgid="6059343175525442279">"শ্বৰ্টকাটসমূহ"</string>
- <string name="root_type_device" msgid="1713604128005476585">"ডিভাইচসমূহ"</string>
- <string name="root_type_apps" msgid="8646073235029886342">"অধিক এপ্"</string>
- <string name="empty" msgid="5300254272613103004">"কোনো বস্তু নাই"</string>
- <string name="no_results" msgid="2371026325236359209">"%1$s ত কোনো মিল পোৱা নগ\'ল"</string>
- <string name="toast_no_application" msgid="7555319548595113121">"ফাইল খুলিব পৰা নাই"</string>
+ <!-- no translation found for button_move (8596460499325291272) -->
+ <skip />
+ <!-- no translation found for button_dismiss (7235249361023803349) -->
+ <skip />
+ <!-- no translation found for button_retry (4011461781916631389) -->
+ <skip />
+ <!-- no translation found for button_clear (5412304437764369441) -->
+ <skip />
+ <!-- no translation found for button_show_provider (6905880493806292753) -->
+ <skip />
+ <!-- no translation found for not_sorted (7813496644889115530) -->
+ <skip />
+ <!-- no translation found for sort_dimension_name (6325591541414177579) -->
+ <skip />
+ <!-- no translation found for sort_dimension_summary (7724534446881397860) -->
+ <skip />
+ <!-- no translation found for sort_dimension_file_type (5779709622922085381) -->
+ <skip />
+ <!-- no translation found for sort_dimension_size (2190547351159472884) -->
+ <skip />
+ <!-- no translation found for sort_dimension_date (4231005651895254033) -->
+ <skip />
+ <!-- no translation found for directory_items (6645621978998614003) -->
+ <skip />
+ <!-- no translation found for sort_direction_ascending (5882787683763248102) -->
+ <skip />
+ <!-- no translation found for sort_direction_descending (1729187589765894076) -->
+ <skip />
+ <!-- no translation found for drawer_open (8071673398187261741) -->
+ <skip />
+ <!-- no translation found for drawer_close (4263880768630848848) -->
+ <skip />
+ <!-- no translation found for save_error (8631128801982095782) -->
+ <skip />
+ <!-- no translation found for create_error (3092144450044861994) -->
+ <skip />
+ <!-- no translation found for query_error (6625421453613879336) -->
+ <skip />
+ <!-- no translation found for root_recent (1080156975424341623) -->
+ <skip />
+ <!-- no translation found for root_available_bytes (8269870862691408864) -->
+ <skip />
+ <!-- no translation found for root_type_service (6521366147466512289) -->
+ <skip />
+ <!-- no translation found for root_type_shortcut (6059343175525442279) -->
+ <skip />
+ <!-- no translation found for root_type_device (1713604128005476585) -->
+ <skip />
+ <!-- no translation found for root_type_apps (8646073235029886342) -->
+ <skip />
+ <!-- no translation found for empty (5300254272613103004) -->
+ <skip />
+ <!-- no translation found for no_results (2371026325236359209) -->
+ <skip />
+ <!-- no translation found for toast_no_application (7555319548595113121) -->
+ <skip />
<string name="toast_view_in_archives_unsupported" msgid="1923221390170964845">"আৰ্কাইভত থকা ফাইলবোৰ খুলিব নোৱাৰি"</string>
- <string name="toast_failed_delete" msgid="3453846588205817591">"কিছুমান নথি মচিব পৰা নগ\'ল"</string>
- <string name="share_via" msgid="8725082736005677161">"ইয়াৰ জৰিয়তে শ্বেয়াৰ কৰক"</string>
- <string name="copy_notification_title" msgid="52256435625098456">"ফাইলসমূহৰ প্ৰতিলিপি কৰি থকা হৈছে"</string>
+ <!-- no translation found for toast_failed_delete (3453846588205817591) -->
+ <skip />
+ <!-- no translation found for share_via (8725082736005677161) -->
+ <skip />
+ <!-- no translation found for copy_notification_title (52256435625098456) -->
+ <skip />
<string name="compress_notification_title" msgid="6830195148113751021">"ফাইলবোৰ সংকুচিত কৰি থকা হৈছে"</string>
- <string name="extract_notification_title" msgid="5067393961754430469">"ফাইল আহৰণ কৰি থকা হৈছে"</string>
- <string name="move_notification_title" msgid="3173424987049347605">"ফাইল আঁতৰাই থকা হৈছে"</string>
- <string name="delete_notification_title" msgid="2512757431856830792">"ফাইলসমূহ মচি থকা হৈছে"</string>
- <string name="copy_remaining" msgid="5390517377265177727">"<xliff:g id="DURATION">%s</xliff:g> মিনিট বাকী আছে"</string>
+ <!-- no translation found for extract_notification_title (5067393961754430469) -->
+ <skip />
+ <!-- no translation found for move_notification_title (3173424987049347605) -->
+ <skip />
+ <!-- no translation found for delete_notification_title (2512757431856830792) -->
+ <skip />
+ <!-- no translation found for copy_remaining (5390517377265177727) -->
+ <skip />
<plurals name="copy_begin" formatted="false" msgid="151184708996738192">
<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>
@@ -111,13 +174,18 @@
<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="undo" msgid="2902438994196400565">"আনডু কৰক"</string>
- <string name="copy_preparing" msgid="4759516490222449324">"সাজু কৰি থকা হৈছে…"</string>
- <string name="compress_preparing" msgid="7401605598969019696">"সাজু কৰি থকা হৈছে…"</string>
- <string name="extract_preparing" msgid="4796626960061745796">"সাজু কৰি থকা হৈছে…"</string>
- <string name="move_preparing" msgid="6504239656430530761">"সাজু কৰি থকা হৈছে…"</string>
- <string name="delete_preparing" msgid="7339349837842802508">"সাজু কৰি থকা হৈছে…"</string>
- <string name="delete_progress" msgid="2627631054702306423">"<xliff:g id="COUNT_0">%1$d</xliff:g> / <xliff:g id="TOTALCOUNT">%2$d</xliff:g>"</string>
+ <!-- no translation found for undo (2902438994196400565) -->
+ <skip />
+ <!-- no translation found for copy_preparing (5326063807006898223) -->
+ <skip />
+ <string name="compress_preparing" msgid="6650018601382062672">"সংকুচিত কৰিবলৈ প্ৰস্তুত কৰি থকা হৈছে…"</string>
+ <string name="extract_preparing" msgid="58266275455027829">"আহৰণ কৰিবলৈ সাজু কৰি থকা হৈছে…"</string>
+ <!-- no translation found for move_preparing (8742573245485449429) -->
+ <skip />
+ <!-- no translation found for delete_preparing (6513863752916028147) -->
+ <skip />
+ <!-- no translation found for delete_progress (2627631054702306423) -->
+ <skip />
<plurals name="copy_error_notification_title" formatted="false" msgid="3188432450429390963">
<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>
@@ -134,8 +202,10 @@
<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="2385563502445129570">"সবিশেষ চাবলৈ টিপক"</string>
- <string name="close" msgid="905969391788869975">"বন্ধ কৰক"</string>
+ <!-- no translation found for notification_touch_for_details (2385563502445129570) -->
+ <skip />
+ <!-- no translation found for close (905969391788869975) -->
+ <skip />
<plurals name="copy_failure_alert_content" formatted="false" msgid="5570549471912990536">
<item quantity="one">এই ফাইলবোৰ প্ৰতিলিপি কৰা নহ\'ল: <xliff:g id="LIST_1">%1$s</xliff:g></item>
<item quantity="other">এই ফাইলবোৰ প্ৰতিলিপি কৰা নহ\'ল: <xliff:g id="LIST_1">%1$s</xliff:g></item>
@@ -166,44 +236,44 @@
</plurals>
<string name="file_operation_rejected" msgid="4301554203329008794">"ফাইলত কাৰ্য কৰিব নোৱাৰি।"</string>
<string name="file_operation_error" msgid="2234357335716533795">"ফাইলত কাৰ্য কৰিব পৰা নগ\'ল।"</string>
- <string name="rename_error" msgid="6700093173508118635">"নথিৰ নাম সলনি কৰিব পৰা নগ\'ল"</string>
- <string name="menu_eject_root" msgid="9215040039374893613">"বাহিৰলৈ উলিয়াওক"</string>
- <string name="notification_copy_files_converted_title" msgid="6916768494891833365">"কিছুমান ফাইল ৰূপান্তৰ কৰা হ\'ল"</string>
- <string name="open_external_dialog_request" msgid="8173558471322861268">"<xliff:g id="APPNAME"><b>^1</b></xliff:g>ক <xliff:g id="STORAGE"><i>^3</i></xliff:g>ৰ <xliff:g id="DIRECTORY"><i>^2</i></xliff:g> চাবলৈ অনুমতি দিবনে?"</string>
- <string name="open_external_dialog_request_primary_volume" msgid="2240992164087948176">"<xliff:g id="APPNAME"><b>^1</b></xliff:g>ক <xliff:g id="DIRECTORY"><i>^2</i></xliff:g> চাবলৈ অনুমতি দিবনে?"</string>
- <string name="open_external_dialog_root_request" msgid="6776729293982633">"<xliff:g id="APPNAME"><b>^1</b></xliff:g>ক <xliff:g id="STORAGE"><i>^2</i></xliff:g>ত থকা ফট\' আৰু ভিডিঅ\'সমূহকে ধৰি আপোনাৰ ডেটা চাবলৈ অনুমতি দিবনে?"</string>
- <string name="never_ask_again" msgid="525908236522201138">"পুনৰাই নুসুধিব"</string>
- <string name="allow" msgid="1275746941353040309">"অনুমতি দিয়ক"</string>
- <string name="deny" msgid="5127201668078153379">"অস্বীকাৰ কৰক"</string>
- <plurals name="elements_selected" formatted="false" msgid="4448165978637163692">
- <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>
- <plurals name="elements_dragged" formatted="false" msgid="5932571296037626279">
- <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="delete_filename_confirmation_message" msgid="8338069763240613258">"\"<xliff:g id="NAME">%1$s</xliff:g>\"ক মচিবনে?"</string>
- <string name="delete_foldername_confirmation_message" msgid="9084085260877704140">"\"<xliff:g id="NAME">%1$s</xliff:g>\" ফ\'ল্ডাৰ আৰু ইয়াৰ সমলসমূহ মচিবনে?"</string>
- <plurals name="delete_files_confirmation_message" formatted="false" msgid="4866664063250034142">
- <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>
- <plurals name="delete_folders_confirmation_message" formatted="false" msgid="1028946402799686388">
- <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>
- <plurals name="delete_items_confirmation_message" formatted="false" msgid="7285090426511028179">
- <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>
+ <!-- no translation found for rename_error (6700093173508118635) -->
+ <skip />
+ <!-- no translation found for menu_eject_root (9215040039374893613) -->
+ <skip />
+ <!-- no translation found for notification_copy_files_converted_title (6916768494891833365) -->
+ <skip />
+ <!-- no translation found for open_external_dialog_request (8173558471322861268) -->
+ <skip />
+ <!-- no translation found for open_external_dialog_request_primary_volume (2240992164087948176) -->
+ <skip />
+ <!-- no translation found for open_external_dialog_root_request (6776729293982633) -->
+ <skip />
+ <!-- no translation found for never_ask_again (525908236522201138) -->
+ <skip />
+ <!-- no translation found for allow (1275746941353040309) -->
+ <skip />
+ <!-- no translation found for deny (5127201668078153379) -->
+ <skip />
+ <!-- no translation found for elements_selected (4448165978637163692) -->
+ <!-- no translation found for elements_dragged (5932571296037626279) -->
+ <!-- no translation found for delete_filename_confirmation_message (8338069763240613258) -->
+ <skip />
+ <!-- no translation found for delete_foldername_confirmation_message (9084085260877704140) -->
+ <skip />
+ <!-- no translation found for delete_files_confirmation_message (4866664063250034142) -->
+ <!-- no translation found for delete_folders_confirmation_message (1028946402799686388) -->
+ <!-- no translation found for delete_items_confirmation_message (7285090426511028179) -->
<string name="images_shortcut_label" msgid="2545168016070493574">"প্ৰতিচ্ছবিবোৰ"</string>
<string name="archive_loading_failed" msgid="7243436722828766996">"ব্ৰাউজ কৰিবলৈ আৰ্কাইভ খুলিব পৰা নগ\'ল। ফাইলটো হয় ব্যৱহাৰযোগ্য হৈ থকা নাই বা ব্যৱহাৰ কৰিব পৰা ফৰ্মেটত নাই।"</string>
<string name="name_conflict" msgid="28407269328862986">"এই নামৰ অইন এটা ফাইল ইতিমধ্যে আছে।"</string>
- <string name="authentication_required" msgid="8030880723643436099">"এই নিৰ্দেশাৱলী চাবলৈ <xliff:g id="NAME">%1$s</xliff:g>ত ছাইন ইন কৰক"</string>
- <string name="cant_display_content" msgid="8633226333229417237">"সমলবোৰ দেখুওৱাব নোৱাৰি"</string>
- <string name="sign_in" msgid="6253762676723505592">"ছাইন ইন কৰক"</string>
+ <!-- no translation found for authentication_required (8030880723643436099) -->
+ <skip />
+ <!-- no translation found for cant_display_content (8633226333229417237) -->
+ <skip />
+ <!-- no translation found for sign_in (6253762676723505592) -->
+ <skip />
<string name="new_archive_file_name" msgid="1604650338077249838">"আৰ্কাইভ<xliff:g id="EXTENSION">%s</xliff:g>"</string>
<string name="overwrite_file_confirmation_message" msgid="2496109652768222716">"<xliff:g id="NAME">%1$s</xliff:g>ক অভাৰৰাইট কৰিবনে?"</string>
- <string name="continue_in_background" msgid="1974214559047793331">"নেপথ্যত অব্যাহত ৰাখক"</string>
+ <!-- no translation found for continue_in_background (1974214559047793331) -->
+ <skip />
</resources>
diff --git a/res/values-bs/strings.xml b/res/values-bs/strings.xml
index 8d924a4..8625c7e 100644
--- a/res/values-bs/strings.xml
+++ b/res/values-bs/strings.xml
@@ -84,7 +84,7 @@
<string name="toast_no_application" msgid="7555319548595113121">"Nije moguće otvoriti fajl"</string>
<string name="toast_view_in_archives_unsupported" msgid="1923221390170964845">"Nije moguće otvoriti fajlove u arhivama"</string>
<string name="toast_failed_delete" msgid="3453846588205817591">"Nije moguće izbrisati neke dokumente"</string>
- <string name="share_via" msgid="8725082736005677161">"Dijeli koristeći aplikaciju"</string>
+ <string name="share_via" msgid="8725082736005677161">"Dijeli pomoću aplikacije"</string>
<string name="copy_notification_title" msgid="52256435625098456">"Kopiraju se fajlovi"</string>
<string name="compress_notification_title" msgid="6830195148113751021">"Kompresovanje fajlova"</string>
<string name="extract_notification_title" msgid="5067393961754430469">"Izdvajanje fajlova"</string>
diff --git a/res/values-en-rCA/strings.xml b/res/values-en-rCA/strings.xml
index 315a5af..8ffcdbc 100644
--- a/res/values-en-rCA/strings.xml
+++ b/res/values-en-rCA/strings.xml
@@ -112,11 +112,11 @@
<item quantity="one">Deleting <xliff:g id="COUNT_0">%1$d</xliff:g> item.</item>
</plurals>
<string name="undo" msgid="2902438994196400565">"Undo"</string>
- <string name="copy_preparing" msgid="4759516490222449324">"Preparing..."</string>
- <string name="compress_preparing" msgid="7401605598969019696">"Preparing..."</string>
- <string name="extract_preparing" msgid="4796626960061745796">"Preparing..."</string>
- <string name="move_preparing" msgid="6504239656430530761">"Preparing..."</string>
- <string name="delete_preparing" msgid="7339349837842802508">"Preparing..."</string>
+ <string name="copy_preparing" msgid="5326063807006898223">"Preparing for copy…"</string>
+ <string name="compress_preparing" msgid="6650018601382062672">"Preparing for compress…"</string>
+ <string name="extract_preparing" msgid="58266275455027829">"Preparing for extract…"</string>
+ <string name="move_preparing" msgid="8742573245485449429">"Preparing for move…"</string>
+ <string name="delete_preparing" msgid="6513863752916028147">"Preparing to delete…"</string>
<string name="delete_progress" msgid="2627631054702306423">"<xliff:g id="COUNT_0">%1$d</xliff:g> / <xliff:g id="TOTALCOUNT">%2$d</xliff:g>"</string>
<plurals name="copy_error_notification_title" formatted="false" msgid="3188432450429390963">
<item quantity="other">Couldn’t copy <xliff:g id="COUNT_1">%1$d</xliff:g> items</item>
diff --git a/res/values-en-rXC/strings.xml b/res/values-en-rXC/strings.xml
index 073ce47..9e727f9 100644
--- a/res/values-en-rXC/strings.xml
+++ b/res/values-en-rXC/strings.xml
@@ -112,11 +112,11 @@
<item quantity="one">Deleting <xliff:g id="COUNT_0">%1$d</xliff:g> item.</item>
</plurals>
<string name="undo" msgid="2902438994196400565">"Undo"</string>
- <string name="copy_preparing" msgid="4759516490222449324">"Preparing..."</string>
- <string name="compress_preparing" msgid="7401605598969019696">"Preparing..."</string>
- <string name="extract_preparing" msgid="4796626960061745796">"Preparing..."</string>
- <string name="move_preparing" msgid="6504239656430530761">"Preparing..."</string>
- <string name="delete_preparing" msgid="7339349837842802508">"Preparing..."</string>
+ <string name="copy_preparing" msgid="5326063807006898223">"Preparing for copy…"</string>
+ <string name="compress_preparing" msgid="6650018601382062672">"Preparing for compress…"</string>
+ <string name="extract_preparing" msgid="58266275455027829">"Preparing for extract…"</string>
+ <string name="move_preparing" msgid="8742573245485449429">"Preparing for move…"</string>
+ <string name="delete_preparing" msgid="6513863752916028147">"Preparing for delete…"</string>
<string name="delete_progress" msgid="2627631054702306423">"<xliff:g id="COUNT_0">%1$d</xliff:g> / <xliff:g id="TOTALCOUNT">%2$d</xliff:g>"</string>
<plurals name="copy_error_notification_title" formatted="false" msgid="3188432450429390963">
<item quantity="other">Couldn’t copy <xliff:g id="COUNT_1">%1$d</xliff:g> items</item>
diff --git a/res/values-eu/inspector_strings.xml b/res/values-eu/inspector_strings.xml
index 24b9b4a..9f51a8c 100644
--- a/res/values-eu/inspector_strings.xml
+++ b/res/values-eu/inspector_strings.xml
@@ -18,7 +18,7 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="inspector_title" msgid="1924760928091740238">"Informazioa"</string>
<string name="inspector_load_error" msgid="7522190243413249291">"Ezin izan da kargatu fitxategiaren informazioa"</string>
- <string name="inspector_debug_section" msgid="2576052661505700421">"Arazte-informazioa (garatzaileentzat soilik)"</string>
+ <string name="inspector_debug_section" msgid="2576052661505700421">"Arazketa-informazioa (garatzaileentzat soilik)"</string>
<string name="inspector_debug_metadata_section" msgid="5875140675600744846">"Prozesatu gabeko metadatuak: <xliff:g id="METADATATYPE">%1$s</xliff:g>"</string>
<string name="inspector_metadata_section" msgid="6077622515328240575">"Multimedia-elementuaren xehetasunak"</string>
<string name="handler_app_file_opens_with" msgid="5272329600389613550">"Mota honetako fitxategiak aplikazio honekin ireki daitezke:"</string>
diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml
index 29bf594..ebcaae1 100644
--- a/res/values-fr/strings.xml
+++ b/res/values-fr/strings.xml
@@ -74,7 +74,7 @@
<string name="create_error" msgid="3092144450044861994">"Échec de la création du dossier"</string>
<string name="query_error" msgid="6625421453613879336">"Impossible de charger le contenu pour le moment"</string>
<string name="root_recent" msgid="1080156975424341623">"Récents"</string>
- <string name="root_available_bytes" msgid="8269870862691408864">"Espace disponible : <xliff:g id="SIZE">%1$s</xliff:g>"</string>
+ <string name="root_available_bytes" msgid="8269870862691408864">"<xliff:g id="SIZE">%1$s</xliff:g> disponible(s)"</string>
<string name="root_type_service" msgid="6521366147466512289">"Services de stockage"</string>
<string name="root_type_shortcut" msgid="6059343175525442279">"Raccourcis"</string>
<string name="root_type_device" msgid="1713604128005476585">"Appareils"</string>
diff --git a/res/values-iw/strings.xml b/res/values-iw/strings.xml
index eccd206..ede6479 100644
--- a/res/values-iw/strings.xml
+++ b/res/values-iw/strings.xml
@@ -206,7 +206,7 @@
<string name="open_external_dialog_root_request" msgid="6776729293982633">"האם להעניק לאפליקציה <xliff:g id="APPNAME"><b>^1</b></xliff:g> גישה לנתונים שלך, כולל תמונות וסרטונים, השמורים ב<xliff:g id="STORAGE"><i>^2</i></xliff:g>?"</string>
<string name="never_ask_again" msgid="525908236522201138">"ראיתי פעם אחת, זה מספיק"</string>
<string name="allow" msgid="1275746941353040309">"כן, זה בסדר"</string>
- <string name="deny" msgid="5127201668078153379">"לא, אין מצב"</string>
+ <string name="deny" msgid="5127201668078153379">"לא, תודה"</string>
<plurals name="elements_selected" formatted="false" msgid="4448165978637163692">
<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>
diff --git a/res/values-or/inspector_strings.xml b/res/values-or/inspector_strings.xml
deleted file mode 100644
index 0e53ff5..0000000
--- a/res/values-or/inspector_strings.xml
+++ /dev/null
@@ -1,49 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2017 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="inspector_title" msgid="1924760928091740238">"ସୂଚନା"</string>
- <string name="inspector_load_error" msgid="7522190243413249291">"ଫାଇଲ୍ ସୂଚନା ଲୋଡ୍ କରିହେଲା ନାହିଁ"</string>
- <string name="inspector_debug_section" msgid="2576052661505700421">"ଡିବଗ୍ ସୂଚନା (କେବଳ ଡିଭାଇସ୍)"</string>
- <string name="inspector_debug_metadata_section" msgid="5875140675600744846">"ମୂଳ ମେଟାଡାଟା: <xliff:g id="METADATATYPE">%1$s</xliff:g>"</string>
- <string name="inspector_metadata_section" msgid="6077622515328240575">"ମିଡିଆ ବିବରଣୀ"</string>
- <string name="handler_app_file_opens_with" msgid="5272329600389613550">"ଏହି ପ୍ରକାରର ଫାଇଲ୍ ଏଥିରେ ଖୋଲେ"</string>
- <string name="handler_app_belongs_to" msgid="5444507329303253553">"ଏହି ଫାଇଲ୍କୁ ଦେଇଛନ୍ତି"</string>
- <string name="handler_app_not_selected" msgid="1294439257183908786">"ଚୟନ କରାଯାଇନାହିଁ"</string>
- <string name="handler_app_unknown" msgid="5911661530593229287">"ଅଜଣା"</string>
- <string name="metadata_dimensions" msgid="6112907724016659801">"ମାପ"</string>
- <string name="metadata_dimensions_format" msgid="6138765871412005962">"<xliff:g id="WIDTH">%1$d</xliff:g> x <xliff:g id="HEIGHT">%2$d</xliff:g> - <xliff:g id="MEGAPIXELS">%3$,.1f</xliff:g>MP"</string>
- <string name="metadata_coordinates" msgid="6897383227370702734">"ନିର୍ଦ୍ଦେଶାଙ୍କ"</string>
- <string name="metadata_coordinates_format" msgid="1402724596764547761">"<xliff:g id="LATITUDE">%1$,.3f</xliff:g>, <xliff:g id="LONGITUDE">%2$,.3f</xliff:g>"</string>
- <string name="metadata_altitude" msgid="8063792127436794294">"ଉଚ୍ଚତା"</string>
- <string name="metadata_camera" msgid="2363009732801281319">"କ୍ୟାମେରା"</string>
- <string name="metadata_camera_format" msgid="1494489751904311612">"<xliff:g id="MAKE">%1$s</xliff:g> <xliff:g id="MODEL">%2$s</xliff:g>"</string>
- <string name="metadata_aperture" msgid="6538741952698935357">"ଆପାର୍ଚର୍"</string>
- <string name="metadata_shutter_speed" msgid="8204739885103326131">"ଶଟର୍ ସ୍ପୀଡ୍"</string>
- <string name="metadata_duration" msgid="3115494422055472715">"ଅବଧି"</string>
- <string name="metadata_date_time" msgid="1090351199248114406">"ଫଟୋ ଉଠାଯାଇଥିବା ସମୟ"</string>
- <string name="metadata_focal_length" msgid="3440735161407699893">"ଫୋକସ୍ ଦୈର୍ଘ୍ୟ"</string>
- <string name="metadata_focal_format" msgid="8542211707962355623">"<xliff:g id="LENGTH">%1$.2f </xliff:g>ମିମି"</string>
- <string name="metadata_iso_speed_ratings" msgid="1699781252899759058">"ISO ସମତୁଲ୍ୟ"</string>
- <string name="metadata_iso_format" msgid="4153285204012694861">"ISO <xliff:g id="ISO_SPEED">%1$d</xliff:g>"</string>
- <string name="metadata_artist" msgid="8972421485694988540">"କଳାକାର"</string>
- <string name="metadata_composer" msgid="4696926808308256056">"କମ୍ପୋଜର୍"</string>
- <string name="metadata_album" msgid="1661699531214720236">"ଆଲବମ୍"</string>
- <string name="metadata_address" msgid="1849921023707744640">"ଲୋକେଶନ୍"</string>
- <string name="debug_stream_types" msgid="2088565280360139333">"ଷ୍ଟ୍ରୀମ୍ର ପ୍ରକାର"</string>
- <string name="debug_raw_size" msgid="7487139640175650185">"ମୂଳ ଆକାର (ବାଇଟ୍ସ)"</string>
-</resources>
diff --git a/res/values-or/mimes.xml b/res/values-or/mimes.xml
deleted file mode 100644
index a881620..0000000
--- a/res/values-or/mimes.xml
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- ~ Copyright (C) 2017 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="generic_extention_file_type" msgid="5947398320635880291">"<xliff:g id="EXTENSION">%1$s</xliff:g> ଫାଇଲ୍"</string>
- <string name="generic_file_type" msgid="1415477154743494280">"ଫାଇଲ୍"</string>
- <string name="image_file_type" msgid="3011633523704887793">"ଇମେଜ୍"</string>
- <string name="image_extension_file_type" msgid="992617216367594851">"<xliff:g id="FILETYPE">%1$s</xliff:g> ଇମେଜ୍"</string>
- <string name="audio_file_type" msgid="3790525543519624632">"ଅଡିଓ"</string>
- <string name="audio_extension_file_type" msgid="6334293531796491314">"<xliff:g id="FILETYPE">%1$s</xliff:g> ଅଡିଓ"</string>
- <string name="video_file_type" msgid="7290473366042482095">"ଭିଡିଓ"</string>
- <string name="video_extension_file_type" msgid="6352763029831291433">"<xliff:g id="FILETYPE">%1$s</xliff:g> ଭିଡିଓ"</string>
- <string name="archive_file_type" msgid="1463432996680398798">"<xliff:g id="FILETYPE">%1$s</xliff:g> ଆର୍କାଇଭ୍"</string>
- <string name="apk_file_type" msgid="6004275470389462277">"Android ଆପ୍ଲିକେଶନ୍"</string>
- <string name="txt_file_type" msgid="4677767777860724696">"କେବଳ ଟେକ୍ସଟ୍"</string>
- <string name="html_file_type" msgid="2034229603117527970">"HTML ଡକୁମେଣ୍ଟ"</string>
- <string name="pdf_file_type" msgid="3382260303795039988">"PDF ଡକୁମେଣ୍ଟ"</string>
- <string name="word_file_type" msgid="2366349268129894972">"Word ଡକୁମେଣ୍ଟ"</string>
- <string name="ppt_file_type" msgid="2570841599899893925">"ପାୱାର୍ପଏଣ୍ଟ ପ୍ରେଜେଣ୍ଟେଶନ୍"</string>
- <string name="excel_file_type" msgid="8363932635044575463">"Excel ସ୍ପ୍ରେଡଶୀଟ୍"</string>
- <string name="gdoc_file_type" msgid="242328101061228382">"Google ଡକୁମେଣ୍ଟ"</string>
- <string name="gsheet_file_type" msgid="8055591929133067952">"Google ସ୍ପ୍ରେଡଶୀଟ୍"</string>
- <string name="gslides_file_type" msgid="8359750985956690177">"Google ପ୍ରେଜେଣ୍ଟେଶନ୍"</string>
- <string name="gdraw_file_type" msgid="655688091676820371">"Google ଡ୍ରଇଙ୍ଗ"</string>
- <string name="gtable_file_type" msgid="7332773878374650335">"Google ଟେବଲ୍"</string>
- <string name="gform_file_type" msgid="4803176103746107611">"Google ଫର୍ମ"</string>
- <string name="gmap_file_type" msgid="6684180781808007016">"Google ମ୍ୟାପ୍"</string>
- <string name="gsite_file_type" msgid="3742812051249149526">"Google ସାଇଟ୍"</string>
- <string name="directory_type" msgid="2702987727566226354">"ଫୋଲ୍ଡର୍"</string>
-</resources>
diff --git a/res/values-or/strings.xml b/res/values-or/strings.xml
deleted file mode 100644
index d425051..0000000
--- a/res/values-or/strings.xml
+++ /dev/null
@@ -1,209 +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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="files_label" msgid="771781190045103748">"ଫାଇଲ୍"</string>
- <string name="downloads_label" msgid="5462789470049501103">"ଡାଉନଲୋଡ୍"</string>
- <!-- no translation found for app_label (8089292432455111409) -->
- <skip />
- <!-- no translation found for launcher_label (799410258349837668) -->
- <skip />
- <string name="title_open" msgid="3165686459158020921">"ଏଥିରୁ ଖୋଲନ୍ତୁ"</string>
- <string name="title_save" msgid="4384490653102710025">"ଏଥିରେ ସେଭ୍ କରନ୍ତୁ"</string>
- <string name="menu_create_dir" msgid="2413624798689091042">"ନୂଆ ଫୋଲ୍ଡର୍"</string>
- <string name="menu_grid" msgid="1453636521731880680">"ଗ୍ରୀଡ୍ ଭ୍ୟୁ"</string>
- <string name="menu_list" msgid="6714267452146410402">"ତାଲିକା ଭ୍ୟୁ"</string>
- <string name="menu_search" msgid="1876699106790719849">"ସର୍ଚ୍ଚ କରନ୍ତୁ"</string>
- <string name="menu_settings" msgid="6520844520117939047">"ଷ୍ଟୋରେଜ୍ ସେଟିଙ୍ଗ"</string>
- <string name="menu_open" msgid="9092138100049759315">"ଖୋଲନ୍ତୁ"</string>
- <string name="menu_open_with" msgid="5507647065467520229">"ଏଥିରେ ଖୋଲନ୍ତୁ"</string>
- <string name="menu_open_in_new_window" msgid="6686563636123311276">"ନୂଆ ୱିଣ୍ଡୋରେ ଖୋଲନ୍ତୁ"</string>
- <string name="menu_save" msgid="5195367497138965168">"ସେଭ୍ କରନ୍ତୁ"</string>
- <string name="menu_share" msgid="4307140947108068356">"ଶେୟାର୍ କରନ୍ତୁ"</string>
- <string name="menu_delete" msgid="1022254131543256626">"ଡିଲିଟ୍ କରନ୍ତୁ"</string>
- <string name="menu_select_all" msgid="7600576812185570403">"ସବୁ ଚୟନ କରନ୍ତୁ"</string>
- <string name="menu_copy" msgid="7404820171352314754">"ଏଥିକୁ କପୀ କରନ୍ତୁ…"</string>
- <string name="menu_move" msgid="2310760789561129882">"ଏଥିକୁ ନିଅନ୍ତୁ…"</string>
- <string name="menu_compress" msgid="37539111904724188">"ଛୋଟ କରନ୍ତୁ"</string>
- <string name="menu_extract" msgid="8171946945982532262">"ଏଠାକୁ ଏକ୍ସଟ୍ରାକ୍ଟ କରନ୍ତୁ…"</string>
- <string name="menu_rename" msgid="1883113442688817554">"ନାମ ବଦଳାନ୍ତୁ"</string>
- <string name="menu_inspect" msgid="7279855349299446224">"ସୂଚନା ପାଆନ୍ତୁ"</string>
- <string name="menu_view_in_owner" msgid="7228948660557554770">"<xliff:g id="SOURCE">%1$s</xliff:g>ରେ ଦେଖନ୍ତୁ"</string>
- <string name="menu_new_window" msgid="2947837751796109126">"ନୂଆ ୱିଣ୍ଡୋ"</string>
- <string name="menu_cut_to_clipboard" msgid="2878752142015026229">"କଟ୍ କରନ୍ତୁ"</string>
- <string name="menu_copy_to_clipboard" msgid="5064081159073330776">"କପୀ କରନ୍ତୁ"</string>
- <string name="menu_paste_from_clipboard" msgid="360947260414135827">"ପେଷ୍ଟ କରନ୍ତୁ"</string>
- <string name="menu_paste_into_folder" msgid="8000644546983240101">"ଫୋଲ୍ଡର୍ରେ ପେଷ୍ଟ କରନ୍ତୁ"</string>
- <string name="menu_advanced_show" msgid="7558626506462906726">"ଇଣ୍ଟର୍ନଲ୍ ଷ୍ଟୋରେଜ୍କୁ ଦେଖାନ୍ତୁ"</string>
- <string name="menu_advanced_hide" msgid="6488381508009246334">"ଇଣ୍ଟର୍ନଲ୍ ଷ୍ଟୋରେଜ୍କୁ ଲୁଚାନ୍ତୁ"</string>
- <string name="button_select" msgid="240863497069321364">"ଚୟନ କରନ୍ତୁ"</string>
- <string name="button_copy" msgid="8219059853840996027">"କପୀ କରନ୍ତୁ"</string>
- <string name="button_compress" msgid="8951561310857223966">"ଛୋଟ କରନ୍ତୁ"</string>
- <string name="button_extract" msgid="1038674453689912247">"ଏକ୍ସଟ୍ରାକ୍ଟ କରନ୍ତୁ"</string>
- <string name="button_move" msgid="8596460499325291272">"ନେଇଯାଆନ୍ତୁ"</string>
- <string name="button_dismiss" msgid="7235249361023803349">"ଖାରଜ କରନ୍ତୁ"</string>
- <string name="button_retry" msgid="4011461781916631389">"ପୁଣି ଚେଷ୍ଟା କରନ୍ତୁ"</string>
- <string name="button_clear" msgid="5412304437764369441">"ଖାଲି କରନ୍ତୁ"</string>
- <string name="button_show_provider" msgid="6905880493806292753">"ପ୍ରଦାତା ସର୍ଭିସ୍ରେ ଦେଖାନ୍ତୁ"</string>
- <string name="not_sorted" msgid="7813496644889115530">"କ୍ରମବଦ୍ଧ କରାଯାଇନାହିଁ"</string>
- <string name="sort_dimension_name" msgid="6325591541414177579">"ନାମ"</string>
- <string name="sort_dimension_summary" msgid="7724534446881397860">"ସାରାଂଶ"</string>
- <string name="sort_dimension_file_type" msgid="5779709622922085381">"ପ୍ରକାର"</string>
- <string name="sort_dimension_size" msgid="2190547351159472884">"ଆକାର"</string>
- <string name="sort_dimension_date" msgid="4231005651895254033">"ଗତଥର ସଂଶୋଧିତ"</string>
- <string name="directory_items" msgid="6645621978998614003">"ଆଇଟମ୍ଗୁଡ଼ିକର ସଂଖ୍ୟା"</string>
- <string name="sort_direction_ascending" msgid="5882787683763248102">"ସାନରୁ ବଡ଼ କ୍ରମରେ"</string>
- <string name="sort_direction_descending" msgid="1729187589765894076">"ବଡ଼ରୁ ସାନ କ୍ରମରେ"</string>
- <string name="drawer_open" msgid="8071673398187261741">"ରୁଟ୍ ଦେଖାନ୍ତୁ"</string>
- <string name="drawer_close" msgid="4263880768630848848">"ରୁଟ୍ ଲୁଚାନ୍ତୁ"</string>
- <string name="save_error" msgid="8631128801982095782">"ଡକୁମେଣ୍ଟକୁ ସେଭ୍ କରିପାରିଲା ନାହିଁ"</string>
- <string name="create_error" msgid="3092144450044861994">"ଫୋଲ୍ଡର୍ ତିଆରି କରିହେଲା ନାହିଁ"</string>
- <string name="query_error" msgid="6625421453613879336">"ଏହି ସମୟରେ କଣ୍ଟେଣ୍ଟ ଲୋଡ୍ କରିପାରିବ ନାହିଁ"</string>
- <string name="root_recent" msgid="1080156975424341623">"କିଛି ସମୟ ପୂର୍ବରୁ"</string>
- <string name="root_available_bytes" msgid="8269870862691408864">"<xliff:g id="SIZE">%1$s</xliff:g> ଖାଲି ଅଛି"</string>
- <string name="root_type_service" msgid="6521366147466512289">"ଷ୍ଟୋରେଜ୍ ସେବା"</string>
- <string name="root_type_shortcut" msgid="6059343175525442279">"ଶର୍ଟକଟ୍"</string>
- <string name="root_type_device" msgid="1713604128005476585">"ଡିଭାଇସ୍"</string>
- <string name="root_type_apps" msgid="8646073235029886342">"ଅଧିକ ଆପ୍"</string>
- <string name="empty" msgid="5300254272613103004">"କୌଣସି ଆଇଟମ୍ ନାହିଁ"</string>
- <string name="no_results" msgid="2371026325236359209">"%1$sରେ କିଛି ମେଳ ହେଉନାହିଁ"</string>
- <string name="toast_no_application" msgid="7555319548595113121">"ଫାଇଲ୍ ଖୋଲିହେବ ନାହିଁ"</string>
- <string name="toast_view_in_archives_unsupported" msgid="1923221390170964845">"ସଂଗ୍ରହରେ ଥିବା ଫାଇଲ୍ ଖୋଲିପାରିବ ନାହିଁ"</string>
- <string name="toast_failed_delete" msgid="3453846588205817591">"କିଛି ଡକୁମେଣ୍ଟ ଡିଲିଟ୍ କରିହେବ ନାହିଁ"</string>
- <string name="share_via" msgid="8725082736005677161">"ଏହା ମାଧ୍ୟମରେ ଶେୟାର୍ କରନ୍ତୁ"</string>
- <string name="copy_notification_title" msgid="52256435625098456">"ଫାଇଲ୍ଗୁଡ଼ିକ କପୀ କରାଯାଉଛି"</string>
- <string name="compress_notification_title" msgid="6830195148113751021">"ଫାଇଲ୍ ଛୋଟ କରାଯାଉଛି"</string>
- <string name="extract_notification_title" msgid="5067393961754430469">"ଫାଇଲ୍ ଏକ୍ସଟ୍ରାକ୍ଟ କରିବା"</string>
- <string name="move_notification_title" msgid="3173424987049347605">"ଫାଇଲ୍ଗୁଡ଼ିକ ନିଆଯାଉଛି"</string>
- <string name="delete_notification_title" msgid="2512757431856830792">"ଫାଇଲ୍ ଡିଲିଟ୍ କରାଯାଉଛି"</string>
- <string name="copy_remaining" msgid="5390517377265177727">"<xliff:g id="DURATION">%s</xliff:g> ଅବଶିଷ୍ଟ"</string>
- <plurals name="copy_begin" formatted="false" msgid="151184708996738192">
- <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>
- <plurals name="compress_begin" formatted="false" msgid="3534158317098678895">
- <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>
- <plurals name="extract_begin" formatted="false" msgid="1006380679562903749">
- <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>
- <plurals name="move_begin" formatted="false" msgid="1464229874265756956">
- <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>
- <plurals name="deleting" formatted="false" msgid="1729138001178158901">
- <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="undo" msgid="2902438994196400565">"ପୂର୍ବପରି କରନ୍ତୁ"</string>
- <string name="copy_preparing" msgid="4759516490222449324">"ପ୍ରସ୍ତୁତ କରାଯାଉଛି…"</string>
- <string name="compress_preparing" msgid="7401605598969019696">"ପ୍ରସ୍ତୁତ କରାଯାଉଛି…"</string>
- <string name="extract_preparing" msgid="4796626960061745796">"ପ୍ରସ୍ତୁତ କରାଯାଉଛି…"</string>
- <string name="move_preparing" msgid="6504239656430530761">"ପ୍ରସ୍ତୁତ କରାଯାଉଛି…"</string>
- <string name="delete_preparing" msgid="7339349837842802508">"ପ୍ରସ୍ତୁତ କରାଯାଉଛି…"</string>
- <string name="delete_progress" msgid="2627631054702306423">"<xliff:g id="COUNT_0">%1$d</xliff:g> / <xliff:g id="TOTALCOUNT">%2$d</xliff:g>"</string>
- <plurals name="copy_error_notification_title" formatted="false" msgid="3188432450429390963">
- <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>
- <plurals name="compress_error_notification_title" formatted="false" msgid="3043630066678213644">
- <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>
- <plurals name="move_error_notification_title" formatted="false" msgid="2185736082411854754">
- <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>
- <plurals name="delete_error_notification_title" formatted="false" msgid="7568122018481625267">
- <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="2385563502445129570">"ବିବରଣୀ ଦେଖିବା ପାଇଁ ଟାପ୍ କରନ୍ତୁ"</string>
- <string name="close" msgid="905969391788869975">"ବନ୍ଦ କରନ୍ତୁ"</string>
- <plurals name="copy_failure_alert_content" formatted="false" msgid="5570549471912990536">
- <item quantity="other">ଏହି ଫାଇଲ୍ କପୀ କରାଯାଇପାରିଲା ନାହିଁ: <xliff:g id="LIST_1">%1$s</xliff:g></item>
- <item quantity="one">ଏହି ଫାଇଲ୍ କପୀ କରାଯାଇପାରିଲା ନାହିଁ: <xliff:g id="LIST_0">%1$s</xliff:g></item>
- </plurals>
- <plurals name="compress_failure_alert_content" formatted="false" msgid="5760632881868842400">
- <item quantity="other">ଏହି ଫାଇଲଗୁଡ଼ିକ ଛୋଟ କରାଯାଇପାରିଲା ନାହିଁ: <xliff:g id="LIST_1">%1$s</xliff:g></item>
- <item quantity="one">ଏହି ଫାଇଲ୍ ଛୋଟ କରାଯାଇପାରିଲା ନାହିଁ: <xliff:g id="LIST_0">%1$s</xliff:g></item>
- </plurals>
- <plurals name="extract_failure_alert_content" formatted="false" msgid="7572748127571720803">
- <item quantity="other">ଏହି ଫାଇଲଗୁଡ଼ିକ ଏକ୍ସଟ୍ରାକ୍ଟ କରାଯାଇପାରିଲା ନାହିଁ: <xliff:g id="LIST_1">%1$s</xliff:g></item>
- <item quantity="one">ଏହି ଫାଇଲ୍ ଏକ୍ସଟ୍ରାକ୍ଟ କରାଯାଇପାରିଲା ନାହିଁ: <xliff:g id="LIST_0">%1$s</xliff:g></item>
- </plurals>
- <plurals name="move_failure_alert_content" formatted="false" msgid="2747390342670799196">
- <item quantity="other">ଏହି ଫାଇଲଗୁଡ଼ିକ ନିଆଯାଇପାରିଲା ନାହିଁ: <xliff:g id="LIST_1">%1$s</xliff:g></item>
- <item quantity="one">ଏହି ଫାଇଲ୍ ନିଆଯାଇପାରିଲା ନାହିଁ: <xliff:g id="LIST_0">%1$s</xliff:g></item>
- </plurals>
- <plurals name="delete_failure_alert_content" formatted="false" msgid="6122372614839711711">
- <item quantity="other">ଏହି ଫାଇଲଗୁଡ଼ିକ ଡିଲିଟ୍ କରାଯାଇପାରିଲା ନାହିଁ: <xliff:g id="LIST_1">%1$s</xliff:g></item>
- <item quantity="one">ଏହି ଫାଇଲ୍ ଡିଲିଟ୍ କରାଯାଇପାରିଲା ନାହିଁ: <xliff:g id="LIST_0">%1$s</xliff:g></item>
- </plurals>
- <plurals name="copy_converted_warning_content" formatted="false" msgid="7433742181712126588">
- <item quantity="other">ଏହି ଫାଇଲଗୁଡ଼ିକ ଅନ୍ୟ ଫର୍ମାଟରେ ବଦଳାଗଲା: <xliff:g id="LIST_1">%1$s</xliff:g></item>
- <item quantity="one">ଏହି ଫାଇଲ୍ ଅନ୍ୟ ଫର୍ମାଟରେ ବଦଳାଗଲା: <xliff:g id="LIST_0">%1$s</xliff:g></item>
- </plurals>
- <plurals name="clipboard_files_clipped" formatted="false" msgid="4847061634862926902">
- <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="file_operation_rejected" msgid="4301554203329008794">"ଫାଇଲ୍ ଅପରେସନ୍ ସପୋର୍ଟ କଲାନାହିଁ।"</string>
- <string name="file_operation_error" msgid="2234357335716533795">"ଫାଇଲ୍ ଅପରେସନ୍ କରାଯାଇପାରିଲା ନାହିଁ"</string>
- <string name="rename_error" msgid="6700093173508118635">"ଡକୁମେଣ୍ଟର ନାମ ବଦଳାଇବାରେ ବିଫଳ ହେଲା"</string>
- <string name="menu_eject_root" msgid="9215040039374893613">"ବାହାର କରନ୍ତୁ"</string>
- <string name="notification_copy_files_converted_title" msgid="6916768494891833365">"କିଛି ଫାଇଲ୍ ବଦଳାଯାଇଥିଲା"</string>
- <string name="open_external_dialog_request" msgid="8173558471322861268">"<xliff:g id="STORAGE"><i>^3</i></xliff:g>ରେ <xliff:g id="DIRECTORY"><i>^2</i></xliff:g> ଡିରେକ୍ଟୋରୀକୁ <xliff:g id="APPNAME"><b>^1</b></xliff:g>ର ଆକ୍ସେସ୍ ମଞ୍ଜୁରୀ ଦେବେ?"</string>
- <string name="open_external_dialog_request_primary_volume" msgid="2240992164087948176">"<xliff:g id="DIRECTORY"><i>^2</i></xliff:g> ଡିରେକ୍ଟୋରୀକୁ <xliff:g id="APPNAME"><b>^1</b></xliff:g>ର ଆକ୍ସେସ୍ ମଞ୍ଜୁରୀ ଦେବେ?"</string>
- <string name="open_external_dialog_root_request" msgid="6776729293982633">"ଫଟୋ ଓ ଭିଡିଓ ସମେତ <xliff:g id="STORAGE"><i>^2</i></xliff:g>ରେ, ଆପଣଙ୍କ ଡାଟାକୁ <xliff:g id="APPNAME"><b>^1</b></xliff:g>ର ଆକ୍ସେସ୍ ମଞ୍ଜୁରୀ ଦେବେ?"</string>
- <string name="never_ask_again" msgid="525908236522201138">"ପୁଣି ପଚାରନ୍ତୁ ନାହିଁ"</string>
- <string name="allow" msgid="1275746941353040309">"ଅନୁମତି ଦିଅନ୍ତୁ"</string>
- <string name="deny" msgid="5127201668078153379">"ପ୍ରତ୍ୟାଖ୍ୟାନ କରନ୍ତୁ"</string>
- <plurals name="elements_selected" formatted="false" msgid="4448165978637163692">
- <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>
- <plurals name="elements_dragged" formatted="false" msgid="5932571296037626279">
- <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="delete_filename_confirmation_message" msgid="8338069763240613258">"\"<xliff:g id="NAME">%1$s</xliff:g>\" ଡିଲିଟ୍ କରିବେ?"</string>
- <string name="delete_foldername_confirmation_message" msgid="9084085260877704140">"\"<xliff:g id="NAME">%1$s</xliff:g>\" ଫୋଲ୍ଡର୍ ଓ ତାହାର କଣ୍ଟେଣ୍ଟ ଡିଲିଟ୍ କରିବେ?"</string>
- <plurals name="delete_files_confirmation_message" formatted="false" msgid="4866664063250034142">
- <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>
- <plurals name="delete_folders_confirmation_message" formatted="false" msgid="1028946402799686388">
- <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>
- <plurals name="delete_items_confirmation_message" formatted="false" msgid="7285090426511028179">
- <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="images_shortcut_label" msgid="2545168016070493574">"ଇମେଜ୍"</string>
- <string name="archive_loading_failed" msgid="7243436722828766996">"ବ୍ରାଉଜ୍ କରିବା ପାଇଁ ସଂଗ୍ରହ ଖୋଲିପାରିବ ନାହିଁ। ଫାଇଲ୍ ଖରାପ ହୋଇଯାଇଥାଇପାରେ, କିମ୍ବା ଏହାର ଫର୍ମାଟ୍ ସପୋର୍ଟ କରୁନାହିଁ।"</string>
- <string name="name_conflict" msgid="28407269328862986">"ଏହି ନାମରେ ଗୋଟିଏ ଫାଇଲ୍ ପୂର୍ବରୁ ରହିଛି।"</string>
- <string name="authentication_required" msgid="8030880723643436099">"ଏହି ଡିରେକ୍ଟୋରୀ ଦେଖିବାକୁ, <xliff:g id="NAME">%1$s</xliff:g>ରେ ସାଇନ୍ କରନ୍ତୁ"</string>
- <string name="cant_display_content" msgid="8633226333229417237">"ଜଣ୍ଟେଣ୍ଟ ଦେଖାଇ ପାରିବ ନାହିଁ"</string>
- <string name="sign_in" msgid="6253762676723505592">"ସାଇନ୍-ଇନ୍ କରନ୍ତୁ"</string>
- <string name="new_archive_file_name" msgid="1604650338077249838">"ସଂଗ୍ରହ<xliff:g id="EXTENSION">%s</xliff:g>"</string>
- <string name="overwrite_file_confirmation_message" msgid="2496109652768222716">"<xliff:g id="NAME">%1$s</xliff:g>ଙ୍କୁ ବଦଳାଇବେ?"</string>
- <string name="continue_in_background" msgid="1974214559047793331">"ବ୍ୟାକଗ୍ରାଉଣ୍ଡରେ ଜାରିରଖନ୍ତୁ"</string>
-</resources>
diff --git a/src/com/android/documentsui/BaseActivity.java b/src/com/android/documentsui/BaseActivity.java
index a5784de..bab713f 100644
--- a/src/com/android/documentsui/BaseActivity.java
+++ b/src/com/android/documentsui/BaseActivity.java
@@ -383,6 +383,13 @@
&& !root.isRecents();
}
+ /**
+ * Returns true if a directory can be inspected.
+ */
+ protected boolean canInspectDirectory() {
+ return false;
+ }
+
// TODO: make navigator listen to state
@Override
public final void updateNavigator() {
diff --git a/src/com/android/documentsui/MenuManager.java b/src/com/android/documentsui/MenuManager.java
index 01e4619..705c35a 100644
--- a/src/com/android/documentsui/MenuManager.java
+++ b/src/com/android/documentsui/MenuManager.java
@@ -381,5 +381,9 @@
public boolean canCreateDirectory() {
return mActivity.canCreateDirectory();
}
+
+ public boolean canInspectDirectory() {
+ return mActivity.canInspectDirectory();
+ }
}
}
diff --git a/src/com/android/documentsui/ScopedAccessActivity.java b/src/com/android/documentsui/ScopedAccessActivity.java
index 971228f..eca9127 100644
--- a/src/com/android/documentsui/ScopedAccessActivity.java
+++ b/src/com/android/documentsui/ScopedAccessActivity.java
@@ -124,8 +124,9 @@
String directoryName =
getInternalDirectoryName(intent.getStringExtra(EXTRA_DIRECTORY_NAME));
final StorageVolume volume = (StorageVolume) storageVolume;
+ final String uuid = volume.isPrimary() ? null : volume.getUuid();
if (getScopedAccessPermissionStatus(getApplicationContext(), getCallingPackage(),
- volume.getUuid(), directoryName) == PERMISSION_NEVER_ASK) {
+ uuid, directoryName) == PERMISSION_NEVER_ASK) {
logValidScopedAccessRequest(this, directoryName,
SCOPED_DIRECTORY_ACCESS_ALREADY_DENIED);
setResult(RESULT_CANCELED);
@@ -180,7 +181,7 @@
final Bundle args = new Bundle();
args.putString(EXTRA_FILE, file.getAbsolutePath());
args.putString(EXTRA_VOLUME_LABEL, volumeLabel);
- args.putString(EXTRA_VOLUME_UUID, storageVolume.getUuid());
+ args.putString(EXTRA_VOLUME_UUID, isPrimary ? null : storageVolume.getUuid());
args.putString(EXTRA_APP_LABEL, appLabel);
args.putBoolean(EXTRA_IS_ROOT, isRoot);
args.putBoolean(EXTRA_IS_PRIMARY, isPrimary);
diff --git a/src/com/android/documentsui/ScopedAccessProvider.java b/src/com/android/documentsui/ScopedAccessProvider.java
index e98375e..787d21e 100644
--- a/src/com/android/documentsui/ScopedAccessProvider.java
+++ b/src/com/android/documentsui/ScopedAccessProvider.java
@@ -494,7 +494,7 @@
context.grantUriPermission(toPackage, grantedUri, grantFlags);
cr.takePersistableUriPermission(toPackage, grantedUri, persistFlags);
} else {
- context.revokeUriPermission(grantedUri, grantFlags);
+ context.revokeUriPermission(toPackage, grantedUri, grantFlags);
// There's no need to release after revoking
}
}
diff --git a/src/com/android/documentsui/dirlist/DirectoryFragment.java b/src/com/android/documentsui/dirlist/DirectoryFragment.java
index cec9640..e48cf9d 100644
--- a/src/com/android/documentsui/dirlist/DirectoryFragment.java
+++ b/src/com/android/documentsui/dirlist/DirectoryFragment.java
@@ -1117,6 +1117,10 @@
if (!mModel.isLoading()) {
mActivity.notifyDirectoryLoaded(
mModel.doc != null ? mModel.doc.derivedUri : null);
+ if (mModel.doc == null) {
+ // Invalid model, then update options menu to disable some items.
+ mActivity.invalidateOptionsMenu();
+ }
}
}
}
diff --git a/src/com/android/documentsui/files/FilesActivity.java b/src/com/android/documentsui/files/FilesActivity.java
index a6efbb0..f17e175 100644
--- a/src/com/android/documentsui/files/FilesActivity.java
+++ b/src/com/android/documentsui/files/FilesActivity.java
@@ -398,6 +398,11 @@
mInjector.focusManager.focusDocument(doc.documentId);
}
+ @Override
+ protected boolean canInspectDirectory() {
+ return getCurrentDirectory() != null && mInjector.getModel().doc != null;
+ }
+
@CallSuper
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
diff --git a/src/com/android/documentsui/files/MenuManager.java b/src/com/android/documentsui/files/MenuManager.java
index 49ca9a7..e2f39d5 100644
--- a/src/com/android/documentsui/files/MenuManager.java
+++ b/src/com/android/documentsui/files/MenuManager.java
@@ -270,9 +270,7 @@
protected void updateInspect(MenuItem inspect) {
boolean visible = mFeatures.isInspectorEnabled();
inspect.setVisible(visible);
- // use a null check w/ peek instead of isEmpty since
- // DocumentStack accepts null values (not sure why).
- inspect.setEnabled(visible && mState.stack.peek() != null);
+ inspect.setEnabled(visible && mDirDetails.canInspectDirectory());
}
@Override
diff --git a/tests/README b/tests/README
index 9fc4e04..7112376 100644
--- a/tests/README
+++ b/tests/README
@@ -2,6 +2,11 @@
unit tests are under the 'unit/' dir, function under 'functional/'.
+Some of the test cases in functional/ check the file operation among the different storage media.
+Therefore, insert SD Card media to the test device when running this instrumentation test if the
+device has SD Card slot. If SD Card is not inserted or supported, the test creates virtual SD Card
+and uses it instead.
+
To run just small tests"
adb shell am instrument -w -e debug false -e log false -e timeout_msec 300000 -e size small com.android.documentsui.tests/android.support.test.runner.AndroidJUnitRunner
diff --git a/tests/common/com/android/documentsui/DocumentsProviderHelper.java b/tests/common/com/android/documentsui/DocumentsProviderHelper.java
index fc597ea..f0e6d12 100644
--- a/tests/common/com/android/documentsui/DocumentsProviderHelper.java
+++ b/tests/common/com/android/documentsui/DocumentsProviderHelper.java
@@ -336,4 +336,24 @@
public void configure(String args, Bundle configuration) throws RemoteException {
mClient.call("configure", args, configuration);
}
+
+ public List<RootInfo> getRootList() throws RemoteException {
+ List<RootInfo> list = new ArrayList<>();
+ final Uri rootsUri = DocumentsContract.buildRootsUri(mAuthority);
+ Cursor cursor = null;
+ try {
+ cursor = mClient.query(rootsUri, null, null, null, null);
+ while (cursor.moveToNext()) {
+ RootInfo rootInfo = RootInfo.fromRootsCursor(mAuthority, cursor);
+ if (rootInfo != null) {
+ list.add(rootInfo);
+ }
+ }
+ } catch (Exception e) {
+ throw new RuntimeException("Can't load rootInfo list", e);
+ } finally {
+ IoUtils.closeQuietly(cursor);
+ }
+ return list;
+ }
}
diff --git a/tests/common/com/android/documentsui/bots/Bots.java b/tests/common/com/android/documentsui/bots/Bots.java
index 4bc3ed7..430309a 100644
--- a/tests/common/com/android/documentsui/bots/Bots.java
+++ b/tests/common/com/android/documentsui/bots/Bots.java
@@ -45,6 +45,7 @@
public final MenuBot menu;
public final UiBot main;
public final InspectorBot inspector;
+ public final NotificationsBot notifications;
public Bots(UiDevice device, UiAutomation automation, Context context, int timeout) {
main = new UiBot(device, context, TIMEOUT);
@@ -57,6 +58,7 @@
gesture = new GestureBot(device, automation, context, TIMEOUT);
menu = new MenuBot(device, context, TIMEOUT);
inspector = new InspectorBot(device, context, TIMEOUT);
+ notifications = new NotificationsBot(device, context, TIMEOUT);
}
/**
diff --git a/tests/common/com/android/documentsui/bots/NotificationsBot.java b/tests/common/com/android/documentsui/bots/NotificationsBot.java
new file mode 100644
index 0000000..500b630
--- /dev/null
+++ b/tests/common/com/android/documentsui/bots/NotificationsBot.java
@@ -0,0 +1,90 @@
+/*
+ * Copyright (C) 2018 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.bots;
+
+import android.app.Activity;
+import android.content.ContentResolver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.pm.PackageManager.NameNotFoundException;
+import android.provider.Settings;
+import android.support.test.InstrumentationRegistry;
+import android.support.test.uiautomator.UiDevice;
+import android.support.test.uiautomator.UiObjectNotFoundException;
+import android.support.test.uiautomator.UiSelector;
+import android.text.TextUtils;
+import android.view.KeyEvent;
+
+/**
+ * A test helper class for controlling notification items.
+ */
+public class NotificationsBot extends Bots.BaseBot {
+ private static final String SETTINGS_PACKAGE_NAME = "com.android.settings";
+ private static final String allow_res_name = "allow";
+ private static final String turn_off_res_name = "notification_listener_disable_warning_confirm";
+
+ public NotificationsBot(UiDevice device, Context context, int timeout) {
+ super(device, context, timeout);
+ }
+
+ public void setNotificationAccess(Activity activity, boolean enabled)
+ throws UiObjectNotFoundException, NameNotFoundException {
+ Context testContext = InstrumentationRegistry.getContext();
+
+ if(isNotificationAccessEnabled(
+ mContext.getContentResolver(), testContext.getPackageName()) == enabled) {
+ return;
+ }
+
+ Intent intent = new Intent(Settings.ACTION_NOTIFICATION_LISTENER_SETTINGS);
+ activity.startActivity(intent);
+ mDevice.waitForIdle();
+
+ String appName = testContext.getPackageManager().getApplicationLabel(
+ testContext.getApplicationInfo()).toString();
+ clickLabel(appName);
+
+ Context settings_context = mContext.createPackageContext(SETTINGS_PACKAGE_NAME,
+ Context.CONTEXT_RESTRICTED);
+ String label_res_name = enabled ? allow_res_name : turn_off_res_name;
+ int res_id = settings_context.getResources().getIdentifier(label_res_name,
+ "string", SETTINGS_PACKAGE_NAME);
+
+ clickLabel(settings_context.getResources().getString(res_id));
+ mDevice.pressKeyCode(KeyEvent.KEYCODE_BACK);
+ mDevice.waitForIdle();
+ }
+
+ private boolean isNotificationAccessEnabled(ContentResolver resolver, String pkgName) {
+ String listeners = Settings.Secure.getString(resolver, "enabled_notification_listeners");
+ if (!TextUtils.isEmpty(listeners)) {
+ String[] list = listeners.split(":");
+ for(String item : list) {
+ if(item.startsWith(pkgName)) {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
+ private void clickLabel(String label) throws UiObjectNotFoundException {
+ UiSelector selector = new UiSelector().textMatches("(?i)" + label);
+ mDevice.findObject(selector).click();
+ mDevice.waitForIdle();
+ }
+}
diff --git a/tests/common/com/android/documentsui/services/TestNotificationService.java b/tests/common/com/android/documentsui/services/TestNotificationService.java
index d707af1..65af9a0 100644
--- a/tests/common/com/android/documentsui/services/TestNotificationService.java
+++ b/tests/common/com/android/documentsui/services/TestNotificationService.java
@@ -21,6 +21,7 @@
import android.content.Intent;
import android.content.IntentFilter;
import android.content.BroadcastReceiver;
+import android.content.pm.PackageManager.NameNotFoundException;
import android.service.notification.NotificationListenerService;
import android.service.notification.StatusBarNotification;
import android.view.View;
@@ -28,7 +29,7 @@
import android.widget.FrameLayout;
import android.widget.ProgressBar;
import android.widget.RemoteViews;
-
+import android.util.Log;
/**
* This class receives a callback when Notification is posted or removed
@@ -36,6 +37,8 @@
* And, this sends the operation's result by Broadcast.
*/
public class TestNotificationService extends NotificationListenerService {
+ private static final String TAG = "TestNotificationService";
+
public static final String ACTION_CHANGE_CANCEL_MODE =
"com.android.documentsui.services.TestNotificationService.ACTION_CHANGE_CANCEL_MODE";
@@ -45,27 +48,31 @@
public static final String ACTION_OPERATION_RESULT =
"com.android.documentsui.services.TestNotificationService.ACTION_OPERATION_RESULT";
+ public static final String ANDROID_PACKAGENAME = "android";
+
+ public static final String CANCEL_RES_NAME = "cancel";
+
public static final String EXTRA_RESULT =
"com.android.documentsui.services.TestNotificationService.EXTRA_RESULT";
public static final String EXTRA_ERROR_REASON =
"com.android.documentsui.services.TestNotificationService.EXTRA_ERROR_REASON";
+ private final static String DOCUMENTSUI_PACKAGE= "com.android.documentsui";
+
public enum MODE {
CANCEL_MODE,
EXECUTION_MODE;
}
- private String DOCUMENTSUI= "com.android.documentsui";
+ private MODE mCurrentMode = MODE.CANCEL_MODE;
+
+ private boolean mCancelled = false;
private FrameLayout mFrameLayout = null;
private ProgressBar mProgressBar = null;
- private MODE mCurrentMode = MODE.CANCEL_MODE;
-
- private boolean mCancelled = false;
-
private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
@@ -103,19 +110,21 @@
@Override
public void onNotificationPosted(StatusBarNotification sbn) {
String pkgName = sbn.getPackageName();
- if (!pkgName.equals(DOCUMENTSUI)) {
- return;
- }
-
- if (MODE.CANCEL_MODE.equals(mCurrentMode)) {
- mCancelled = doCancel(sbn.getNotification());
+ if (DOCUMENTSUI_PACKAGE.equals(pkgName)) {
+ if (MODE.CANCEL_MODE.equals(mCurrentMode)) {
+ try {
+ mCancelled = doCancel(sbn.getNotification());
+ } catch (Exception e) {
+ Log.d(TAG, "Error occurs when cancel notification.", e);
+ }
+ }
}
}
@Override
public void onNotificationRemoved(StatusBarNotification sbn) {
String pkgName = sbn.getPackageName();
- if (!pkgName.equals(DOCUMENTSUI)) {
+ if (!DOCUMENTSUI_PACKAGE.equals(pkgName)) {
return;
}
@@ -135,7 +144,8 @@
sendBroadcast(intent);
}
- private boolean doCancel(Notification noti) {
+ private boolean doCancel(Notification noti)
+ throws NameNotFoundException, PendingIntent.CanceledException {
if (!isStartProgress(noti)) {
return false;
}
@@ -147,12 +157,15 @@
boolean result = false;
for (Notification.Action item : aList) {
- if (item.title.equals("Cancel")) {
- try {
- item.actionIntent.send();
- result = true;
- } catch (PendingIntent.CanceledException e) {
- }
+ Context android_context = getBaseContext().createPackageContext(ANDROID_PACKAGENAME,
+ Context.CONTEXT_RESTRICTED);
+ int res_id = android_context.getResources().getIdentifier(CANCEL_RES_NAME,
+ "string", ANDROID_PACKAGENAME);
+ final String cancel_label = android_context.getResources().getString(res_id);
+
+ if (cancel_label.equals(item.title)) {
+ item.actionIntent.send();
+ result = true;
}
}
return result;
@@ -208,4 +221,3 @@
return result;
}
}
-
diff --git a/tests/common/com/android/documentsui/testing/TestDirectoryDetails.java b/tests/common/com/android/documentsui/testing/TestDirectoryDetails.java
index a1b29cd..2841677 100644
--- a/tests/common/com/android/documentsui/testing/TestDirectoryDetails.java
+++ b/tests/common/com/android/documentsui/testing/TestDirectoryDetails.java
@@ -28,6 +28,7 @@
public boolean hasItemsToPaste;
public boolean canCreateDoc;
public boolean canCreateDirectory;
+ public boolean canInspectDirectory;
public TestDirectoryDetails() {
super(null);
@@ -57,4 +58,9 @@
public boolean canCreateDirectory() {
return canCreateDirectory;
}
+
+ @Override
+ public boolean canInspectDirectory() {
+ return canInspectDirectory;
+ }
}
\ No newline at end of file
diff --git a/tests/functional/com/android/documentsui/CancelFromNotificationUiTest.java b/tests/functional/com/android/documentsui/CancelFromNotificationUiTest.java
index 7a39c98..3351308 100644
--- a/tests/functional/com/android/documentsui/CancelFromNotificationUiTest.java
+++ b/tests/functional/com/android/documentsui/CancelFromNotificationUiTest.java
@@ -20,29 +20,18 @@
import static com.android.documentsui.StubProvider.ROOT_0_ID;
import static com.android.documentsui.StubProvider.ROOT_1_ID;
-import static android.provider.DocumentsContract.buildDocumentUri;
-import android.provider.DocumentsContract;
-import com.android.documentsui.archives.ResourcesProvider;
-
-import android.content.ComponentName;
+import android.content.BroadcastReceiver;
import android.content.Context;
-import android.content.ContentResolver;
import android.content.Intent;
import android.content.IntentFilter;
-import android.content.BroadcastReceiver;
import android.net.Uri;
import android.os.Bundle;
import android.os.RemoteException;
-import android.provider.Settings;
import android.support.test.filters.LargeTest;
-import android.support.test.filters.Suppress;
-import android.text.TextUtils;
-import android.view.KeyEvent;
import android.util.Log;
import com.android.documentsui.files.FilesActivity;
import com.android.documentsui.services.TestNotificationService;
-import com.android.documentsui.R;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
@@ -54,21 +43,13 @@
*/
@LargeTest
public class CancelFromNotificationUiTest extends ActivityTest<FilesActivity> {
- private static final String PACKAGE_NAME = "com.android.documentsui.tests";
+ private static final String TAG = "CancelFromNotificationUiTest";
private static final String TARGET_FILE = "dummy.data";
private static final int BUFFER_SIZE = 10 * 1024 * 1024;
- private static final String ACCESS_APP_NAME = "DocumentsUI Tests";
-
- private static final String ALLOW = "ALLOW";
-
- private static final String TURN_OFF = "TURN OFF";
-
- private static final String COPY = "Copy to…";
-
- private static final String MOVE = "Move to…";
+ private static final int WAIT_TIME_SECONDS = 60;
private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
@Override
@@ -106,6 +87,12 @@
bundle.putLong(EXTRA_SIZE, 500L);
mDocsHelper.configure(null, bundle);
+ try {
+ bots.notifications.setNotificationAccess(getActivity(), true);
+ } catch (Exception e) {
+ Log.d(TAG, "Cannot set notification access. ", e);
+ }
+
initTestFiles();
IntentFilter filter = new IntentFilter();
@@ -126,11 +113,9 @@
context.unregisterReceiver(mReceiver);
try {
- if (isEnableAccessNotification()) {
- disallowNotificationAccess();
- }
+ bots.notifications.setNotificationAccess(getActivity(), false);
} catch (Exception e) {
- // ignore
+ Log.d(TAG, "Cannot set notification access. ", e);
}
super.tearDown();
}
@@ -138,9 +123,6 @@
@Override
public void initTestFiles() throws RemoteException {
try {
- if (!isEnableAccessNotification()) {
- allowNotificationAccess();
- }
createDummyFile();
} catch (Exception e) {
fail("Initialization failed. " + e.toString());
@@ -158,57 +140,16 @@
}
}
- private void allowNotificationAccess() throws Exception {
- Intent intent = new Intent();
- intent.setAction(Settings.ACTION_NOTIFICATION_LISTENER_SETTINGS);
- getActivity().startActivity(intent);
- device.waitForIdle();
-
- bots.main.findMenuLabelWithName(ACCESS_APP_NAME).click();
- device.waitForIdle();
-
- bots.main.findMenuLabelWithName(ALLOW).click();
- bots.keyboard.pressKey(KeyEvent.KEYCODE_BACK);
- }
-
- private void disallowNotificationAccess() throws Exception {
- Intent intent = new Intent();
- intent.setAction(Settings.ACTION_NOTIFICATION_LISTENER_SETTINGS);
- getActivity().startActivity(intent);
- device.waitForIdle();
-
- bots.main.findMenuLabelWithName(ACCESS_APP_NAME).click();
- device.waitForIdle();
-
- bots.main.findMenuLabelWithName(TURN_OFF).click();
- bots.keyboard.pressKey(KeyEvent.KEYCODE_BACK);
- }
-
- private boolean isEnableAccessNotification() {
- ContentResolver resolver = getActivity().getContentResolver();
- String listeners = Settings.Secure.getString(resolver,"enabled_notification_listeners");
-
- if (!TextUtils.isEmpty(listeners)) {
- String[] list = listeners.split(":");
- for(String item : list) {
- if(item.startsWith(PACKAGE_NAME)) {
- return true;
- }
- }
- }
- return false;
- }
-
public void testCopyDocument_Cancel() throws Exception {
bots.roots.openRoot(ROOT_0_ID);
bots.directory.findDocument(TARGET_FILE);
device.waitForIdle();
- bots.directory.selectDocument(TARGET_FILE);
+ bots.directory.selectDocument(TARGET_FILE, 1);
device.waitForIdle();
- bots.main.clickToolbarOverflowItem(COPY);
+ bots.main.clickToolbarOverflowItem(context.getResources().getString(R.string.menu_copy));
device.waitForIdle();
bots.main.clickDialogCancelButton();
@@ -222,10 +163,10 @@
bots.directory.findDocument(TARGET_FILE);
device.waitForIdle();
- bots.directory.selectDocument(TARGET_FILE);
+ bots.directory.selectDocument(TARGET_FILE, 1);
device.waitForIdle();
- bots.main.clickToolbarOverflowItem(COPY);
+ bots.main.clickToolbarOverflowItem(context.getResources().getString(R.string.menu_copy));
device.waitForIdle();
bots.roots.openRoot(ROOT_1_ID);
@@ -233,7 +174,7 @@
device.waitForIdle();
try {
- mCountDownLatch.await(60, TimeUnit.SECONDS);
+ mCountDownLatch.await(WAIT_TIME_SECONDS, TimeUnit.SECONDS);
} catch (Exception e) {
fail("Cannot wait because of error." + e.toString());
}
@@ -255,10 +196,10 @@
bots.directory.findDocument(TARGET_FILE);
device.waitForIdle();
- bots.directory.selectDocument(TARGET_FILE);
+ bots.directory.selectDocument(TARGET_FILE, 1);
device.waitForIdle();
- bots.main.clickToolbarOverflowItem(MOVE);
+ bots.main.clickToolbarOverflowItem(context.getResources().getString(R.string.menu_move));
device.waitForIdle();
bots.main.clickDialogCancelButton();
@@ -272,10 +213,10 @@
bots.directory.findDocument(TARGET_FILE);
device.waitForIdle();
- bots.directory.selectDocument(TARGET_FILE);
+ bots.directory.selectDocument(TARGET_FILE, 1);
device.waitForIdle();
- bots.main.clickToolbarOverflowItem(MOVE);
+ bots.main.clickToolbarOverflowItem(context.getResources().getString(R.string.menu_move));
device.waitForIdle();
bots.roots.openRoot(ROOT_1_ID);
@@ -283,7 +224,7 @@
device.waitForIdle();
try {
- mCountDownLatch.await(60, TimeUnit.SECONDS);
+ mCountDownLatch.await(WAIT_TIME_SECONDS, TimeUnit.SECONDS);
} catch (Exception e) {
fail("Cannot wait because of error." + e.toString());
}
diff --git a/tests/functional/com/android/documentsui/FileCopyUiTest.java b/tests/functional/com/android/documentsui/FileCopyUiTest.java
index 468e460..c0cd84f 100644
--- a/tests/functional/com/android/documentsui/FileCopyUiTest.java
+++ b/tests/functional/com/android/documentsui/FileCopyUiTest.java
@@ -16,60 +16,54 @@
package com.android.documentsui;
-import static com.android.documentsui.StubProvider.ROOT_0_ID;
-import static com.android.documentsui.StubProvider.ROOT_1_ID;
+import static com.android.documentsui.base.Providers.AUTHORITY_STORAGE;
+import static com.android.documentsui.base.Providers.ROOT_ID_DEVICE;
+import android.content.BroadcastReceiver;
import android.content.Context;
-import android.content.ContentResolver;
+import android.content.ContentProviderClient;
import android.content.Intent;
import android.content.IntentFilter;
-import android.content.BroadcastReceiver;
+import android.content.res.Resources;
import android.net.Uri;
+import android.os.Build;
import android.os.Bundle;
import android.os.RemoteException;
+import android.os.SystemClock;
import android.provider.Settings;
import android.support.test.filters.LargeTest;
-import android.support.test.filters.Suppress;
-import android.support.test.uiautomator.Configurator;
import android.text.TextUtils;
-import android.view.KeyEvent;
-import android.view.MotionEvent;
+import android.util.Log;
import com.android.documentsui.base.DocumentInfo;
+import com.android.documentsui.base.RootInfo;
+import com.android.documentsui.base.State;
import com.android.documentsui.files.FilesActivity;
import com.android.documentsui.services.TestNotificationService;
-import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.CountDownLatch;
-import java.util.concurrent.RejectedExecutionException;
-import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
+import java.util.HashMap;
import java.util.List;
-import java.util.ArrayList;
+import java.util.Map;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipInputStream;
/**
* This class test the below points
-* - Copy large number of files
+* - Copy large number of files on the internal/external storage
*/
@LargeTest
public class FileCopyUiTest extends ActivityTest<FilesActivity> {
- private static final String PACKAGE_NAME = "com.android.documentsui.tests";
+ private static final String TAG = "FileCopyUiTest";
- private static final String ACCESS_APP_NAME = "DocumentsUI Tests";
+ private static final String TARGET_FOLDER = "test_folder";
- private static final String ALLOW = "ALLOW";
+ private static final int TARGET_COUNT = 1000;
- private static final String TURN_OFF = "TURN OFF";
+ private static final int WAIT_TIME_SECONDS = 180;
- private static final String COPY = "Copy to…";
-
- private static final String MOVE = "Move to…";
-
- private static final String SELECT_ALL = "Select all";
-
- private static final int DUMMY_FILE_COUNT = 1000;
-
- private final List<String> mCopyFileList = new ArrayList<String>();
+ private final Map<String, Long> mTargetFileList = new HashMap<String, Long>();
private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
@Override
@@ -93,6 +87,18 @@
private String mErrorReason;
+ private DocumentsProviderHelper mStorageDocsHelper;
+
+ private RootInfo mPrimaryRoot;
+
+ private RootInfo mSdCardRoot;
+
+ private String mSdCardLabel;
+
+ private boolean mIsVirtualSdCard;
+
+ private int mPreTestStayAwakeValue;
+
public FileCopyUiTest() {
super(FilesActivity.class);
}
@@ -101,12 +107,33 @@
public void setUp() throws Exception {
super.setUp();
+ // Create ContentProviderClient and DocumentsProviderHelper for using SD Card.
+ ContentProviderClient storageClient =
+ mResolver.acquireUnstableContentProviderClient(AUTHORITY_STORAGE);
+ mStorageDocsHelper = new DocumentsProviderHelper(AUTHORITY_STORAGE, storageClient);
+
// Set a flag to prevent many refreshes.
Bundle bundle = new Bundle();
bundle.putBoolean(StubProvider.EXTRA_ENABLE_ROOT_NOTIFICATION, false);
mDocsHelper.configure(null, bundle);
- initTestFiles();
+ // Set "Stay awake" until test is finished.
+ mPreTestStayAwakeValue = Settings.Global.getInt(context.getContentResolver(),
+ Settings.Global.STAY_ON_WHILE_PLUGGED_IN);
+ device.executeShellCommand("settings put global stay_on_while_plugged_in 3");
+
+ // If Internal Storage is not shown, turn on.
+ State state = ((FilesActivity) getActivity()).getDisplayState();
+ if (!state.showAdvanced) {
+ bots.main.clickToolbarOverflowItem(
+ context.getResources().getString(R.string.menu_advanced_show));
+ }
+
+ try {
+ bots.notifications.setNotificationAccess(getActivity(), true);
+ } catch (Exception e) {
+ Log.d(TAG, "Cannot set notification access. ", e);
+ }
IntentFilter filter = new IntentFilter();
filter.addAction(TestNotificationService.ACTION_OPERATION_RESULT);
@@ -116,134 +143,269 @@
mOperationExecuted = false;
mErrorReason = "No response from Notification";
- mCountDownLatch = new CountDownLatch(1);
+
+ initStorageRootInfo();
+ assertNotNull("Internal Storage not found", mPrimaryRoot);
+
+ // If SD Card is not found, enable Virtual SD Card
+ if (mSdCardRoot == null) {
+ mIsVirtualSdCard = enableVirtualSdCard();
+ assertTrue("Cannot set virtual SD Card", mIsVirtualSdCard);
+ // Call initStorageRootInfo() again for setting SD Card root
+ initStorageRootInfo();
+ }
}
@Override
public void tearDown() throws Exception {
- mCountDownLatch.countDown();
- mCountDownLatch = null;
+ // Delete created files
+ deleteDocuments(Build.MODEL);
+ deleteDocuments(mSdCardLabel);
+
+ if (mIsVirtualSdCard) {
+ device.executeShellCommand("sm set-virtual-disk false");
+ }
+
+ device.executeShellCommand("settings put global stay_on_while_plugged_in "
+ + mPreTestStayAwakeValue);
context.unregisterReceiver(mReceiver);
try {
- if (isEnableAccessNotification()) {
- disallowNotificationAccess();
- }
+ bots.notifications.setNotificationAccess(getActivity(), false);
} catch (Exception e) {
- // ignore
+ Log.d(TAG, "Cannot set notification access. ", e);
}
+
super.tearDown();
}
- @Override
- public void initTestFiles() throws RemoteException {
- try {
- if (!isEnableAccessNotification()) {
- allowNotificationAccess();
- }
- createDummyFiles();
- } catch (Exception e) {
- fail("Initialization failed");
+ private boolean createDocuments(String label, RootInfo root,
+ DocumentsProviderHelper helper) throws Exception {
+ if (TextUtils.isEmpty(label) || root == null) {
+ return false;
}
- }
- private void createDummyFiles() throws Exception {
- final ThreadPoolExecutor exec = new ThreadPoolExecutor(
- 5, 5, 1000L, TimeUnit.MILLISECONDS,
- new ArrayBlockingQueue<Runnable>(100, true));
- for (int i = 0; i < DUMMY_FILE_COUNT; i++) {
- final String fileName = "file" + String.format("%04d", i) + ".log";
- if (exec.getQueue().size() >= 80) {
- Thread.sleep(50);
- }
- exec.submit(new Runnable() {
- @Override
- public void run() {
- Uri uri = mDocsHelper.createDocument(rootDir0, "text/plain", fileName);
- try {
- mDocsHelper.writeDocument(uri, new byte[1]);
- } catch (Exception e) {
- // ignore
- }
- }
- });
- mCopyFileList.add(fileName);
+ // If Test folder is already created, delete it
+ if (bots.directory.hasDocuments(TARGET_FOLDER)) {
+ deleteDocuments(label);
}
- exec.shutdown();
- }
- private void allowNotificationAccess() throws Exception {
- Intent intent = new Intent();
- intent.setAction(Settings.ACTION_NOTIFICATION_LISTENER_SETTINGS);
- getActivity().startActivity(intent);
+ // Create folder and create file in its folder
+ bots.roots.openRoot(label);
+ Uri uri = helper.createFolder(root, TARGET_FOLDER);
device.waitForIdle();
-
- bots.main.findMenuLabelWithName(ACCESS_APP_NAME).click();
- device.waitForIdle();
-
- bots.main.findMenuLabelWithName(ALLOW).click();
- bots.keyboard.pressKey(KeyEvent.KEYCODE_BACK);
- }
-
- private void disallowNotificationAccess() throws Exception {
- Intent intent = new Intent();
- intent.setAction(Settings.ACTION_NOTIFICATION_LISTENER_SETTINGS);
- getActivity().startActivity(intent);
- device.waitForIdle();
-
- bots.main.findMenuLabelWithName(ACCESS_APP_NAME).click();
- device.waitForIdle();
-
- bots.main.findMenuLabelWithName(TURN_OFF).click();
- bots.keyboard.pressKey(KeyEvent.KEYCODE_BACK);
- }
-
- private boolean isEnableAccessNotification() {
- ContentResolver resolver = getActivity().getContentResolver();
- String listeners = Settings.Secure.getString(
- resolver,"enabled_notification_listeners");
- if (!TextUtils.isEmpty(listeners)) {
- String[] list = listeners.split(":");
- for(String item : list) {
- if(item.startsWith(PACKAGE_NAME)) {
- return true;
- }
- }
+ if (!bots.directory.hasDocuments(TARGET_FOLDER)) {
+ return false;
}
- return false;
+
+ loadImages(uri, helper);
+
+ // Check that image files are loaded completely
+ DocumentInfo parent = helper.findDocument(root.documentId, TARGET_FOLDER);
+ List<DocumentInfo> children = helper.listChildren(parent.documentId, TARGET_COUNT);
+ for (DocumentInfo docInfo : children) {
+ mTargetFileList.put(docInfo.displayName, docInfo.size);
+ }
+ assertTrue("Lack of loading file. File count = " + mTargetFileList.size(),
+ mTargetFileList.size() == TARGET_COUNT);
+
+ return true;
}
- public void testCopyAllDocument() throws Exception {
- bots.roots.openRoot(ROOT_0_ID);
- bots.main.clickToolbarOverflowItem(SELECT_ALL);
+ private boolean deleteDocuments(String label) throws Exception {
+ if (TextUtils.isEmpty(label)) {
+ return false;
+ }
+
+ bots.roots.openRoot(label);
+ if (!bots.directory.hasDocuments(TARGET_FOLDER)) {
+ return true;
+ }
+
+ bots.directory.selectDocument(TARGET_FOLDER, 1);
device.waitForIdle();
- bots.main.clickToolbarOverflowItem(COPY);
- device.waitForIdle();
-
- bots.roots.openRoot(ROOT_1_ID);
+ bots.main.clickToolbarItem(R.id.action_menu_delete);
bots.main.clickDialogOkButton();
device.waitForIdle();
+ bots.directory.findDocument(TARGET_FOLDER).waitUntilGone(WAIT_TIME_SECONDS);
+ return !bots.directory.hasDocuments(TARGET_FOLDER);
+ }
+
+ private void loadImages(Uri root, DocumentsProviderHelper helper) throws Exception {
+ Context testContext = getInstrumentation().getContext();
+ Resources res = testContext.getResources();
try {
- mCountDownLatch.await(60, TimeUnit.SECONDS);
+ int resId = res.getIdentifier(
+ "uitest_images", "raw", testContext.getPackageName());
+ loadImageFromResources(root, helper, resId, res);
+ } catch (Exception e) {
+ Log.d(TAG, "Error occurs when loading image. ", e);
+ }
+ }
+
+ private void loadImageFromResources(Uri root, DocumentsProviderHelper helper, int resId,
+ Resources res) throws Exception {
+ ZipInputStream in = null;
+ int read = 0;
+ int count = 0;
+ try {
+ in = new ZipInputStream(res.openRawResource(resId));
+ ZipEntry zipEntry = null;
+ while ((zipEntry = in.getNextEntry()) != null && (count++ < TARGET_COUNT)) {
+ String fileName = zipEntry.getName();
+ Uri uri = helper.createDocument(root, "image/png", fileName);
+ byte[] buff = new byte[1024];
+ while ((read = in.read(buff)) > 0) {
+ helper.writeAppendDocument(uri, buff);
+ }
+ in.closeEntry();
+ buff = null;
+ }
+ } finally {
+ if (in != null) {
+ try {
+ in.close();
+ in = null;
+ } catch (Exception e) {
+ Log.d(TAG, "Error occurs when close ZipInputStream. ", e);
+ }
+ }
+ }
+ }
+
+ /** @return true if virtual SD Card setting is completed. Othrewise false */
+ private boolean enableVirtualSdCard() throws Exception {
+ boolean result = false;
+ try {
+ device.executeShellCommand("sm set-virtual-disk true");
+ String diskId = getAdoptionDisk();
+ assertNotNull("Failed to setup virtual disk.", diskId);
+ device.executeShellCommand(String.format("sm partition %s public", diskId));
+ result = waitForPublicVolume();
+ } catch (Exception e) {
+ result = false;
+ }
+ return result;
+ }
+
+ private String getAdoptionDisk() throws Exception {
+ int attempt = 0;
+ String disks = device.executeShellCommand("sm list-disks adoptable");
+ while ((disks == null || disks.isEmpty()) && attempt++ < 15) {
+ SystemClock.sleep(1000);
+ disks = device.executeShellCommand("sm list-disks adoptable");
+ }
+
+ if (disks == null || disks.isEmpty()) {
+ return null;
+ }
+ return disks.split("\n")[0].trim();
+ }
+
+ private boolean waitForPublicVolume() throws Exception {
+ int attempt = 0;
+ String volumes = device.executeShellCommand("sm list-volumes public");
+ while ((volumes == null || volumes.isEmpty() || !volumes.contains("mounted"))
+ && attempt++ < 15) {
+ SystemClock.sleep(1000);
+ volumes = device.executeShellCommand("sm list-volumes public");
+ }
+
+ if (volumes == null || volumes.isEmpty()) {
+ return false;
+ }
+ return true;
+ }
+
+ private void initStorageRootInfo() throws RemoteException {
+ List<RootInfo> rootList = mStorageDocsHelper.getRootList();
+ for (RootInfo info : rootList) {
+ if (ROOT_ID_DEVICE.equals(info.rootId)) {
+ mPrimaryRoot = info;
+ } else if (info.isSd()) {
+ mSdCardRoot = info;
+ mSdCardLabel = info.title;
+ }
+ }
+ }
+
+ private void copyFiles(String sourceRoot, String targetRoot) throws Exception {
+ mCountDownLatch = new CountDownLatch(1);
+ // Copy folder and child files
+ bots.roots.openRoot(sourceRoot);
+ bots.directory.selectDocument(TARGET_FOLDER, 1);
+ device.waitForIdle();
+ bots.main.clickToolbarOverflowItem(context.getResources().getString(R.string.menu_copy));
+ device.waitForIdle();
+ bots.roots.openRoot(targetRoot);
+ bots.main.clickDialogOkButton();
+ device.waitForIdle();
+
+ // Wait until copy operation finished
+ try {
+ mCountDownLatch.await(WAIT_TIME_SECONDS, TimeUnit.SECONDS);
} catch (Exception e) {
fail("Cannot wait because of error." + e.toString());
}
assertTrue(mErrorReason, mOperationExecuted);
+ }
- bots.roots.openRoot(ROOT_1_ID);
+ private void assertFilesCopied(String rootLabel, RootInfo rootInfo,
+ DocumentsProviderHelper helper) throws Exception {
+ // Check that copied folder exists
+ bots.roots.openRoot(rootLabel);
device.waitForIdle();
+ bots.directory.assertDocumentsPresent(TARGET_FOLDER);
- List<DocumentInfo> root1 = mDocsHelper.listChildren(rootDir1.documentId, 1000);
- List<String> copiedFileList = new ArrayList<String>();
- for (DocumentInfo info : root1) {
- copiedFileList.add(info.displayName);
+ // Check that copied files exist
+ DocumentInfo parent = helper.findDocument(rootInfo.documentId, TARGET_FOLDER);
+ List<DocumentInfo> children = helper.listChildren(parent.documentId, TARGET_COUNT);
+ for (DocumentInfo info : children) {
+ Long size = mTargetFileList.get(info.displayName);
+ assertNotNull("Cannot find file.", size);
+ assertTrue("Copied file contents differ.", info.size == size);
}
+ }
- for (String name : mCopyFileList) {
- assertTrue("Not found " + name, copiedFileList.contains(name));
- }
+ // Copy Internal Storage -> Internal Storage //
+ public void testCopyDocuments_InternalStorage() throws Exception {
+ createDocuments(StubProvider.ROOT_0_ID, rootDir0, mDocsHelper);
+ copyFiles(StubProvider.ROOT_0_ID, StubProvider.ROOT_1_ID);
+
+ // Check that original folder exists
+ bots.roots.openRoot(StubProvider.ROOT_0_ID);
+ bots.directory.assertDocumentsPresent(TARGET_FOLDER);
+
+ // Check that copied files exist
+ assertFilesCopied(StubProvider.ROOT_1_ID, rootDir1, mDocsHelper);
+ }
+
+ // Copy SD Card -> Internal Storage //
+ public void testCopyDocuments_FromSdCard() throws Exception {
+ createDocuments(mSdCardLabel, mSdCardRoot, mStorageDocsHelper);
+ copyFiles(mSdCardLabel, Build.MODEL);
+
+ // Check that original folder exists
+ bots.roots.openRoot(mSdCardLabel);
+ bots.directory.assertDocumentsPresent(TARGET_FOLDER);
+
+ // Check that copied files exist
+ assertFilesCopied(Build.MODEL, mPrimaryRoot, mStorageDocsHelper);
+ }
+
+ // Copy Internal Storage -> SD Card //
+ public void testCopyDocuments_ToSdCard() throws Exception {
+ createDocuments(Build.MODEL, mPrimaryRoot, mStorageDocsHelper);
+ copyFiles(Build.MODEL, mSdCardLabel);
+
+ // Check that original folder exists
+ bots.roots.openRoot(Build.MODEL);
+ bots.directory.assertDocumentsPresent(TARGET_FOLDER);
+
+ // Check that copied files exist
+ assertFilesCopied(mSdCardLabel, mSdCardRoot, mStorageDocsHelper);
}
}
diff --git a/tests/functional/com/android/documentsui/FileDeleteUiTest.java b/tests/functional/com/android/documentsui/FileDeleteUiTest.java
index 0caa0c4..fbeaf34 100644
--- a/tests/functional/com/android/documentsui/FileDeleteUiTest.java
+++ b/tests/functional/com/android/documentsui/FileDeleteUiTest.java
@@ -17,23 +17,16 @@
package com.android.documentsui;
import static com.android.documentsui.StubProvider.ROOT_0_ID;
-import static com.android.documentsui.StubProvider.ROOT_1_ID;
+import android.content.BroadcastReceiver;
import android.content.Context;
-import android.content.ContentResolver;
import android.content.Intent;
import android.content.IntentFilter;
-import android.content.BroadcastReceiver;
import android.net.Uri;
import android.os.Bundle;
import android.os.RemoteException;
-import android.provider.Settings;
import android.support.test.filters.LargeTest;
-import android.support.test.filters.Suppress;
-import android.support.test.uiautomator.Configurator;
-import android.text.TextUtils;
-import android.view.KeyEvent;
-import android.view.MotionEvent;
+import android.util.Log;
import com.android.documentsui.base.DocumentInfo;
import com.android.documentsui.files.FilesActivity;
@@ -41,7 +34,6 @@
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.CountDownLatch;
-import java.util.concurrent.RejectedExecutionException;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
import java.util.List;
@@ -53,22 +45,12 @@
*/
@LargeTest
public class FileDeleteUiTest extends ActivityTest<FilesActivity> {
- private static final String PACKAGE_NAME = "com.android.documentsui.tests";
-
- private static final String ACCESS_APP_NAME = "DocumentsUI Tests";
-
- private static final String ALLOW = "ALLOW";
-
- private static final String TURN_OFF = "TURN OFF";
-
- private static final String COPY = "Copy to…";
-
- private static final String MOVE = "Move to…";
-
- private static final String SELECT_ALL = "Select all";
+ private static final String TAG = "FileDeleteUiTest";
private static final int DUMMY_FILE_COUNT = 1000;
+ private static final int WAIT_TIME_SECONDS = 60;
+
private final List<String> mCopyFileList = new ArrayList<String>();
private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
@@ -106,6 +88,12 @@
bundle.putBoolean(StubProvider.EXTRA_ENABLE_ROOT_NOTIFICATION, false);
mDocsHelper.configure(null, bundle);
+ try {
+ bots.notifications.setNotificationAccess(getActivity(), true);
+ } catch (Exception e) {
+ Log.d(TAG, "Cannot set notification access. ", e);
+ }
+
initTestFiles();
IntentFilter filter = new IntentFilter();
@@ -126,11 +114,9 @@
context.unregisterReceiver(mReceiver);
try {
- if (isEnableAccessNotification()) {
- disallowNotificationAccess();
- }
+ bots.notifications.setNotificationAccess(getActivity(), false);
} catch (Exception e) {
- // ignore
+ Log.d(TAG, "Cannot set notification access. ", e);
}
super.tearDown();
}
@@ -138,9 +124,6 @@
@Override
public void initTestFiles() throws RemoteException {
try {
- if (!isEnableAccessNotification()) {
- allowNotificationAccess();
- }
createDummyFiles();
} catch (Exception e) {
fail("Initialization failed");
@@ -172,50 +155,10 @@
exec.shutdown();
}
- private void allowNotificationAccess() throws Exception {
- Intent intent = new Intent();
- intent.setAction(Settings.ACTION_NOTIFICATION_LISTENER_SETTINGS);
- getActivity().startActivity(intent);
- device.waitForIdle();
-
- bots.main.findMenuLabelWithName(ACCESS_APP_NAME).click();
- device.waitForIdle();
-
- bots.main.findMenuLabelWithName(ALLOW).click();
- bots.keyboard.pressKey(KeyEvent.KEYCODE_BACK);
- }
-
- private void disallowNotificationAccess() throws Exception {
- Intent intent = new Intent();
- intent.setAction(Settings.ACTION_NOTIFICATION_LISTENER_SETTINGS);
- getActivity().startActivity(intent);
- device.waitForIdle();
-
- bots.main.findMenuLabelWithName(ACCESS_APP_NAME).click();
- device.waitForIdle();
-
- bots.main.findMenuLabelWithName(TURN_OFF).click();
- bots.keyboard.pressKey(KeyEvent.KEYCODE_BACK);
- }
-
- private boolean isEnableAccessNotification() {
- ContentResolver resolver = getActivity().getContentResolver();
- String listeners = Settings.Secure.getString(
- resolver,"enabled_notification_listeners");
- if (!TextUtils.isEmpty(listeners)) {
- String[] list = listeners.split(":");
- for(String item : list) {
- if(item.startsWith(PACKAGE_NAME)) {
- return true;
- }
- }
- }
- return false;
- }
-
public void testDeleteAllDocument() throws Exception {
bots.roots.openRoot(ROOT_0_ID);
- bots.main.clickToolbarOverflowItem(SELECT_ALL);
+ bots.main.clickToolbarOverflowItem(
+ context.getResources().getString(R.string.menu_select_all));
device.waitForIdle();
bots.main.clickToolbarItem(R.id.action_menu_delete);
@@ -223,7 +166,7 @@
device.waitForIdle();
try {
- mCountDownLatch.await(60, TimeUnit.SECONDS);
+ mCountDownLatch.await(WAIT_TIME_SECONDS, TimeUnit.SECONDS);
} catch (Exception e) {
fail("Cannot wait because of error." + e.toString());
}
diff --git a/tests/res/raw/uitest_images.zip b/tests/res/raw/uitest_images.zip
new file mode 100644
index 0000000..33186e4
--- /dev/null
+++ b/tests/res/raw/uitest_images.zip
Binary files differ
diff --git a/tests/unit/com/android/documentsui/files/MenuManagerTest.java b/tests/unit/com/android/documentsui/files/MenuManagerTest.java
index 9e638ad..c30d572 100644
--- a/tests/unit/com/android/documentsui/files/MenuManagerTest.java
+++ b/tests/unit/com/android/documentsui/files/MenuManagerTest.java
@@ -420,46 +420,22 @@
@Test
public void testOptionMenu_Inspector_VisibleAndEnabled() {
features.inspector = true;
+ dirDetails.canInspectDirectory = true;
mgr.updateOptionMenu(testMenu);
optionInspector.assertVisible();
optionInspector.assertEnabled();
}
@Test
- public void testOptionMenu_Inspector_DisabledInRecentsFolder() {
+ public void testOptionMenu_Inspector_VisibleButDisabled() {
features.inspector = true;
-
- // synthesize a fake recents root. Not setting an authority or id == recents.
- RootInfo recents = new RootInfo();
- assert recents.isRecents();
- state.stack.changeRoot(recents);
+ dirDetails.canInspectDirectory = false;
mgr.updateOptionMenu(testMenu);
optionInspector.assertVisible();
optionInspector.assertDisabled();
}
@Test
- public void testOptionMenu_Inspector_DisabledForEmptyStack() {
- features.inspector = true;
- state.stack.reset(); // unset cwd
- mgr.updateOptionMenu(testMenu);
-
- optionInspector.assertVisible();
- optionInspector.assertDisabled();
- }
-
- @Test
- public void testOptionMenu_Inspector_DisabledForNullDirectory() {
- features.inspector = true;
- state.stack.reset();
- state.stack.push(null);
- mgr.updateOptionMenu(testMenu);
-
- optionInspector.assertVisible();
- optionInspector.assertDisabled();
- }
-
- @Test
public void testInflateContextMenu_Files() {
TestMenuInflater inflater = new TestMenuInflater();
@@ -633,6 +609,8 @@
@Test
public void testContextMenu_CanInspectContainer() {
+ features.inspector = true;
+ dirDetails.canInspectDirectory = true;
mgr.updateContextMenuForContainer(testMenu);
dirInspect.assertVisible();
dirInspect.assertEnabled();