Delete orig DocumentsUI.
Bug: 29224737
Change-Id: I6d6327918adba699d2ed3652bc2dbea27f872284
diff --git a/packages/DocumentsUI/Android.mk b/packages/DocumentsUI/Android.mk
deleted file mode 100644
index 9d44a6d..0000000
--- a/packages/DocumentsUI/Android.mk
+++ /dev/null
@@ -1,46 +0,0 @@
-LOCAL_PATH:= $(call my-dir)
-include $(CLEAR_VARS)
-
-LOCAL_MODULE_TAGS := optional
-LOCAL_PRIVILEGED_MODULE := true
-
-LOCAL_SRC_FILES := $(call all-java-files-under, src)
-
-LOCAL_STATIC_JAVA_LIBRARIES := android-support-v4
-# The design lib requires that the client package use appcompat themes.
-LOCAL_STATIC_JAVA_LIBRARIES += android-support-v7-appcompat
-LOCAL_STATIC_JAVA_LIBRARIES += android-support-v13
-# Supplies material design components, e.g. Snackbar.
-LOCAL_STATIC_JAVA_LIBRARIES += android-support-design
-LOCAL_STATIC_JAVA_LIBRARIES += android-support-v7-recyclerview
-LOCAL_STATIC_JAVA_LIBRARIES += guava
-
-LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res
-# Not quite sure why it is necessary to explicitly pull in resources from the
-# appcompat lib, but the demo code indicates it's necessary (see
-# development/samples/Support7Demos/Android.mk)
-LOCAL_RESOURCE_DIR += \
- frameworks/support/v7/appcompat/res \
- frameworks/support/design/res \
- frameworks/support/v7/recyclerview/res
-
-# Again, required to pull in appcompat resources. See abovementioned demo code.
-LOCAL_AAPT_FLAGS := \
- --auto-add-overlay \
- --extra-packages android.support.v7.appcompat \
- --extra-packages android.support.design \
- --extra-packages android.support.v7.recyclerview
-
-LOCAL_JACK_FLAGS := \
- -D jack.optimization.inner-class.accessors=true
-
-# Only enable asserts on userdebug/eng builds
-ifneq (,$(filter userdebug eng, $(TARGET_BUILD_VARIANT)))
-LOCAL_JACK_FLAGS += -D jack.assert.policy=always
-endif
-
-LOCAL_PACKAGE_NAME := DocumentsUI
-LOCAL_CERTIFICATE := platform
-
-include $(BUILD_PACKAGE)
-include $(call all-makefiles-under, $(LOCAL_PATH))
diff --git a/packages/DocumentsUI/AndroidManifest.xml b/packages/DocumentsUI/AndroidManifest.xml
deleted file mode 100644
index b224510..0000000
--- a/packages/DocumentsUI/AndroidManifest.xml
+++ /dev/null
@@ -1,126 +0,0 @@
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
- package="com.android.documentsui">
-
- <uses-permission android:name="android.permission.GET_APP_GRANTED_URI_PERMISSIONS" />
- <uses-permission android:name="android.permission.MANAGE_DOCUMENTS" />
- <uses-permission android:name="android.permission.REMOVE_TASKS" />
- <uses-permission android:name="android.permission.WAKE_LOCK" />
- <uses-permission android:name="android.permission.CACHE_CONTENT" />
- <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
-
- <application
- android:name=".DocumentsApplication"
- android:label="@string/app_label"
- android:icon="@mipmap/ic_app_icon"
- android:supportsRtl="true">
-
- <activity
- android:name=".DocumentsActivity"
- android:theme="@style/DocumentsTheme"
- android:icon="@drawable/ic_doc_text">
- <intent-filter>
- <action android:name="android.intent.action.OPEN_DOCUMENT" />
- <category android:name="android.intent.category.DEFAULT" />
- <category android:name="android.intent.category.OPENABLE" />
- <data android:mimeType="*/*" />
- </intent-filter>
- <intent-filter>
- <action android:name="android.intent.action.CREATE_DOCUMENT" />
- <category android:name="android.intent.category.DEFAULT" />
- <category android:name="android.intent.category.OPENABLE" />
- <data android:mimeType="*/*" />
- </intent-filter>
- <intent-filter android:priority="100">
- <action android:name="android.intent.action.GET_CONTENT" />
- <category android:name="android.intent.category.DEFAULT" />
- <category android:name="android.intent.category.OPENABLE" />
- <data android:mimeType="*/*" />
- </intent-filter>
- <intent-filter>
- <action android:name="android.intent.action.OPEN_DOCUMENT_TREE" />
- <category android:name="android.intent.category.DEFAULT" />
- </intent-filter>
- </activity>
-
- <activity
- android:name=".LauncherActivity"
- android:label="@string/downloads_label"
- android:icon="@mipmap/ic_launcher_downloads"
- android:theme="@android:style/Theme.NoDisplay">
- <intent-filter>
- <action android:name="android.intent.action.MAIN" />
- <category android:name="android.intent.category.LAUNCHER" />
- </intent-filter>
- </activity>
-
- <activity
- android:name=".FilesActivity"
- android:label="@string/downloads_label"
- android:icon="@mipmap/ic_launcher_downloads"
- android:documentLaunchMode="intoExisting"
- android:theme="@style/DocumentsTheme">
- <intent-filter>
- <action android:name="android.intent.action.MAIN" />
- </intent-filter>
- <intent-filter>
- <action android:name="android.provider.action.BROWSE" />
- <category android:name="android.intent.category.DEFAULT" />
- <data android:mimeType="vnd.android.document/root" />
- </intent-filter>
- <intent-filter>
- <action android:name="android.intent.action.VIEW_DOWNLOADS" />
- <category android:name="android.intent.category.DEFAULT" />
- </intent-filter>
- <intent-filter>
- <action android:name="android.intent.action.VIEW" />
- <category android:name="android.intent.category.DEFAULT" />
- <data android:mimeType="application/zip"
- android:host="com.android.providers.downloads.documents"
- android:scheme="content" />
- <data android:mimeType="application/x-zip"
- android:host="com.android.providers.downloads.documents"
- android:scheme="content" />
- <data android:mimeType="application/x-zip-compressed"
- android:host="com.android.providers.downloads.documents"
- android:scheme="content" />
- </intent-filter>
- </activity>
-
- <activity
- android:name=".OpenExternalDirectoryActivity"
- android:theme="@android:style/Theme.Translucent.NoTitleBar">
- <intent-filter>
- <action android:name="android.os.storage.action.OPEN_EXTERNAL_DIRECTORY" />
- <category android:name="android.intent.category.DEFAULT" />
- </intent-filter>
- </activity>
-
- <provider
- android:name=".RecentsProvider"
- android:authorities="com.android.documentsui.recents"
- android:exported="false"/>
-
- <receiver android:name=".PackageReceiver">
- <intent-filter>
- <action android:name="android.intent.action.PACKAGE_FULLY_REMOVED" />
- <action android:name="android.intent.action.PACKAGE_DATA_CLEARED" />
- <data android:scheme="package" />
- </intent-filter>
- </receiver>
-
- <receiver android:name=".BootReceiver" android:enabled="false">
- <intent-filter>
- <action android:name="android.intent.action.BOOT_COMPLETED" />
- </intent-filter>
- </receiver>
-
- <!-- Run FileOperationService in a separate process so that we can use FileLock class to
- wait until jumbo clip is done writing to disk before reading it. See ClipStorage for
- details. -->
- <service
- android:name=".services.FileOperationService"
- android:exported="false"
- android:process=":com.android.documentsui.services">
- </service>
- </application>
-</manifest>
diff --git a/packages/DocumentsUI/MOVED b/packages/DocumentsUI/MOVED
new file mode 100644
index 0000000..d1dc514
--- /dev/null
+++ b/packages/DocumentsUI/MOVED
@@ -0,0 +1 @@
+../../../../packages/apps/DocumentsUI
diff --git a/packages/DocumentsUI/app-perf-tests/Android.mk b/packages/DocumentsUI/app-perf-tests/Android.mk
deleted file mode 100644
index 3f12906..0000000
--- a/packages/DocumentsUI/app-perf-tests/Android.mk
+++ /dev/null
@@ -1,18 +0,0 @@
-LOCAL_PATH := $(call my-dir)
-include $(CLEAR_VARS)
-
-LOCAL_MODULE_TAGS := tests
-#LOCAL_SDK_VERSION := current
-
-LOCAL_SRC_FILES := $(call all-java-files-under, src) \
-
-LOCAL_JAVA_LIBRARIES := android-support-v4 android.test.runner
-LOCAL_STATIC_JAVA_LIBRARIES := mockito-target ub-uiautomator
-
-LOCAL_PACKAGE_NAME := DocumentsUIAppPerfTests
-LOCAL_INSTRUMENTATION_FOR := DocumentsUI
-
-LOCAL_CERTIFICATE := platform
-
-include $(BUILD_PACKAGE)
-
diff --git a/packages/DocumentsUI/app-perf-tests/AndroidManifest.xml b/packages/DocumentsUI/app-perf-tests/AndroidManifest.xml
deleted file mode 100644
index 0013b6b..0000000
--- a/packages/DocumentsUI/app-perf-tests/AndroidManifest.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
- package="com.android.documentsui.appperftests">
-
- <uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES" />
-
- <application>
- <uses-library android:name="android.test.runner" />
-
- <activity
- android:name="com.android.documentsui.LauncherActivity" />
- </application>
-
- <!-- This package instrumentates itself, so the DocumentsUI process can be killed without
- killing the testing package. -->
- <instrumentation android:name="android.test.InstrumentationTestRunner"
- android:targetPackage="com.android.documentsui.appperftests"
- android:label="App performance tests for DocumentsUI" />
-
-</manifest>
diff --git a/packages/DocumentsUI/app-perf-tests/src/com/android/documentsui/FilesAppPerfTest.java b/packages/DocumentsUI/app-perf-tests/src/com/android/documentsui/FilesAppPerfTest.java
deleted file mode 100644
index ce2fc13..0000000
--- a/packages/DocumentsUI/app-perf-tests/src/com/android/documentsui/FilesAppPerfTest.java
+++ /dev/null
@@ -1,107 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.documentsui;
-
-import android.app.Activity;
-import android.app.ActivityManager;
-import android.content.Context;
-import android.content.Intent;
-import android.content.pm.PackageManager;
-import android.content.pm.ResolveInfo;
-import android.os.Bundle;
-import android.provider.DocumentsContract;
-import android.support.test.uiautomator.UiDevice;
-import android.test.InstrumentationTestCase;
-import android.test.suitebuilder.annotation.LargeTest;
-import android.util.Log;
-
-import java.util.Arrays;
-import java.util.List;
-import java.util.concurrent.CountDownLatch;
-
-@LargeTest
-public class FilesAppPerfTest extends InstrumentationTestCase {
-
- // Keys used to report metrics to APCT.
- private static final String KEY_FILES_COLD_START_PERFORMANCE_MEDIAN =
- "files-cold-start-performance-median";
- private static final String KEY_FILES_WARM_START_PERFORMANCE_MEDIAN =
- "files-warm-start-performance-median";
-
- private static final String TARGET_PACKAGE = "com.android.documentsui";
-
- private static final int NUM_MEASUREMENTS = 10;
-
- private LauncherActivity mActivity;
- private UiDevice mDevice;
-
- @Override
- public void setUp() {
- mDevice = UiDevice.getInstance(getInstrumentation());
- }
-
- public void testFilesColdStartPerformance() throws Exception {
- runFilesStartPerformanceTest(true);
- }
-
- public void testFilesWarmStartPerformance() throws Exception {
- runFilesStartPerformanceTest(false);
- }
-
- public void runFilesStartPerformanceTest(boolean cold) throws Exception {
- long[] measurements = new long[NUM_MEASUREMENTS];
- for (int i = 0; i < NUM_MEASUREMENTS; i++) {
- if (cold) {
- // Kill all providers, as well as DocumentsUI to measure a cold start.
- killProviders();
- mDevice.executeShellCommand("am force-stop " + TARGET_PACKAGE);
- }
- mDevice.waitForIdle();
-
- LauncherActivity.testCaseLatch = new CountDownLatch(1);
- mActivity = launchActivity(getInstrumentation().getTargetContext().getPackageName(),
- LauncherActivity.class, null);
- LauncherActivity.testCaseLatch.await();
- measurements[i] = LauncherActivity.measurement;
- }
-
- reportMetrics(cold ? KEY_FILES_COLD_START_PERFORMANCE_MEDIAN
- : KEY_FILES_WARM_START_PERFORMANCE_MEDIAN, measurements);
- }
-
- private void reportMetrics(String key, long[] measurements) {
- final Bundle status = new Bundle();
- Arrays.sort(measurements);
- final long median = measurements[NUM_MEASUREMENTS / 2 - 1];
- status.putDouble(key, median);
-
- getInstrumentation().sendStatus(Activity.RESULT_OK, status);
- }
-
- private void killProviders() throws Exception {
- final Context context = getInstrumentation().getContext();
- final PackageManager pm = context.getPackageManager();
- final ActivityManager am = (ActivityManager) context.getSystemService(
- Context.ACTIVITY_SERVICE);
- final Intent intent = new Intent(DocumentsContract.PROVIDER_INTERFACE);
- final List<ResolveInfo> providers = pm.queryIntentContentProviders(intent, 0);
- for (ResolveInfo info : providers) {
- final String packageName = info.providerInfo.packageName;
- am.killBackgroundProcesses(packageName);
- }
- }
-}
diff --git a/packages/DocumentsUI/app-perf-tests/src/com/android/documentsui/LauncherActivity.java b/packages/DocumentsUI/app-perf-tests/src/com/android/documentsui/LauncherActivity.java
deleted file mode 100644
index 21fc52e..0000000
--- a/packages/DocumentsUI/app-perf-tests/src/com/android/documentsui/LauncherActivity.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.documentsui;
-
-import static com.android.documentsui.Shared.EXTRA_BENCHMARK;
-
-import android.app.Activity;
-import android.content.Intent;
-import android.content.pm.PackageManager;
-import android.os.Bundle;
-import android.os.Handler;
-import android.util.Log;
-
-import java.util.concurrent.CountDownLatch;
-
-public class LauncherActivity extends Activity {
- private static final String TARGET_PACKAGE = "com.android.documentsui";
- private static final int BENCHMARK_REQUEST_CODE = 1986;
-
- public static CountDownLatch testCaseLatch = null;
- public static long measurement = -1;
-
- private long mStartTime = -1;
-
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
-
- new Handler().post(new Runnable() {
- @Override public void run() {
- final Intent intent = new Intent("android.intent.action.OPEN_DOCUMENT");
- intent.addCategory(Intent.CATEGORY_OPENABLE);
- intent.putExtra(EXTRA_BENCHMARK, true);
- intent.setType("*/*");
-
- mStartTime = System.currentTimeMillis();
- startActivityForResult(intent, BENCHMARK_REQUEST_CODE);
- }
- });
- }
-
- @Override
- protected void onActivityResult(int requestCode, int resultCode, Intent data) {
- if (requestCode == BENCHMARK_REQUEST_CODE) {
- measurement = System.currentTimeMillis() - mStartTime;
- testCaseLatch.countDown();
- finish();
- }
- }
-}
diff --git a/packages/DocumentsUI/lint.xml b/packages/DocumentsUI/lint.xml
deleted file mode 100644
index 09661ba..0000000
--- a/packages/DocumentsUI/lint.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<lint>
- <!--
- Lint configuration for the framework-lint tool (go/fwlint). See
- http://tools.android.com/tips/lint for full docs on the lint tool.
- -->
-
- <!-- min-sdk doesn't apply to platform apps. -->
- <issue id="UsesMinSdkAttributes" severity="ignore" />
-
- <!-- Protected permissions don't apply to system apps. -->
- <issue id="ProtectedPermissions" severity="ignore" />
-
- <!-- Other recommended suppressions copied from go/fwlint. -->
- <issue id="Assert" severity="ignore" />
- <issue id="ClickableViewAccessibility" severity="ignore" />
- <issue id="GoogleAppIndexingWarning" severity="ignore" />
- <issue id="MissingPermission" severity="ignore" />
- <issue id="ParcelClassLoader" severity="ignore" />
- <issue id="ParcelCreator" severity="ignore" />
- <issue id="Registered" severity="ignore" />
- <issue id="RtlHardcoded" severity="ignore" />
- <issue id="ShiftFlags" severity="ignore" />
- <issue id="SuspiciousImport" severity="ignore" />
-
- <!-- Don't lint automatically translated strings. -->
- <issue id="all">
- <ignore path="res/values-*/strings.xml" />
- </issue>
-
- <!-- Don't warn about missing translations. -->
- <issue id="MissingTranslation">
- <ignore path="res/values/strings.xml" />
- </issue>
-
-</lint>
diff --git a/packages/DocumentsUI/perf-tests/Android.mk b/packages/DocumentsUI/perf-tests/Android.mk
deleted file mode 100644
index 39a08f7..0000000
--- a/packages/DocumentsUI/perf-tests/Android.mk
+++ /dev/null
@@ -1,22 +0,0 @@
-LOCAL_PATH := $(call my-dir)
-include $(CLEAR_VARS)
-
-LOCAL_MODULE_TAGS := tests
-
-LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res
-LOCAL_SRC_FILES := $(call all-java-files-under, src) \
- $(call all-java-files-under, ../tests/src/com/android/documentsui/bots) \
- ../tests/src/com/android/documentsui/ActivityTest.java \
- ../tests/src/com/android/documentsui/DocumentsProviderHelper.java \
- ../tests/src/com/android/documentsui/StubProvider.java
-
-LOCAL_JAVA_LIBRARIES := android-support-v4 android.test.runner
-LOCAL_STATIC_JAVA_LIBRARIES := mockito-target ub-uiautomator ub-janktesthelper espresso-core
-
-LOCAL_PACKAGE_NAME := DocumentsUIPerfTests
-LOCAL_INSTRUMENTATION_FOR := DocumentsUI
-
-LOCAL_CERTIFICATE := platform
-
-include $(BUILD_PACKAGE)
-
diff --git a/packages/DocumentsUI/perf-tests/AndroidManifest.xml b/packages/DocumentsUI/perf-tests/AndroidManifest.xml
deleted file mode 100644
index 97353e7..0000000
--- a/packages/DocumentsUI/perf-tests/AndroidManifest.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
- package="com.android.documentsui.perftests">
-
- <application>
- <uses-library android:name="android.test.runner" />
- <provider
- android:name="com.android.documentsui.StressProvider"
- android:authorities="com.android.documentsui.stressprovider"
- android:exported="true"
- android:grantUriPermissions="true"
- android:permission="android.permission.MANAGE_DOCUMENTS"
- android:enabled="true">
- <intent-filter>
- <action android:name="android.content.action.DOCUMENTS_PROVIDER" />
- </intent-filter>
- </provider>
- </application>
-
- <instrumentation android:name="android.test.InstrumentationTestRunner"
- android:targetPackage="com.android.documentsui"
- android:label="Performance tests for DocumentsUI" />
-
-</manifest>
diff --git a/packages/DocumentsUI/perf-tests/res/raw/earth_small.jpg b/packages/DocumentsUI/perf-tests/res/raw/earth_small.jpg
deleted file mode 100644
index dd2da3e..0000000
--- a/packages/DocumentsUI/perf-tests/res/raw/earth_small.jpg
+++ /dev/null
Binary files differ
diff --git a/packages/DocumentsUI/perf-tests/src/com/android/documentsui/FilesActivityPerfTest.java b/packages/DocumentsUI/perf-tests/src/com/android/documentsui/FilesActivityPerfTest.java
deleted file mode 100644
index bf056f1..0000000
--- a/packages/DocumentsUI/perf-tests/src/com/android/documentsui/FilesActivityPerfTest.java
+++ /dev/null
@@ -1,143 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.documentsui;
-
-import static com.android.documentsui.StressProvider.DEFAULT_AUTHORITY;
-import static com.android.documentsui.StressProvider.STRESS_ROOT_0_ID;
-import static com.android.documentsui.StressProvider.STRESS_ROOT_1_ID;
-
-import android.app.Activity;
-import android.net.Uri;
-import android.os.Bundle;
-import android.os.RemoteException;
-import android.test.suitebuilder.annotation.LargeTest;
-import android.util.Log;
-import android.view.KeyEvent;
-
-import com.android.documentsui.model.RootInfo;
-import com.android.documentsui.EventListener;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-import java.util.Random;
-import java.util.concurrent.CountDownLatch;
-
-@LargeTest
-public class FilesActivityPerfTest extends ActivityTest<FilesActivity> {
-
- // Constants starting with KEY_ are used to report metrics to APCT.
- private static final String KEY_FILES_LISTED_PERFORMANCE_FIRST =
- "files-listed-performance-first";
-
- private static final String KEY_FILES_LISTED_PERFORMANCE_MEDIAN =
- "files-listed-performance-median";
-
- private static final String TESTED_URI =
- "content://com.android.documentsui.stressprovider/document/STRESS_ROOT_1_DOC";
-
- private static final int NUM_MEASUREMENTS = 10;
-
- public FilesActivityPerfTest() {
- super(FilesActivity.class);
- }
-
- @Override
- protected RootInfo getInitialRoot() {
- return rootDir0;
- }
-
- @Override
- protected String getTestingProviderAuthority() {
- return DEFAULT_AUTHORITY;
- }
-
- @Override
- protected void setupTestingRoots() throws RemoteException {
- rootDir0 = mDocsHelper.getRoot(STRESS_ROOT_0_ID);
- rootDir1 = mDocsHelper.getRoot(STRESS_ROOT_1_ID);
- }
-
- @Override
- public void initTestFiles() throws RemoteException {
- // Nothing to create, already done by StressProvider.
- }
-
- public void testFilesListedPerformance() throws Exception {
- final BaseActivity activity = getActivity();
-
- final List<Long> measurements = new ArrayList<Long>();
- EventListener listener;
- for (int i = 0; i < 10; i++) {
- final CountDownLatch signal = new CountDownLatch(1);
- listener = new EventListener() {
- @Override
- public void onDirectoryNavigated(Uri uri) {
- if (uri != null && TESTED_URI.equals(uri.toString())) {
- mStartTime = System.currentTimeMillis();
- } else {
- mStartTime = -1;
- }
- }
-
- @Override
- public void onDirectoryLoaded(Uri uri) {
- if (uri == null || !TESTED_URI.equals(uri.toString())) {
- return;
- }
- assertTrue(mStartTime != -1);
- getInstrumentation().waitForIdle(new Runnable() {
- @Override
- public void run() {
- assertTrue(mStartTime != -1);
- measurements.add(System.currentTimeMillis() - mStartTime);
- signal.countDown();
- }
- });
- }
-
- private long mStartTime = -1;
- };
-
- try {
- activity.addEventListener(listener);
- bots.roots.openRoot(STRESS_ROOT_1_ID);
- signal.await();
- } finally {
- activity.removeEventListener(listener);
- }
-
- assertEquals(i + 1, measurements.size());
-
- // Go back to the empty root.
- bots.roots.openRoot(STRESS_ROOT_0_ID);
- }
-
- assertEquals(NUM_MEASUREMENTS, measurements.size());
-
- final Bundle status = new Bundle();
- status.putDouble(KEY_FILES_LISTED_PERFORMANCE_FIRST, measurements.get(0));
-
- final Long[] rawMeasurements = measurements.toArray(new Long[NUM_MEASUREMENTS]);
- Arrays.sort(rawMeasurements);
-
- final long median = rawMeasurements[NUM_MEASUREMENTS / 2 - 1];
- status.putDouble(KEY_FILES_LISTED_PERFORMANCE_MEDIAN, median);
-
- getInstrumentation().sendStatus(Activity.RESULT_OK, status);
- }
-}
diff --git a/packages/DocumentsUI/perf-tests/src/com/android/documentsui/FilesJankPerfTest.java b/packages/DocumentsUI/perf-tests/src/com/android/documentsui/FilesJankPerfTest.java
deleted file mode 100644
index 9925d5b..0000000
--- a/packages/DocumentsUI/perf-tests/src/com/android/documentsui/FilesJankPerfTest.java
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.documentsui;
-
-import static com.android.documentsui.StressProvider.DEFAULT_AUTHORITY;
-import static com.android.documentsui.StressProvider.STRESS_ROOT_0_ID;
-import static com.android.documentsui.StressProvider.STRESS_ROOT_2_ID;
-
-import android.app.Activity;
-import android.os.RemoteException;
-import android.test.suitebuilder.annotation.LargeTest;
-
-import android.content.Intent;
-import android.content.Context;
-import android.support.test.jank.JankTest;
-import android.support.test.jank.JankTestBase;
-import android.support.test.uiautomator.UiDevice;
-import android.support.test.jank.GfxMonitor;
-import android.support.test.uiautomator.UiScrollable;
-import android.util.Log;
-
-import com.android.documentsui.FilesActivity;
-import com.android.documentsui.bots.RootsListBot;
-import com.android.documentsui.bots.DirectoryListBot;
-
-@LargeTest
-public class FilesJankPerfTest extends JankTestBase {
- private static final String DOCUMENTSUI_PACKAGE = "com.android.documentsui";
- private static final int MAX_FLINGS = 10;
- private static final int BOT_TIMEOUT = 5000;
-
- private RootsListBot mRootsListBot;
- private DirectoryListBot mDirListBot;
- private Activity mActivity = null;
-
- public void setUpInLoop() {
- final UiDevice device = UiDevice.getInstance(getInstrumentation());
- final Context context = getInstrumentation().getTargetContext();
- mRootsListBot = new RootsListBot(device, context, BOT_TIMEOUT);
- mDirListBot = new DirectoryListBot(device, context, BOT_TIMEOUT);
-
- final Intent intent = new Intent(context, FilesActivity.class);
- intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
- mActivity = getInstrumentation().startActivitySync(intent);
- try {
- device.setOrientationNatural();
- } catch (RemoteException e) {
- }
- }
-
- public void tearDownInLoop() {
- if (mActivity != null) {
- mActivity.finish();
- mActivity = null;
- }
- try {
- final UiDevice device = UiDevice.getInstance(getInstrumentation());
- device.unfreezeRotation();
- } catch (RemoteException e) {
- }
- }
-
- public void setupAndOpenInLoop() throws Exception {
- setUpInLoop();
- openRoot();
- }
-
- public void openRoot() throws Exception {
- mRootsListBot.openRoot(STRESS_ROOT_2_ID);
- }
-
- @JankTest(expectedFrames=0, beforeLoop="setUpInLoop", afterLoop="tearDownInLoop")
- @GfxMonitor(processName=DOCUMENTSUI_PACKAGE)
- public void testOpenRootJankPerformance() throws Exception {
- openRoot();
- getInstrumentation().waitForIdleSync();
- }
-
- @JankTest(expectedFrames=0, beforeLoop="setupAndOpenInLoop", afterLoop="tearDownInLoop")
- @GfxMonitor(processName=DOCUMENTSUI_PACKAGE)
- public void testFlingJankPerformance() throws Exception {
- new UiScrollable(mDirListBot.findDocumentsList().getSelector()).flingToEnd(MAX_FLINGS);
- getInstrumentation().waitForIdleSync();
- }
-}
diff --git a/packages/DocumentsUI/perf-tests/src/com/android/documentsui/StressProvider.java b/packages/DocumentsUI/perf-tests/src/com/android/documentsui/StressProvider.java
deleted file mode 100644
index f9b06f8..0000000
--- a/packages/DocumentsUI/perf-tests/src/com/android/documentsui/StressProvider.java
+++ /dev/null
@@ -1,265 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.documentsui;
-
-import android.content.Context;
-import android.content.pm.ProviderInfo;
-import android.content.res.AssetFileDescriptor;
-import android.database.Cursor;
-import android.database.MatrixCursor.RowBuilder;
-import android.database.MatrixCursor;
-import android.graphics.Point;
-import android.os.CancellationSignal;
-import android.os.FileUtils;
-import android.os.ParcelFileDescriptor;
-import android.provider.DocumentsContract.Document;
-import android.provider.DocumentsContract.Root;
-import android.provider.DocumentsContract;
-import android.provider.DocumentsProvider;
-
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Random;
-
-/**
- * Provider with thousands of files for testing loading time of directories in DocumentsUI.
- * It doesn't support any file operations.
- */
-public class StressProvider extends DocumentsProvider {
-
- public static final String DEFAULT_AUTHORITY = "com.android.documentsui.stressprovider";
-
- // Empty root.
- public static final String STRESS_ROOT_0_ID = "STRESS_ROOT_0";
-
- // Root with thousands of directories.
- public static final String STRESS_ROOT_1_ID = "STRESS_ROOT_1";
-
- // Root with hundreds of files.
- public static final String STRESS_ROOT_2_ID = "STRESS_ROOT_2";
-
- private static final String STRESS_ROOT_0_DOC_ID = "STRESS_ROOT_0_DOC";
- private static final String STRESS_ROOT_1_DOC_ID = "STRESS_ROOT_1_DOC";
- private static final String STRESS_ROOT_2_DOC_ID = "STRESS_ROOT_2_DOC";
-
- private static final int STRESS_ROOT_1_ITEMS = 10000;
- private static final int STRESS_ROOT_2_ITEMS = 300;
-
- private static final String MIME_TYPE_IMAGE = "image/jpeg";
- private static final long REFERENCE_TIMESTAMP = 1459159369359L;
-
- private static final String[] DEFAULT_ROOT_PROJECTION = new String[] {
- Root.COLUMN_ROOT_ID, Root.COLUMN_FLAGS, Root.COLUMN_TITLE, Root.COLUMN_DOCUMENT_ID,
- Root.COLUMN_AVAILABLE_BYTES
- };
- private static final String[] DEFAULT_DOCUMENT_PROJECTION = new String[] {
- Document.COLUMN_DOCUMENT_ID, Document.COLUMN_MIME_TYPE, Document.COLUMN_DISPLAY_NAME,
- Document.COLUMN_LAST_MODIFIED, Document.COLUMN_FLAGS, Document.COLUMN_SIZE,
- };
-
- private String mAuthority = DEFAULT_AUTHORITY;
-
- // Map from a root document id to children document ids.
- private Map<String, ArrayList<StubDocument>> mChildDocuments = new HashMap<>();
-
- private Map<String, StubDocument> mDocuments = new HashMap<>();
- private Map<String, StubRoot> mRoots = new HashMap<>();
-
- @Override
- public void attachInfo(Context context, ProviderInfo info) {
- mAuthority = info.authority;
- super.attachInfo(context, info);
- }
-
- @Override
- public boolean onCreate() {
- StubDocument document;
-
- ArrayList<StubDocument> children = new ArrayList<StubDocument>();
- mChildDocuments.put(STRESS_ROOT_1_DOC_ID, children);
- for (int i = 0; i < STRESS_ROOT_1_ITEMS; i++) {
- document = StubDocument.createDirectory(i);
- mDocuments.put(document.id, document);
- children.add(document);
- }
-
- children = new ArrayList<StubDocument>();
- mChildDocuments.put(STRESS_ROOT_2_DOC_ID, children);
- for (int i = 0; i < STRESS_ROOT_2_ITEMS; i++) {
- try {
- document = StubDocument.createFile(
- getContext(), MIME_TYPE_IMAGE,
- com.android.documentsui.perftests.R.raw.earth_small,
- STRESS_ROOT_1_ITEMS + i);
- } catch (IOException e) {
- return false;
- }
- mDocuments.put(document.id, document);
- children.add(document);
- }
-
- mRoots.put(STRESS_ROOT_0_ID, new StubRoot(STRESS_ROOT_0_ID, STRESS_ROOT_0_DOC_ID));
- mRoots.put(STRESS_ROOT_1_ID, new StubRoot(STRESS_ROOT_1_ID, STRESS_ROOT_1_DOC_ID));
- mRoots.put(STRESS_ROOT_2_ID, new StubRoot(STRESS_ROOT_2_ID, STRESS_ROOT_2_DOC_ID));
-
- mDocuments.put(STRESS_ROOT_0_DOC_ID, StubDocument.createDirectory(STRESS_ROOT_0_DOC_ID));
- mDocuments.put(STRESS_ROOT_1_DOC_ID, StubDocument.createDirectory(STRESS_ROOT_1_DOC_ID));
- mDocuments.put(STRESS_ROOT_2_DOC_ID, StubDocument.createDirectory(STRESS_ROOT_2_DOC_ID));
-
- return true;
- }
-
- @Override
- public Cursor queryRoots(String[] projection) throws FileNotFoundException {
- final MatrixCursor result = new MatrixCursor(DEFAULT_ROOT_PROJECTION);
- for (StubRoot root : mRoots.values()) {
- includeRoot(result, root);
- }
- return result;
- }
-
- @Override
- public Cursor queryDocument(String documentId, String[] projection)
- throws FileNotFoundException {
- final MatrixCursor result = new MatrixCursor(DEFAULT_DOCUMENT_PROJECTION);
- final StubDocument document = mDocuments.get(documentId);
- includeDocument(result, document);
- return result;
- }
-
- @Override
- public Cursor queryChildDocuments(String parentDocumentId, String[] projection,
- String sortOrder)
- throws FileNotFoundException {
- final MatrixCursor result = new MatrixCursor(DEFAULT_DOCUMENT_PROJECTION);
- final ArrayList<StubDocument> childDocuments = mChildDocuments.get(parentDocumentId);
- if (childDocuments != null) {
- for (StubDocument document : childDocuments) {
- includeDocument(result, document);
- }
- }
- return result;
- }
-
- @Override
- public AssetFileDescriptor openDocumentThumbnail(String docId, Point sizeHint,
- CancellationSignal signal)
- throws FileNotFoundException {
- final StubDocument document = mDocuments.get(docId);
- return getContext().getResources().openRawResourceFd(document.thumbnail);
- }
-
- @Override
- public ParcelFileDescriptor openDocument(String docId, String mode,
- CancellationSignal signal)
- throws FileNotFoundException {
- throw new UnsupportedOperationException();
- }
-
- private void includeRoot(MatrixCursor result, StubRoot root) {
- final RowBuilder row = result.newRow();
- row.add(Root.COLUMN_ROOT_ID, root.id);
- row.add(Root.COLUMN_FLAGS, 0);
- row.add(Root.COLUMN_TITLE, root.id);
- row.add(Root.COLUMN_DOCUMENT_ID, root.documentId);
- }
-
- private void includeDocument(MatrixCursor result, StubDocument document) {
- final RowBuilder row = result.newRow();
- row.add(Document.COLUMN_DOCUMENT_ID, document.id);
- row.add(Document.COLUMN_DISPLAY_NAME, document.id);
- row.add(Document.COLUMN_SIZE, document.size);
- row.add(Document.COLUMN_MIME_TYPE, document.mimeType);
- row.add(Document.COLUMN_FLAGS,
- document.thumbnail != -1 ? Document.FLAG_SUPPORTS_THUMBNAIL : 0);
- row.add(Document.COLUMN_LAST_MODIFIED, document.lastModified);
- }
-
- private static String getStubDocumentIdForFile(File file) {
- return file.getAbsolutePath();
- }
-
- private static class StubDocument {
- final String mimeType;
- final String id;
- final int size;
- final long lastModified;
- final int thumbnail;
-
- private StubDocument(String mimeType, String id, int size, long lastModified,
- int thumbnail) {
- this.mimeType = mimeType;
- this.id = id;
- this.size = size;
- this.lastModified = lastModified;
- this.thumbnail = thumbnail;
- }
-
- public static StubDocument createDirectory(int index) {
- return new StubDocument(
- DocumentsContract.Document.MIME_TYPE_DIR, createRandomId(index), 0,
- createRandomTime(index), -1);
- }
-
- public static StubDocument createDirectory(String id) {
- return new StubDocument(DocumentsContract.Document.MIME_TYPE_DIR, id, 0, 0, -1);
- }
-
- public static StubDocument createFile(Context context, String mimeType, int thumbnail,
- int index) throws IOException {
- return new StubDocument(
- mimeType, createRandomId(index), createRandomSize(index),
- createRandomTime(index), thumbnail);
- }
-
- private static String createRandomId(int index) {
- final Random random = new Random(index);
- final StringBuilder builder = new StringBuilder();
- for (int i = 0; i < 20; i++) {
- builder.append((char) (random.nextInt(96) + 32));
- }
- builder.append(index); // Append a number to guarantee uniqueness.
- return builder.toString();
- }
-
- private static int createRandomSize(int index) {
- final Random random = new Random(index);
- return random.nextInt(1024 * 1024 * 100); // Up to 100 MB.
- }
-
- private static long createRandomTime(int index) {
- final Random random = new Random(index);
- // Up to 30 days backwards from REFERENCE_TIMESTAMP.
- return REFERENCE_TIMESTAMP - random.nextLong() % 1000L * 60 * 60 * 24 * 30;
- }
- }
-
- private static class StubRoot {
- final String id;
- final String documentId;
-
- public StubRoot(String id, String documentId) {
- this.id = id;
- this.documentId = documentId;
- }
- }
-}
diff --git a/packages/DocumentsUI/res/animator/dir_enter.xml b/packages/DocumentsUI/res/animator/dir_enter.xml
deleted file mode 100644
index 570104e..0000000
--- a/packages/DocumentsUI/res/animator/dir_enter.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<!-- 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.
--->
-
-<set xmlns:android="http://schemas.android.com/apk/res/android"
- android:ordering="together">
-
- <objectAnimator
- android:valueFrom="0f"
- android:valueTo="1f"
- android:propertyName="alpha"
- android:valueType="floatType"
- android:duration="200"
- android:interpolator="@android:interpolator/decelerate_quad" />
-
- <!-- position property maps to AnimationView.setPosition -->
- <objectAnimator
- android:propertyName="position"
- android:valueFrom="1"
- android:valueTo="0"
- android:valueType="floatType"
- android:duration="350"
- android:interpolator="@android:interpolator/decelerate_quad" />
-
-</set>
diff --git a/packages/DocumentsUI/res/animator/dir_leave.xml b/packages/DocumentsUI/res/animator/dir_leave.xml
deleted file mode 100644
index 5929625..0000000
--- a/packages/DocumentsUI/res/animator/dir_leave.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<!-- 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.
--->
-
-<set xmlns:android="http://schemas.android.com/apk/res/android"
- android:ordering="together">
-
- <objectAnimator
- android:valueFrom="1f"
- android:valueTo="0f"
- android:propertyName="alpha"
- android:valueType="floatType"
- android:duration="150"
- android:startOffset="100"
- android:interpolator="@android:interpolator/decelerate_quad" />
-
- <!-- position property maps to AnimationView.setPosition -->
- <objectAnimator
- android:valueFrom="0"
- android:valueTo="1"
- android:propertyName="position"
- android:valueType="floatType"
- android:duration="250"
- android:interpolator="@android:interpolator/accelerate_quad" />
-
-</set>
\ No newline at end of file
diff --git a/packages/DocumentsUI/res/animator/fade_in.xml b/packages/DocumentsUI/res/animator/fade_in.xml
deleted file mode 100644
index 3ce012b..0000000
--- a/packages/DocumentsUI/res/animator/fade_in.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<!-- 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.
--->
-
-<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
- android:valueFrom="0f"
- android:valueTo="1f"
- android:propertyName="alpha"
- android:valueType="floatType"
- android:duration="@android:integer/config_mediumAnimTime"
- android:interpolator="@android:interpolator/decelerate_quad" />
diff --git a/packages/DocumentsUI/res/animator/fade_out.xml b/packages/DocumentsUI/res/animator/fade_out.xml
deleted file mode 100644
index 8d02c77..0000000
--- a/packages/DocumentsUI/res/animator/fade_out.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<!-- 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.
--->
-
-<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
- android:valueFrom="1f"
- android:valueTo="0f"
- android:propertyName="alpha"
- android:valueType="floatType"
- android:duration="@android:integer/config_mediumAnimTime"
- android:interpolator="@android:interpolator/decelerate_quad" />
diff --git a/packages/DocumentsUI/res/color/item_details.xml b/packages/DocumentsUI/res/color/item_details.xml
deleted file mode 100644
index ac21fe3..0000000
--- a/packages/DocumentsUI/res/color/item_details.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2016 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item
- android:state_enabled="true"
- android:color="?android:attr/textColorPrimary"
- android:alpha="0.54" />
-</selector>
diff --git a/packages/DocumentsUI/res/color/item_doc_grid_border.xml b/packages/DocumentsUI/res/color/item_doc_grid_border.xml
deleted file mode 100644
index e144af8..0000000
--- a/packages/DocumentsUI/res/color/item_doc_grid_border.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2015 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item
- android:state_focused="true"
- android:color="?android:attr/colorAccent"/>
- <item
- android:color="@android:color/transparent" />
-</selector>
diff --git a/packages/DocumentsUI/res/color/item_doc_list_background_activated.xml b/packages/DocumentsUI/res/color/item_doc_list_background_activated.xml
deleted file mode 100644
index 7d7a110..0000000
--- a/packages/DocumentsUI/res/color/item_doc_list_background_activated.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2015 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item
- android:state_activated="true"
- android:color="?android:attr/colorAccent"
- android:alpha="0.1" />
- <item
- android:color="@android:color/transparent" />
-</selector>
diff --git a/packages/DocumentsUI/res/color/item_eject_icon.xml b/packages/DocumentsUI/res/color/item_eject_icon.xml
deleted file mode 100644
index 15e7e8e..0000000
--- a/packages/DocumentsUI/res/color/item_eject_icon.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2016 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:state_enabled="false" android:alpha="@*android:dimen/disabled_alpha_material_light" android:color="@*android:color/primary_text_default_material_light" />
- <item android:color="@*android:color/primary_text_default_material_light" />
-</selector>
diff --git a/packages/DocumentsUI/res/color/item_root_icon.xml b/packages/DocumentsUI/res/color/item_root_icon.xml
deleted file mode 100644
index e1d7e61..0000000
--- a/packages/DocumentsUI/res/color/item_root_icon.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2014 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item
- android:state_activated="false"
- android:color="@*android:color/secondary_text_material_light" />
- <item
- android:state_activated="true"
- android:color="@color/root_activated_color" />
-</selector>
diff --git a/packages/DocumentsUI/res/color/item_root_primary_text.xml b/packages/DocumentsUI/res/color/item_root_primary_text.xml
deleted file mode 100644
index a5a65b2..0000000
--- a/packages/DocumentsUI/res/color/item_root_primary_text.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2014 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:state_focused="true" android:state_activated="true" android:color="@color/root_activated_color" />
- <item android:state_focused="false" android:state_activated="true" android:color="@color/root_activated_color" />
- <item android:state_enabled="false" android:alpha="@*android:dimen/disabled_alpha_material_light" android:color="@*android:color/primary_text_default_material_light" />
- <item android:color="@*android:color/primary_text_default_material_light" />
-</selector>
diff --git a/packages/DocumentsUI/res/color/item_title.xml b/packages/DocumentsUI/res/color/item_title.xml
deleted file mode 100644
index 9fff2f1..0000000
--- a/packages/DocumentsUI/res/color/item_title.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2016 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item
- android:state_enabled="true"
- android:color="?android:attr/textColorPrimary"
- android:alpha="0.87" />
- <item
- android:state_enabled="false"
- android:color="?android:attr/textColorPrimary"
- android:alpha="0.54" />
-</selector>
diff --git a/packages/DocumentsUI/res/color/root_activated.xml b/packages/DocumentsUI/res/color/root_activated.xml
deleted file mode 100644
index 36a016d..0000000
--- a/packages/DocumentsUI/res/color/root_activated.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:state_activated="true" android:color="?android:attr/colorAccent" />
- <item android:color="@*android:color/secondary_text_material_light" />
-</selector>
diff --git a/packages/DocumentsUI/res/drawable-hdpi/ic_breadcrumb_arrow_am_alpha.png b/packages/DocumentsUI/res/drawable-hdpi/ic_breadcrumb_arrow_am_alpha.png
deleted file mode 100644
index 67f890c..0000000
--- a/packages/DocumentsUI/res/drawable-hdpi/ic_breadcrumb_arrow_am_alpha.png
+++ /dev/null
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-hdpi/ic_cab_cancel_alpha.png b/packages/DocumentsUI/res/drawable-hdpi/ic_cab_cancel_alpha.png
deleted file mode 100644
index 1a9cd75..0000000
--- a/packages/DocumentsUI/res/drawable-hdpi/ic_cab_cancel_alpha.png
+++ /dev/null
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-hdpi/ic_dialog_alert_alpha.png b/packages/DocumentsUI/res/drawable-hdpi/ic_dialog_alert_alpha.png
deleted file mode 100644
index 4c3d9a4..0000000
--- a/packages/DocumentsUI/res/drawable-hdpi/ic_dialog_alert_alpha.png
+++ /dev/null
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-hdpi/ic_dialog_info_alpha.png b/packages/DocumentsUI/res/drawable-hdpi/ic_dialog_info_alpha.png
deleted file mode 100644
index da56077..0000000
--- a/packages/DocumentsUI/res/drawable-hdpi/ic_dialog_info_alpha.png
+++ /dev/null
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-hdpi/ic_grid_folder_alpha.png b/packages/DocumentsUI/res/drawable-hdpi/ic_grid_folder_alpha.png
deleted file mode 100644
index 874fde7..0000000
--- a/packages/DocumentsUI/res/drawable-hdpi/ic_grid_folder_alpha.png
+++ /dev/null
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-hdpi/ic_hamburger_alpha.png b/packages/DocumentsUI/res/drawable-hdpi/ic_hamburger_alpha.png
deleted file mode 100644
index 3f8ebd6..0000000
--- a/packages/DocumentsUI/res/drawable-hdpi/ic_hamburger_alpha.png
+++ /dev/null
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-hdpi/ic_menu_copy_alpha.png b/packages/DocumentsUI/res/drawable-hdpi/ic_menu_copy_alpha.png
deleted file mode 100644
index 9a9e570..0000000
--- a/packages/DocumentsUI/res/drawable-hdpi/ic_menu_copy_alpha.png
+++ /dev/null
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-hdpi/ic_menu_delete_alpha.png b/packages/DocumentsUI/res/drawable-hdpi/ic_menu_delete_alpha.png
deleted file mode 100644
index dbbb602..0000000
--- a/packages/DocumentsUI/res/drawable-hdpi/ic_menu_delete_alpha.png
+++ /dev/null
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-hdpi/ic_menu_new_folder_am_alpha.png b/packages/DocumentsUI/res/drawable-hdpi/ic_menu_new_folder_am_alpha.png
deleted file mode 100644
index 1d25a2d..0000000
--- a/packages/DocumentsUI/res/drawable-hdpi/ic_menu_new_folder_am_alpha.png
+++ /dev/null
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-hdpi/ic_menu_search_alpha.png b/packages/DocumentsUI/res/drawable-hdpi/ic_menu_search_alpha.png
deleted file mode 100644
index c593e7a..0000000
--- a/packages/DocumentsUI/res/drawable-hdpi/ic_menu_search_alpha.png
+++ /dev/null
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-hdpi/ic_menu_share_alpha.png b/packages/DocumentsUI/res/drawable-hdpi/ic_menu_share_alpha.png
deleted file mode 100644
index 20ba480..0000000
--- a/packages/DocumentsUI/res/drawable-hdpi/ic_menu_share_alpha.png
+++ /dev/null
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-hdpi/ic_menu_sortby_am_alpha.png b/packages/DocumentsUI/res/drawable-hdpi/ic_menu_sortby_am_alpha.png
deleted file mode 100644
index 5e66488..0000000
--- a/packages/DocumentsUI/res/drawable-hdpi/ic_menu_sortby_am_alpha.png
+++ /dev/null
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-hdpi/ic_menu_view_grid_alpha.png b/packages/DocumentsUI/res/drawable-hdpi/ic_menu_view_grid_alpha.png
deleted file mode 100644
index 7e15a8c..0000000
--- a/packages/DocumentsUI/res/drawable-hdpi/ic_menu_view_grid_alpha.png
+++ /dev/null
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-hdpi/ic_menu_view_list_alpha.png b/packages/DocumentsUI/res/drawable-hdpi/ic_menu_view_list_alpha.png
deleted file mode 100644
index c15537a..0000000
--- a/packages/DocumentsUI/res/drawable-hdpi/ic_menu_view_list_alpha.png
+++ /dev/null
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-hdpi/ic_root_download_alpha.png b/packages/DocumentsUI/res/drawable-hdpi/ic_root_download_alpha.png
deleted file mode 100644
index d9aacea..0000000
--- a/packages/DocumentsUI/res/drawable-hdpi/ic_root_download_alpha.png
+++ /dev/null
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-hdpi/ic_root_recent_alpha.png b/packages/DocumentsUI/res/drawable-hdpi/ic_root_recent_alpha.png
deleted file mode 100644
index 9e003f0..0000000
--- a/packages/DocumentsUI/res/drawable-hdpi/ic_root_recent_alpha.png
+++ /dev/null
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-mdpi/ic_breadcrumb_arrow_am_alpha.png b/packages/DocumentsUI/res/drawable-mdpi/ic_breadcrumb_arrow_am_alpha.png
deleted file mode 100644
index 9a048f1..0000000
--- a/packages/DocumentsUI/res/drawable-mdpi/ic_breadcrumb_arrow_am_alpha.png
+++ /dev/null
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-mdpi/ic_cab_cancel_alpha.png b/packages/DocumentsUI/res/drawable-mdpi/ic_cab_cancel_alpha.png
deleted file mode 100644
index 40a1a84..0000000
--- a/packages/DocumentsUI/res/drawable-mdpi/ic_cab_cancel_alpha.png
+++ /dev/null
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-mdpi/ic_dialog_alert_alpha.png b/packages/DocumentsUI/res/drawable-mdpi/ic_dialog_alert_alpha.png
deleted file mode 100644
index e768d11..0000000
--- a/packages/DocumentsUI/res/drawable-mdpi/ic_dialog_alert_alpha.png
+++ /dev/null
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-mdpi/ic_dialog_info_alpha.png b/packages/DocumentsUI/res/drawable-mdpi/ic_dialog_info_alpha.png
deleted file mode 100644
index 5ef3dc0..0000000
--- a/packages/DocumentsUI/res/drawable-mdpi/ic_dialog_info_alpha.png
+++ /dev/null
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-mdpi/ic_grid_folder_alpha.png b/packages/DocumentsUI/res/drawable-mdpi/ic_grid_folder_alpha.png
deleted file mode 100644
index 44e0e37..0000000
--- a/packages/DocumentsUI/res/drawable-mdpi/ic_grid_folder_alpha.png
+++ /dev/null
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-mdpi/ic_hamburger_alpha.png b/packages/DocumentsUI/res/drawable-mdpi/ic_hamburger_alpha.png
deleted file mode 100644
index ef2a48c..0000000
--- a/packages/DocumentsUI/res/drawable-mdpi/ic_hamburger_alpha.png
+++ /dev/null
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-mdpi/ic_menu_copy_alpha.png b/packages/DocumentsUI/res/drawable-mdpi/ic_menu_copy_alpha.png
deleted file mode 100644
index c94cc28..0000000
--- a/packages/DocumentsUI/res/drawable-mdpi/ic_menu_copy_alpha.png
+++ /dev/null
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-mdpi/ic_menu_delete_alpha.png b/packages/DocumentsUI/res/drawable-mdpi/ic_menu_delete_alpha.png
deleted file mode 100644
index 999aa4c..0000000
--- a/packages/DocumentsUI/res/drawable-mdpi/ic_menu_delete_alpha.png
+++ /dev/null
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-mdpi/ic_menu_new_folder_am_alpha.png b/packages/DocumentsUI/res/drawable-mdpi/ic_menu_new_folder_am_alpha.png
deleted file mode 100644
index 6e6b870..0000000
--- a/packages/DocumentsUI/res/drawable-mdpi/ic_menu_new_folder_am_alpha.png
+++ /dev/null
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-mdpi/ic_menu_search_alpha.png b/packages/DocumentsUI/res/drawable-mdpi/ic_menu_search_alpha.png
deleted file mode 100644
index 6b16343..0000000
--- a/packages/DocumentsUI/res/drawable-mdpi/ic_menu_search_alpha.png
+++ /dev/null
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-mdpi/ic_menu_share_alpha.png b/packages/DocumentsUI/res/drawable-mdpi/ic_menu_share_alpha.png
deleted file mode 100644
index f02d360..0000000
--- a/packages/DocumentsUI/res/drawable-mdpi/ic_menu_share_alpha.png
+++ /dev/null
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-mdpi/ic_menu_sortby_am_alpha.png b/packages/DocumentsUI/res/drawable-mdpi/ic_menu_sortby_am_alpha.png
deleted file mode 100644
index 04a12a4..0000000
--- a/packages/DocumentsUI/res/drawable-mdpi/ic_menu_sortby_am_alpha.png
+++ /dev/null
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-mdpi/ic_menu_view_grid_alpha.png b/packages/DocumentsUI/res/drawable-mdpi/ic_menu_view_grid_alpha.png
deleted file mode 100644
index 5f968d5..0000000
--- a/packages/DocumentsUI/res/drawable-mdpi/ic_menu_view_grid_alpha.png
+++ /dev/null
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-mdpi/ic_menu_view_list_alpha.png b/packages/DocumentsUI/res/drawable-mdpi/ic_menu_view_list_alpha.png
deleted file mode 100644
index 7a8eae9..0000000
--- a/packages/DocumentsUI/res/drawable-mdpi/ic_menu_view_list_alpha.png
+++ /dev/null
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-mdpi/ic_root_download_alpha.png b/packages/DocumentsUI/res/drawable-mdpi/ic_root_download_alpha.png
deleted file mode 100644
index c2c845e..0000000
--- a/packages/DocumentsUI/res/drawable-mdpi/ic_root_download_alpha.png
+++ /dev/null
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-mdpi/ic_root_recent_alpha.png b/packages/DocumentsUI/res/drawable-mdpi/ic_root_recent_alpha.png
deleted file mode 100644
index f500d58..0000000
--- a/packages/DocumentsUI/res/drawable-mdpi/ic_root_recent_alpha.png
+++ /dev/null
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-xhdpi/ic_breadcrumb_arrow_am_alpha.png b/packages/DocumentsUI/res/drawable-xhdpi/ic_breadcrumb_arrow_am_alpha.png
deleted file mode 100644
index 073583e..0000000
--- a/packages/DocumentsUI/res/drawable-xhdpi/ic_breadcrumb_arrow_am_alpha.png
+++ /dev/null
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-xhdpi/ic_cab_cancel_alpha.png b/packages/DocumentsUI/res/drawable-xhdpi/ic_cab_cancel_alpha.png
deleted file mode 100644
index 6bc4372..0000000
--- a/packages/DocumentsUI/res/drawable-xhdpi/ic_cab_cancel_alpha.png
+++ /dev/null
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-xhdpi/ic_dialog_alert_alpha.png b/packages/DocumentsUI/res/drawable-xhdpi/ic_dialog_alert_alpha.png
deleted file mode 100644
index 2ea6164..0000000
--- a/packages/DocumentsUI/res/drawable-xhdpi/ic_dialog_alert_alpha.png
+++ /dev/null
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-xhdpi/ic_dialog_info_alpha.png b/packages/DocumentsUI/res/drawable-xhdpi/ic_dialog_info_alpha.png
deleted file mode 100644
index 46ed12a..0000000
--- a/packages/DocumentsUI/res/drawable-xhdpi/ic_dialog_info_alpha.png
+++ /dev/null
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-xhdpi/ic_grid_folder_alpha.png b/packages/DocumentsUI/res/drawable-xhdpi/ic_grid_folder_alpha.png
deleted file mode 100644
index 1a4e7c4..0000000
--- a/packages/DocumentsUI/res/drawable-xhdpi/ic_grid_folder_alpha.png
+++ /dev/null
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-xhdpi/ic_hamburger_alpha.png b/packages/DocumentsUI/res/drawable-xhdpi/ic_hamburger_alpha.png
deleted file mode 100644
index 4e0286b..0000000
--- a/packages/DocumentsUI/res/drawable-xhdpi/ic_hamburger_alpha.png
+++ /dev/null
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-xhdpi/ic_menu_copy_alpha.png b/packages/DocumentsUI/res/drawable-xhdpi/ic_menu_copy_alpha.png
deleted file mode 100644
index 1cf76a9..0000000
--- a/packages/DocumentsUI/res/drawable-xhdpi/ic_menu_copy_alpha.png
+++ /dev/null
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-xhdpi/ic_menu_delete_alpha.png b/packages/DocumentsUI/res/drawable-xhdpi/ic_menu_delete_alpha.png
deleted file mode 100644
index 796ccd22..0000000
--- a/packages/DocumentsUI/res/drawable-xhdpi/ic_menu_delete_alpha.png
+++ /dev/null
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-xhdpi/ic_menu_new_folder_am_alpha.png b/packages/DocumentsUI/res/drawable-xhdpi/ic_menu_new_folder_am_alpha.png
deleted file mode 100644
index 49272b0..0000000
--- a/packages/DocumentsUI/res/drawable-xhdpi/ic_menu_new_folder_am_alpha.png
+++ /dev/null
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-xhdpi/ic_menu_search_alpha.png b/packages/DocumentsUI/res/drawable-xhdpi/ic_menu_search_alpha.png
deleted file mode 100644
index 6381902..0000000
--- a/packages/DocumentsUI/res/drawable-xhdpi/ic_menu_search_alpha.png
+++ /dev/null
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-xhdpi/ic_menu_share_alpha.png b/packages/DocumentsUI/res/drawable-xhdpi/ic_menu_share_alpha.png
deleted file mode 100644
index 81c80b7..0000000
--- a/packages/DocumentsUI/res/drawable-xhdpi/ic_menu_share_alpha.png
+++ /dev/null
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-xhdpi/ic_menu_sortby_am_alpha.png b/packages/DocumentsUI/res/drawable-xhdpi/ic_menu_sortby_am_alpha.png
deleted file mode 100644
index 9e4fd61..0000000
--- a/packages/DocumentsUI/res/drawable-xhdpi/ic_menu_sortby_am_alpha.png
+++ /dev/null
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-xhdpi/ic_menu_view_grid_alpha.png b/packages/DocumentsUI/res/drawable-xhdpi/ic_menu_view_grid_alpha.png
deleted file mode 100644
index 630188c..0000000
--- a/packages/DocumentsUI/res/drawable-xhdpi/ic_menu_view_grid_alpha.png
+++ /dev/null
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-xhdpi/ic_menu_view_list_alpha.png b/packages/DocumentsUI/res/drawable-xhdpi/ic_menu_view_list_alpha.png
deleted file mode 100644
index 73372f4..0000000
--- a/packages/DocumentsUI/res/drawable-xhdpi/ic_menu_view_list_alpha.png
+++ /dev/null
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-xhdpi/ic_root_download_alpha.png b/packages/DocumentsUI/res/drawable-xhdpi/ic_root_download_alpha.png
deleted file mode 100644
index f5afb24..0000000
--- a/packages/DocumentsUI/res/drawable-xhdpi/ic_root_download_alpha.png
+++ /dev/null
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-xhdpi/ic_root_recent_alpha.png b/packages/DocumentsUI/res/drawable-xhdpi/ic_root_recent_alpha.png
deleted file mode 100644
index fe71c25..0000000
--- a/packages/DocumentsUI/res/drawable-xhdpi/ic_root_recent_alpha.png
+++ /dev/null
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-xxhdpi/ic_breadcrumb_arrow_am_alpha.png b/packages/DocumentsUI/res/drawable-xxhdpi/ic_breadcrumb_arrow_am_alpha.png
deleted file mode 100644
index b96cfd1..0000000
--- a/packages/DocumentsUI/res/drawable-xxhdpi/ic_breadcrumb_arrow_am_alpha.png
+++ /dev/null
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-xxhdpi/ic_cab_cancel_alpha.png b/packages/DocumentsUI/res/drawable-xxhdpi/ic_cab_cancel_alpha.png
deleted file mode 100644
index 51b4401..0000000
--- a/packages/DocumentsUI/res/drawable-xxhdpi/ic_cab_cancel_alpha.png
+++ /dev/null
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-xxhdpi/ic_dialog_alert_alpha.png b/packages/DocumentsUI/res/drawable-xxhdpi/ic_dialog_alert_alpha.png
deleted file mode 100644
index ed36f70..0000000
--- a/packages/DocumentsUI/res/drawable-xxhdpi/ic_dialog_alert_alpha.png
+++ /dev/null
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-xxhdpi/ic_dialog_info_alpha.png b/packages/DocumentsUI/res/drawable-xxhdpi/ic_dialog_info_alpha.png
deleted file mode 100644
index a81eeb9..0000000
--- a/packages/DocumentsUI/res/drawable-xxhdpi/ic_dialog_info_alpha.png
+++ /dev/null
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-xxhdpi/ic_grid_folder_alpha.png b/packages/DocumentsUI/res/drawable-xxhdpi/ic_grid_folder_alpha.png
deleted file mode 100644
index d7b2bfb..0000000
--- a/packages/DocumentsUI/res/drawable-xxhdpi/ic_grid_folder_alpha.png
+++ /dev/null
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-xxhdpi/ic_hamburger_alpha.png b/packages/DocumentsUI/res/drawable-xxhdpi/ic_hamburger_alpha.png
deleted file mode 100644
index 7dae60b..0000000
--- a/packages/DocumentsUI/res/drawable-xxhdpi/ic_hamburger_alpha.png
+++ /dev/null
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-xxhdpi/ic_menu_copy_alpha.png b/packages/DocumentsUI/res/drawable-xxhdpi/ic_menu_copy_alpha.png
deleted file mode 100644
index 074ea88..0000000
--- a/packages/DocumentsUI/res/drawable-xxhdpi/ic_menu_copy_alpha.png
+++ /dev/null
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-xxhdpi/ic_menu_delete_alpha.png b/packages/DocumentsUI/res/drawable-xxhdpi/ic_menu_delete_alpha.png
deleted file mode 100644
index 6d7cb81..0000000
--- a/packages/DocumentsUI/res/drawable-xxhdpi/ic_menu_delete_alpha.png
+++ /dev/null
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-xxhdpi/ic_menu_new_folder_am_alpha.png b/packages/DocumentsUI/res/drawable-xxhdpi/ic_menu_new_folder_am_alpha.png
deleted file mode 100644
index 5c4360a..0000000
--- a/packages/DocumentsUI/res/drawable-xxhdpi/ic_menu_new_folder_am_alpha.png
+++ /dev/null
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-xxhdpi/ic_menu_search_alpha.png b/packages/DocumentsUI/res/drawable-xxhdpi/ic_menu_search_alpha.png
deleted file mode 100644
index 3ae490e..0000000
--- a/packages/DocumentsUI/res/drawable-xxhdpi/ic_menu_search_alpha.png
+++ /dev/null
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-xxhdpi/ic_menu_share_alpha.png b/packages/DocumentsUI/res/drawable-xxhdpi/ic_menu_share_alpha.png
deleted file mode 100644
index 784933a..0000000
--- a/packages/DocumentsUI/res/drawable-xxhdpi/ic_menu_share_alpha.png
+++ /dev/null
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-xxhdpi/ic_menu_sortby_am_alpha.png b/packages/DocumentsUI/res/drawable-xxhdpi/ic_menu_sortby_am_alpha.png
deleted file mode 100644
index cb9d196..0000000
--- a/packages/DocumentsUI/res/drawable-xxhdpi/ic_menu_sortby_am_alpha.png
+++ /dev/null
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-xxhdpi/ic_menu_view_grid_alpha.png b/packages/DocumentsUI/res/drawable-xxhdpi/ic_menu_view_grid_alpha.png
deleted file mode 100644
index 7560f62..0000000
--- a/packages/DocumentsUI/res/drawable-xxhdpi/ic_menu_view_grid_alpha.png
+++ /dev/null
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-xxhdpi/ic_menu_view_list_alpha.png b/packages/DocumentsUI/res/drawable-xxhdpi/ic_menu_view_list_alpha.png
deleted file mode 100644
index b9483c3..0000000
--- a/packages/DocumentsUI/res/drawable-xxhdpi/ic_menu_view_list_alpha.png
+++ /dev/null
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-xxhdpi/ic_root_download_alpha.png b/packages/DocumentsUI/res/drawable-xxhdpi/ic_root_download_alpha.png
deleted file mode 100644
index ce97c85..0000000
--- a/packages/DocumentsUI/res/drawable-xxhdpi/ic_root_download_alpha.png
+++ /dev/null
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-xxhdpi/ic_root_recent_alpha.png b/packages/DocumentsUI/res/drawable-xxhdpi/ic_root_recent_alpha.png
deleted file mode 100644
index 1dad2a8..0000000
--- a/packages/DocumentsUI/res/drawable-xxhdpi/ic_root_recent_alpha.png
+++ /dev/null
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-xxxhdpi/ic_breadcrumb_arrow_am_alpha.png b/packages/DocumentsUI/res/drawable-xxxhdpi/ic_breadcrumb_arrow_am_alpha.png
deleted file mode 100644
index 6f2dc5b..0000000
--- a/packages/DocumentsUI/res/drawable-xxxhdpi/ic_breadcrumb_arrow_am_alpha.png
+++ /dev/null
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-xxxhdpi/ic_cab_cancel_alpha.png b/packages/DocumentsUI/res/drawable-xxxhdpi/ic_cab_cancel_alpha.png
deleted file mode 100644
index df42fee..0000000
--- a/packages/DocumentsUI/res/drawable-xxxhdpi/ic_cab_cancel_alpha.png
+++ /dev/null
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-xxxhdpi/ic_dialog_alert_alpha.png b/packages/DocumentsUI/res/drawable-xxxhdpi/ic_dialog_alert_alpha.png
deleted file mode 100644
index 3f4d539..0000000
--- a/packages/DocumentsUI/res/drawable-xxxhdpi/ic_dialog_alert_alpha.png
+++ /dev/null
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-xxxhdpi/ic_dialog_info_alpha.png b/packages/DocumentsUI/res/drawable-xxxhdpi/ic_dialog_info_alpha.png
deleted file mode 100644
index c8f86b9..0000000
--- a/packages/DocumentsUI/res/drawable-xxxhdpi/ic_dialog_info_alpha.png
+++ /dev/null
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-xxxhdpi/ic_grid_folder_alpha.png b/packages/DocumentsUI/res/drawable-xxxhdpi/ic_grid_folder_alpha.png
deleted file mode 100644
index ca6be0e..0000000
--- a/packages/DocumentsUI/res/drawable-xxxhdpi/ic_grid_folder_alpha.png
+++ /dev/null
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-xxxhdpi/ic_hamburger_alpha.png b/packages/DocumentsUI/res/drawable-xxxhdpi/ic_hamburger_alpha.png
deleted file mode 100644
index 5c747ed..0000000
--- a/packages/DocumentsUI/res/drawable-xxxhdpi/ic_hamburger_alpha.png
+++ /dev/null
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-xxxhdpi/ic_menu_copy_alpha.png b/packages/DocumentsUI/res/drawable-xxxhdpi/ic_menu_copy_alpha.png
deleted file mode 100644
index 1f6af72..0000000
--- a/packages/DocumentsUI/res/drawable-xxxhdpi/ic_menu_copy_alpha.png
+++ /dev/null
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-xxxhdpi/ic_menu_delete_alpha.png b/packages/DocumentsUI/res/drawable-xxxhdpi/ic_menu_delete_alpha.png
deleted file mode 100644
index f2b75c3..0000000
--- a/packages/DocumentsUI/res/drawable-xxxhdpi/ic_menu_delete_alpha.png
+++ /dev/null
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-xxxhdpi/ic_menu_new_folder_am_alpha.png b/packages/DocumentsUI/res/drawable-xxxhdpi/ic_menu_new_folder_am_alpha.png
deleted file mode 100644
index 073d8533..0000000
--- a/packages/DocumentsUI/res/drawable-xxxhdpi/ic_menu_new_folder_am_alpha.png
+++ /dev/null
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-xxxhdpi/ic_menu_search_alpha.png b/packages/DocumentsUI/res/drawable-xxxhdpi/ic_menu_search_alpha.png
deleted file mode 100644
index 21be572..0000000
--- a/packages/DocumentsUI/res/drawable-xxxhdpi/ic_menu_search_alpha.png
+++ /dev/null
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-xxxhdpi/ic_menu_share_alpha.png b/packages/DocumentsUI/res/drawable-xxxhdpi/ic_menu_share_alpha.png
deleted file mode 100644
index 5a8544ce..0000000
--- a/packages/DocumentsUI/res/drawable-xxxhdpi/ic_menu_share_alpha.png
+++ /dev/null
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-xxxhdpi/ic_menu_sortby_am_alpha.png b/packages/DocumentsUI/res/drawable-xxxhdpi/ic_menu_sortby_am_alpha.png
deleted file mode 100644
index 631663aa..0000000
--- a/packages/DocumentsUI/res/drawable-xxxhdpi/ic_menu_sortby_am_alpha.png
+++ /dev/null
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-xxxhdpi/ic_menu_view_grid_alpha.png b/packages/DocumentsUI/res/drawable-xxxhdpi/ic_menu_view_grid_alpha.png
deleted file mode 100644
index 5d1e8d9..0000000
--- a/packages/DocumentsUI/res/drawable-xxxhdpi/ic_menu_view_grid_alpha.png
+++ /dev/null
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-xxxhdpi/ic_menu_view_list_alpha.png b/packages/DocumentsUI/res/drawable-xxxhdpi/ic_menu_view_list_alpha.png
deleted file mode 100644
index 7c1506b..0000000
--- a/packages/DocumentsUI/res/drawable-xxxhdpi/ic_menu_view_list_alpha.png
+++ /dev/null
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-xxxhdpi/ic_root_download_alpha.png b/packages/DocumentsUI/res/drawable-xxxhdpi/ic_root_download_alpha.png
deleted file mode 100644
index 8c83bff..0000000
--- a/packages/DocumentsUI/res/drawable-xxxhdpi/ic_root_download_alpha.png
+++ /dev/null
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable-xxxhdpi/ic_root_recent_alpha.png b/packages/DocumentsUI/res/drawable-xxxhdpi/ic_root_recent_alpha.png
deleted file mode 100644
index 68df974..0000000
--- a/packages/DocumentsUI/res/drawable-xxxhdpi/ic_root_recent_alpha.png
+++ /dev/null
Binary files differ
diff --git a/packages/DocumentsUI/res/drawable/band_select_overlay.xml b/packages/DocumentsUI/res/drawable/band_select_overlay.xml
deleted file mode 100644
index ba4d526..0000000
--- a/packages/DocumentsUI/res/drawable/band_select_overlay.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- ~ Copyright (C) 2015 The Android Open Source Project
- ~
- ~ Licensed under the Apache License, Version 2.0 (the "License");
- ~ you may not use this file except in compliance with the License.
- ~ You may obtain a copy of the License at
- ~
- ~ http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing, software
- ~ distributed under the License is distributed on an "AS IS" BASIS,
- ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- ~ See the License for the specific language governing permissions and
- ~ limitations under the License
- -->
-
-<shape xmlns:android="http://schemas.android.com/apk/res/android"
- android:shape="rectangle">
- <solid android:color="@color/band_select_background" />
- <stroke android:width="1dp" android:color="@color/band_select_border" />
-</shape>
diff --git a/packages/DocumentsUI/res/drawable/breadcrumb_item_background.xml b/packages/DocumentsUI/res/drawable/breadcrumb_item_background.xml
deleted file mode 100644
index c4bc77b..0000000
--- a/packages/DocumentsUI/res/drawable/breadcrumb_item_background.xml
+++ /dev/null
@@ -1,42 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2016 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.
--->
-
-<ripple
- xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:app="http://schemas.android.com/apk/res/com.android.documentsui"
- android:color="?attr/colorControlHighlight">
- <item
- android:id="@android:id/mask"
- android:drawable="@android:color/white"/>
-
- <item>
- <selector>
- <item
- app:state_highlighted="true"
- android:drawable="@color/item_breadcrumb_background_hovered"/>
- <item
- app:state_highlighted="false"
- android:drawable="@android:color/transparent">
- <corners
- android:topLeftRadius="2dp"
- android:topRightRadius="2dp"
- android:bottomLeftRadius="2dp"
- android:bottomRightRadius="2dp"
- />
- </item>
- </selector>
- </item>
-</ripple>
\ No newline at end of file
diff --git a/packages/DocumentsUI/res/drawable/cabinet.xml b/packages/DocumentsUI/res/drawable/cabinet.xml
deleted file mode 100644
index 843ffc7..0000000
--- a/packages/DocumentsUI/res/drawable/cabinet.xml
+++ /dev/null
@@ -1,81 +0,0 @@
-<!--
-Copyright (C) 2016 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.
--->
-<vector xmlns:android="http://schemas.android.com/apk/res/android"
- android:width="672dp"
- android:height="921dp"
- android:viewportWidth="672.0"
- android:viewportHeight="921.0">
- <path
- android:pathData="M286,0c5,0,10,0,15,0c0.1,1.8,1.5,1.8,2.8,2.1c11.1,2,22.1,4,33.2,6.1c31.8,6.1,63.7,12.3,95.5,18.5 c16.1,3.1,32.1,6.2,48.2,9.3c26,4.9,52.1,9.3,78,14.6c10.8,2.2,21.6,4.6,32.3,6.5c11.3,2,22.6,4.7,34,6c7.9,0.9,7.9,1.1,7.9,9.2 c0,237.3,0,474.5,0,711.8c-1.5,0.9,-3,2,-4.6,2.8c-18.3,8.3,-36.6,16.6,-54.8,25c-29.3,13.4,-58.5,26.8,-87.8,40.3 c-23.5,10.9,-47,21.8,-70.4,32.8c-2.1,1,-4.2,1.5,-6.3,1.1c-6.8,-1.3,-13.6,-2.5,-20.1,-4.9c5.9,-0.3,11.4,1.9,17.1,2.9c5.9,1.1,5.9,1,5.9,-4.9 c0,-17.1,0.1,-34.3,0,-51.4c-0.3,-68.9,-0.7,-137.8,-1,-206.7c0,-35.8,0,-71.6,0.1,-107.4c0,-3.8,-0.6,-5.2,-4.7,-3.7c-7.9,2.9,-16,5.4,-24.1,7.8 c-14.1,4.3,-27.8,10,-42.2,13.2c0,-64,0,-127.9,-0.1,-191.9c0,-4.1,1.3,-5.9,5.1,-7c21,-6.6,42,-13.4,63,-20.2c2.3,-0.8,4.4,-1.8,4,-4.9 c0,-59.3,0,-118.7,0,-178c0,-1.3,-0.7,-2,-2,-2c-2.6,-0.4,-5.2,-0.7,-7.8,-1.2c-30.2,-5.3,-60.5,-10.6,-90.7,-16c-31.9,-5.6,-63.7,-11.3,-95.6,-16.9 c-24.9,-4.4,-49.8,-8.7,-74.6,-13.1C117.1,75.6,93.1,71.3,69,67c-0.3,-0.3,-0.7,-0.7,-1,-1c17.4,-5.3,34.8,-10.7,52.3,-15.9 c29.4,-8.7,58.8,-17.2,88.2,-25.8c24.3,-7.1,48.6,-14.2,72.9,-21.4C283.1,2.4,285.6,2.7,286,0z"
- android:fillColor="#EFEFEE"/>
- <path
- android:pathData="M412,307c0.4,3,-1.7,4.1,-4,4.9c-21,6.8,-42,13.6,-63,20.2c-3.8,1.2,-5.1,3,-5.1,7C340,403.1,340,467,340,531 c-11.8,-1.2,-23.3,-4.5,-34.9,-6.5c-10,-1.7,-19.9,-4.6,-30.1,-5.5c-0.7,-0.3,-1.4,-0.9,-2.2,-1c-19.8,-4,-39.5,-8,-59.3,-12c-12.2,-2.4,-24.3,-4.7,-36.5,-7 c-0.9,-0.3,-1.8,-0.8,-2.8,-1c-24.5,-4.9,-48.9,-9.9,-73.5,-14.6C89.3,481.3,78,477.1,66,478c-0.7,-1.6,-2.1,-1.8,-3.6,-2.1 c-11.1,-2.2,-22.2,-4.7,-33.3,-6.7c-9.7,-1.7,-19.1,-4.9,-29.1,-5.3c0,-64.3,0,-128.7,0,-193c0.8,-0.2,1.6,-0.4,2.4,-0.7c19,-7.8,37.9,-15.9,57.1,-23.4 c5.4,-2.1,6.7,-4.8,6.6,-10.2c-0.2,-55.1,-0.1,-110.2,-0.1,-165.4c0,-1.9,-1.4,-4.6,1.9,-5.4c0.3,0.3,0.7,0.7,1,1c-1.3,4.9,-1,9.9,-1,14.9 c0,51.1,0,102.3,0,153.4c0,1.2,0,2.3,0,3.5c0.1,3.5,1.2,5.9,5.3,6.5c7,1.1,14,2.6,21,3.9c22.1,4.3,44.1,8.6,66.2,12.8 c27.3,5.2,54.6,10.1,81.9,15.3c21.8,4.1,43.5,8.5,65.2,12.6c28.1,5.4,56.2,10.8,84.3,15.8C398.4,306.8,405.1,310.5,412,307z M105,329c0,3.3,0,6.7,-0.1,10c-0.1,2.5,0.4,3.6,3.4,4.2c30,5.3,59.9,10.9,89.8,16.5c3.4,0.6,5.1,0.2,4.9,-3.7 c-0.2,-3.3,-0.1,-6.7,-0.1,-10c0.5,-3.6,-0.1,-6.3,-4.7,-6.1c-1.1,0.1,-2.2,-0.6,-3.4,-0.8c-28.3,-5,-56.6,-9.9,-84.9,-14.9 C105.6,323.4,104.5,325.2,105,329z M65.9,280.8c13.7,2.5,27.4,4.9,41.1,7.4c32.6,5.9,65.2,11.8,97.8,17.8 c41.4,7.6,82.8,15.2,124.2,22.8c6.8,1.2,13.3,1.4,20,-1.3c9.3,-3.6,18.9,-6.3,28.4,-9.4c6.4,-2.1,12.8,-4.2,19.2,-6.4 c-4.2,-2,-8.3,-3,-12.4,-3.8c-22.6,-4.2,-45.3,-8,-67.9,-12.6c-14.6,-3,-29.2,-5.6,-43.8,-8.5c-24,-4.6,-48,-9.2,-72,-13.7c-15.9,-3,-31.8,-6.2,-47.8,-9.2 c-19,-3.6,-38,-7.3,-57,-10.6c-9.9,-1.7,-19.6,-4.5,-29.7,-5.2C48,255.6,30.1,263,12.2,270.4c0,0.4,0,0.7,0,1.1 C30.1,274.6,48,277.7,65.9,280.8z"
- android:fillColor="#EAEAEA"/>
- <path
- android:pathData="M672,782c-6,0.9,-11.1,4.3,-16.4,6.9c-30.8,15,-61.5,30.3,-92.3,45.4c-34.8,17.1,-69.5,34.3,-104.5,51.1 c-13,6.3,-26,12.8,-39,19.1c-1.5,0.7,-3.7,1,-3.9,3.4c-3.7,0,-7.3,0,-11,0c-0.4,-3,-3.1,-2.3,-4.7,-2.7c-19.3,-4.8,-38.6,-9.5,-57.9,-14.1 c-27.5,-6.5,-55.2,-12.7,-82.6,-19.4c-30.9,-7.5,-61.8,-15,-92.7,-22.1c-24.8,-5.8,-49.5,-12,-74.3,-18C70.8,826.5,48.9,821.3,27,816 c-1.1,-0.3,-2.3,-0.5,-3.3,-1c-3.2,-1.3,-3.5,-3.3,-0.7,-5.4c0.9,-0.7,2,-1.2,3.1,-1.7c12,-5.3,24,-10.7,36,-16c0.4,-0.2,0.9,-0.2,1.9,-0.3 c0,3.6,0,7,0,10.5c0,1.6,-0.5,3.5,2,3.9c0.7,2.8,3.2,2.5,5.2,3c39.3,9,78.7,18.1,118.1,27c43.9,10,87.7,20,131.6,29.9 c9.7,2.2,19.2,4.9,29.1,6c1.1,1.5,2.6,0.9,4,1l0,0c4.1,2,8.5,2.6,13,3l0,0c7.2,2.4,14.4,4.3,22,5l0,0c6.5,2.5,13.3,3.6,20.1,4.9 c2.1,0.4,4.2,-0.1,6.3,-1.1c23.5,-11,46.9,-21.9,70.4,-32.8c29.2,-13.5,58.5,-26.9,87.8,-40.3c18.3,-8.4,36.6,-16.6,54.8,-25 c1.6,-0.7,3.1,-1.9,4.6,-2.8c2,-2.9,1.1,-6.2,0.9,-9.2c-0.3,-4.7,1.9,-5.5,5.7,-4.7c10.8,2.2,21.6,4.6,32.5,6.9C672,778.7,672,780.3,672,782z "
- android:fillColor="#E6E4E4"/>
- <path
- android:pathData="M350,872c-9.9,-1.1,-19.4,-3.9,-29.1,-6C277,856,233.1,846,189.2,836c-39.4,-9,-78.7,-18,-118.1,-27 c-2,-0.4,-4.5,-0.2,-5.2,-3c0,-85.7,0,-171.4,0.1,-257.1c6.5,0.1,12.7,2.3,19,3.6c26.4,5.4,52.8,10.9,79.2,16.5c25.9,5.4,51.8,11,77.7,16.4 c26.2,5.5,52.5,11,78.7,16.5c30.1,6.3,60.2,12.6,90.3,19c0.3,68.9,0.7,137.8,1,206.7c0.1,17.1,0,34.3,0,51.4c0,5.9,0,6,-5.9,4.9 c-5.7,-1.1,-11.2,-3.2,-17.1,-2.9c0,0,0,0,0,0c-7,-3.1,-14.2,-5.4,-22,-5c0,0,0,0,0,0c-3.9,-2.9,-8.4,-2.9,-13,-3c0,0,0,0,0,0 C352.9,871.5,351.4,872.1,350,872z M177,687c0,3.2,0.1,6.3,0,9.5c-0.1,2.7,0.7,4,3.8,4.6c29.7,5.8,59.3,11.7,89,17.7 c2.4,0.5,4.7,0.1,4.9,-2.6c0.4,-3.7,1.2,-7.6,-0.6,-11.2c1,-3,1.2,-5.3,-3,-6c-29.6,-5.4,-59.2,-10.8,-88.7,-16.5C177.7,681.6,176.5,682.8,177,687 z"
- android:fillColor="#E5E5E5"/>
- <path
- android:pathData="M411,621c-30.1,-6.3,-60.2,-12.6,-90.3,-19c-26.2,-5.5,-52.5,-11,-78.7,-16.5c-25.9,-5.5,-51.8,-11,-77.7,-16.4 c-26.4,-5.5,-52.8,-11.1,-79.2,-16.5c-6.3,-1.3,-12.5,-3.5,-19,-3.6c0,-23.6,0,-47.3,0,-70.9c12,-0.9,23.2,3.3,34.7,5.5c24.5,4.6,49,9.7,73.5,14.6 c1,0.2,1.9,0.6,2.8,1c0,3.3,0.7,6.7,0.7,9.9c0,5.6,2.4,7.5,7.5,8.4c15.3,2.7,30.5,5.8,45.8,8.7c12,2.3,24,4.4,36.1,6.6 c1.9,0.3,4.8,1.5,4.7,-1.4c-0.2,-4.6,1.7,-8.2,3.3,-12.1c10.2,0.9,20,3.8,30.1,5.5c11.7,2,23.1,5.3,34.9,6.5 c14.5,-3.2,28.1,-8.9,42.2,-13.2c8.1,-2.5,16.2,-5,24.1,-7.8c4.1,-1.5,4.8,-0.1,4.7,3.7C411,549.4,411,585.2,411,621z"
- android:fillColor="#D9D9D9"/>
- <path
- android:pathData="M412,307c-6.9,3.5,-13.6,-0.2,-20.1,-1.3c-28.2,-5,-56.2,-10.4,-84.3,-15.8c-21.8,-4.1,-43.5,-8.5,-65.2,-12.6 c-27.3,-5.2,-54.6,-10.1,-81.9,-15.3c-22.1,-4.2,-44.1,-8.5,-66.2,-12.8c-7,-1.3,-13.9,-2.9,-21,-3.9c-4.1,-0.6,-5.2,-3,-5.3,-6.5c0,-1.2,0,-2.3,0,-3.5 c0,-51.1,0,-102.3,0,-153.4c0,-5,-0.3,-10,1,-14.9c24.1,4.3,48.1,8.6,72.2,12.8c24.9,4.4,49.8,8.7,74.6,13.1c31.9,5.6,63.7,11.3,95.6,16.9 c30.2,5.3,60.5,10.6,90.7,16c2.6,0.5,5.2,0.8,7.8,1.2c0,1.3,0.7,2,2,2C412,188.3,412,247.7,412,307z M409,217.4c0,-25.5,0,-51,0,-76.5 c0,-10.9,0.1,-11.2,-10.7,-13.2c-23.4,-4.4,-46.8,-8.5,-70.3,-12.6c-24.1,-4.3,-48.2,-8.4,-72.3,-12.6c-17.7,-3.1,-35.5,-6.3,-53.2,-9.4 c-22.1,-3.9,-44.3,-7.6,-66.4,-11.5c-20,-3.5,-40,-7.1,-60.1,-10.5c-6,-1,-6.1,-0.8,-6.1,5.6c0,53,0,105.9,0,158.9c0,1,0,2,0,3 c0.2,2.6,1,4.1,4,4.6c10.1,1.7,20.1,3.9,30.2,5.8c27.3,5.1,54.6,10.1,81.9,15.2c22.1,4.2,44.1,8.6,66.2,12.8 c27.3,5.2,54.6,10.2,81.9,15.3c22.7,4.3,45.5,8.6,68.2,12.8c6.5,1.2,6.5,1.1,6.5,-5.7C409,272,409,244.7,409,217.4z"
- android:fillColor="#E8E8E8"/>
- <path
- android:pathData="M412,129c-1.3,0,-2,-0.7,-2,-2C411.3,127,412,127.7,412,129z"
- android:fillColor="#EAEAEA"/>
- <path
- android:pathData="M65.8,248.3c10.1,0.7,19.8,3.5,29.7,5.2c19,3.3,38,7,57,10.6c15.9,3,31.8,6.2,47.8,9.2 c24,4.6,48,9.1,72,13.7c14.6,2.8,29.3,5.5,43.8,8.5c22.5,4.6,45.3,8.4,67.9,12.6c4.1,0.8,8.2,1.8,12.4,3.8 c-6.4,2.1,-12.8,4.3,-19.2,6.4c-9.5,3.1,-19.1,5.8,-28.4,9.4c-6.7,2.6,-13.3,2.5,-20,1.3c-41.4,-7.6,-82.8,-15.2,-124.2,-22.8 c-32.6,-6,-65.2,-11.9,-97.8,-17.8c-13.7,-2.5,-27.4,-4.9,-41.1,-7.4C65.9,270,65.9,259.1,65.8,248.3z"
- android:fillColor="#E6A3A3"/>
- <path
- android:pathData="M275,519c-1.5,3.9,-3.5,7.5,-3.3,12.1c0.1,2.9,-2.8,1.7,-4.7,1.4c-12,-2.2,-24.1,-4.3,-36.1,-6.6 c-15.3,-2.9,-30.5,-6,-45.8,-8.7c-5.1,-0.9,-7.5,-2.8,-7.5,-8.4c0,-3.2,-0.8,-6.5,-0.7,-9.9c12.2,2.3,24.4,4.6,36.5,7c19.8,3.9,39.5,8,59.3,12 C273.6,518.2,274.3,518.7,275,519z"
- android:fillColor="#CBCBCA"/>
- <path
- android:pathData="M202.9,345.9c0,3.3,-0.1,6.7,0.1,10c0.2,3.9,-1.4,4.3,-4.9,3.7c-29.9,-5.6,-59.8,-11.2,-89.8,-16.5 c-3,-0.5,-3.5,-1.7,-3.4,-4.2c0.1,-3.3,0.1,-6.7,0.1,-10c21.7,3.9,43.4,7.9,65.2,11.6C181.1,342.4,191.8,345.3,202.9,345.9z"
- android:fillColor="#CFCFCE"/>
- <path
- android:pathData="M65.8,248.3c0,10.9,0,21.7,0,32.6c-17.9,-3.1,-35.8,-6.2,-53.7,-9.3c0,-0.4,0,-0.7,0,-1.1 C30.1,263,48,255.6,65.8,248.3z"
- android:fillColor="#E57474"/>
- <path
- android:pathData="M202.9,345.9c-11.1,-0.6,-21.8,-3.5,-32.6,-5.4c-21.8,-3.7,-43.5,-7.7,-65.2,-11.6c-0.6,-3.8,0.6,-5.6,4.8,-4.8 c28.3,5,56.6,9.9,84.9,14.9c1.1,0.2,2.3,0.8,3.4,0.8C202.8,339.6,203.4,342.3,202.9,345.9z"
- android:fillColor="#BDBDBD"/>
- <path
- android:pathData="M367,876c7.8,-0.4,15,1.9,22,5C381.4,880.3,374.2,878.4,367,876z"
- android:fillColor="#EFEFEE"/>
- <path
- android:pathData="M354,873c4.5,0.1,9.1,0.1,13,3C362.5,875.6,358.1,875,354,873z"
- android:fillColor="#EFEFEE"/>
- <path
- android:pathData="M350,872c1.4,0.1,3,-0.5,4,1C352.6,872.9,351,873.5,350,872z"
- android:fillColor="#EFEFEE"/>
- <path
- android:pathData="M274.1,705c1.9,3.6,1,7.5,0.6,11.2c-0.3,2.8,-2.5,3.1,-4.9,2.6c-29.7,-5.9,-59.3,-11.9,-89,-17.7 c-3.1,-0.6,-3.9,-1.9,-3.8,-4.6c0.1,-3.2,0,-6.3,0,-9.5c1.2,0,2.4,-0.1,3.5,0.1c19.2,3.8,38.4,7.7,57.6,11.4 C250.1,700.8,261.9,703.8,274.1,705z"
- android:fillColor="#D6D6D5"/>
- <path
- android:pathData="M274.1,705c-12.1,-1.2,-24,-4.2,-35.9,-6.5c-19.2,-3.7,-38.4,-7.6,-57.6,-11.4c-1.1,-0.2,-2.3,-0.1,-3.5,-0.1 c-0.5,-4.2,0.7,-5.4,5.3,-4.5c29.5,5.7,59.1,11.1,88.7,16.5C275.3,699.7,275.1,702,274.1,705z"
- android:fillColor="#C9C9C8"/>
- <path
- android:pathData="M409,217.4c0,27.3,0,54.6,0,82c0,6.8,0,6.9,-6.5,5.7c-22.7,-4.2,-45.5,-8.6,-68.2,-12.8 c-27.3,-5.1,-54.6,-10.1,-81.9,-15.3c-22.1,-4.2,-44.1,-8.6,-66.2,-12.8c-27.3,-5.2,-54.6,-10.1,-81.9,-15.2c-10.1,-1.9,-20.1,-4.1,-30.2,-5.8 c-3,-0.5,-3.9,-2.1,-4,-4.6c-0.1,-1,0,-2,0,-3c0,-53,0,-105.9,0,-158.9c0,-6.4,0,-6.6,6.1,-5.6c20,3.4,40,7,60.1,10.5c22.1,3.9,44.3,7.6,66.4,11.5 c17.7,3.1,35.5,6.3,53.2,9.4c24.1,4.2,48.2,8.4,72.3,12.6c23.4,4.1,46.9,8.2,70.3,12.6c10.8,2,10.7,2.3,10.7,13.2 C409,166.4,409,191.9,409,217.4z M283.9,146.9c0.4,-3.2,-0.2,-5.3,-4,-6c-29.7,-5,-59.4,-9.9,-89,-15.3c-4.8,-0.9,-5.2,0.7,-4.8,4.4 c0,3.5,-0.1,7,0,10.5c0,1.3,-0.4,3.2,1.4,3.3c2.9,0.1,5.3,1.8,8.1,2.3c13.8,2.4,27.6,4.9,41.4,7.4c13.3,2.4,26.5,5.1,39.8,7.4 c6.6,1.2,7.3,0.4,7.3,-6.5C284,151.9,283.9,149.4,283.9,146.9z"
- android:fillColor="#E8E7E7"/>
- <path
- android:pathData="M283.9,146.9c0,2.5,0.1,5,0.1,7.5c0,6.9,-0.7,7.7,-7.3,6.5c-13.3,-2.4,-26.5,-5,-39.8,-7.4 c-13.8,-2.5,-27.6,-5.1,-41.4,-7.4c-2.8,-0.5,-5.2,-2.2,-8.1,-2.3c-1.8,-0.1,-1.4,-2,-1.4,-3.3c0,-3.5,0,-7,0,-10.5c1.9,0.3,3.9,0.7,5.8,1 c21.6,4,43.1,8.1,64.7,11.8C265.6,144.4,274.5,147.1,283.9,146.9z"
- android:fillColor="#CFCFCE"/>
- <path
- android:pathData="M283.9,146.9c-9.3,0.2,-18.3,-2.5,-27.3,-4.1c-21.6,-3.7,-43.1,-7.8,-64.7,-11.8c-1.9,-0.4,-3.9,-0.7,-5.8,-1 c-0.4,-3.6,-0.1,-5.2,4.8,-4.4c29.6,5.4,59.3,10.4,89,15.3C283.7,141.6,284.3,143.7,283.9,146.9z"
- android:fillColor="#BDBDBD"/>
-</vector>
diff --git a/packages/DocumentsUI/res/drawable/drag_shadow_background.xml b/packages/DocumentsUI/res/drawable/drag_shadow_background.xml
deleted file mode 100644
index 49465cb..0000000
--- a/packages/DocumentsUI/res/drawable/drag_shadow_background.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2016 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.
--->
-
-<shape xmlns:android="http://schemas.android.com/apk/res/android"
- android:shape="rectangle">
- <solid android:color="@color/item_doc_background" />
- <stroke
- android:width="1dp"
- android:color="#ff9f9f9f" />
- <corners
- android:bottomRightRadius="3dp"
- android:bottomLeftRadius="3dp"
- android:topLeftRadius="3dp"
- android:topRightRadius="3dp"/>
-</shape>
diff --git a/packages/DocumentsUI/res/drawable/hourglass.xml b/packages/DocumentsUI/res/drawable/hourglass.xml
deleted file mode 100644
index 9b8d0e2..0000000
--- a/packages/DocumentsUI/res/drawable/hourglass.xml
+++ /dev/null
@@ -1,168 +0,0 @@
-<!--
-Copyright (C) 2016 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.
--->
-<vector xmlns:android="http://schemas.android.com/apk/res/android"
- android:width="421dp"
- android:height="909dp"
- android:viewportWidth="421.0"
- android:viewportHeight="909.0">
- <path
- android:pathData="M36,122.9c-2.8,-2.6,-5.7,-5.1,-8.3,-7.8c-5.6,-6,-9.2,-12.9,-8.8,-21.5c0.3,-7.5,0.6,-15,-0.1,-22.5 c-1.2,-14.1,5.5,-23.9,16,-31.9c16.7,-12.8,36.1,-19.6,56.1,-25.1c23.8,-6.5,48,-10.2,72.5,-12.3C168.6,1.3,174,2.2,179,0 c19.3,0,38.7,0,58,0c6,2.1,12.4,1.3,18.6,1.8c30.2,2.7,59.9,7.6,88.5,17.5c16.5,5.7,32.6,12.6,45.2,25.4c6.5,6.6,10.3,14,9.8,23.6 c-0.4,7.8,-0.5,15.7,0,23.4c0.6,10.3,-3.4,18.4,-10.6,25.2c-2.2,2,-4.4,4,-6.6,6c-3,2,-6.1,4,-9.1,5.9c-9.2,4.5,-18.5,9,-28.2,12.3 c-42.4,14.5,-86.3,18.8,-130.8,19.6c-10.9,0.2,-21.9,-0.4,-32.9,-0.7c-4.6,-0.4,-9.2,-0.8,-13.9,-1.1c-18.9,-1.1,-37.5,-3.9,-56,-7.6 c-15.3,-3.1,-30.2,-7.6,-44.9,-12.6c-7.6,-3.7,-15.3,-7.4,-22.9,-11.1C41.1,125.8,38.6,124.3,36,122.9z M41,72c2.9,6.9,7.1,12.6,13.1,17.2 c13,10,27.9,15.8,43.4,20.6c28.2,8.8,57.2,12.8,86.5,14c31.8,1.2,63.7,0.8,95.3,-4.6c25.3,-4.4,50.1,-10,72.9,-22.2 c10.8,-5.8,20,-13.1,24.7,-24.9c2.3,-11,-2.3,-19.5,-10.2,-26.4c-10.5,-9.2,-23.1,-14.9,-36.2,-19.6C295.2,13.4,258.4,9.7,221.2,8.1 c-11.1,-0.5,-22.2,0,-33.4,0.6c-21.4,1,-42.6,3.1,-63.6,7.3c-22.2,4.5,-44.1,10.3,-63.4,22.6C48.9,46.3,38.4,55.4,41,72z"
- android:fillColor="#9F9F9F"/>
- <path
- android:pathData="M0,829c3.7,-2.8,4.7,-7.6,7.8,-10.9c2.6,-2.8,4.9,-5.7,9.2,-7.6c0,3.4,-0.1,6.5,0,9.5c0,1.5,-0.7,3.5,1.7,4 c0.4,3.3,1.4,6.4,2.9,9.4c3.8,7.7,10,13,16.8,17.9c9.2,6.7,19.7,10.8,29.8,15.5c-0.7,2.4,1.3,0.7,1.8,1.1l0,0c1.5,2.1,3.7,2.2,6,2 l0,0c0.8,0.6,1.5,1.4,2.4,1.7c9.5,2.7,18.9,5.8,28.7,7.4c3.6,0.6,7,3.5,10.9,1.1c2.4,0.4,4.8,0.8,7.1,1.2c0.2,1.5,1.3,1.6,2.5,1.8 c6.6,0.9,13.3,2.4,19.9,2.8c5.1,0.3,10.3,2.9,15.4,0.3c0.4,0,0.8,0.1,1.1,0.1c0.3,2.2,2.1,1.8,3.5,1.8c3.8,0,7.6,0,11.5,0 c1.1,1.4,2.7,1,4.1,1c17.2,0,34.5,0,51.7,0c1.4,0,3,0.4,4.1,-1c3.8,0,7.6,0,11.5,0c1.4,0,3.2,0.4,3.5,-1.8c9.4,-1,18.7,-2.1,28.1,-3.1 c6,1.3,11.6,0.4,16.9,-2.8c21.2,-4.2,42.1,-9.3,61.8,-18.4c15.8,-7.3,30.8,-15.8,38,-33.1c2.4,-2,1.9,-4.8,2.2,-7.4c0.3,-3,0,-6,0.1,-9 c0,-1,-0.3,-2.1,0.7,-2.7c1.1,-0.7,1.7,0.5,2.5,1c7.2,5,12.1,11.7,14.8,20c0.4,1.2,0.6,2.2,2.1,2.3c0,3.3,0,6.7,0,10 c-1.5,0,-1.8,1.1,-2.2,2.2c-3.8,10.2,-11.2,17.5,-20.1,23.3c-20.8,13.6,-44.1,21.2,-68.1,26.7c-29.2,6.7,-58.7,11,-88.7,11.7 c-1.6,0,-3.5,-0.5,-3.9,2c-18.7,0,-37.3,0,-56,0c-0.3,-2.5,-2.3,-1.9,-3.9,-2c-5.6,-0.1,-11.2,-0.5,-16.9,-0.8c-18.5,-1.2,-36.8,-3.8,-55,-7.3 C79.9,893.9,54,887,30.2,874C19,867.9,8.5,860.9,2.5,849C2,848,1.4,847,0,847C0,841,0,835,0,829z"
- android:fillColor="#E6E4E4"/>
- <path
- android:pathData="M372.9,128.9c3,-2,6.1,-4,9.1,-5.9c-0.2,2.7,0.2,5.4,1,8c-1.5,1.6,-0.3,1.8,1,2c0.3,1,0.7,2,1,3 c-1.5,1.6,-0.3,1.8,1,2c0.7,2,1.3,4,2,6c-1.5,1.6,-0.3,1.8,1,2c0.3,1.7,0.7,3.3,1,5c-1,2.3,-0.6,4.1,2,5c4.9,23.8,9,47.6,8,72 c-3.5,1.5,-2.1,3.8,-1,6c-1,6,-2,12,-3,18c-1.3,1,-1.3,2,0,3c0,0.7,0,1.3,0,2c-2.1,0.4,-2.6,1.3,-1,3c0,0.3,0,0.7,0,1 c-1.3,0.2,-2.5,0.4,-1,2c0.4,2.1,-0.7,4,-1,6c-1.3,0.2,-2.5,0.4,-1,2c-3.7,9.3,-7.3,18.7,-11,28c-2.7,1.2,-4.2,2.9,-3,6 c-3.4,6.9,-7.8,13.3,-12.2,19.5c-6.1,8.6,-12.4,17.3,-19.4,25.2c-7.3,8.3,-15.5,15.8,-23.9,23c-11.9,10.3,-24.9,19.3,-38.1,27.7 c-12.2,7.8,-25.4,14.1,-38.4,20.5c-12.1,6,-18.5,15.8,-21,28.6c-1.5,7.8,-0.5,15.4,2,22.8c1.2,3.5,3.7,6.1,5.6,9.2 c5.4,8.6,14.8,10.5,22.6,15c15.3,9,30.8,17.7,45.3,28.1c14.4,10.4,28.2,21.5,40.5,34.1c10.1,10.4,18.5,22.2,26.8,34.3 c6.5,9.5,11.3,19.6,16.1,29.8c-1.5,1.6,-0.3,1.8,1,2c0.7,2,1.3,4,2,6c-1,2.3,-0.6,4.1,2,5c0.7,1.2,1.2,2.5,1,4c-1,2.3,-0.6,4.1,2,5 c1.2,12.3,4.6,24.1,5.7,36.5c0.8,8.4,1.4,16.8,1,25.1c-0.3,5.9,-1.1,12,-1.9,18c-1.2,8.7,-2.3,17.4,-4.2,25.9 c-1.5,6.6,-3.7,13.1,-5.6,19.6c-1.8,3.1,-2.9,6.5,-3.9,9.9c-3.4,6.4,-5.6,13.6,-11.9,18.2c-0.1,-3.8,1.6,-7.1,3,-10.4 c8.7,-20.9,13,-42.8,14.7,-65.1c1,-12.9,0.2,-25.8,-1.7,-38.7c-2.7,-18.5,-7.8,-36.2,-15.8,-53.1c-7.3,-15.4,-16.8,-29.3,-27.7,-42.4 c-2.7,-3.2,-6.3,-5.7,-9.6,-8.6c0.4,0.8,0.7,1.4,1,1.9c0.7,1.1,1.5,2.2,2.3,3.3c16.5,21.5,28.5,45.2,34.2,71.7c0.7,3.3,3.1,6.9,0.3,10.4 c-1,-1.9,-2.1,-3.7,-3.1,-5.6c-3.3,-6.3,-6.1,-12.9,-11.7,-17.6c-0.4,-0.9,-0.8,-1.8,-1.3,-2.6c-4,-6.3,-10.4,-10.4,-14.8,-16.2c0,-5.4,-2.7,-9.9,-4.8,-14.5 c-8.4,-18.6,-20.4,-34.9,-32.9,-50.8c-8.4,-10.8,-15.5,-22.8,-28.7,-28.8c-5.3,-2.4,-10,-6,-15.1,-8.6c-5.1,-2.6,-9.9,-6.4,-16.3,-5.2 c-5.2,1,-10.4,2.1,-15.3,4.1c-29.3,11.9,-48.4,34.1,-61.8,61.9c-0.3,0.3,-0.7,0.6,-1,1c-7.1,0.8,-13.9,2.9,-20.7,5.1 c-32.6,10.6,-61,27.4,-82.3,54.9c-9.2,11.6,-15.4,24.7,-18.9,39c-1.5,-1.1,-1.1,-2.7,-1.1,-4.1c-0.1,-9.6,0.3,-19.2,1.8,-28.7 c3.7,-22.6,11.8,-43.5,24,-62.8c12.6,-20,28.6,-36.9,47,-51.7c21.3,-17.3,44.6,-31.3,69.3,-42.9c14.5,-6.8,20,-18.8,21.8,-33.1 c1.8,-13.3,-4.9,-24.1,-12.2,-34.4c-3.6,-5,-7.4,-9.8,-13.2,-12.5c-5.8,-2.8,-11.6,-5.7,-17.4,-8.7c-22,-11.6,-42.6,-25.1,-61.1,-41.7 c-20.7,-18.6,-37.9,-40,-48.8,-65.9c-6.7,-15.7,-10.9,-32.1,-12,-49c-1.8,-27.1,2.1,-53.6,11.7,-79.1c3.8,-10.1,7.1,-20.4,13.3,-29.4 c14.7,5,29.6,9.5,44.9,12.6c18.5,3.7,37.2,6.5,56,7.6c4.6,0.3,9.3,0.7,13.9,1.1c0.2,3.6,-1.5,6.8,-2.6,10 c-11.9,33.6,-17.8,68.2,-17.2,103.8c0.2,9.7,1.3,19.4,2.7,29.1c3.8,24.6,11.4,47.7,26,68.1c12.2,17.1,28.4,28.6,49,33.4 c4.7,1.1,9.5,2.2,14.5,-0.5c18.7,-10.2,36.8,-21.2,53.7,-34.2c15.4,-11.9,29.4,-25.3,41.5,-40.5c12.9,-16.2,23.4,-33.8,30.4,-53.4 c6.4,-17.6,10.3,-35.6,10.9,-54.3c0.5,-15.9,0.2,-31.9,-3,-47.6C383.8,158.7,380.1,143.3,372.9,128.9z"
- android:fillColor="#EDECEC"/>
- <path
- android:pathData="M383,780c1.1,-3.4,2.1,-6.8,3.9,-9.9c7.8,7.1,12.8,15.2,12.2,26.4c-0.6,10.7,-0.3,21.5,-0.5,32.3 c-7.2,17.3,-22.2,25.8,-38,33.1c-19.7,9.1,-40.6,14.1,-61.8,18.4c-5.6,0.9,-11.3,1.9,-16.9,2.8c-9.4,1,-18.7,2.1,-28.1,3.1 c-5,0.3,-9.9,0.7,-14.9,1c-20,1.2,-40,0.9,-60,0c-5,-0.3,-9.9,-0.7,-14.9,-1c-0.4,0,-0.8,-0.1,-1.1,-0.1c-12.6,-1.6,-25.2,-3.2,-37.9,-4.8 c-2.4,-0.4,-4.8,-0.8,-7.1,-1.2c-2.6,-0.6,-5.1,-1.3,-7.7,-1.8c-11.6,-2,-22.6,-6.3,-34.2,-8.4c0,0,0,0,0,0c-1.7,-1.6,-3.7,-2.2,-6,-2c0,0,0,0,0,0 c-0.2,-1,-1.1,-0.9,-1.8,-1.1c-10.2,-4.7,-20.6,-8.8,-29.8,-15.5c-6.8,-4.9,-13,-10.2,-16.8,-17.9c-1.5,-3,-2.4,-6.1,-2.9,-9.4 c0.1,-10.3,0,-20.6,0.2,-30.9c0.1,-8.3,3.5,-15,10,-20.2c2,3.5,3.4,7.1,4.1,11c-1.1,0.8,-1,2,-1.1,3.1c-0.6,8.2,2.9,14.9,8.3,20.6 c8.9,9.6,20.4,15.4,32.3,20.2c17.9,7.2,36.5,11.9,55.4,15.4c20.1,3.7,40.3,5.7,60.6,6.5c21.4,0.8,42.8,0.4,64.2,-1.6 c19.8,-1.9,39.4,-4.6,58.7,-9.3c19.9,-4.8,39.3,-11.2,56.4,-22.9c7.8,-5.3,15.2,-11.3,17.4,-21C386.4,790.1,388.3,784.3,383,780z"
- android:fillColor="#9F9F9F"/>
- <path
- android:pathData="M378,305c-1.2,-3.1,0.3,-4.8,3,-6C380.6,301.3,379.7,303.3,378,305z"
- android:fillColor="#F1F0F0"/>
- <path
- android:pathData="M399,234c-1.1,-2.2,-2.5,-4.5,1,-6C399.7,230,400.8,232.2,399,234z"
- android:fillColor="#F1F0F0"/>
- <path
- android:pathData="M392,156c-2.6,-0.9,-3,-2.7,-2,-5C391.4,152.4,391.6,154.2,392,156z"
- android:fillColor="#F1F0F0"/>
- <path
- android:pathData="M389,636c-2.6,-0.9,-3,-2.7,-2,-5C388.4,632.4,388.6,634.2,389,636z"
- android:fillColor="#F1F0F0"/>
- <path
- android:pathData="M392,645c-2.6,-0.9,-3,-2.7,-2,-5C391.4,641.4,391.6,643.2,392,645z"
- android:fillColor="#F1F0F0"/>
- <path
- android:pathData="M396,255c-1.3,-1,-1.3,-2,0,-3C397.3,253,397.3,254,396,255z"
- android:fillColor="#F1F0F0"/>
- <path
- android:pathData="M395,260c-1.6,-1.7,-1.1,-2.6,1,-3C395.7,258,395.3,259,395,260z"
- android:fillColor="#F1F0F0"/>
- <path
- android:pathData="M384,133c-1.3,-0.2,-2.5,-0.4,-1,-2C383.8,131.4,384,132.2,384,133z"
- android:fillColor="#F1F0F0"/>
- <path
- android:pathData="M385,625c-1.3,-0.2,-2.5,-0.4,-1,-2C384.8,623.4,385,624.2,385,625z"
- android:fillColor="#F1F0F0"/>
- <path
- android:pathData="M392,271c-1.5,-1.6,-0.3,-1.8,1,-2C393,269.8,392.8,270.6,392,271z"
- android:fillColor="#F1F0F0"/>
- <path
- android:pathData="M394,263c-1.5,-1.6,-0.3,-1.8,1,-2C395,261.8,394.8,262.6,394,263z"
- android:fillColor="#F1F0F0"/>
- <path
- android:pathData="M386,138c-1.3,-0.2,-2.5,-0.4,-1,-2C385.8,136.4,386,137.2,386,138z"
- android:fillColor="#F1F0F0"/>
- <path
- android:pathData="M389,146c-1.3,-0.2,-2.5,-0.4,-1,-2C388.8,144.4,389,145.2,389,146z"
- android:fillColor="#F1F0F0"/>
- <path
- android:pathData="M33.1,783.9c-0.8,-3.9,-2.2,-7.6,-4.1,-11c-3.7,-11.7,-7.2,-23.5,-9.2,-35.5c-1.3,-7.6,-1.9,-15.4,-2.7,-23.2 c-0.6,-6.2,-0.9,-12.4,-1,-18.5c-0.2,-7.9,1.9,-15.7,2.3,-23.4c0.5,-10.1,2.9,-19.5,5.5,-29c6.3,-23.1,17.3,-43.9,31.5,-62.8 c23.4,-31.1,53.3,-54.7,86.9,-74.1c10.1,-5.8,20.3,-11.6,30.9,-16.2c11.7,-5.2,16.3,-14.9,18.8,-26.3c3.2,-14.9,-2.8,-26.6,-12.7,-37.1 c-1.8,-1.9,-3.9,-3.1,-6.2,-4.2c-23.7,-11.4,-46.4,-24.4,-67.2,-40.7c-16.2,-12.6,-31.3,-26.5,-44.2,-42.6c-16.2,-20.3,-28.8,-42.5,-36.2,-67.5 c-3.1,-10.6,-5.4,-21.3,-6.2,-32.4c-0.7,-9.6,-3.2,-19.3,-2,-28.8c0.8,-6.6,1.5,-13.4,1.9,-20c1,-15.2,4.9,-29.6,9.2,-44c1.7,-5.7,4,-11.3,6.4,-16.8 c0.9,-2.2,1.3,-4.4,1.3,-6.8c2.6,1.4,5.1,2.9,7.2,4.9c-0.6,0.8,-1.4,1.4,-1.8,2.3c-11.2,26.2,-16.2,53.8,-17.4,82.2 c-0.4,8.8,1,17.5,1.9,26.2c2,19.7,7.4,38.4,15.6,56.3c17.9,39.2,46.6,69.1,81.3,93.6c18.5,13.1,38.1,24.3,58.5,34.1 c3.3,1.6,6,3.7,8.1,6.5c8,10.6,12.6,22.1,9.6,35.7c-2.1,9.4,-6.5,17.9,-14.8,22.7c-8.2,4.7,-16.9,8.5,-25.3,12.9 c-22.5,12,-43.8,25.8,-62.6,43c-21.9,19.9,-40.8,42.1,-53.7,69.2C26.3,646.5,20.6,682,24.1,719c1.8,18.7,7,36.7,12.7,54.6 c5.9,18.7,18.2,30.9,35.3,38.9c15.4,7.2,31.5,12.2,48.1,15.8c1.6,0.4,4.3,-0.3,4.8,2.6c-18,-2.8,-35.4,-7.5,-52.3,-14.5 c-12.2,-5.1,-23.4,-11.4,-32.4,-21.4C37.2,791.7,36.5,787,33.1,783.9z"
- android:fillColor="#EDECEC"/>
- <path
- android:pathData="M372.9,128.9c7.2,14.3,10.9,29.8,14.1,45.4c3.2,15.7,3.5,31.6,3,47.6c-0.6,18.7,-4.6,36.7,-10.9,54.3 c-7.1,19.6,-17.6,37.2,-30.4,53.4c-12.1,15.2,-26.1,28.6,-41.5,40.5c-16.9,13,-35,24,-53.7,34.2c-5,2.7,-9.8,1.6,-14.5,0.5 c-20.6,-4.8,-36.8,-16.3,-49,-33.4c-14.6,-20.4,-22.3,-43.5,-26,-68.1c-1.5,-9.7,-2.6,-19.4,-2.7,-29.1c-0.6,-35.6,5.4,-70.2,17.2,-103.8 c1.2,-3.3,2.8,-6.4,2.6,-10c11,0.2,21.9,0.9,32.9,0.7c44.4,-0.8,88.4,-5.2,130.8,-19.6C354.4,137.9,363.7,133.5,372.9,128.9z"
- android:fillColor="#F1F0F0"/>
- <path
- android:pathData="M377,72c-4.6,11.9,-13.9,19.1,-24.7,24.9c-22.9,12.2,-47.6,17.9,-72.9,22.2c-31.6,5.4,-63.5,5.9,-95.3,4.6 c-29.3,-1.1,-58.3,-5.1,-86.5,-14C82.1,105,67.2,99.1,54.2,89.2C48.2,84.6,43.9,78.8,41,72c3.9,-1.8,4.6,-6.2,7.3,-9 c10.3,-10.5,22.9,-16.9,36.5,-21.8c19.7,-7.1,40,-11.5,60.7,-14.5c19.4,-2.8,38.9,-3.9,58.4,-4.5c17.9,-0.6,35.8,0.8,53.6,2.8 c15,1.6,29.9,3.5,44.5,7.1c20,4.9,39.7,10.7,57.2,22.1C366.5,58.8,371.5,65.5,377,72z"
- android:fillColor="#8D8E8E"/>
- <path
- android:pathData="M125,831c-0.4,-2.9,-3.2,-2.3,-4.8,-2.6c-16.6,-3.7,-32.7,-8.7,-48.1,-15.8c-17.1,-8,-29.4,-20.2,-35.3,-38.9 c-5.7,-17.9,-10.9,-35.9,-12.7,-54.6c-3.6,-37.1,2.1,-72.5,18.4,-106.4c13,-27.1,31.9,-49.3,53.7,-69.2c18.8,-17.1,40.2,-30.9,62.6,-43 c8.4,-4.5,17.1,-8.2,25.3,-12.9c8.4,-4.8,12.7,-13.3,14.8,-22.7c3.1,-13.6,-1.6,-25.1,-9.6,-35.7c-2.1,-2.8,-4.8,-4.9,-8.1,-6.5 c-20.4,-9.9,-40,-21.1,-58.5,-34.1c-34.7,-24.6,-63.4,-54.5,-81.3,-93.6c-8.2,-17.9,-13.6,-36.6,-15.6,-56.3c-0.9,-8.7,-2.3,-17.5,-1.9,-26.2 c1.2,-28.3,6.2,-55.9,17.4,-82.2c0.4,-0.9,1.2,-1.5,1.8,-2.3c7.6,3.7,15.3,7.4,22.9,11.1c-6.2,9,-9.5,19.3,-13.3,29.4 c-9.6,25.5,-13.5,52,-11.7,79.1c1.1,16.9,5.4,33.3,12,49c11,25.9,28.1,47.4,48.8,65.9c18.5,16.6,39.1,30.2,61.1,41.7 c5.7,3,11.5,5.9,17.4,8.7c5.8,2.8,9.7,7.6,13.2,12.5c7.3,10.3,14,21.1,12.2,34.4c-1.9,14.3,-7.4,26.3,-21.8,33.1 c-24.7,11.6,-48,25.7,-69.3,42.9c-18.3,14.9,-34.3,31.7,-47,51.7c-12.2,19.3,-20.3,40.2,-24,62.8c-1.6,9.6,-2,19.1,-1.8,28.7 c0,1.4,-0.4,3.1,1.1,4.1c-0.6,14.9,0.1,29.8,3,44.5c4.2,21.4,9.1,42.6,26,58.4c-0.2,2.3,0.9,4.1,2.2,5.9c8.8,12.3,22,18.6,35.3,24.1 c26.4,10.9,54.2,16.1,82.4,19.1c1.7,0.2,3,0.4,3,2.4c-4.5,0.7,-9,0.9,-13.4,0.5c-13.2,-1,-26.5,-1.9,-39.6,-4.1c-0.6,-2.4,-1.7,-2.3,-3.1,-0.6 c-1.3,-0.1,-2.6,-0.3,-3.9,-0.4c-0.6,-2.3,-1.6,-2.4,-3.1,-0.7c-0.6,-0.1,-1.3,-0.2,-1.9,-0.3c-0.6,-2.4,-1.7,-2.4,-3.1,-0.6 C126.2,831.2,125.6,831.1,125,831z"
- android:fillColor="#E8E8E7"/>
- <path
- android:pathData="M377,72c-5.4,-6.4,-10.5,-13.2,-17.7,-17.9C341.7,42.7,322.1,36.9,302,32c-14.6,-3.6,-29.5,-5.5,-44.5,-7.1 c-17.8,-1.9,-35.7,-3.3,-53.6,-2.8c-19.5,0.6,-39,1.7,-58.4,4.5c-20.7,3,-41,7.4,-60.7,14.5C71.3,46.1,58.7,52.4,48.4,63 c-2.7,2.8,-3.5,7.2,-7.3,9c-2.6,-16.6,7.9,-25.6,19.8,-33.3c19.3,-12.3,41.2,-18.2,63.4,-22.6c21,-4.2,42.2,-6.3,63.6,-7.3 c11.1,-0.5,22.3,-1,33.4,-0.6c37.2,1.5,74,5.3,109.4,17.9c13.1,4.6,25.6,10.4,36.2,19.6C374.7,52.5,379.3,61,377,72z"
- android:fillColor="#808080"/>
- <path
- android:pathData="M179,887.2c20,0.9,40,1.2,60,0c0,0.3,0,0.5,0,0.8c-1.1,1.4,-2.7,1,-4.1,1c-17.2,0,-34.5,0,-51.7,0 c-1.4,0,-3,0.4,-4.1,-1C179,887.7,179,887.5,179,887.2z"
- android:fillColor="#F4F3F2"/>
- <path
- android:pathData="M76,869.9c11.6,2.2,22.6,6.5,34.2,8.4c2.6,0.4,5.2,1.2,7.7,1.8c-3.9,2.3,-7.3,-0.6,-10.9,-1.1 c-9.8,-1.6,-19.2,-4.7,-28.7,-7.4C77.5,871.3,76.8,870.5,76,869.9z"
- android:fillColor="#F4F3F2"/>
- <path
- android:pathData="M125.1,881.3c12.6,1.6,25.2,3.2,37.9,4.8c-5.2,2.6,-10.3,0,-15.4,-0.3c-6.7,-0.4,-13.3,-1.9,-19.9,-2.8 C126.3,882.9,125.2,882.8,125.1,881.3z"
- android:fillColor="#F4F3F2"/>
- <path
- android:pathData="M282,883.1c5.6,-0.9,11.3,-1.9,16.9,-2.8C293.7,883.4,288.1,884.4,282,883.1z"
- android:fillColor="#F4F3F2"/>
- <path
- android:pathData="M179,887.2c0,0.3,0,0.5,0,0.8c-3.8,0,-7.6,0,-11.5,0c-1.4,0,-3.2,0.4,-3.5,-1.8C169,886.5,174,886.9,179,887.2z"
- android:fillColor="#FFFFFF"/>
- <path
- android:pathData="M239,888c0,-0.3,0,-0.5,0,-0.8c5,-0.3,9.9,-0.7,14.9,-1c-0.3,2.2,-2.1,1.8,-3.5,1.8C246.6,888,242.8,888,239,888z"
- android:fillColor="#FFFFFF"/>
- <path
- android:pathData="M70,867.9c2.3,-0.2,4.3,0.4,6,2C73.8,870.1,71.6,870,70,867.9z"
- android:fillColor="#F4F3F2"/>
- <path
- android:pathData="M68.2,866.8c0.7,0.2,1.6,0.2,1.8,1.1C69.5,867.4,67.6,869.2,68.2,866.8z"
- android:fillColor="#F4F3F2"/>
- <path
- android:pathData="M165,584c0.3,-0.3,0.7,-0.6,1,-1c10.5,-1.3,21,-3.3,31.5,-3.8c20.8,-1.1,41.4,0.7,61.7,5.4 c30.5,7,57.8,20.3,81.8,40.5c4.4,5.9,10.8,10,14.8,16.2c0.5,0.8,0.9,1.7,1.3,2.6c-2.4,4.1,-4.7,8.1,-7.1,12.2c-4,3.7,-6.3,8.9,-11,12 c-1.6,-0.1,-2.8,0.5,-4.1,1.5c-12.6,9.3,-26.7,15.6,-41.5,20.1c-31,9.4,-62.6,13.3,-95.1,11.6c-12.3,-0.6,-24.5,-1.5,-36.5,-3.4 c-4.5,-0.7,-5.3,0.5,-4.8,4.2c-0.5,0,-1,0.1,-1.5,0c-17.8,-3.9,-34.7,-10.3,-50.9,-18.7c-1,-0.5,-1.6,-1.1,-1.6,-2.3c2.3,-0.3,4.1,1.1,6.1,2 c14.2,6.2,28.9,10.6,44.1,13.3c2.5,0.4,3,0.2,2.4,-2.3c-2.5,-9.3,-3.7,-18.7,-4.8,-28.3c-1.5,-13.7,-0.3,-27.1,1.7,-40.5 C154.6,610.8,159.7,597.4,165,584z"
- android:fillColor="#E57474"/>
- <path
- android:pathData="M103,681c0.1,1.1,0.7,1.8,1.6,2.3c16.2,8.4,33.1,14.8,50.9,18.7c0.5,0.1,1,0,1.5,0c0.6,0.4,1.3,0.7,1.9,1.1 c-0.1,2.7,1,5.2,1.9,7.6c6.5,17.8,16.5,33.6,27.5,48.8c12.5,17.1,27.1,32.1,45.1,43.6c6.6,4.2,13.7,7.3,20.5,11 c-15.6,2.8,-31.4,2.5,-47.1,2.4c-9.9,0,-19.9,-0.2,-29.8,-1.1c-18.2,-1.6,-36.2,-3.9,-54,-8.3c-18.1,-4.4,-35.9,-9.5,-51,-21.1 c-16.9,-15.8,-21.8,-37,-26,-58.4c-2.9,-14.7,-3.6,-29.6,-3,-44.5c3.5,-14.4,9.7,-27.4,18.9,-39c3.4,4.8,6.2,10.1,10.3,14.2 c6,6.1,11.6,13,19.7,16.8c0.5,0.8,1.2,1,2.1,1c0,0,0,0,0,0c0.3,0.3,0.7,0.7,1,1c0,0,0,0,0,0c0.3,0.3,0.7,0.7,1,1l0,0 c1,1.3,2.4,1.8,4,2l0,0C100.7,681.2,101.9,681,103,681L103,681z"
- android:fillColor="#E6A3A3"/>
- <path
- android:pathData="M341,625c-24,-20.1,-51.3,-33.5,-81.8,-40.5c-20.3,-4.7,-41,-6.5,-61.7,-5.4c-10.5,0.6,-21,2.5,-31.5,3.8 c13.4,-27.8,32.5,-49.9,61.8,-61.9c4.9,-2,10.1,-3.1,15.3,-4.1c6.3,-1.2,11.2,2.6,16.3,5.2c5.2,2.6,9.9,6.2,15.1,8.6 c13.3,6,20.3,18,28.7,28.8c12.5,16,24.6,32.2,32.9,50.8C338.3,615.2,341,619.7,341,625z"
- android:fillColor="#F1F0F0"/>
- <path
- android:pathData="M91.9,675c-8,-3.8,-13.6,-10.7,-19.7,-16.8c-4.1,-4.1,-6.9,-9.4,-10.3,-14.2c21.3,-27.5,49.8,-44.3,82.3,-54.9 c6.8,-2.2,13.6,-4.3,20.7,-5.1c-5.3,13.4,-10.4,26.9,-12.5,41.2c-2,13.4,-3.2,26.8,-1.7,40.5c1.1,9.6,2.3,19,4.8,28.3 c0.7,2.5,0.1,2.7,-2.4,2.3c-15.2,-2.6,-29.9,-7.1,-44.1,-13.3c-2,-0.9,-3.7,-2.3,-6.1,-2c0,0,0,0,0,0c-0.7,-1.2,-1.9,-1,-3,-1c0,0,0,0,0,0 c-0.3,-2.7,-2.4,-1.8,-4,-2c0,0,0,0,0,0c-0.3,-0.3,-0.7,-0.7,-1,-1c0,0,0,0,0,0c-0.3,-0.3,-0.7,-0.7,-1,-1c0,0,0,0,0,0 C93.6,675.2,92.8,675,91.9,675z"
- android:fillColor="#D86868"/>
- <path
- android:pathData="M135,832.8c1.3,0.1,2.6,0.3,3.9,0.4c0.9,0.8,2,0.7,3.1,0.6c13.1,2.2,26.4,3,39.6,4.1 c4.5,0.3,9,0.2,13.4,-0.5c3.1,0.3,6.3,0.7,9.4,0.8c22.6,0.4,45.2,-0.9,67.6,-4.1c23.9,-3.3,47.4,-8.2,69.8,-17.6 c10.7,-4.5,21.4,-9.3,29.3,-18.3l0,0.1c6.2,-4.6,8.5,-11.8,11.9,-18.2c5.2,4.3,3.3,10.1,2.2,15c-2.2,9.7,-9.6,15.7,-17.4,21 c-17.1,11.7,-36.5,18.1,-56.4,22.9c-19.3,4.7,-38.9,7.4,-58.7,9.3c-21.4,2,-42.8,2.5,-64.2,1.6c-20.3,-0.8,-40.5,-2.8,-60.6,-6.5 c-19,-3.5,-37.6,-8.2,-55.4,-15.4c-11.9,-4.8,-23.4,-10.6,-32.3,-20.2c-5.3,-5.8,-8.9,-12.4,-8.3,-20.6c0.1,-1.2,0,-2.4,1.1,-3.1 c3.3,3.1,4.1,7.8,7.2,11.1c9,9.9,20.2,16.3,32.4,21.4c16.8,7,34.3,11.7,52.3,14.5c0.6,0.1,1.2,0.2,1.9,0.3c0.9,0.8,2,0.7,3.1,0.6 c0.6,0.1,1.3,0.2,1.9,0.3C132.8,833,133.9,833,135,832.8z"
- android:fillColor="#999899"/>
- <path
- android:pathData="M371.9,667c2.8,-3.5,0.4,-7.1,-0.3,-10.4c-5.7,-26.6,-17.7,-50.3,-34.2,-71.7c-0.8,-1,-1.5,-2.2,-2.3,-3.3 c-0.3,-0.5,-0.6,-1.1,-1,-1.9c3.4,3,6.9,5.4,9.6,8.6c10.8,13.1,20.4,27,27.7,42.4c8,16.9,13.1,34.6,15.8,53.1 c1.9,12.9,2.6,25.8,1.7,38.7c-1.7,22.4,-6,44.3,-14.7,65.1c-1.4,3.3,-3.1,6.6,-3,10.4c0,0,0,-0.1,0,-0.1c-1.8,-0.3,-3.3,0.4,-4.7,1.2 c-6.3,3.7,-12.6,7.3,-19.4,10.2c-24,10.3,-48.8,14.5,-74.7,9.2c-4.2,-0.9,-9.4,-0.2,-12.4,-4.8c13.8,-2,27.6,-4.4,41.1,-8 c10,-2.7,20,-5.4,29,-10.8c1.5,-0.5,3.2,-0.9,4.6,-1.6c10.6,-5.1,19.5,-12.1,25.3,-22.6c4.7,-3.1,8.2,-10.7,6.9,-15c0.3,-1.4,0.6,-2.9,1,-4.3 c5.4,-16.2,7.5,-33.1,9,-50C378,689.7,375.5,678.3,371.9,667z"
- android:fillColor="#F1F0F0"/>
- <path
- android:pathData="M371.9,667c3.6,11.3,6.1,22.7,5.1,34.6c-1.5,16.9,-3.6,33.8,-9,50c-0.5,1.4,-0.7,2.9,-1,4.3 c-2.3,5,-4.6,10,-6.9,15c-5.8,10.5,-14.7,17.5,-25.3,22.6c-1.5,0.7,-3.1,1.1,-4.6,1.6c-0.3,-2.1,0.3,-3.9,1.1,-5.7 c3.4,-7.4,6.4,-14.9,8.9,-22.6c6,-18.1,10,-36.5,12,-55.6c1.2,-11.6,0.9,-23.2,0.6,-34.8c-0.2,-6.8,-0.7,-13.8,-2.8,-20.5 c2.4,-4.1,4.7,-8.1,7.1,-12.2c5.6,4.7,8.4,11.3,11.7,17.6C369.8,663.3,370.8,665.2,371.9,667z"
- android:fillColor="#E6A3A3"/>
- <path
- android:pathData="M260,814c2.9,4.6,8.1,3.9,12.4,4.8c25.9,5.3,50.7,1.1,74.7,-9.2c6.7,-2.9,13.1,-6.4,19.4,-10.2 c1.4,-0.9,2.9,-1.6,4.7,-1.2c-7.9,9.1,-18.6,13.8,-29.3,18.3c-22.3,9.4,-45.9,14.3,-69.8,17.6c-22.4,3.1,-45,4.4,-67.6,4.1 c-3.1,-0.1,-6.3,-0.5,-9.4,-0.8c-0.1,-2,-1.4,-2.2,-3,-2.4c-28.3,-3,-56,-8.2,-82.4,-19.1c-13.4,-5.5,-26.5,-11.8,-35.3,-24.1c-1.3,-1.8,-2.4,-3.6,-2.2,-5.9 c15.1,11.6,32.9,16.7,51,21.1c17.7,4.4,35.8,6.6,54,8.3c10,0.9,20,1.1,29.8,1.1c15.7,0.1,31.5,0.4,47.1,-2.4 C256,814,258,814,260,814z"
- android:fillColor="#EDECEC"/>
- <path
- android:pathData="M130,831.9c-1.1,0.1,-2.2,0.2,-3.1,-0.6C128.3,829.5,129.4,829.5,130,831.9z"
- android:fillColor="#EDECEC"/>
- <path
- android:pathData="M135,832.8c-1.1,0.1,-2.2,0.2,-3.1,-0.7C133.4,830.5,134.4,830.6,135,832.8z"
- android:fillColor="#EDECEC"/>
- <path
- android:pathData="M142,833.8c-1.1,0.1,-2.2,0.2,-3.1,-0.6C140.3,831.5,141.4,831.5,142,833.8z"
- android:fillColor="#EDECEC"/>
- <path
- android:pathData="M260,814c-2,0,-4,0,-6,0c-6.8,-3.7,-13.9,-6.8,-20.5,-11c-18,-11.5,-32.7,-26.4,-45.1,-43.6c-11,-15.2,-21,-31,-27.5,-48.8 c-0.9,-2.5,-2,-4.9,-1.9,-7.7c0.7,0,1.4,-0.1,2,0.1c16.2,4.6,33.1,5.3,49.6,5.3c10,0,20.1,-0.2,30.2,-1.3c19.5,-2,38.7,-5.3,57,-12.4 c15.6,-6,30.1,-13.9,41.3,-26.9c4.7,-3.1,7,-8.3,11,-12c2.1,6.7,2.6,13.7,2.8,20.5c0.3,11.6,0.6,23.1,-0.6,34.8c-2,19,-6,37.5,-12,55.6 c-2.6,7.7,-5.5,15.3,-8.9,22.6c-0.9,1.9,-1.5,3.7,-1.1,5.7c-9,5.4,-19,8.1,-29,10.8C287.6,809.6,273.8,811.9,260,814z"
- android:fillColor="#E6A3A3"/>
- <path
- android:pathData="M339,668c-11.1,13,-25.7,20.8,-41.3,26.9c-18.3,7.1,-37.5,10.4,-57,12.4c-10.1,1,-20.3,1.3,-30.2,1.3 c-16.6,0,-33.4,-0.7,-49.6,-5.3c-0.6,-0.2,-1.3,-0.1,-2,-0.1c-0.6,-0.4,-1.3,-0.7,-1.9,-1.1c-0.4,-3.8,0.3,-5,4.8,-4.2c12.1,2,24.3,2.8,36.5,3.4 c32.4,1.7,64.1,-2.3,95.1,-11.6c14.8,-4.5,29,-10.8,41.5,-20.1C336.3,668.5,337.5,667.9,339,668z"
- android:fillColor="#FFFFFF"/>
- <path
- android:pathData="M96,678c1.6,0.2,3.7,-0.7,4,2C98.4,679.8,97,679.3,96,678z"
- android:fillColor="#FFFFFF"/>
- <path
- android:pathData="M100,680c1.1,0,2.3,-0.2,3,1C101.9,681,100.7,681.2,100,680z"
- android:fillColor="#FFFFFF"/>
- <path
- android:pathData="M91.9,675c0.8,0,1.6,0.2,2.1,1C93.2,676,92.4,675.8,91.9,675z"
- android:fillColor="#FFFFFF"/>
- <path
- android:pathData="M94,676c0.3,0.3,0.7,0.7,1,1C94.7,676.7,94.3,676.3,94,676z"
- android:fillColor="#FFFFFF"/>
- <path
- android:pathData="M95,677c0.3,0.3,0.7,0.7,1,1C95.7,677.7,95.3,677.3,95,677z"
- android:fillColor="#C5C5C5"/>
- <path
- android:pathData="M360,771c2.3,-5,4.6,-10,6.9,-15C368.2,760.3,364.7,767.8,360,771z"
- android:fillColor="#EDECEC"/>
-</vector>
diff --git a/packages/DocumentsUI/res/drawable/ic_breadcrumb_arrow.xml b/packages/DocumentsUI/res/drawable/ic_breadcrumb_arrow.xml
deleted file mode 100644
index 76c0e1f..0000000
--- a/packages/DocumentsUI/res/drawable/ic_breadcrumb_arrow.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
- android:src="@drawable/ic_breadcrumb_arrow_am_alpha"
- android:tint="?android:attr/colorControlNormal"
- android:autoMirrored="true" />
diff --git a/packages/DocumentsUI/res/drawable/ic_breadcrumb_arrow_down.xml b/packages/DocumentsUI/res/drawable/ic_breadcrumb_arrow_down.xml
deleted file mode 100644
index 199a308..0000000
--- a/packages/DocumentsUI/res/drawable/ic_breadcrumb_arrow_down.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<rotate xmlns:android="http://schemas.android.com/apk/res/android"
- android:fromDegrees="90"
- android:toDegrees="90"
- android:pivotX="50%"
- android:pivotY="50%"
- android:drawable="@drawable/ic_breadcrumb_arrow">
-</rotate>
\ No newline at end of file
diff --git a/packages/DocumentsUI/res/drawable/ic_cab_cancel.xml b/packages/DocumentsUI/res/drawable/ic_cab_cancel.xml
deleted file mode 100644
index 629100c..0000000
--- a/packages/DocumentsUI/res/drawable/ic_cab_cancel.xml
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
- android:src="@drawable/ic_cab_cancel_alpha"
- android:tint="?android:attr/colorControlNormal" />
diff --git a/packages/DocumentsUI/res/drawable/ic_check_circle.xml b/packages/DocumentsUI/res/drawable/ic_check_circle.xml
deleted file mode 100644
index 62a4e34..0000000
--- a/packages/DocumentsUI/res/drawable/ic_check_circle.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<!--
-Copyright (C) 2016 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.
--->
-<vector xmlns:android="http://schemas.android.com/apk/res/android"
- android:width="24dp"
- android:height="24dp"
- android:viewportWidth="24.0"
- android:viewportHeight="24.0">
- <path
- android:fillColor="?android:attr/colorAccent"
- android:pathData="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10,-4.48 10,-10S17.52 2 12 2zm-2 15l-5,-5 1.41,-1.41L10 14.17l7.59,-7.59L19 8l-9 9z"/>
-</vector>
diff --git a/packages/DocumentsUI/res/drawable/ic_dialog_alert.xml b/packages/DocumentsUI/res/drawable/ic_dialog_alert.xml
deleted file mode 100644
index 5132df3..0000000
--- a/packages/DocumentsUI/res/drawable/ic_dialog_alert.xml
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
- android:src="@drawable/ic_dialog_alert_alpha"
- android:tint="?android:attr/colorControlNormal" />
diff --git a/packages/DocumentsUI/res/drawable/ic_dialog_info.xml b/packages/DocumentsUI/res/drawable/ic_dialog_info.xml
deleted file mode 100644
index a029cca..0000000
--- a/packages/DocumentsUI/res/drawable/ic_dialog_info.xml
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
- android:src="@drawable/ic_dialog_info_alpha"
- android:tint="?android:attr/colorControlNormal" />
diff --git a/packages/DocumentsUI/res/drawable/ic_doc_album.xml b/packages/DocumentsUI/res/drawable/ic_doc_album.xml
deleted file mode 100644
index 1ce3f02..0000000
--- a/packages/DocumentsUI/res/drawable/ic_doc_album.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<!--
-Copyright (C) 2015 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-<vector xmlns:android="http://schemas.android.com/apk/res/android"
- android:width="24dp"
- android:height="24dp"
- android:viewportWidth="24.0"
- android:viewportHeight="24.0">
- <path
- android:fillColor="#FF737373"
- android:pathData="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10,-4.48 10,-10S17.52 2 12 2zm0 14.5c-2.49 0,-4.5,-2.01,-4.5,-4.5S9.51 7.5 12 7.5s4.5 2.01 4.5 4.5,-2.01 4.5,-4.5 4.5zm0,-5.5c-.55 0,-1 .45,-1 1s.45 1 1 1 1,-.45 1,-1,-.45,-1,-1,-1z"/>
-</vector>
diff --git a/packages/DocumentsUI/res/drawable/ic_doc_folder.xml b/packages/DocumentsUI/res/drawable/ic_doc_folder.xml
deleted file mode 100644
index dcbce01..0000000
--- a/packages/DocumentsUI/res/drawable/ic_doc_folder.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<!--
-Copyright (C) 2015 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-<vector xmlns:android="http://schemas.android.com/apk/res/android"
- android:width="24dp"
- android:height="24dp"
- android:viewportWidth="24.0"
- android:viewportHeight="24.0">
- <path
- android:fillColor="#FF737373"
- android:pathData="M10 4H4c-1.1 0,-1.99.9,-1.99 2L2 18c0 1.1.9 2 2 2h16c1.1 0 2,-.9 2,-2V8c0,-1.1,-.9,-2,-2,-2h-8l-2,-2z"/>
-</vector>
diff --git a/packages/DocumentsUI/res/drawable/ic_doc_text.xml b/packages/DocumentsUI/res/drawable/ic_doc_text.xml
deleted file mode 100644
index 7fc04e8..0000000
--- a/packages/DocumentsUI/res/drawable/ic_doc_text.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<!--
-Copyright (C) 2015 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-<vector xmlns:android="http://schemas.android.com/apk/res/android"
- android:width="24dp"
- android:height="24dp"
- android:viewportWidth="24.0"
- android:viewportHeight="24.0">
- <path
- android:fillColor="#FF737373"
- android:pathData="M14 2H6c-1.1 0,-1.99.9,-1.99 2L4 20c0 1.1.89 2 1.99 2H18c1.1 0 2,-.9 2,-2V8l-6,-6zm2 16H8v-2h8v2zm0,-4H8v-2h8v2zm-3,-5V3.5L18.5 9H13z"/>
-</vector>
diff --git a/packages/DocumentsUI/res/drawable/ic_eject.xml b/packages/DocumentsUI/res/drawable/ic_eject.xml
deleted file mode 100644
index cbcd755..0000000
--- a/packages/DocumentsUI/res/drawable/ic_eject.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<!--
-Copyright (C) 2016 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.
--->
-<vector xmlns:android="http://schemas.android.com/apk/res/android"
- android:width="24dp"
- android:height="24dp"
- android:viewportWidth="24.0"
- android:viewportHeight="24.0">
- <path
- android:fillColor="#FF737373"
- android:pathData="M5 17h14v2H5zm7-12L5.33 15h13.34z"/>
-</vector>
diff --git a/packages/DocumentsUI/res/drawable/ic_grid_folder.xml b/packages/DocumentsUI/res/drawable/ic_grid_folder.xml
deleted file mode 100644
index 0c87869..0000000
--- a/packages/DocumentsUI/res/drawable/ic_grid_folder.xml
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
- android:src="@drawable/ic_grid_folder_alpha"
- android:tint="?android:attr/colorControlNormal" />
diff --git a/packages/DocumentsUI/res/drawable/ic_hamburger.xml b/packages/DocumentsUI/res/drawable/ic_hamburger.xml
deleted file mode 100644
index 7cda32e..0000000
--- a/packages/DocumentsUI/res/drawable/ic_hamburger.xml
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
- android:src="@drawable/ic_hamburger_alpha"
- android:tint="?android:attr/colorControlNormal" />
diff --git a/packages/DocumentsUI/res/drawable/ic_menu_copy.xml b/packages/DocumentsUI/res/drawable/ic_menu_copy.xml
deleted file mode 100644
index e0abe07..0000000
--- a/packages/DocumentsUI/res/drawable/ic_menu_copy.xml
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
- android:src="@drawable/ic_menu_copy_alpha"
- android:tint="?android:attr/colorControlNormal" />
diff --git a/packages/DocumentsUI/res/drawable/ic_menu_delete.xml b/packages/DocumentsUI/res/drawable/ic_menu_delete.xml
deleted file mode 100644
index e52ed97..0000000
--- a/packages/DocumentsUI/res/drawable/ic_menu_delete.xml
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
- android:src="@drawable/ic_menu_delete_alpha"
- android:tint="?android:attr/colorControlNormal" />
diff --git a/packages/DocumentsUI/res/drawable/ic_menu_new_folder.xml b/packages/DocumentsUI/res/drawable/ic_menu_new_folder.xml
deleted file mode 100644
index b105535..0000000
--- a/packages/DocumentsUI/res/drawable/ic_menu_new_folder.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
- android:src="@drawable/ic_menu_new_folder_am_alpha"
- android:tint="?android:attr/colorControlNormal"
- android:autoMirrored="true" />
diff --git a/packages/DocumentsUI/res/drawable/ic_menu_search.xml b/packages/DocumentsUI/res/drawable/ic_menu_search.xml
deleted file mode 100644
index 33f548b..0000000
--- a/packages/DocumentsUI/res/drawable/ic_menu_search.xml
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
- android:src="@drawable/ic_menu_search_alpha"
- android:tint="?android:attr/colorControlNormal" />
diff --git a/packages/DocumentsUI/res/drawable/ic_menu_share.xml b/packages/DocumentsUI/res/drawable/ic_menu_share.xml
deleted file mode 100644
index 927e7d3a..0000000
--- a/packages/DocumentsUI/res/drawable/ic_menu_share.xml
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
- android:src="@drawable/ic_menu_share_alpha"
- android:tint="?android:attr/colorControlNormal" />
diff --git a/packages/DocumentsUI/res/drawable/ic_menu_sortby.xml b/packages/DocumentsUI/res/drawable/ic_menu_sortby.xml
deleted file mode 100644
index 065ea87..0000000
--- a/packages/DocumentsUI/res/drawable/ic_menu_sortby.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
- android:src="@drawable/ic_menu_sortby_am_alpha"
- android:tint="?android:attr/colorControlNormal"
- android:autoMirrored="true" />
diff --git a/packages/DocumentsUI/res/drawable/ic_menu_view_grid.xml b/packages/DocumentsUI/res/drawable/ic_menu_view_grid.xml
deleted file mode 100644
index dc09a0c..0000000
--- a/packages/DocumentsUI/res/drawable/ic_menu_view_grid.xml
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
- android:src="@drawable/ic_menu_view_grid_alpha"
- android:tint="?android:attr/colorControlNormal" />
diff --git a/packages/DocumentsUI/res/drawable/ic_menu_view_list.xml b/packages/DocumentsUI/res/drawable/ic_menu_view_list.xml
deleted file mode 100644
index 23c5777..0000000
--- a/packages/DocumentsUI/res/drawable/ic_menu_view_list.xml
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
- android:src="@drawable/ic_menu_view_list_alpha"
- android:tint="?android:attr/colorControlNormal" />
diff --git a/packages/DocumentsUI/res/drawable/ic_root_documents.xml b/packages/DocumentsUI/res/drawable/ic_root_documents.xml
deleted file mode 100644
index afd886d..0000000
--- a/packages/DocumentsUI/res/drawable/ic_root_documents.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<!--
-Copyright (C) 2015 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-<vector xmlns:android="http://schemas.android.com/apk/res/android"
- android:width="24dp"
- android:height="24dp"
- android:viewportWidth="24.0"
- android:viewportHeight="24.0">
- <path
- android:fillColor="#FF000000"
- android:pathData="M10 4H4c-1.1 0,-1.99.9,-1.99 2L2 18c0 1.1.9 2 2 2h16c1.1 0 2,-.9 2,-2V8c0,-1.1,-.9,-2,-2,-2h-8l-2,-2z"/>
-</vector>
diff --git a/packages/DocumentsUI/res/drawable/ic_root_download.xml b/packages/DocumentsUI/res/drawable/ic_root_download.xml
deleted file mode 100644
index f07d8f0..0000000
--- a/packages/DocumentsUI/res/drawable/ic_root_download.xml
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
- android:src="@drawable/ic_root_download_alpha"
- android:tint="?android:attr/colorControlNormal" />
diff --git a/packages/DocumentsUI/res/drawable/ic_root_recent.xml b/packages/DocumentsUI/res/drawable/ic_root_recent.xml
deleted file mode 100644
index 41e6a5e..0000000
--- a/packages/DocumentsUI/res/drawable/ic_root_recent.xml
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
- android:src="@drawable/ic_root_recent_alpha"
- android:tint="?android:attr/colorControlNormal" />
diff --git a/packages/DocumentsUI/res/drawable/ic_root_smartphone.xml b/packages/DocumentsUI/res/drawable/ic_root_smartphone.xml
deleted file mode 100644
index 3021b16..0000000
--- a/packages/DocumentsUI/res/drawable/ic_root_smartphone.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<!--
-Copyright (C) 2015 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-<vector xmlns:android="http://schemas.android.com/apk/res/android"
- android:width="24dp"
- android:height="24dp"
- android:viewportWidth="24.0"
- android:viewportHeight="24.0">
- <path
- android:fillColor="#FF000000"
- android:pathData="M17 1.01L7 1c-1.1 0,-2 .9,-2 2v18c0 1.1.9 2 2 2h10c1.1 0 2,-.9 2,-2V3c0,-1.1,-.9,-1.99,-2,-1.99zM17 19H7V5h10v14z"/>
-</vector>
diff --git a/packages/DocumentsUI/res/drawable/ic_sd_storage.xml b/packages/DocumentsUI/res/drawable/ic_sd_storage.xml
deleted file mode 100644
index 5aeebbb..0000000
--- a/packages/DocumentsUI/res/drawable/ic_sd_storage.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<!--
-Copyright (C) 2015 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-<vector xmlns:android="http://schemas.android.com/apk/res/android"
- android:width="24dp"
- android:height="24dp"
- android:viewportWidth="24.0"
- android:viewportHeight="24.0">
- <path
- android:fillColor="#FF000000"
- android:pathData="M18 2h-8L4.02 8 4 20c0 1.1.9 2 2 2h12c1.1 0 2,-.9 2,-2V4c0,-1.1,-.9,-2,-2,-2zm-6 6h-2V4h2v4zm3 0h-2V4h2v4zm3 0h-2V4h2v4z"/>
-</vector>
diff --git a/packages/DocumentsUI/res/drawable/ic_subdirectory_arrow.xml b/packages/DocumentsUI/res/drawable/ic_subdirectory_arrow.xml
deleted file mode 100644
index 0f34ba4..0000000
--- a/packages/DocumentsUI/res/drawable/ic_subdirectory_arrow.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<!--
-Copyright (C) 2016 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.
--->
-<vector xmlns:android="http://schemas.android.com/apk/res/android"
- android:width="24dp"
- android:height="24dp"
- android:viewportWidth="24.0"
- android:viewportHeight="24.0">
- <path
- android:fillColor="?android:attr/colorControlNormal"
- android:pathData="M19 15l-6 6,-1.42,-1.42L15.17 16H4V4h2v10h9.17l-3.59,-3.58L13 9l6 6z"/>
-</vector>
diff --git a/packages/DocumentsUI/res/drawable/ic_usb_storage.xml b/packages/DocumentsUI/res/drawable/ic_usb_storage.xml
deleted file mode 100644
index 2a8d024..0000000
--- a/packages/DocumentsUI/res/drawable/ic_usb_storage.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<!--
-Copyright (C) 2015 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-<vector xmlns:android="http://schemas.android.com/apk/res/android"
- android:width="24dp"
- android:height="24dp"
- android:viewportWidth="24.0"
- android:viewportHeight="24.0">
- <path
- android:fillColor="#FF000000"
- android:pathData="M15 7v4h1v2h-3V5h2l-3,-4,-3 4h2v8H8v-2.07c.7,-.37 1.2,-1.08 1.2,-1.93 0,-1.21,-.99,-2.2,-2.2,-2.2,-1.21 0,-2.2.99,-2.2 2.2 0 .85.5 1.56 1.2 1.93V13c0 1.11.89 2 2 2h3v3.05c-.71.37,-1.2 1.1,-1.2 1.95 0 1.22.99 2.2 2.2 2.2 1.21 0 2.2,-.98 2.2,-2.2 0,-.85,-.49,-1.58,-1.2,-1.95V15h3c1.11 0 2,-.89 2,-2v-2h1V7h-4z"/>
-</vector>
diff --git a/packages/DocumentsUI/res/drawable/item_doc_grid_border.xml b/packages/DocumentsUI/res/drawable/item_doc_grid_border.xml
deleted file mode 100644
index db66094..0000000
--- a/packages/DocumentsUI/res/drawable/item_doc_grid_border.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2015 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<shape xmlns:android="http://schemas.android.com/apk/res/android"
- android:shape="rectangle">
- <stroke
- android:width="2dp"
- android:color="@color/item_doc_grid_border"/>
-</shape>
diff --git a/packages/DocumentsUI/res/drawable/item_doc_list_background.xml b/packages/DocumentsUI/res/drawable/item_doc_list_background.xml
deleted file mode 100644
index 13910bb..0000000
--- a/packages/DocumentsUI/res/drawable/item_doc_list_background.xml
+++ /dev/null
@@ -1,20 +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.
--->
-
-<shape xmlns:android="http://schemas.android.com/apk/res/android"
- android:shape="rectangle">
- <solid android:color="@color/item_doc_list_background_activated" />
-</shape>
diff --git a/packages/DocumentsUI/res/drawable/progress_indeterminate_horizontal_material_trimmed.xml b/packages/DocumentsUI/res/drawable/progress_indeterminate_horizontal_material_trimmed.xml
deleted file mode 100644
index 070b9a1..0000000
--- a/packages/DocumentsUI/res/drawable/progress_indeterminate_horizontal_material_trimmed.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2015 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<!-- Variant of progress_indeterminate_horizontal_material in frameworks/base/core/res, which
- draws the whole height of the progress bar instead having blank space above and below the
- bar. -->
-<animated-vector xmlns:android="http://schemas.android.com/apk/res/android"
- android:drawable="@drawable/vector_drawable_progress_indeterminate_horizontal_trimmed" >
- <target
- android:name="rect2_grp"
- android:animation="@*android:anim/progress_indeterminate_horizontal_rect2" />
- <target
- android:name="rect1_grp"
- android:animation="@*android:anim/progress_indeterminate_horizontal_rect1" />
-</animated-vector>
diff --git a/packages/DocumentsUI/res/drawable/root_item_background.xml b/packages/DocumentsUI/res/drawable/root_item_background.xml
deleted file mode 100644
index cc56f1e..0000000
--- a/packages/DocumentsUI/res/drawable/root_item_background.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2016 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.
--->
-
-<ripple
- xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:app="http://schemas.android.com/apk/res/com.android.documentsui"
- android:color="?attr/colorControlHighlight">
- <item
- android:id="@android:id/mask"
- android:drawable="@android:color/white"/>
-
- <item>
- <selector>
- <item
- app:state_highlighted="true"
- android:drawable="@color/item_doc_background_selected"/>
- <item
- app:state_highlighted="false"
- android:drawable="@android:color/transparent"/>
- </selector>
- </item>
-</ripple>
\ No newline at end of file
diff --git a/packages/DocumentsUI/res/drawable/vector_drawable_progress_indeterminate_horizontal_trimmed.xml b/packages/DocumentsUI/res/drawable/vector_drawable_progress_indeterminate_horizontal_trimmed.xml
deleted file mode 100644
index 39e3a37..0000000
--- a/packages/DocumentsUI/res/drawable/vector_drawable_progress_indeterminate_horizontal_trimmed.xml
+++ /dev/null
@@ -1,53 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2015 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<!-- Variant of vector_drawable_progress_indeterminate_horizontal in frameworks/base/core/res, which
- draws the whole height of the progress bar instead having blank space above and below the
- bar. -->
-<vector xmlns:android="http://schemas.android.com/apk/res/android"
- android:height="10dp"
- android:width="360dp"
- android:viewportHeight="10"
- android:viewportWidth="360" >
- <group
- android:name="progress_group"
- android:translateX="180"
- android:translateY="5" >
- <path
- android:name="background_track"
- android:pathData="M -180.0,-5.0 l 360.0,0 l 0,10.0 l -360.0,0 Z"
- android:fillColor="?android:attr/colorControlActivated"
- android:fillAlpha="?android:attr/disabledAlpha"/>
- <group
- android:name="rect2_grp"
- android:translateX="-197.60001"
- android:scaleX="0.1" >
- <path
- android:name="rect2"
- android:pathData="M -144.0,-5.0 l 288.0,0 l 0,10.0 l -288.0,0 Z"
- android:fillColor="?android:attr/colorControlActivated" />
- </group>
- <group
- android:name="rect1_grp"
- android:translateX="-522.59998"
- android:scaleX="0.1" >
- <path
- android:name="rect1"
- android:pathData="M -144.0,-5.0 l 288.0,0 l 0,10.0 l -288.0,0 Z"
- android:fillColor="?android:attr/colorControlActivated" />
- </group>
- </group>
-</vector>
diff --git a/packages/DocumentsUI/res/layout-sw720dp-land/item_doc_list.xml b/packages/DocumentsUI/res/layout-sw720dp-land/item_doc_list.xml
deleted file mode 100644
index ecc26e1..0000000
--- a/packages/DocumentsUI/res/layout-sw720dp-land/item_doc_list.xml
+++ /dev/null
@@ -1,135 +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.
--->
-
-<com.android.documentsui.ListItem xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:background="@color/item_doc_background"
- android:focusable="true"
- android:orientation="horizontal" >
-
- <View
- android:id="@+id/focus_indicator"
- android:layout_width="4dp"
- android:layout_height="match_parent" />
-
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:baselineAligned="false"
- android:gravity="center_vertical"
- android:minHeight="@dimen/list_item_height"
- android:orientation="horizontal"
- android:paddingEnd="@dimen/list_item_padding"
- android:paddingStart="@dimen/list_item_padding" >
-
- <FrameLayout
- android:id="@android:id/icon"
- android:layout_width="@dimen/list_item_thumbnail_size"
- android:layout_height="@dimen/list_item_thumbnail_size"
- android:layout_marginEnd="16dp"
- android:layout_marginStart="0dp" >
-
- <ImageView
- android:id="@+id/icon_mime"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="center"
- android:contentDescription="@null"
- android:scaleType="centerInside" />
-
- <ImageView
- android:id="@+id/icon_thumb"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:layout_gravity="center"
- android:contentDescription="@null"
- android:scaleType="centerCrop" />
-
- <ImageView
- android:id="@+id/icon_check"
- android:layout_width="@dimen/check_icon_size"
- android:layout_height="@dimen/check_icon_size"
- android:layout_gravity="center"
- android:alpha="0"
- android:contentDescription="@null"
- android:scaleType="fitCenter"
- android:src="@drawable/ic_check_circle" />
-
- </FrameLayout>
-
- <!-- This is the one special case where we want baseline alignment! -->
-
- <LinearLayout
- android:layout_width="0dp"
- android:layout_height="wrap_content"
- android:layout_weight="1"
- android:orientation="horizontal" >
-
- <TextView
- android:id="@android:id/title"
- android:layout_width="0dp"
- android:layout_height="wrap_content"
- android:layout_marginEnd="12dp"
- android:layout_weight="0.5"
- android:ellipsize="middle"
- android:singleLine="true"
- android:textAlignment="viewStart"
- android:textAppearance="@android:style/TextAppearance.Material.Subhead"
- android:textColor="?android:attr/textColorPrimary" />
-
- <TextView
- android:id="@android:id/summary"
- android:layout_width="0dp"
- android:layout_height="wrap_content"
- android:layout_marginEnd="12dp"
- android:layout_weight="0.25"
- android:ellipsize="end"
- android:singleLine="true"
- android:textAlignment="viewStart"
- android:textAppearance="@android:style/TextAppearance.Material.Body1"
- android:textColor="?android:attr/textColorSecondary" />
-
- <TextView
- android:id="@+id/size"
- android:layout_width="0dp"
- android:layout_height="wrap_content"
- android:layout_marginEnd="12dp"
- android:layout_weight="0.125"
- android:ellipsize="end"
- android:minWidth="70dp"
- android:singleLine="true"
- android:textAlignment="viewEnd"
- android:textAppearance="@android:style/TextAppearance.Material.Body1"
- android:textColor="?android:attr/textColorSecondary" />
-
- <TextView
- android:id="@+id/date"
- android:layout_width="0dp"
- android:layout_height="wrap_content"
- android:layout_marginEnd="12dp"
- android:layout_weight="0.125"
- android:ellipsize="end"
- android:minWidth="70dp"
- android:singleLine="true"
- android:textAlignment="viewEnd"
- android:textAppearance="@android:style/TextAppearance.Material.Body1"
- android:textColor="?android:attr/textColorSecondary" />
- </LinearLayout>
- </LinearLayout>
-
-</com.android.documentsui.ListItem>
diff --git a/packages/DocumentsUI/res/layout/dialog_delete_confirmation.xml b/packages/DocumentsUI/res/layout/dialog_delete_confirmation.xml
deleted file mode 100644
index a1c2910..0000000
--- a/packages/DocumentsUI/res/layout/dialog_delete_confirmation.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2016 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.
--->
-
-<TextView
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:paddingTop="24dp"
- android:paddingStart="24dp"
- android:paddingEnd="24dp"
- android:textAppearance="@android:style/TextAppearance.Material.Subhead"
- android:textColor="@*android:color/primary_text_default_material_light">
-</TextView>
diff --git a/packages/DocumentsUI/res/layout/dialog_file_name.xml b/packages/DocumentsUI/res/layout/dialog_file_name.xml
deleted file mode 100644
index 3a95a13..0000000
--- a/packages/DocumentsUI/res/layout/dialog_file_name.xml
+++ /dev/null
@@ -1,29 +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.
--->
-
-<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:fitsSystemWindows="true"
- android:padding="?android:attr/listPreferredItemPaddingEnd">
-
- <EditText
- android:id="@android:id/text1"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:inputType="text" />
-
-</FrameLayout>
diff --git a/packages/DocumentsUI/res/layout/dialog_open_scoped_directory.xml b/packages/DocumentsUI/res/layout/dialog_open_scoped_directory.xml
deleted file mode 100644
index bfb0271..0000000
--- a/packages/DocumentsUI/res/layout/dialog_open_scoped_directory.xml
+++ /dev/null
@@ -1,44 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (C) 2016 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.
--->
-
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:theme="@style/Theme.AppCompat.Light.Dialog.Alert"
- android:orientation="vertical"
- android:paddingEnd="24dp"
- android:paddingStart="24dp" >
-
- <TextView
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:id="@+id/message"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:paddingEnd="24dp"
- android:paddingStart="32dp"
- android:paddingTop="24dp">
- </TextView>
-
- <CheckBox
- android:id="@+id/do_not_ask_checkbox"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:layout_marginTop="16dip"
- android:text="@string/never_ask_again"
- android:textColor="?android:attr/textColorSecondary"
- android:visibility="gone" />
-</LinearLayout>
\ No newline at end of file
diff --git a/packages/DocumentsUI/res/layout/directory_cluster.xml b/packages/DocumentsUI/res/layout/directory_cluster.xml
deleted file mode 100644
index d84ef08..0000000
--- a/packages/DocumentsUI/res/layout/directory_cluster.xml
+++ /dev/null
@@ -1,42 +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.
--->
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:orientation="vertical">
-
- <FrameLayout
- android:id="@+id/container_message_bar"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:elevation="8dp"
- android:background="@color/material_grey_50"/>
-
- <FrameLayout
- android:id="@+id/container_directory"
- android:clipToPadding="false"
- android:layout_width="match_parent"
- android:layout_height="0dp"
- android:layout_weight="1" />
-
- <FrameLayout
- android:id="@+id/container_save"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:background="@color/material_grey_50"
- android:elevation="8dp" />
-
-</LinearLayout>
diff --git a/packages/DocumentsUI/res/layout/drag_shadow_layout.xml b/packages/DocumentsUI/res/layout/drag_shadow_layout.xml
deleted file mode 100644
index 26613ef..0000000
--- a/packages/DocumentsUI/res/layout/drag_shadow_layout.xml
+++ /dev/null
@@ -1,44 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2016 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.
--->
-
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:paddingStart="8dp"
- android:paddingEnd="8dp"
- android:orientation="horizontal"
- android:gravity="center_vertical|left"
- android:background="@drawable/drag_shadow_background">
-
- <ImageView
- android:id="@android:id/icon"
- android:layout_width="@dimen/root_icon_size"
- android:layout_height="@dimen/root_icon_size"
- android:scaleType="centerInside"
- android:contentDescription="@null"
- android:duplicateParentState="true"/>
-
- <TextView
- android:id="@android:id/title"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:maxLines="1"
- android:ellipsize="end"
- android:textAlignment="viewStart"
- android:textColor="@color/item_title"
- android:paddingStart="8dp"/>
-
-</LinearLayout>
diff --git a/packages/DocumentsUI/res/layout/drawer_layout.xml b/packages/DocumentsUI/res/layout/drawer_layout.xml
deleted file mode 100644
index 32ba6d0..0000000
--- a/packages/DocumentsUI/res/layout/drawer_layout.xml
+++ /dev/null
@@ -1,99 +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.
--->
-
-<!-- CoordinatorLayout is necessary for various components (e.g. Snackbars, and
- floating action buttons) to operate correctly. -->
-<android.support.design.widget.CoordinatorLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:id="@+id/coordinator_layout">
-
- <android.support.v4.widget.DrawerLayout
- android:id="@+id/drawer_layout"
- android:layout_width="match_parent"
- android:layout_height="match_parent">
-
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:orientation="vertical">
-
- <com.android.documentsui.DocumentsToolbar
- android:id="@+id/toolbar"
- android:layout_width="match_parent"
- android:layout_height="?android:attr/actionBarSize"
- android:background="?android:attr/colorPrimary"
- android:elevation="8dp"
- android:theme="?actionBarTheme"
- android:popupTheme="?actionBarPopupTheme">
-
- <com.android.documentsui.DropdownBreadcrumb
- android:id="@+id/dropdown_breadcrumb"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginStart="4dp"
- android:popupTheme="?actionBarPopupTheme"
- android:background="@android:color/transparent"
- android:overlapAnchor="true" />
-
- </com.android.documentsui.DocumentsToolbar>
-
- <FrameLayout
- android:layout_width="match_parent"
- android:layout_height="match_parent">
-
- <include layout="@layout/directory_cluster"/>
-
- <!-- Drawer edge is a dummy view used to capture hovering event
- on view edge to open the drawer. (b/28345294) -->
- <View
- android:id="@+id/drawer_edge"
- android:background="@android:color/transparent"
- android:layout_width="@dimen/drawer_edge_width"
- android:layout_height="match_parent"/>
- </FrameLayout>
-
- </LinearLayout>
-
- <LinearLayout
- android:id="@+id/drawer_roots"
- android:layout_width="256dp"
- android:layout_height="match_parent"
- android:layout_gravity="start"
- android:orientation="vertical"
- android:elevation="16dp"
- android:background="@color/drawer_background">
-
- <Toolbar
- android:id="@+id/roots_toolbar"
- android:layout_width="match_parent"
- android:layout_height="?android:attr/actionBarSize"
- android:background="?android:attr/colorPrimary"
- android:elevation="8dp"
- android:theme="?actionBarTheme"
- android:popupTheme="?actionBarPopupTheme" />
-
- <FrameLayout
- android:id="@+id/container_roots"
- android:layout_width="match_parent"
- android:layout_height="0dp"
- android:layout_weight="1" />
-
- </LinearLayout>
-
- </android.support.v4.widget.DrawerLayout>
-</android.support.design.widget.CoordinatorLayout>
diff --git a/packages/DocumentsUI/res/layout/fixed_layout.xml b/packages/DocumentsUI/res/layout/fixed_layout.xml
deleted file mode 100644
index 9882e94..0000000
--- a/packages/DocumentsUI/res/layout/fixed_layout.xml
+++ /dev/null
@@ -1,70 +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.
--->
-
-<!-- CoordinatorLayout is necessary for various components (e.g. Snackbars, and
- floating action buttons) to operate correctly. -->
-<!-- focusableInTouchMode is set in order to force key events to go to the activity's global key
- callback, which is necessary for proper event routing. See BaseActivity.onKeyDown. -->
-<android.support.design.widget.CoordinatorLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:id="@+id/coordinator_layout"
- android:focusableInTouchMode="true">
-
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:orientation="vertical">
-
- <com.android.documentsui.DocumentsToolbar
- android:id="@+id/toolbar"
- android:layout_width="match_parent"
- android:layout_height="?android:attr/actionBarSize"
- android:background="?android:attr/colorPrimary"
- android:elevation="8dp"
- android:theme="?actionBarTheme"
- android:popupTheme="?actionBarPopupTheme">
-
- <com.android.documentsui.HorizontalBreadcrumb
- android:id="@+id/horizontal_breadcrumb"
- android:layout_marginRight="20dp"
- android:layout_width="match_parent"
- android:layout_height="wrap_content" />
-
- </com.android.documentsui.DocumentsToolbar>
-
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="0dp"
- android:layout_weight="1"
- android:orientation="horizontal"
- android:baselineAligned="false">
-
- <FrameLayout
- android:id="@+id/container_roots"
- android:layout_width="256dp"
- android:layout_height="match_parent" />
-
- <include layout="@layout/directory_cluster"
- android:layout_width="0dp"
- android:elevation="8dp" />
-
- </LinearLayout>
-
- </LinearLayout>
-
-</android.support.design.widget.CoordinatorLayout>
diff --git a/packages/DocumentsUI/res/layout/fragment_directory.xml b/packages/DocumentsUI/res/layout/fragment_directory.xml
deleted file mode 100644
index 1c086a6..0000000
--- a/packages/DocumentsUI/res/layout/fragment_directory.xml
+++ /dev/null
@@ -1,108 +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.
--->
-
-<com.android.documentsui.dirlist.AnimationView
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:background="@color/directory_background"
- android:outlineProvider="bounds"
- android:elevation="4dp"
- android:orientation="vertical">
-
- <ProgressBar
- android:id="@+id/progressbar"
- android:layout_width="match_parent"
- android:layout_height="@dimen/progress_bar_height"
- android:indeterminate="true"
- style="@style/TrimmedHorizontalProgressBar"
- android:visibility="gone"/>
-
- <FrameLayout
- android:id="@+id/container_message_bar"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:elevation="8dp"
- android:background="@color/material_grey_50"
- android:visibility="gone"/>
-
- <com.android.documentsui.dirlist.TouchSwipeRefreshLayout
- android:id="@+id/refresh_layout"
- android:layout_width="match_parent"
- android:layout_height="match_parent">
-
- <FrameLayout
- android:layout_width="match_parent"
- android:layout_height="match_parent">
- <!-- The empty container view -->
- <FrameLayout
- android:id="@android:id/empty"
- android:gravity="center"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:orientation="vertical"
- android:background="@color/directory_background"
- android:focusable="true"
- android:focusableInTouchMode="true"
- android:visibility="gone"
- android:clickable="true">
-
- <LinearLayout
- android:id="@+id/content"
- android:gravity="center"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:orientation="vertical">
-
- <ImageView
- android:id="@+id/artwork"
- android:src="@drawable/cabinet"
- android:adjustViewBounds="true"
- android:layout_height="250dp"
- android:layout_width="fill_parent"
- android:alpha="1"
- android:layout_centerVertical="true"
- android:layout_marginBottom="25dp"
- android:scaleType="fitCenter"
- android:contentDescription="@null"/>
-
- <TextView
- android:id="@+id/message"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="@string/empty"
- style="@android:style/TextAppearance.Material.Subhead"/>
-
- </LinearLayout>
- </FrameLayout>
-
- <android.support.v7.widget.RecyclerView
- android:id="@+id/dir_list"
- android:scrollbars="vertical"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:paddingStart="0dp"
- android:paddingEnd="0dp"
- android:paddingTop="0dp"
- android:paddingBottom="0dp"
- android:clipToPadding="false"
- android:scrollbarStyle="outsideOverlay"
- android:drawSelectorOnTop="true"/>
- </FrameLayout>
-
- </com.android.documentsui.dirlist.TouchSwipeRefreshLayout>
-
-</com.android.documentsui.dirlist.AnimationView>
diff --git a/packages/DocumentsUI/res/layout/fragment_message_bar.xml b/packages/DocumentsUI/res/layout/fragment_message_bar.xml
deleted file mode 100644
index 47e4e77..0000000
--- a/packages/DocumentsUI/res/layout/fragment_message_bar.xml
+++ /dev/null
@@ -1,100 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2015 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:animateLayoutChanges="true"
- android:layout_height="wrap_content"
- android:layout_width="match_parent"
- android:minHeight="?android:attr/listPreferredItemHeightSmall"
- android:orientation="vertical"
- android:paddingLeft="@dimen/list_item_padding"
- android:paddingRight="@dimen/list_item_padding"
- android:paddingTop="@dimen/list_item_padding">
-
- <LinearLayout
- android:id="@+id/container_info"
- android:layout_height="wrap_content"
- android:layout_width="wrap_content"
- android:orientation="horizontal"
- android:visibility="gone">
-
- <FrameLayout
- android:layout_height="@dimen/icon_size"
- android:layout_width="@dimen/icon_size">
-
- <ImageView
- android:contentDescription="@null"
- android:id="@+id/icon_info"
- android:layout_height="match_parent"
- android:layout_width="wrap_content"
- android:scaleType="centerInside"/>
-
- </FrameLayout>
-
- <TextView
- android:id="@+id/textview_info"
- android:layout_gravity="center_vertical"
- android:layout_height="wrap_content"
- android:layout_width="match_parent"
- android:selectAllOnFocus="true"/>
-
- </LinearLayout>
-
- <LinearLayout
- android:id="@+id/container_error"
- android:layout_height="wrap_content"
- android:layout_width="wrap_content"
- android:orientation="horizontal"
- android:visibility="gone">
-
- <FrameLayout
- android:layout_height="@dimen/icon_size"
- android:layout_width="@dimen/icon_size">
-
- <ImageView
- android:contentDescription="@null"
- android:id="@+id/icon_error"
- android:layout_height="match_parent"
- android:layout_width="wrap_content"
- android:scaleType="centerInside"/>
-
- </FrameLayout>
-
- <TextView
- android:id="@+id/textview_error"
- android:layout_gravity="center_vertical"
- android:layout_height="wrap_content"
- android:layout_width="match_parent"
- android:selectAllOnFocus="true"/>
-
- </LinearLayout>
-
- <LinearLayout
- android:layout_gravity="right"
- android:layout_height="wrap_content"
- android:layout_width="wrap_content"
- android:orientation="horizontal">
-
- <Button
- android:id="@+id/button_dismiss"
- android:layout_height="wrap_content"
- android:layout_width="wrap_content"
- android:text="@string/button_dismiss"
- style="?android:attr/buttonBarPositiveButtonStyle"/>
-
- </LinearLayout>
-
-</LinearLayout>
diff --git a/packages/DocumentsUI/res/layout/fragment_pick.xml b/packages/DocumentsUI/res/layout/fragment_pick.xml
deleted file mode 100644
index 40d4eb5..0000000
--- a/packages/DocumentsUI/res/layout/fragment_pick.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2014 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.
--->
-
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="horizontal"
- android:baselineAligned="false"
- android:gravity="end"
- android:paddingEnd="8dp"
- android:minHeight="?android:attr/listPreferredItemHeightSmall">
- <Button
- android:id="@android:id/button2"
- android:layout_width="wrap_content"
- android:layout_height="match_parent"
- android:text="@android:string/cancel"
- android:visibility="gone"
- style="?android:attr/buttonBarNegativeButtonStyle" />
- <Button
- android:id="@android:id/button1"
- android:layout_width="wrap_content"
- android:layout_height="match_parent"
- style="?android:attr/buttonBarPositiveButtonStyle" />
-</LinearLayout>
diff --git a/packages/DocumentsUI/res/layout/fragment_roots.xml b/packages/DocumentsUI/res/layout/fragment_roots.xml
deleted file mode 100644
index ae46207..0000000
--- a/packages/DocumentsUI/res/layout/fragment_roots.xml
+++ /dev/null
@@ -1,24 +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.
--->
-
-<com.android.documentsui.RootsList xmlns:android="http://schemas.android.com/apk/res/android"
- android:id="@+id/roots_list"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:paddingTop="8dp"
- android:listSelector="@android:color/transparent"
- android:drawSelectorOnTop="true"
- android:divider="@null" />
diff --git a/packages/DocumentsUI/res/layout/fragment_save.xml b/packages/DocumentsUI/res/layout/fragment_save.xml
deleted file mode 100644
index a889b9f..0000000
--- a/packages/DocumentsUI/res/layout/fragment_save.xml
+++ /dev/null
@@ -1,72 +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.
--->
-
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:paddingStart="@dimen/list_item_padding"
- android:orientation="horizontal"
- android:baselineAligned="false"
- android:gravity="center_vertical"
- android:fitsSystemWindows="true"
- android:minHeight="?android:attr/listPreferredItemHeightSmall">
-
- <FrameLayout
- android:layout_width="@dimen/icon_size"
- android:layout_height="@dimen/icon_size"
- android:layout_marginEnd="16dp">
-
- <ImageView
- android:id="@android:id/icon"
- android:layout_width="@dimen/root_icon_size"
- android:layout_height="match_parent"
- android:scaleType="centerInside"
- android:contentDescription="@null" />
-
- </FrameLayout>
-
- <EditText
- android:id="@android:id/title"
- android:layout_width="0dp"
- android:layout_height="wrap_content"
- android:layout_weight="1"
- android:singleLine="true"
- android:selectAllOnFocus="true" />
-
- <FrameLayout
- android:layout_width="wrap_content"
- android:layout_height="match_parent">
-
- <Button
- android:id="@android:id/button1"
- android:layout_width="wrap_content"
- android:layout_height="match_parent"
- android:text="@string/menu_save"
- style="?android:attr/buttonBarPositiveButtonStyle" />
-
- <ProgressBar
- android:id="@android:id/progress"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="center"
- android:visibility="gone"
- android:indeterminate="true"
- android:padding="8dp"
- style="?android:attr/progressBarStyle" />
-
- </FrameLayout>
-
-</LinearLayout>
diff --git a/packages/DocumentsUI/res/layout/item_dir_grid.xml b/packages/DocumentsUI/res/layout/item_dir_grid.xml
deleted file mode 100644
index 36af9b9..0000000
--- a/packages/DocumentsUI/res/layout/item_dir_grid.xml
+++ /dev/null
@@ -1,84 +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.
--->
-
-<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_margin="@dimen/grid_item_margin"
- android:background="@color/item_doc_background"
- android:elevation="@dimen/grid_item_elevation"
- android:focusable="true" >
-
- <!-- The height is 48px.
- paddingTop (9dp) + @dimen/check_icon_size (30dp) + paddingBottom (9dp) -->
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:orientation="horizontal"
- android:paddingBottom="9dp"
- android:paddingLeft="9dp"
- android:paddingRight="12dp"
- android:paddingTop="9dp"
- android:gravity="center_vertical">
-
- <FrameLayout
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginEnd="8dp" >
-
- <ImageView
- android:id="@+id/icon_mime_sm"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="center"
- android:contentDescription="@null"
- android:scaleType="centerInside"
- android:src="@drawable/ic_doc_folder" />
-
- <ImageView
- android:id="@+id/icon_check"
- android:layout_width="@dimen/check_icon_size"
- android:layout_height="@dimen/check_icon_size"
- android:alpha="0"
- android:contentDescription="@null"
- android:scaleType="fitCenter"
- android:src="@drawable/ic_check_circle" />
-
- </FrameLayout>
-
- <TextView
- android:id="@android:id/title"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:ellipsize="end"
- android:singleLine="true"
- android:textAlignment="viewStart"
- android:textAppearance="@android:style/TextAppearance.Material.Subhead"
- android:textColor="@color/item_title" />
-
- </LinearLayout>
-
- <!-- An overlay that draws the item border when it is focused. -->
-
- <View
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:background="@drawable/item_doc_grid_border"
- android:contentDescription="@null"
- android:duplicateParentState="true" />
-
-</FrameLayout>
diff --git a/packages/DocumentsUI/res/layout/item_doc_grid.xml b/packages/DocumentsUI/res/layout/item_doc_grid.xml
deleted file mode 100644
index 56a061f..0000000
--- a/packages/DocumentsUI/res/layout/item_doc_grid.xml
+++ /dev/null
@@ -1,137 +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.
--->
-
-<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_margin="@dimen/grid_item_margin"
- android:background="@color/item_doc_background"
- android:elevation="@dimen/grid_item_elevation"
- android:focusable="true">
-
- <!-- Main item thumbnail. Comprised of two overlapping images, the
- visibility of which is controlled by code in
- DirectoryFragment.java. -->
-
- <FrameLayout
- android:id="@+id/thumbnail"
- android:layout_width="match_parent"
- android:layout_height="wrap_content">
-
- <com.android.documentsui.GridItemThumbnail
- android:id="@+id/icon_thumb"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:scaleType="centerCrop"
- android:contentDescription="@null" />
-
- <com.android.documentsui.GridItemThumbnail
- android:id="@+id/icon_mime_lg"
- android:layout_width="@dimen/icon_size"
- android:layout_height="@dimen/icon_size"
- android:layout_gravity="center"
- android:scaleType="fitCenter"
- android:contentDescription="@null" />
-
- </FrameLayout>
-
- <!-- Item nameplate. Has a mime-type icon and some text fields (title,
- size, mod-time, etc). -->
-
- <RelativeLayout
- android:id="@+id/nameplate"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_below="@id/thumbnail"
- android:paddingTop="8dp"
- android:paddingBottom="8dp"
- android:paddingLeft="12dp"
- android:paddingRight="12dp">
-
- <ImageView
- android:id="@+id/icon_mime_sm"
- android:layout_width="@dimen/grid_item_icon_size"
- android:layout_height="@dimen/grid_item_icon_size"
- android:layout_marginEnd="8dp"
- android:layout_alignParentStart="true"
- android:layout_centerVertical="true"
- android:scaleType="center"
- android:contentDescription="@null"/>
-
- <ImageView
- android:id="@+id/icon_check"
- android:src="@drawable/ic_check_circle"
- android:alpha="0"
- android:layout_width="@dimen/check_icon_size"
- android:layout_height="@dimen/check_icon_size"
- android:layout_marginEnd="8dp"
- android:layout_alignParentStart="true"
- android:layout_centerVertical="true"
- android:scaleType="fitCenter"
- android:contentDescription="@null"/>
-
- <TextView
- android:id="@android:id/title"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_alignParentTop="true"
- android:layout_toEndOf="@id/icon_mime_sm"
- android:singleLine="true"
- android:ellipsize="end"
- android:textAlignment="viewStart"
- android:textAppearance="@android:style/TextAppearance.Material.Subhead"
- android:textColor="@color/item_title" />
-
- <TextView
- android:id="@+id/size"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_toEndOf="@id/icon_mime_sm"
- android:layout_below="@android:id/title"
- android:layout_marginEnd="4dp"
- android:singleLine="true"
- android:ellipsize="end"
- android:textAlignment="viewStart"
- android:textAppearance="@android:style/TextAppearance.Material.Caption"
- android:textColor="@color/item_details" />
-
- <TextView
- android:id="@+id/date"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_below="@android:id/title"
- android:layout_toEndOf="@id/size"
- android:singleLine="true"
- android:ellipsize="end"
- android:textAlignment="viewStart"
- android:textAppearance="@android:style/TextAppearance.Material.Caption"
- android:textColor="@color/item_details" />
-
- </RelativeLayout>
-
- <!-- An overlay that draws the item border when it is focused. -->
- <View
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_alignBottom="@id/nameplate"
- android:layout_alignTop="@id/thumbnail"
- android:layout_alignLeft="@id/thumbnail"
- android:layout_alignRight="@id/thumbnail"
- android:contentDescription="@null"
- android:background="@drawable/item_doc_grid_border"
- android:duplicateParentState="true" />
-
-</RelativeLayout>
diff --git a/packages/DocumentsUI/res/layout/item_doc_list.xml b/packages/DocumentsUI/res/layout/item_doc_list.xml
deleted file mode 100644
index a939fcd..0000000
--- a/packages/DocumentsUI/res/layout/item_doc_list.xml
+++ /dev/null
@@ -1,134 +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.
--->
-
-<com.android.documentsui.ListItem xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:background="@color/item_doc_background"
- android:focusable="true"
- android:orientation="horizontal" >
-
- <View
- android:id="@+id/focus_indicator"
- android:layout_width="4dp"
- android:layout_height="match_parent" />
-
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:baselineAligned="false"
- android:gravity="center_vertical"
- android:minHeight="@dimen/list_item_height"
- android:orientation="horizontal"
- android:paddingEnd="@dimen/list_item_padding"
- android:paddingStart="@dimen/list_item_padding" >
-
- <FrameLayout
- android:id="@android:id/icon"
- android:layout_width="@dimen/list_item_thumbnail_size"
- android:layout_height="@dimen/list_item_thumbnail_size"
- android:layout_marginEnd="16dp" >
-
- <ImageView
- android:id="@+id/icon_mime"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="center"
- android:contentDescription="@null"
- android:scaleType="centerInside" />
-
- <ImageView
- android:id="@+id/icon_thumb"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:contentDescription="@null"
- android:scaleType="centerCrop" />
-
- <ImageView
- android:id="@+id/icon_check"
- android:layout_width="@dimen/check_icon_size"
- android:layout_height="@dimen/check_icon_size"
- android:layout_gravity="center"
- android:alpha="0"
- android:contentDescription="@null"
- android:scaleType="fitCenter"
- android:src="@drawable/ic_check_circle" />
- </FrameLayout>
-
- <LinearLayout
- android:layout_width="0dp"
- android:layout_height="wrap_content"
- android:layout_weight="1"
- android:orientation="vertical"
- android:layout_gravity="center_vertical" >
-
- <TextView
- android:id="@android:id/title"
- android:layout_width="wrap_content"
- android:layout_height="0dp"
- android:layout_weight="1"
- android:ellipsize="end"
- android:singleLine="true"
- android:textAlignment="viewStart"
- android:textAppearance="@android:style/TextAppearance.Material.Subhead"
- android:textColor="@color/item_title" />
-
- <LinearLayout
- android:id="@+id/line2"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:baselineAligned="false"
- android:gravity="center_vertical"
- android:orientation="horizontal" >
-
- <TextView
- android:id="@+id/date"
- android:layout_width="90dp"
- android:layout_height="wrap_content"
- android:ellipsize="end"
- android:singleLine="true"
- android:textAlignment="viewStart"
- android:textAppearance="@android:style/TextAppearance.Material.Caption"
- android:textColor="@color/item_details" />
-
- <TextView
- android:id="@+id/size"
- android:layout_width="90dp"
- android:layout_height="wrap_content"
- android:layout_marginStart="8dp"
- android:ellipsize="end"
- android:singleLine="true"
- android:textAlignment="viewStart"
- android:textAppearance="@android:style/TextAppearance.Material.Caption"
- android:textColor="@color/item_details" />
-
- <TextView
- android:id="@android:id/summary"
- android:layout_width="0dp"
- android:layout_height="wrap_content"
- android:layout_marginStart="8dp"
- android:layout_weight="1"
- android:ellipsize="end"
- android:singleLine="true"
- android:textAlignment="viewStart"
- android:textAppearance="@android:style/TextAppearance.Material.Caption"
- android:textColor="@color/item_details" />
- </LinearLayout>
- </LinearLayout>
- </LinearLayout>
-
-</com.android.documentsui.ListItem>
diff --git a/packages/DocumentsUI/res/layout/item_root.xml b/packages/DocumentsUI/res/layout/item_root.xml
deleted file mode 100644
index 114fd09..0000000
--- a/packages/DocumentsUI/res/layout/item_root.xml
+++ /dev/null
@@ -1,89 +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.
--->
-
-<com.android.documentsui.RootItemView
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:minHeight="48dp"
- android:paddingStart="@dimen/list_item_padding"
- android:paddingEnd="@dimen/list_item_padding"
- android:gravity="center_vertical"
- android:orientation="horizontal"
- android:baselineAligned="false"
- android:background="@drawable/root_item_background">
-
- <FrameLayout
- android:layout_width="@dimen/icon_size"
- android:layout_height="@dimen/icon_size"
- android:duplicateParentState="true">
-
- <ImageView
- android:id="@android:id/icon"
- android:layout_width="@dimen/root_icon_size"
- android:layout_height="match_parent"
- android:scaleType="centerInside"
- android:contentDescription="@null"
- android:duplicateParentState="true" />
-
- </FrameLayout>
-
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:paddingTop="8dp"
- android:paddingBottom="8dp"
- android:orientation="vertical"
- android:layout_weight="1">
-
- <TextView
- android:id="@android:id/title"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:singleLine="true"
- android:ellipsize="end"
- android:textAlignment="viewStart"
- android:textAppearance="@android:style/TextAppearance.Material.Menu"
- android:textColor="@color/item_root_primary_text" />
-
- <TextView
- android:id="@android:id/summary"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:singleLine="true"
- android:ellipsize="end"
- android:textAlignment="viewStart"
- android:textAppearance="@android:style/TextAppearance.Material.Caption"
- android:textColor="@color/item_root_primary_text" />
-
- </LinearLayout>
-
- <FrameLayout
- android:layout_width="@dimen/icon_size"
- android:layout_height="@dimen/icon_size"
- android:duplicateParentState="true">
-
- <ImageView
- android:id="@+id/eject_icon"
- android:layout_width="@dimen/root_icon_size"
- android:layout_height="match_parent"
- android:scaleType="centerInside"
- android:contentDescription="@string/menu_eject_root"
- android:visibility="gone" />
-
- </FrameLayout>
-
-</com.android.documentsui.RootItemView>
diff --git a/packages/DocumentsUI/res/layout/item_root_header.xml b/packages/DocumentsUI/res/layout/item_root_header.xml
deleted file mode 100644
index 6b9857d..0000000
--- a/packages/DocumentsUI/res/layout/item_root_header.xml
+++ /dev/null
@@ -1,27 +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.
--->
-
-<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:paddingTop="12dp">
-
- <TextView
- android:id="@android:id/title"
- android:textColor="?android:attr/textColorTertiary"
- style="?android:attr/listSeparatorTextViewStyle" />
-
-</FrameLayout>
diff --git a/packages/DocumentsUI/res/layout/item_root_spacer.xml b/packages/DocumentsUI/res/layout/item_root_spacer.xml
deleted file mode 100644
index b3beced..0000000
--- a/packages/DocumentsUI/res/layout/item_root_spacer.xml
+++ /dev/null
@@ -1,28 +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.
--->
-
-<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:paddingTop="8dp"
- android:paddingBottom="8dp">
-
- <View
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:background="?android:attr/listDivider" />
-
-</FrameLayout>
diff --git a/packages/DocumentsUI/res/layout/item_subdir.xml b/packages/DocumentsUI/res/layout/item_subdir.xml
deleted file mode 100644
index ffe4afe..0000000
--- a/packages/DocumentsUI/res/layout/item_subdir.xml
+++ /dev/null
@@ -1,38 +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.
--->
-
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:minHeight="?android:attr/listPreferredItemHeightSmall"
- android:paddingStart="?android:attr/listPreferredItemPaddingStart"
- android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
- android:gravity="center_vertical"
- android:orientation="horizontal"
- android:baselineAligned="false">
-
- <TextView
- android:id="@android:id/title"
- android:layout_width="0dp"
- android:layout_height="wrap_content"
- android:layout_weight="1"
- android:singleLine="true"
- android:ellipsize="end"
- android:textAlignment="viewStart"
- android:textAppearance="@android:style/TextAppearance.Material.Subhead"
- android:textColor="?android:attr/textColorPrimary" />
-
-</LinearLayout>
diff --git a/packages/DocumentsUI/res/layout/item_subdir_title.xml b/packages/DocumentsUI/res/layout/item_subdir_title.xml
deleted file mode 100644
index 8d0d807..0000000
--- a/packages/DocumentsUI/res/layout/item_subdir_title.xml
+++ /dev/null
@@ -1,34 +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.
--->
-
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:paddingEnd="8dp"
- android:orientation="horizontal"
- android:baselineAligned="false">
-
- <TextView
- android:id="@android:id/title"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:singleLine="true"
- android:ellipsize="end"
- android:textAlignment="viewStart"
- android:drawablePadding="12dp"
- android:drawableRight="@drawable/ic_breadcrumb_arrow_down"
- android:textAppearance="@android:style/TextAppearance.DeviceDefault.Widget.ActionBar.Title" />
-</LinearLayout>
diff --git a/packages/DocumentsUI/res/layout/navigation_breadcrumb_item.xml b/packages/DocumentsUI/res/layout/navigation_breadcrumb_item.xml
deleted file mode 100644
index 720f795..0000000
--- a/packages/DocumentsUI/res/layout/navigation_breadcrumb_item.xml
+++ /dev/null
@@ -1,53 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (C) 2016 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.
--->
-
-
-<!--
- CoordinatorLayout is necessary for various components (e.g. Snackbars, and
- floating action buttons) to operate correctly.
--->
-<!--
- focusableInTouchMode is set in order to force key events to go to the activity's global key
- callback, which is necessary for proper event routing. See BaseActivity.onKeyDown.
--->
-
-<LinearLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="wrap_content"
- android:layout_height="@dimen/breadcrumb_item_height"
- android:layout_alignParentTop="true"
- android:gravity="center_vertical"
- android:orientation="horizontal">
-
- <com.android.documentsui.DragOverTextView
- android:id="@+id/breadcrumb_text"
- android:layout_width="wrap_content"
- android:layout_height="match_parent"
- android:gravity="center_vertical"
- android:textAppearance="@android:style/TextAppearance.Material.Widget.ActionBar.Title"
- android:background="@drawable/breadcrumb_item_background" />
-
- <ImageView
- android:id="@+id/breadcrumb_arrow"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:src="@drawable/ic_breadcrumb_arrow"
- android:layout_marginTop="2dp"
- android:layout_marginRight="3dp"
- android:layout_marginLeft="3dp" />
-
-</LinearLayout>
\ No newline at end of file
diff --git a/packages/DocumentsUI/res/layout/single_pane_layout.xml b/packages/DocumentsUI/res/layout/single_pane_layout.xml
deleted file mode 100644
index 7b7e229..0000000
--- a/packages/DocumentsUI/res/layout/single_pane_layout.xml
+++ /dev/null
@@ -1,57 +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.
--->
-
-<!-- CoordinatorLayout is necessary for various components (e.g. Snackbars, and
- floating action buttons) to operate correctly. -->
-<!-- focusableInTouchMode is set in order to force key events to go to the activity's global key
- callback, which is necessary for proper event routing. See BaseActivity.onKeyDown. -->
-<android.support.design.widget.CoordinatorLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:id="@+id/coordinator_layout"
- android:focusableInTouchMode="true">
-
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:orientation="vertical">
-
- <com.android.documentsui.DocumentsToolbar
- android:id="@+id/toolbar"
- android:layout_width="match_parent"
- android:layout_height="?android:attr/actionBarSize"
- android:background="?android:attr/colorPrimary"
- android:elevation="8dp"
- android:theme="?actionBarTheme"
- android:popupTheme="?actionBarPopupTheme">
-
- <Spinner
- android:id="@+id/stack"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:popupTheme="?actionBarPopupTheme"
- android:background="@android:color/transparent"
- android:layout_marginStart="4dp"
- android:overlapAnchor="true" />
-
- </com.android.documentsui.DocumentsToolbar>
-
- <include layout="@layout/directory_cluster"/>
-
- </LinearLayout>
-
-</android.support.design.widget.CoordinatorLayout>
diff --git a/packages/DocumentsUI/res/menu/activity.xml b/packages/DocumentsUI/res/menu/activity.xml
deleted file mode 100644
index ed47bbc..0000000
--- a/packages/DocumentsUI/res/menu/activity.xml
+++ /dev/null
@@ -1,91 +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.
--->
-
-<menu xmlns:android="http://schemas.android.com/apk/res/android">
-<!-- showAsAction flag impacts the behavior of SearchView.
- When set to collapseActionView, collapsing SearchView to icon is the
- default behavior. It would fit UX, however after expanding SearchView is
- shown on the left site of the toolbar (replacing title). Since no way to
- prevent this behavior was found, the flag is set to always. SearchView is
- always visible by default and it is being collapse manually by calling
- setIconified() method
--->
- <item
- android:id="@+id/menu_search"
- android:title="@string/menu_search"
- android:icon="@drawable/ic_menu_search"
- android:showAsAction="always"
- android:actionViewClass="android.widget.SearchView"
- android:imeOptions="actionSearch"
- android:visible="false" />
-<!-- This group is being hidden when searching is in full bar mode-->
- <group android:id="@+id/group_hide_when_searching">
- <item
- android:id="@+id/menu_grid"
- android:title="@string/menu_grid"
- android:icon="@drawable/ic_menu_view_grid"
- android:showAsAction="always" />
- <item
- android:id="@+id/menu_list"
- android:title="@string/menu_list"
- android:icon="@drawable/ic_menu_view_list"
- android:showAsAction="always" />
-
- <item
- android:id="@+id/menu_new_window"
- android:title="@string/menu_new_window"
- android:alphabeticShortcut="n"
- android:showAsAction="never"
- android:visible="false" />
- <item
- android:id="@+id/menu_create_dir"
- android:title="@string/menu_create_dir"
- android:icon="@drawable/ic_menu_new_folder"
- android:alphabeticShortcut="e"
- android:showAsAction="never"
- android:visible="false" />
- <item
- android:id="@+id/menu_sort"
- android:title="@string/menu_sort"
- android:icon="@drawable/ic_menu_sortby"
- android:showAsAction="ifRoom">
- <menu>
- <item
- android:id="@+id/menu_sort_name"
- android:title="@string/sort_name" />
- <item
- android:id="@+id/menu_sort_date"
- android:title="@string/sort_date" />
- <item
- android:id="@+id/menu_sort_size"
- android:title="@string/sort_size" />
- </menu>
- </item>
- <item
- android:id="@+id/menu_file_size"
- android:showAsAction="never"
- android:visible="false" />
- <item
- android:id="@+id/menu_advanced"
- android:showAsAction="never"
- android:visible="false" />
- <item
- android:id="@+id/menu_settings"
- android:title="@string/menu_settings"
- android:showAsAction="never"
- android:visible="false" />
- </group>
-</menu>
diff --git a/packages/DocumentsUI/res/menu/context_menu.xml b/packages/DocumentsUI/res/menu/context_menu.xml
deleted file mode 100644
index 7474859..0000000
--- a/packages/DocumentsUI/res/menu/context_menu.xml
+++ /dev/null
@@ -1,27 +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.
--->
-
-<menu xmlns:android="http://schemas.android.com/apk/res/android">
- <item
- android:id="@+id/menu_cut_to_clipboard"
- android:title="@string/menu_cut_to_clipboard" />
- <item
- android:id="@+id/menu_copy_to_clipboard"
- android:title="@string/menu_copy_to_clipboard" />
- <item
- android:id="@+id/menu_paste_from_clipboard"
- android:title="@string/menu_paste_from_clipboard" />
-</menu>
diff --git a/packages/DocumentsUI/res/menu/mode_directory.xml b/packages/DocumentsUI/res/menu/mode_directory.xml
deleted file mode 100644
index e2125ad..0000000
--- a/packages/DocumentsUI/res/menu/mode_directory.xml
+++ /dev/null
@@ -1,51 +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.
--->
-
-<menu xmlns:android="http://schemas.android.com/apk/res/android">
- <item
- android:id="@+id/menu_open"
- android:title="@string/menu_open"
- android:showAsAction="always" />
- <item
- android:id="@+id/menu_share"
- android:icon="@drawable/ic_menu_share"
- android:title="@string/menu_share"
- android:showAsAction="always" />
- <item
- android:id="@+id/menu_delete"
- android:icon="@drawable/ic_menu_delete"
- android:title="@string/menu_delete"
- android:showAsAction="always" />
- <item
- android:id="@+id/menu_select_all"
- android:title="@string/menu_select_all"
- android:showAsAction="never" />
- <item
- android:id="@+id/menu_copy_to"
- android:title="@string/menu_copy"
- android:showAsAction="never"
- android:visible="false" />
- <item
- android:id="@+id/menu_move_to"
- android:title="@string/menu_move"
- android:showAsAction="never"
- android:visible="false" />
- <item
- android:id="@+id/menu_rename"
- android:title="@string/menu_rename"
- android:showAsAction="never"
- android:visible="false" />
-</menu>
diff --git a/packages/DocumentsUI/res/menu/root_context_menu.xml b/packages/DocumentsUI/res/menu/root_context_menu.xml
deleted file mode 100644
index 0cf00a4..0000000
--- a/packages/DocumentsUI/res/menu/root_context_menu.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2016 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.
--->
-
-<menu xmlns:android="http://schemas.android.com/apk/res/android">
- <item
- android:id="@+id/menu_eject_root"
- android:title="@string/menu_eject_root" />
- <item
- android:id="@+id/menu_settings"
- android:title="@string/menu_settings" />
-</menu>
diff --git a/packages/DocumentsUI/res/mipmap-hdpi/ic_app_icon.png b/packages/DocumentsUI/res/mipmap-hdpi/ic_app_icon.png
deleted file mode 100644
index cd3a037..0000000
--- a/packages/DocumentsUI/res/mipmap-hdpi/ic_app_icon.png
+++ /dev/null
Binary files differ
diff --git a/packages/DocumentsUI/res/mipmap-hdpi/ic_launcher_downloads.png b/packages/DocumentsUI/res/mipmap-hdpi/ic_launcher_downloads.png
deleted file mode 100644
index f958bbd..0000000
--- a/packages/DocumentsUI/res/mipmap-hdpi/ic_launcher_downloads.png
+++ /dev/null
Binary files differ
diff --git a/packages/DocumentsUI/res/mipmap-mdpi/ic_app_icon.png b/packages/DocumentsUI/res/mipmap-mdpi/ic_app_icon.png
deleted file mode 100644
index 8d08e9b..0000000
--- a/packages/DocumentsUI/res/mipmap-mdpi/ic_app_icon.png
+++ /dev/null
Binary files differ
diff --git a/packages/DocumentsUI/res/mipmap-mdpi/ic_launcher_downloads.png b/packages/DocumentsUI/res/mipmap-mdpi/ic_launcher_downloads.png
deleted file mode 100644
index f2e9376..0000000
--- a/packages/DocumentsUI/res/mipmap-mdpi/ic_launcher_downloads.png
+++ /dev/null
Binary files differ
diff --git a/packages/DocumentsUI/res/mipmap-xhdpi/ic_app_icon.png b/packages/DocumentsUI/res/mipmap-xhdpi/ic_app_icon.png
deleted file mode 100644
index f3bacb7..0000000
--- a/packages/DocumentsUI/res/mipmap-xhdpi/ic_app_icon.png
+++ /dev/null
Binary files differ
diff --git a/packages/DocumentsUI/res/mipmap-xhdpi/ic_launcher_downloads.png b/packages/DocumentsUI/res/mipmap-xhdpi/ic_launcher_downloads.png
deleted file mode 100644
index 4dc5336..0000000
--- a/packages/DocumentsUI/res/mipmap-xhdpi/ic_launcher_downloads.png
+++ /dev/null
Binary files differ
diff --git a/packages/DocumentsUI/res/mipmap-xxhdpi/ic_app_icon.png b/packages/DocumentsUI/res/mipmap-xxhdpi/ic_app_icon.png
deleted file mode 100644
index 5156171..0000000
--- a/packages/DocumentsUI/res/mipmap-xxhdpi/ic_app_icon.png
+++ /dev/null
Binary files differ
diff --git a/packages/DocumentsUI/res/mipmap-xxhdpi/ic_launcher_downloads.png b/packages/DocumentsUI/res/mipmap-xxhdpi/ic_launcher_downloads.png
deleted file mode 100644
index 8716290..0000000
--- a/packages/DocumentsUI/res/mipmap-xxhdpi/ic_launcher_downloads.png
+++ /dev/null
Binary files differ
diff --git a/packages/DocumentsUI/res/mipmap-xxxhdpi/ic_app_icon.png b/packages/DocumentsUI/res/mipmap-xxxhdpi/ic_app_icon.png
deleted file mode 100644
index 6dc2f76..0000000
--- a/packages/DocumentsUI/res/mipmap-xxxhdpi/ic_app_icon.png
+++ /dev/null
Binary files differ
diff --git a/packages/DocumentsUI/res/mipmap-xxxhdpi/ic_launcher_downloads.png b/packages/DocumentsUI/res/mipmap-xxxhdpi/ic_launcher_downloads.png
deleted file mode 100644
index f5be219..0000000
--- a/packages/DocumentsUI/res/mipmap-xxxhdpi/ic_launcher_downloads.png
+++ /dev/null
Binary files differ
diff --git a/packages/DocumentsUI/res/values-af/strings.xml b/packages/DocumentsUI/res/values-af/strings.xml
deleted file mode 100644
index 673c8d4..0000000
--- a/packages/DocumentsUI/res/values-af/strings.xml
+++ /dev/null
@@ -1,144 +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="app_label" msgid="1551050262492398204">"Lêers"</string>
- <string name="downloads_label" msgid="959113951084633612">"Aflaaie"</string>
- <string name="title_open" msgid="4353228937663917801">"Maak oop vanuit"</string>
- <string name="title_save" msgid="2433679664882857999">"Stoor na"</string>
- <string name="menu_create_dir" msgid="2547620241173881754">"Nuwe vouer"</string>
- <string name="menu_grid" msgid="6878021334497835259">"Roosteraansig"</string>
- <string name="menu_list" msgid="7279285939892417279">"Lysaansig"</string>
- <string name="menu_sort" msgid="7677740407158414452">"Sorteer volgens"</string>
- <string name="menu_search" msgid="3816712084502856974">"Soek"</string>
- <string name="menu_settings" msgid="8239065133341597825">"Berginginstellings"</string>
- <string name="menu_open" msgid="432922957274920903">"Maak oop"</string>
- <string name="menu_save" msgid="2394743337684426338">"Stoor"</string>
- <string name="menu_share" msgid="3075149983979628146">"Deel"</string>
- <string name="menu_delete" msgid="8138799623850614177">"Vee uit"</string>
- <string name="menu_select_all" msgid="8323579667348729928">"Kies alles"</string>
- <string name="menu_copy" msgid="3612326052677229148">"Kopieer na …"</string>
- <string name="menu_move" msgid="1828090633118079817">"Skuif na …"</string>
- <string name="menu_new_window" msgid="1226032889278727538">"Nuwe venster"</string>
- <string name="menu_cut_to_clipboard" msgid="2467149185452488383">"Knip"</string>
- <string name="menu_copy_to_clipboard" msgid="489311381979634291">"Kopieer"</string>
- <string name="menu_paste_from_clipboard" msgid="2071583031180257091">"Plak"</string>
- <string name="menu_advanced_show" msgid="4693652895715631401">"Wys interne berging"</string>
- <string name="menu_advanced_hide" msgid="4218809952721972589">"Versteek interne berging"</string>
- <string name="menu_file_size_show" msgid="3240323619260823076">"Wys lêergrootte"</string>
- <string name="menu_file_size_hide" msgid="8881975928502581042">"Versteek lêergrootte"</string>
- <string name="button_select" msgid="527196987259139214">"Kies"</string>
- <string name="button_copy" msgid="8706475544635021302">"Kopieer"</string>
- <string name="button_move" msgid="2202666023104202232">"Skuif"</string>
- <string name="button_dismiss" msgid="3714065566893946085">"Maak toe"</string>
- <string name="button_retry" msgid="4392027584153752797">"Probeer weer"</string>
- <string name="sort_name" msgid="9183560467917256779">"Volgens naam"</string>
- <string name="sort_date" msgid="586080032956151448">"Volgens datum gewysig"</string>
- <string name="sort_size" msgid="3350681319735474741">"Volgens grootte"</string>
- <string name="drawer_open" msgid="4545466532430226949">"Wys wortels"</string>
- <string name="drawer_close" msgid="7602734368552123318">"Versteek wortels"</string>
- <string name="save_error" msgid="6167009778003223664">"Kon nie dokument stoor nie"</string>
- <string name="create_error" msgid="3735649141335444215">"Kon nie vouer skep nie"</string>
- <string name="query_error" msgid="5999895349602476581">"Kan nie op die oomblik inhoud laai nie"</string>
- <string name="root_recent" msgid="4470053704320518133">"Onlangs"</string>
- <string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> gratis"</string>
- <string name="root_type_service" msgid="2178854894416775409">"Bergingdienste"</string>
- <string name="root_type_shortcut" msgid="3318760609471618093">"Kortpaaie"</string>
- <string name="root_type_device" msgid="7121342474653483538">"Toestelle"</string>
- <string name="root_type_apps" msgid="8838065367985945189">"Nog programme"</string>
- <string name="empty" msgid="7858882803708117596">"Geen items nie"</string>
- <string name="no_results" msgid="6622510343880730446">"Geen passings in %1$s"</string>
- <string name="toast_no_application" msgid="4632640357724698144">"Kan nie lêer oopmaak nie"</string>
- <string name="toast_failed_delete" msgid="2180678019407244069">"Kan sommige dokumente nie uitvee nie"</string>
- <string name="share_via" msgid="8966594246261344259">"Deel via"</string>
- <string name="copy_notification_title" msgid="6374299806748219777">"Kopieer tans lêers"</string>
- <string name="move_notification_title" msgid="6193835179777284805">"Skuif tans lêers"</string>
- <string name="delete_notification_title" msgid="3329403967712437496">"Vee tans lêers uit"</string>
- <string name="copy_remaining" msgid="6283790937387975095">"<xliff:g id="DURATION">%s</xliff:g> oor"</string>
- <plurals name="copy_begin" formatted="false" msgid="9071199452634086365">
- <item quantity="other">Kopieer tans <xliff:g id="COUNT_1">%1$d</xliff:g> lêers.</item>
- <item quantity="one">Kopieer tans <xliff:g id="COUNT_0">%1$d</xliff:g> lêer.</item>
- </plurals>
- <plurals name="move_begin" formatted="false" msgid="8430330882138871643">
- <item quantity="other">Skuif tans <xliff:g id="COUNT_1">%1$d</xliff:g> lêers.</item>
- <item quantity="one">Skuif tans <xliff:g id="COUNT_0">%1$d</xliff:g> lêer.</item>
- </plurals>
- <plurals name="deleting" formatted="false" msgid="5054338566802559411">
- <item quantity="other">Vee tans <xliff:g id="COUNT_1">%1$d</xliff:g> lêers uit.</item>
- <item quantity="one">Vee tans <xliff:g id="COUNT_0">%1$d</xliff:g> lêer uit.</item>
- </plurals>
- <string name="undo" msgid="7905788502491742328">"Ontdoen"</string>
- <string name="copy_preparing" msgid="3896202461003039386">"Maak tans gereed vir kopieer …"</string>
- <string name="move_preparing" msgid="2772219441375531410">"Berei tans voor vir skuif …"</string>
- <string name="delete_preparing" msgid="5655813182533491992">"Maak tans gereed om uit te vee …"</string>
- <string name="delete_progress" msgid="5399405983046157222">"<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="7160447124922897689">
- <item quantity="other">Kon <xliff:g id="COUNT_1">%1$d</xliff:g> lêers nie kopieer nie</item>
- <item quantity="one">Kon <xliff:g id="COUNT_0">%1$d</xliff:g> lêer nie kopieer nie</item>
- </plurals>
- <plurals name="move_error_notification_title" formatted="false" msgid="2710901971014783012">
- <item quantity="other">Kon <xliff:g id="COUNT_1">%1$d</xliff:g> lêers nie skuif nie</item>
- <item quantity="one">Kon <xliff:g id="COUNT_0">%1$d</xliff:g> lêer nie skuif nie</item>
- </plurals>
- <plurals name="delete_error_notification_title" formatted="false" msgid="7228393157786591199">
- <item quantity="other">Kon <xliff:g id="COUNT_1">%1$d</xliff:g> lêers nie uitvee nie</item>
- <item quantity="one">Kon <xliff:g id="COUNT_0">%1$d</xliff:g> lêer nie uitvee nie</item>
- </plurals>
- <string name="notification_touch_for_details" msgid="6268189413228855582">"Tik om besonderhede te bekyk"</string>
- <string name="close" msgid="3043722427445528732">"Maak toe"</string>
- <string name="copy_failure_alert_content" msgid="4563147454522476183">"Hierdie lêers is nie gekopieer nie: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="move_failure_alert_content" msgid="2635075788682922861">"Hierdie lêers is nie geskuif nie: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="delete_failure_alert_content" msgid="892393767207938353">"Hierdie lêers is nie uitgevee nie: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="copy_converted_warning_content" msgid="5753861488218674361">"Hierdie lêers is na \'n ander formaat omgeskakel: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <plurals name="clipboard_files_clipped" formatted="false" msgid="855459017537058539">
- <item quantity="other">Het <xliff:g id="COUNT_1">%1$d</xliff:g> lêers na die knipbord gekopieer.</item>
- <item quantity="one">Het <xliff:g id="COUNT_0">%1$d</xliff:g> lêer na die knipbord gekopieer.</item>
- </plurals>
- <string name="clipboard_files_cannot_paste" msgid="2878324825602325706">"Kan nie die geselekteerde lêers in hierdie ligging plak nie."</string>
- <string name="menu_rename" msgid="7678802479104285353">"Hernoem"</string>
- <string name="rename_error" msgid="4203041674883412606">"Kon nie dokument hernoem nie"</string>
- <string name="menu_eject_root" msgid="2768224615494227325">"Maak los"</string>
- <string name="notification_copy_files_converted_title" msgid="3153573223054275181">"Sommige lêers is omgeskakel"</string>
- <string name="open_external_dialog_request" msgid="5789329484285817629">"Gee <xliff:g id="APPNAME"><b>^1</b></xliff:g> toegang tot <xliff:g id="DIRECTORY"><i>^2</i></xliff:g>-gids op <xliff:g id="STORAGE"><i>^3</i></xliff:g>?"</string>
- <string name="open_external_dialog_request_primary_volume" msgid="6635562535713428688">"Gee <xliff:g id="APPNAME"><b>^1</b></xliff:g> toegang tot <xliff:g id="DIRECTORY"><i>^2</i></xliff:g>-gids?"</string>
- <string name="open_external_dialog_root_request" msgid="8899108702926347720">"Gee <xliff:g id="APPNAME"><b>^1</b></xliff:g> toegang tot jou data, insluitend foto\'s en video\'s, op <xliff:g id="STORAGE"><i>^2</i></xliff:g>?"</string>
- <string name="never_ask_again" msgid="4295278542972859268">"Moenie weer vra nie"</string>
- <string name="allow" msgid="7225948811296386551">"Laat toe"</string>
- <string name="deny" msgid="2081879885755434506">"Weier"</string>
- <plurals name="elements_selected" formatted="false" msgid="1376955402452875047">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> gekies</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> gekies</item>
- </plurals>
- <plurals name="elements_dragged" formatted="false" msgid="3727204615215602228">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> items</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> item</item>
- </plurals>
- <string name="delete_filename_confirmation_message" msgid="5312817725577537488">"Vee \"<xliff:g id="NAME">%1$s</xliff:g>\" uit?"</string>
- <string name="delete_foldername_confirmation_message" msgid="5885501832257285329">"Vee vouer \"<xliff:g id="NAME">%1$s</xliff:g>\" en sy inhoud uit?"</string>
- <plurals name="delete_files_confirmation_message" formatted="false" msgid="8417505791395471802">
- <item quantity="other">Vee <xliff:g id="COUNT_1">%1$d</xliff:g> lêers uit?</item>
- <item quantity="one">Vee <xliff:g id="COUNT_0">%1$d</xliff:g> lêer uit?</item>
- </plurals>
- <plurals name="delete_folders_confirmation_message" formatted="false" msgid="9185648028213507769">
- <item quantity="other">Vee <xliff:g id="COUNT_1">%1$d</xliff:g> vouers en hul inhoud uit?</item>
- <item quantity="one">Vee <xliff:g id="COUNT_0">%1$d</xliff:g> vouer en sy inhoud uit?</item>
- </plurals>
- <plurals name="delete_items_confirmation_message" formatted="false" msgid="5376214433530243459">
- <item quantity="other">Vee <xliff:g id="COUNT_1">%1$d</xliff:g> items uit?</item>
- <item quantity="one">Vee <xliff:g id="COUNT_0">%1$d</xliff:g> item uit?</item>
- </plurals>
-</resources>
diff --git a/packages/DocumentsUI/res/values-am/strings.xml b/packages/DocumentsUI/res/values-am/strings.xml
deleted file mode 100644
index cc00163..0000000
--- a/packages/DocumentsUI/res/values-am/strings.xml
+++ /dev/null
@@ -1,144 +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="app_label" msgid="1551050262492398204">"ፋይሎች"</string>
- <string name="downloads_label" msgid="959113951084633612">"የወረዱ"</string>
- <string name="title_open" msgid="4353228937663917801">"ክፈት ከ"</string>
- <string name="title_save" msgid="2433679664882857999">"አስቀምጥ ወደ"</string>
- <string name="menu_create_dir" msgid="2547620241173881754">"አዲስ አቃፊ"</string>
- <string name="menu_grid" msgid="6878021334497835259">"የፍርግርግ እይታ"</string>
- <string name="menu_list" msgid="7279285939892417279">"የዝርዝር እይታ"</string>
- <string name="menu_sort" msgid="7677740407158414452">"ደርድር በ"</string>
- <string name="menu_search" msgid="3816712084502856974">"ፈልግ"</string>
- <string name="menu_settings" msgid="8239065133341597825">"የማከማቻ ቅንብሮች"</string>
- <string name="menu_open" msgid="432922957274920903">"ክፈት"</string>
- <string name="menu_save" msgid="2394743337684426338">"አስቀምጥ"</string>
- <string name="menu_share" msgid="3075149983979628146">"አጋራ"</string>
- <string name="menu_delete" msgid="8138799623850614177">"ሰርዝ"</string>
- <string name="menu_select_all" msgid="8323579667348729928">"ሁሉንም ምረጥ"</string>
- <string name="menu_copy" msgid="3612326052677229148">"ቅዳ ወደ…"</string>
- <string name="menu_move" msgid="1828090633118079817">"ይውሰዱ ወደ..."</string>
- <string name="menu_new_window" msgid="1226032889278727538">"አዲሰ መስኮት"</string>
- <string name="menu_cut_to_clipboard" msgid="2467149185452488383">"ቁረጥ"</string>
- <string name="menu_copy_to_clipboard" msgid="489311381979634291">"ቅዳ"</string>
- <string name="menu_paste_from_clipboard" msgid="2071583031180257091">"ለጥፍ"</string>
- <string name="menu_advanced_show" msgid="4693652895715631401">"ውስጣዊ ማከማቻ አሳይ"</string>
- <string name="menu_advanced_hide" msgid="4218809952721972589">"ውስጣዊ ማከማቻ ደብቅ"</string>
- <string name="menu_file_size_show" msgid="3240323619260823076">"የፋይል መጠን አሳይ"</string>
- <string name="menu_file_size_hide" msgid="8881975928502581042">"የፋይል መጠን ደብቅ"</string>
- <string name="button_select" msgid="527196987259139214">"ምረጥ"</string>
- <string name="button_copy" msgid="8706475544635021302">"ቅዳ"</string>
- <string name="button_move" msgid="2202666023104202232">"አንቀሳቀስ"</string>
- <string name="button_dismiss" msgid="3714065566893946085">"አሰናብት"</string>
- <string name="button_retry" msgid="4392027584153752797">"እንደገና ይሞክሩ"</string>
- <string name="sort_name" msgid="9183560467917256779">"በስም"</string>
- <string name="sort_date" msgid="586080032956151448">"በተለወጠበት ቀን"</string>
- <string name="sort_size" msgid="3350681319735474741">"በመጠን"</string>
- <string name="drawer_open" msgid="4545466532430226949">"ስሮችን አሳይ"</string>
- <string name="drawer_close" msgid="7602734368552123318">"ስሮችን ደብቅ"</string>
- <string name="save_error" msgid="6167009778003223664">"ሰነድ ማስቀመጥ አልተሳካም"</string>
- <string name="create_error" msgid="3735649141335444215">"አቃፊ መፍጠር አልተሳካም"</string>
- <string name="query_error" msgid="5999895349602476581">"አሁን ይዘትን መጫን አልተቻለም"</string>
- <string name="root_recent" msgid="4470053704320518133">"የቅርብ ጊዜ"</string>
- <string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> ነፃ"</string>
- <string name="root_type_service" msgid="2178854894416775409">"የማከማቻ አገልግሎቶች"</string>
- <string name="root_type_shortcut" msgid="3318760609471618093">"አቋራጮች"</string>
- <string name="root_type_device" msgid="7121342474653483538">"መሣሪያዎች"</string>
- <string name="root_type_apps" msgid="8838065367985945189">"ተጨማሪ መተግበሪያዎች"</string>
- <string name="empty" msgid="7858882803708117596">"ምንም ንጥሎች የሉም"</string>
- <string name="no_results" msgid="6622510343880730446">"%1$s ውስጥ ምንም ተዛማጆች የሉም"</string>
- <string name="toast_no_application" msgid="4632640357724698144">"ፋይሉን መክፈት አይቻልም"</string>
- <string name="toast_failed_delete" msgid="2180678019407244069">"አንዳንድ ሰነዶችን መሰረዝ አልተቻለም"</string>
- <string name="share_via" msgid="8966594246261344259">"በሚከተለው በኩል ያጋሩ"</string>
- <string name="copy_notification_title" msgid="6374299806748219777">"ፋይሎች በመገልበጥ ላይ"</string>
- <string name="move_notification_title" msgid="6193835179777284805">"ፋይሎችን በመውሰድ ላይ"</string>
- <string name="delete_notification_title" msgid="3329403967712437496">"ፋይሎችን በመሰረዝ ላይ"</string>
- <string name="copy_remaining" msgid="6283790937387975095">"<xliff:g id="DURATION">%s</xliff:g> ቀርቷል"</string>
- <plurals name="copy_begin" formatted="false" msgid="9071199452634086365">
- <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> ፋይሎች በመቅዳት ላይ።</item>
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> ፋይሎች በመቅዳት ላይ።</item>
- </plurals>
- <plurals name="move_begin" formatted="false" msgid="8430330882138871643">
- <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="deleting" formatted="false" msgid="5054338566802559411">
- <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="7905788502491742328">"ቀልብስ"</string>
- <string name="copy_preparing" msgid="3896202461003039386">"ቅጂ በማዘጋጀት ላይ…"</string>
- <string name="move_preparing" msgid="2772219441375531410">"ለመውሰድ በማዘጋጀት ላይ…"</string>
- <string name="delete_preparing" msgid="5655813182533491992">"ለመሰረዝ በመዘጋጀት ላይ…"</string>
- <string name="delete_progress" msgid="5399405983046157222">"<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="7160447124922897689">
- <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="move_error_notification_title" formatted="false" msgid="2710901971014783012">
- <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_error_notification_title" formatted="false" msgid="7228393157786591199">
- <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="6268189413228855582">"ዝርዝሮችን ለመመልከት መታ ያድርጉ"</string>
- <string name="close" msgid="3043722427445528732">"ዝጋ"</string>
- <string name="copy_failure_alert_content" msgid="4563147454522476183">"እነዚህ ፋይሎች አልተቀዱም፦ <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="move_failure_alert_content" msgid="2635075788682922861">"እነዚህ ፋይሎች አልተወሰዱም፦ <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="delete_failure_alert_content" msgid="892393767207938353">"እነዚህ ፋይሎች አልተሰረዙም፦ <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="copy_converted_warning_content" msgid="5753861488218674361">"እነዚህ ፋይሎች ወደ ሌላ ቅርጸት ተለውጠዋል፦ <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <plurals name="clipboard_files_clipped" formatted="false" msgid="855459017537058539">
- <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="clipboard_files_cannot_paste" msgid="2878324825602325706">"የተመረጡትን ፋይሎች ወደዚህ አካባቢ መለጠፍ አይቻልም።"</string>
- <string name="menu_rename" msgid="7678802479104285353">"እንደገና ሰይም"</string>
- <string name="rename_error" msgid="4203041674883412606">"ሰነዱን ዳግም መሰየም አልተሳካም"</string>
- <string name="menu_eject_root" msgid="2768224615494227325">"አስወጣ"</string>
- <string name="notification_copy_files_converted_title" msgid="3153573223054275181">"አንዳንድ ፋይሎች ተለውጠዋል"</string>
- <string name="open_external_dialog_request" msgid="5789329484285817629">"<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="6635562535713428688">"የ<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="8899108702926347720">"በ<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="4295278542972859268">"ዳግም አትጠይቅ"</string>
- <string name="allow" msgid="7225948811296386551">"ይፍቀዱ"</string>
- <string name="deny" msgid="2081879885755434506">"ያስተባብሉ"</string>
- <plurals name="elements_selected" formatted="false" msgid="1376955402452875047">
- <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="3727204615215602228">
- <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="5312817725577537488">"«<xliff:g id="NAME">%1$s</xliff:g>» ይሰረዝ?"</string>
- <string name="delete_foldername_confirmation_message" msgid="5885501832257285329">"አቃፊ «<xliff:g id="NAME">%1$s</xliff:g>» እና ይዘቶቹ ይሰረዙ?"</string>
- <plurals name="delete_files_confirmation_message" formatted="false" msgid="8417505791395471802">
- <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="9185648028213507769">
- <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="5376214433530243459">
- <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>
-</resources>
diff --git a/packages/DocumentsUI/res/values-ar/strings.xml b/packages/DocumentsUI/res/values-ar/strings.xml
deleted file mode 100644
index ce53e2d..0000000
--- a/packages/DocumentsUI/res/values-ar/strings.xml
+++ /dev/null
@@ -1,192 +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="app_label" msgid="1551050262492398204">"الملفات"</string>
- <string name="downloads_label" msgid="959113951084633612">"التنزيلات"</string>
- <string name="title_open" msgid="4353228937663917801">"فتح من"</string>
- <string name="title_save" msgid="2433679664882857999">"حفظ في"</string>
- <string name="menu_create_dir" msgid="2547620241173881754">"مجلد جديد"</string>
- <string name="menu_grid" msgid="6878021334497835259">"عرض الشبكة"</string>
- <string name="menu_list" msgid="7279285939892417279">"عرض القائمة"</string>
- <string name="menu_sort" msgid="7677740407158414452">"ترتيب بحسب"</string>
- <string name="menu_search" msgid="3816712084502856974">"بحث"</string>
- <string name="menu_settings" msgid="8239065133341597825">"إعدادات سعة التخزين"</string>
- <string name="menu_open" msgid="432922957274920903">"فتح"</string>
- <string name="menu_save" msgid="2394743337684426338">"حفظ"</string>
- <string name="menu_share" msgid="3075149983979628146">"مشاركة"</string>
- <string name="menu_delete" msgid="8138799623850614177">"حذف"</string>
- <string name="menu_select_all" msgid="8323579667348729928">"تحديد الكل"</string>
- <string name="menu_copy" msgid="3612326052677229148">"نسخ إلى…"</string>
- <string name="menu_move" msgid="1828090633118079817">"نقل إلى..."</string>
- <string name="menu_new_window" msgid="1226032889278727538">"نافذة جديدة"</string>
- <string name="menu_cut_to_clipboard" msgid="2467149185452488383">"قص"</string>
- <string name="menu_copy_to_clipboard" msgid="489311381979634291">"نسخ"</string>
- <string name="menu_paste_from_clipboard" msgid="2071583031180257091">"لصق"</string>
- <string name="menu_advanced_show" msgid="4693652895715631401">"إظهار وحدة التخزين الداخلية"</string>
- <string name="menu_advanced_hide" msgid="4218809952721972589">"إخفاء وحدة التخزين الداخلية"</string>
- <string name="menu_file_size_show" msgid="3240323619260823076">"إظهار حجم الملف"</string>
- <string name="menu_file_size_hide" msgid="8881975928502581042">"إخفاء حجم الملف"</string>
- <string name="button_select" msgid="527196987259139214">"تحديد"</string>
- <string name="button_copy" msgid="8706475544635021302">"نسخ"</string>
- <string name="button_move" msgid="2202666023104202232">"نقل"</string>
- <string name="button_dismiss" msgid="3714065566893946085">"إزالة"</string>
- <string name="button_retry" msgid="4392027584153752797">"إعادة المحاولة"</string>
- <string name="sort_name" msgid="9183560467917256779">"بحسب الاسم"</string>
- <string name="sort_date" msgid="586080032956151448">"بحسب تاريخ التعديل"</string>
- <string name="sort_size" msgid="3350681319735474741">"بحسب الحجم"</string>
- <string name="drawer_open" msgid="4545466532430226949">"عرض الجذور"</string>
- <string name="drawer_close" msgid="7602734368552123318">"إخفاء الجذور"</string>
- <string name="save_error" msgid="6167009778003223664">"أخفق حفظ المستند"</string>
- <string name="create_error" msgid="3735649141335444215">"أخفق إنشاء المجلد"</string>
- <string name="query_error" msgid="5999895349602476581">"يتعذر تحميل المحتوى في الوقت الحالي"</string>
- <string name="root_recent" msgid="4470053704320518133">"الأخيرة"</string>
- <string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> خالية"</string>
- <string name="root_type_service" msgid="2178854894416775409">"خدمات التخزين"</string>
- <string name="root_type_shortcut" msgid="3318760609471618093">"اختصارات"</string>
- <string name="root_type_device" msgid="7121342474653483538">"أجهزة"</string>
- <string name="root_type_apps" msgid="8838065367985945189">"المزيد من التطبيقات"</string>
- <string name="empty" msgid="7858882803708117596">"ليس هناك أي عناصر"</string>
- <string name="no_results" msgid="6622510343880730446">"لا نتائج مطابقة في %1$s."</string>
- <string name="toast_no_application" msgid="4632640357724698144">"يتعذر فتح الملف"</string>
- <string name="toast_failed_delete" msgid="2180678019407244069">"تعذر حذف بعض المستندات"</string>
- <string name="share_via" msgid="8966594246261344259">"مشاركة عبر"</string>
- <string name="copy_notification_title" msgid="6374299806748219777">"جارٍ نسخ الملفات"</string>
- <string name="move_notification_title" msgid="6193835179777284805">"نقل الملفات"</string>
- <string name="delete_notification_title" msgid="3329403967712437496">"جارٍ حذف الملفات"</string>
- <string name="copy_remaining" msgid="6283790937387975095">"المدة المتبقية: <xliff:g id="DURATION">%s</xliff:g>"</string>
- <plurals name="copy_begin" formatted="false" msgid="9071199452634086365">
- <item quantity="zero">جارٍ نسخ <xliff:g id="COUNT_1">%1$d</xliff:g> ملفات.</item>
- <item quantity="two">جارٍ نسخ ملفين (<xliff:g id="COUNT_1">%1$d</xliff:g>).</item>
- <item quantity="few">جارٍ نسخ <xliff:g id="COUNT_1">%1$d</xliff:g> ملفات.</item>
- <item quantity="many">جارٍ نسخ <xliff:g id="COUNT_1">%1$d</xliff:g> ملفًا.</item>
- <item quantity="other">جارٍ نسخ <xliff:g id="COUNT_1">%1$d</xliff:g> من الملفات.</item>
- <item quantity="one">جارٍ نسخ ملف واحد (<xliff:g id="COUNT_0">%1$d</xliff:g>).</item>
- </plurals>
- <plurals name="move_begin" formatted="false" msgid="8430330882138871643">
- <item quantity="zero">لا ملفات <xliff:g id="COUNT_1">%1$d</xliff:g> يجري نقلها.</item>
- <item quantity="two">جارٍ نقل ملفين (<xliff:g id="COUNT_1">%1$d</xliff:g>).</item>
- <item quantity="few">جارٍ نقل <xliff:g id="COUNT_1">%1$d</xliff:g> ملفات.</item>
- <item quantity="many">جارٍ نقل <xliff:g id="COUNT_1">%1$d</xliff:g> ملفًا.</item>
- <item quantity="other">جارٍ نقل <xliff:g id="COUNT_1">%1$d</xliff:g> من الملفات.</item>
- <item quantity="one">جارٍ نقل <xliff:g id="COUNT_0">%1$d</xliff:g> ملف واحد.</item>
- </plurals>
- <plurals name="deleting" formatted="false" msgid="5054338566802559411">
- <item quantity="zero">جارٍ حذف <xliff:g id="COUNT_1">%1$d</xliff:g> ملف.</item>
- <item quantity="two">جارٍ حذف ملفين (<xliff:g id="COUNT_1">%1$d</xliff:g>).</item>
- <item quantity="few">جارٍ حذف <xliff:g id="COUNT_1">%1$d</xliff:g> ملفات.</item>
- <item quantity="many">جارٍ حذف <xliff:g id="COUNT_1">%1$d</xliff:g> ملفًا.</item>
- <item quantity="other">جارٍ حذف <xliff:g id="COUNT_1">%1$d</xliff:g> من الملفات.</item>
- <item quantity="one">جارٍ حذف <xliff:g id="COUNT_0">%1$d</xliff:g> ملف.</item>
- </plurals>
- <string name="undo" msgid="7905788502491742328">"تراجع"</string>
- <string name="copy_preparing" msgid="3896202461003039386">"جارٍ التحضير للنسخ ..."</string>
- <string name="move_preparing" msgid="2772219441375531410">"جارٍ التحضير للنقل…"</string>
- <string name="delete_preparing" msgid="5655813182533491992">"جارٍ الإعداد للحذف…"</string>
- <string name="delete_progress" msgid="5399405983046157222">"<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="7160447124922897689">
- <item quantity="zero">Couldn’t copy <xliff:g id="COUNT_1">%1$d</xliff:g> files</item>
- <item quantity="two">تعذر نسخ ملفين (<xliff:g id="COUNT_1">%1$d</xliff:g>)</item>
- <item quantity="few">تعذر نسخ <xliff:g id="COUNT_1">%1$d</xliff:g> ملفات</item>
- <item quantity="many">تعذر نسخ <xliff:g id="COUNT_1">%1$d</xliff:g> ملفًا</item>
- <item quantity="other">تعذر نسخ <xliff:g id="COUNT_1">%1$d</xliff:g> ملف</item>
- <item quantity="one">تعذر نسخ ملف (<xliff:g id="COUNT_0">%1$d</xliff:g>)</item>
- </plurals>
- <plurals name="move_error_notification_title" formatted="false" msgid="2710901971014783012">
- <item quantity="zero">Couldn’t move <xliff:g id="COUNT_1">%1$d</xliff:g> files</item>
- <item quantity="two">تعذر نقل ملفين (<xliff:g id="COUNT_1">%1$d</xliff:g>)</item>
- <item quantity="few">تعذر نقل <xliff:g id="COUNT_1">%1$d</xliff:g> ملفات</item>
- <item quantity="many">تعذر نقل <xliff:g id="COUNT_1">%1$d</xliff:g> ملفًا</item>
- <item quantity="other">تعذر نقل <xliff:g id="COUNT_1">%1$d</xliff:g> ملف</item>
- <item quantity="one">تعذر نقل ملف (<xliff:g id="COUNT_0">%1$d</xliff:g>)</item>
- </plurals>
- <plurals name="delete_error_notification_title" formatted="false" msgid="7228393157786591199">
- <item quantity="zero">Couldn’t delete <xliff:g id="COUNT_1">%1$d</xliff:g> files</item>
- <item quantity="two">تعذر حذف ملفين (<xliff:g id="COUNT_1">%1$d</xliff:g>)</item>
- <item quantity="few">تعذر حذف <xliff:g id="COUNT_1">%1$d</xliff:g> ملفات</item>
- <item quantity="many">تعذر حذف <xliff:g id="COUNT_1">%1$d</xliff:g> ملفًا</item>
- <item quantity="other">تعذر حذف <xliff:g id="COUNT_1">%1$d</xliff:g> ملف</item>
- <item quantity="one">تعذر حذف ملف (<xliff:g id="COUNT_0">%1$d</xliff:g>)</item>
- </plurals>
- <string name="notification_touch_for_details" msgid="6268189413228855582">"انقر لعرض التفاصيل."</string>
- <string name="close" msgid="3043722427445528732">"إغلاق"</string>
- <string name="copy_failure_alert_content" msgid="4563147454522476183">"لم يتم نسخ هذه الملفات: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="move_failure_alert_content" msgid="2635075788682922861">"لم يتم نقل هذه الملفات: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="delete_failure_alert_content" msgid="892393767207938353">"لم يتم حذف هذه الملفات: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="copy_converted_warning_content" msgid="5753861488218674361">"تم تحويل هذه الملفات إلى تنسيق آخر: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <plurals name="clipboard_files_clipped" formatted="false" msgid="855459017537058539">
- <item quantity="zero">لم يتم نسخ أي ملف (<xliff:g id="COUNT_1">%1$d</xliff:g>) إلى الحافظة.</item>
- <item quantity="two">تم نسخ ملفين اثنين (<xliff:g id="COUNT_1">%1$d</xliff:g>) إلى الحافظة.</item>
- <item quantity="few">تم نسخ <xliff:g id="COUNT_1">%1$d</xliff:g> ملفات إلى الحافظة.</item>
- <item quantity="many">تم نسخ <xliff:g id="COUNT_1">%1$d</xliff:g> ملفًا إلى الحافظة.</item>
- <item quantity="other">تم نسخ <xliff:g id="COUNT_1">%1$d</xliff:g> من الملفات إلى الحافظة.</item>
- <item quantity="one">تم نسخ ملف واحد (<xliff:g id="COUNT_0">%1$d</xliff:g>) إلى الحافظة.</item>
- </plurals>
- <string name="clipboard_files_cannot_paste" msgid="2878324825602325706">"يتعذر لصق الملفات المحددة في هذا الموقع."</string>
- <string name="menu_rename" msgid="7678802479104285353">"إعادة تسمية"</string>
- <string name="rename_error" msgid="4203041674883412606">"أخفقت إعادة تسمية المستند."</string>
- <string name="menu_eject_root" msgid="2768224615494227325">"إخراج"</string>
- <string name="notification_copy_files_converted_title" msgid="3153573223054275181">"تم تحويل بعض الملفات"</string>
- <string name="open_external_dialog_request" msgid="5789329484285817629">"هل تريد منح التطبيق <xliff:g id="APPNAME"><b>^1</b></xliff:g> حق الوصول إلى الدليل <xliff:g id="DIRECTORY"><i>^2</i></xliff:g> على <xliff:g id="STORAGE"><i>^3</i></xliff:g>؟"</string>
- <string name="open_external_dialog_request_primary_volume" msgid="6635562535713428688">"هل تريد تمكين <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="8899108702926347720">"هل تريد منح <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="4295278542972859268">"عدم السؤال مرة أخرى"</string>
- <string name="allow" msgid="7225948811296386551">"السماح"</string>
- <string name="deny" msgid="2081879885755434506">"رفض"</string>
- <plurals name="elements_selected" formatted="false" msgid="1376955402452875047">
- <item quantity="zero">تم تحديد <xliff:g id="COUNT_1">%1$d</xliff:g></item>
- <item quantity="two">تم تحديد <xliff:g id="COUNT_1">%1$d</xliff:g></item>
- <item quantity="few">تم تحديد <xliff:g id="COUNT_1">%1$d</xliff:g></item>
- <item quantity="many">تم تحديد <xliff:g id="COUNT_1">%1$d</xliff:g></item>
- <item quantity="other">تم تحديد <xliff:g id="COUNT_1">%1$d</xliff:g></item>
- <item quantity="one">تم تحديد <xliff:g id="COUNT_0">%1$d</xliff:g></item>
- </plurals>
- <plurals name="elements_dragged" formatted="false" msgid="3727204615215602228">
- <item quantity="zero"><xliff:g id="COUNT_1">%1$d</xliff:g> عنصر</item>
- <item quantity="two">عنصران (<xliff:g id="COUNT_1">%1$d</xliff:g>)</item>
- <item quantity="few"><xliff:g id="COUNT_1">%1$d</xliff:g> عناصر</item>
- <item quantity="many"><xliff:g id="COUNT_1">%1$d</xliff:g> عنصرًا</item>
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> عنصر</item>
- <item quantity="one">عنصر واحد (<xliff:g id="COUNT_0">%1$d</xliff:g>)</item>
- </plurals>
- <string name="delete_filename_confirmation_message" msgid="5312817725577537488">"هل تريد حذف \"<xliff:g id="NAME">%1$s</xliff:g>\"؟"</string>
- <string name="delete_foldername_confirmation_message" msgid="5885501832257285329">"هل تريد حذف المجلد \"<xliff:g id="NAME">%1$s</xliff:g>\" ومحتوياته؟"</string>
- <plurals name="delete_files_confirmation_message" formatted="false" msgid="8417505791395471802">
- <item quantity="zero">هل تريد حذف <xliff:g id="COUNT_1">%1$d</xliff:g> ملف؟</item>
- <item quantity="two">هل تريد حذف ملفين (<xliff:g id="COUNT_1">%1$d</xliff:g>)؟</item>
- <item quantity="few">هل تريد حذف <xliff:g id="COUNT_1">%1$d</xliff:g> ملفات؟</item>
- <item quantity="many">هل تريد حذف <xliff:g id="COUNT_1">%1$d</xliff:g> ملفًا؟</item>
- <item quantity="other">هل تريد حذف <xliff:g id="COUNT_1">%1$d</xliff:g> ملف؟</item>
- <item quantity="one">هل تريد حذف <xliff:g id="COUNT_0">%1$d</xliff:g> ملف؟</item>
- </plurals>
- <plurals name="delete_folders_confirmation_message" formatted="false" msgid="9185648028213507769">
- <item quantity="zero">هل تريد حذف <xliff:g id="COUNT_1">%1$d</xliff:g> مجلد ومحتوياته؟</item>
- <item quantity="two">هل تريد حذف مجلدين (<xliff:g id="COUNT_1">%1$d</xliff:g>) ومحتوياتهما؟</item>
- <item quantity="few">هل تريد حذف <xliff:g id="COUNT_1">%1$d</xliff:g> مجلدات ومحتوياتها؟</item>
- <item quantity="many">هل تريد حذف <xliff:g id="COUNT_1">%1$d</xliff:g> مجلدًا ومحتويات هذه المجلدات؟</item>
- <item quantity="other">هل تريد حذف <xliff:g id="COUNT_1">%1$d</xliff:g> مجلد ومحتويات هذه المجلدات؟</item>
- <item quantity="one">هل تريد حذف <xliff:g id="COUNT_0">%1$d</xliff:g> مجلد ومحتوياته؟</item>
- </plurals>
- <plurals name="delete_items_confirmation_message" formatted="false" msgid="5376214433530243459">
- <item quantity="zero">هل تريد حذف <xliff:g id="COUNT_1">%1$d</xliff:g> عنصر؟</item>
- <item quantity="two">هل تريد حذف عنصرين (<xliff:g id="COUNT_1">%1$d</xliff:g>)؟</item>
- <item quantity="few">هل تريد حذف <xliff:g id="COUNT_1">%1$d</xliff:g> عناصر؟</item>
- <item quantity="many">هل تريد حذف <xliff:g id="COUNT_1">%1$d</xliff:g> عنصرًا؟</item>
- <item quantity="other">هل تريد حذف <xliff:g id="COUNT_1">%1$d</xliff:g> عنصر؟</item>
- <item quantity="one">هل تريد حذف <xliff:g id="COUNT_0">%1$d</xliff:g> عنصر؟</item>
- </plurals>
-</resources>
diff --git a/packages/DocumentsUI/res/values-az-rAZ/strings.xml b/packages/DocumentsUI/res/values-az-rAZ/strings.xml
deleted file mode 100644
index f064feb..0000000
--- a/packages/DocumentsUI/res/values-az-rAZ/strings.xml
+++ /dev/null
@@ -1,144 +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="app_label" msgid="1551050262492398204">"Fayllar"</string>
- <string name="downloads_label" msgid="959113951084633612">"Endirmələr"</string>
- <string name="title_open" msgid="4353228937663917801">"Vasitəsilə açın"</string>
- <string name="title_save" msgid="2433679664882857999">"buraya saxlayın"</string>
- <string name="menu_create_dir" msgid="2547620241173881754">"Yeni qovluq"</string>
- <string name="menu_grid" msgid="6878021334497835259">"Torlu görünüş"</string>
- <string name="menu_list" msgid="7279285939892417279">"Siyahı görünüşü"</string>
- <string name="menu_sort" msgid="7677740407158414452">"Sıralayın"</string>
- <string name="menu_search" msgid="3816712084502856974">"Axtarış"</string>
- <string name="menu_settings" msgid="8239065133341597825">"Yaddaş ayarları"</string>
- <string name="menu_open" msgid="432922957274920903">"Açın"</string>
- <string name="menu_save" msgid="2394743337684426338">"Yadda saxlayın"</string>
- <string name="menu_share" msgid="3075149983979628146">"Paylaşın"</string>
- <string name="menu_delete" msgid="8138799623850614177">"Sil"</string>
- <string name="menu_select_all" msgid="8323579667348729928">"Hamısını seçin"</string>
- <string name="menu_copy" msgid="3612326052677229148">"Buraya kopyalayın:"</string>
- <string name="menu_move" msgid="1828090633118079817">"Daşıyın..."</string>
- <string name="menu_new_window" msgid="1226032889278727538">"Yeni pəncərə"</string>
- <string name="menu_cut_to_clipboard" msgid="2467149185452488383">"Kəsin"</string>
- <string name="menu_copy_to_clipboard" msgid="489311381979634291">"Kopyalayın"</string>
- <string name="menu_paste_from_clipboard" msgid="2071583031180257091">"Yerləşdirin"</string>
- <string name="menu_advanced_show" msgid="4693652895715631401">"Daxili yaddaşı göstərin"</string>
- <string name="menu_advanced_hide" msgid="4218809952721972589">"Daxili yaddaşı gizlədin"</string>
- <string name="menu_file_size_show" msgid="3240323619260823076">"Fayl ölçüsünü göstərin"</string>
- <string name="menu_file_size_hide" msgid="8881975928502581042">"Fayl ölçüsünü gizlədin"</string>
- <string name="button_select" msgid="527196987259139214">"Seçin"</string>
- <string name="button_copy" msgid="8706475544635021302">"Kopyala"</string>
- <string name="button_move" msgid="2202666023104202232">"Köçürün"</string>
- <string name="button_dismiss" msgid="3714065566893946085">"Rədd edin"</string>
- <string name="button_retry" msgid="4392027584153752797">"Yenidən cəhd edin"</string>
- <string name="sort_name" msgid="9183560467917256779">"Ad üzrə"</string>
- <string name="sort_date" msgid="586080032956151448">"Tarix üzrə dəyişmiş"</string>
- <string name="sort_size" msgid="3350681319735474741">"Ölçü üzrə"</string>
- <string name="drawer_open" msgid="4545466532430226949">"Kökləri göstərin"</string>
- <string name="drawer_close" msgid="7602734368552123318">"Kökləri gizlədin"</string>
- <string name="save_error" msgid="6167009778003223664">"Sənədi yadda saxlaya bilmədi"</string>
- <string name="create_error" msgid="3735649141335444215">"Qovluq yaradıla bilmədi"</string>
- <string name="query_error" msgid="5999895349602476581">"Məzmun hazırda yüklənmir"</string>
- <string name="root_recent" msgid="4470053704320518133">"Son"</string>
- <string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> ödənişsiz"</string>
- <string name="root_type_service" msgid="2178854894416775409">"Saxlama xidmətləri"</string>
- <string name="root_type_shortcut" msgid="3318760609471618093">"Qısa yollar"</string>
- <string name="root_type_device" msgid="7121342474653483538">"Cihazlar"</string>
- <string name="root_type_apps" msgid="8838065367985945189">"Digər tətbiqlər"</string>
- <string name="empty" msgid="7858882803708117596">"Heç nə yoxdur"</string>
- <string name="no_results" msgid="6622510343880730446">"%1$s ilə heç bir uyğunluq yoxdur"</string>
- <string name="toast_no_application" msgid="4632640357724698144">"Fayl açılmır"</string>
- <string name="toast_failed_delete" msgid="2180678019407244069">"Bəzi sənədləri silə bilmir"</string>
- <string name="share_via" msgid="8966594246261344259">"Bunun vasitəsilə paylaş:"</string>
- <string name="copy_notification_title" msgid="6374299806748219777">"Fayllar kopyalanır"</string>
- <string name="move_notification_title" msgid="6193835179777284805">"Fayllar köçürülür"</string>
- <string name="delete_notification_title" msgid="3329403967712437496">"Fayllar silinir"</string>
- <string name="copy_remaining" msgid="6283790937387975095">"<xliff:g id="DURATION">%s</xliff:g> qalıb"</string>
- <plurals name="copy_begin" formatted="false" msgid="9071199452634086365">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> fayl kopyalanır.</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> fayl kopyalanır.</item>
- </plurals>
- <plurals name="move_begin" formatted="false" msgid="8430330882138871643">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> fayl köçürülür.</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> fayl köçürülür.</item>
- </plurals>
- <plurals name="deleting" formatted="false" msgid="5054338566802559411">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> fayl silinir.</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> fayl silinir.</item>
- </plurals>
- <string name="undo" msgid="7905788502491742328">"Ləğv edin"</string>
- <string name="copy_preparing" msgid="3896202461003039386">"Kopyalanmaq üçün hazırlanır ..."</string>
- <string name="move_preparing" msgid="2772219441375531410">"Köçürmə üçün hazırlanır..."</string>
- <string name="delete_preparing" msgid="5655813182533491992">"Silmək üçün hazırlanır..."</string>
- <string name="delete_progress" msgid="5399405983046157222">"<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="7160447124922897689">
- <item quantity="other"> <xliff:g id="COUNT_1">%1$d</xliff:g> fayl kopyalanmadı</item>
- <item quantity="one"> <xliff:g id="COUNT_0">%1$d</xliff:g> fayl kopyalanmadı</item>
- </plurals>
- <plurals name="move_error_notification_title" formatted="false" msgid="2710901971014783012">
- <item quantity="other"> <xliff:g id="COUNT_1">%1$d</xliff:g> fayl köçürülmədi</item>
- <item quantity="one"> <xliff:g id="COUNT_0">%1$d</xliff:g> fayl köçürülmədi</item>
- </plurals>
- <plurals name="delete_error_notification_title" formatted="false" msgid="7228393157786591199">
- <item quantity="other"> <xliff:g id="COUNT_1">%1$d</xliff:g> fayl silinmədi</item>
- <item quantity="one"> <xliff:g id="COUNT_0">%1$d</xliff:g> fayl silinmədi</item>
- </plurals>
- <string name="notification_touch_for_details" msgid="6268189413228855582">"Detallara baxmaq üçün basın"</string>
- <string name="close" msgid="3043722427445528732">"Bağla"</string>
- <string name="copy_failure_alert_content" msgid="4563147454522476183">"Bu fayllar kopyalanmadı: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="move_failure_alert_content" msgid="2635075788682922861">"Bu fayllar köçürülmədi: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="delete_failure_alert_content" msgid="892393767207938353">"Bu fayllar silinmədi: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="copy_converted_warning_content" msgid="5753861488218674361">"Bu fayllar başqa formata konvertasiya edilib: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <plurals name="clipboard_files_clipped" formatted="false" msgid="855459017537058539">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> fayl buferə kopyalandı.</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> fayl buferə kopyalandı.</item>
- </plurals>
- <string name="clipboard_files_cannot_paste" msgid="2878324825602325706">"Seçilmiş faylları bu məkana yerləşdirmək olmaz."</string>
- <string name="menu_rename" msgid="7678802479104285353">"Adını dəyişdirin"</string>
- <string name="rename_error" msgid="4203041674883412606">"Sənəd adını dəyişmək uğursuz oldu"</string>
- <string name="menu_eject_root" msgid="2768224615494227325">"Çıxarın"</string>
- <string name="notification_copy_files_converted_title" msgid="3153573223054275181">"Bəzi fayllar konvertasiya edilib"</string>
- <string name="open_external_dialog_request" msgid="5789329484285817629">"<xliff:g id="STORAGE"><i>^3</i></xliff:g> yaddaşında <xliff:g id="DIRECTORY"><i>^2</i></xliff:g> kataloquna <xliff:g id="APPNAME"><b>^1</b></xliff:g> girişi təqdim edilsin?"</string>
- <string name="open_external_dialog_request_primary_volume" msgid="6635562535713428688">"<xliff:g id="DIRECTORY"><i>^2</i></xliff:g> kataloquna <xliff:g id="APPNAME"><b>^1</b></xliff:g> girişi təqdim edilsin?"</string>
- <string name="open_external_dialog_root_request" msgid="8899108702926347720">"<xliff:g id="STORAGE"><i>^2</i></xliff:g> yaddaşında foto və videolar daxil olmaqla datanıza <xliff:g id="APPNAME"><b>^1</b></xliff:g> girişi təmin edilsin?"</string>
- <string name="never_ask_again" msgid="4295278542972859268">"Bir daha soruşmayın"</string>
- <string name="allow" msgid="7225948811296386551">"İcazə verin"</string>
- <string name="deny" msgid="2081879885755434506">"Rədd et"</string>
- <plurals name="elements_selected" formatted="false" msgid="1376955402452875047">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> seçilib</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> seçilib</item>
- </plurals>
- <plurals name="elements_dragged" formatted="false" msgid="3727204615215602228">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> element</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> element</item>
- </plurals>
- <string name="delete_filename_confirmation_message" msgid="5312817725577537488">"\"<xliff:g id="NAME">%1$s</xliff:g>\" silinsin?"</string>
- <string name="delete_foldername_confirmation_message" msgid="5885501832257285329">"\"<xliff:g id="NAME">%1$s</xliff:g>\" qovluğu və onun məzmunu silinsin?"</string>
- <plurals name="delete_files_confirmation_message" formatted="false" msgid="8417505791395471802">
- <item quantity="other"> <xliff:g id="COUNT_1">%1$d</xliff:g> fayl silinsin?</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> fayl silinsin?</item>
- </plurals>
- <plurals name="delete_folders_confirmation_message" formatted="false" msgid="9185648028213507769">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> qovluq və onun məzmunu silinsin?</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> qovluq və onun məzmunu silinsin?</item>
- </plurals>
- <plurals name="delete_items_confirmation_message" formatted="false" msgid="5376214433530243459">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> element silinsin?</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> element silinsin?</item>
- </plurals>
-</resources>
diff --git a/packages/DocumentsUI/res/values-b+sr+Latn/strings.xml b/packages/DocumentsUI/res/values-b+sr+Latn/strings.xml
deleted file mode 100644
index 1488466..0000000
--- a/packages/DocumentsUI/res/values-b+sr+Latn/strings.xml
+++ /dev/null
@@ -1,156 +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="app_label" msgid="1551050262492398204">"Datoteke"</string>
- <string name="downloads_label" msgid="959113951084633612">"Preuzimanja"</string>
- <string name="title_open" msgid="4353228937663917801">"Otvori sa"</string>
- <string name="title_save" msgid="2433679664882857999">"Sačuvaj u"</string>
- <string name="menu_create_dir" msgid="2547620241173881754">"Novi direktorijum"</string>
- <string name="menu_grid" msgid="6878021334497835259">"Prikaz mreže"</string>
- <string name="menu_list" msgid="7279285939892417279">"Prikaz liste"</string>
- <string name="menu_sort" msgid="7677740407158414452">"Sortiraj prema"</string>
- <string name="menu_search" msgid="3816712084502856974">"Pretraži"</string>
- <string name="menu_settings" msgid="8239065133341597825">"Podešavanja memorije"</string>
- <string name="menu_open" msgid="432922957274920903">"Otvori"</string>
- <string name="menu_save" msgid="2394743337684426338">"Sačuvaj"</string>
- <string name="menu_share" msgid="3075149983979628146">"Deli"</string>
- <string name="menu_delete" msgid="8138799623850614177">"Izbriši"</string>
- <string name="menu_select_all" msgid="8323579667348729928">"Izaberi sve"</string>
- <string name="menu_copy" msgid="3612326052677229148">"Kopiraj na..."</string>
- <string name="menu_move" msgid="1828090633118079817">"Premesti u..."</string>
- <string name="menu_new_window" msgid="1226032889278727538">"Novi prozor"</string>
- <string name="menu_cut_to_clipboard" msgid="2467149185452488383">"Iseci"</string>
- <string name="menu_copy_to_clipboard" msgid="489311381979634291">"Kopiraj"</string>
- <string name="menu_paste_from_clipboard" msgid="2071583031180257091">"Nalepi"</string>
- <string name="menu_advanced_show" msgid="4693652895715631401">"Prikaži internu memoriju"</string>
- <string name="menu_advanced_hide" msgid="4218809952721972589">"Sakrij internu memoriju"</string>
- <string name="menu_file_size_show" msgid="3240323619260823076">"Prikaži veličinu datoteke"</string>
- <string name="menu_file_size_hide" msgid="8881975928502581042">"Sakrij veličinu datoteke"</string>
- <string name="button_select" msgid="527196987259139214">"Izaberi"</string>
- <string name="button_copy" msgid="8706475544635021302">"Kopiraj"</string>
- <string name="button_move" msgid="2202666023104202232">"Premesti"</string>
- <string name="button_dismiss" msgid="3714065566893946085">"Odbaci"</string>
- <string name="button_retry" msgid="4392027584153752797">"Pokušaj ponovo"</string>
- <string name="sort_name" msgid="9183560467917256779">"Prema imenu"</string>
- <string name="sort_date" msgid="586080032956151448">"Prema datumu izmene"</string>
- <string name="sort_size" msgid="3350681319735474741">"Prema veličini"</string>
- <string name="drawer_open" msgid="4545466532430226949">"Prikaži osnovne elemente"</string>
- <string name="drawer_close" msgid="7602734368552123318">"Sakrij osnovne elemente"</string>
- <string name="save_error" msgid="6167009778003223664">"Čuvanje dokumenta nije uspelo"</string>
- <string name="create_error" msgid="3735649141335444215">"Direktorijum nije napravljen"</string>
- <string name="query_error" msgid="5999895349602476581">"Učitavanje sadržaja trenutno nije moguće"</string>
- <string name="root_recent" msgid="4470053704320518133">"Nedavno"</string>
- <string name="root_available_bytes" msgid="8568452858617033281">"Slobodno je <xliff:g id="SIZE">%1$s</xliff:g>"</string>
- <string name="root_type_service" msgid="2178854894416775409">"Usluge skladištenja"</string>
- <string name="root_type_shortcut" msgid="3318760609471618093">"Prečice"</string>
- <string name="root_type_device" msgid="7121342474653483538">"Uređaji"</string>
- <string name="root_type_apps" msgid="8838065367985945189">"Još aplikacija"</string>
- <string name="empty" msgid="7858882803708117596">"Nema stavki"</string>
- <string name="no_results" msgid="6622510343880730446">"Nema podudaranja u %1$s"</string>
- <string name="toast_no_application" msgid="4632640357724698144">"Otvaranje datoteke nije uspelo"</string>
- <string name="toast_failed_delete" msgid="2180678019407244069">"Nije moguće izbrisati neke dokumente"</string>
- <string name="share_via" msgid="8966594246261344259">"Delite preko"</string>
- <string name="copy_notification_title" msgid="6374299806748219777">"Kopiranje datoteka"</string>
- <string name="move_notification_title" msgid="6193835179777284805">"Datoteke se premeštaju"</string>
- <string name="delete_notification_title" msgid="3329403967712437496">"Datoteke se brišu"</string>
- <string name="copy_remaining" msgid="6283790937387975095">"Još <xliff:g id="DURATION">%s</xliff:g>"</string>
- <plurals name="copy_begin" formatted="false" msgid="9071199452634086365">
- <item quantity="one">Kopiranje <xliff:g id="COUNT_1">%1$d</xliff:g> datoteke.</item>
- <item quantity="few">Kopiranje <xliff:g id="COUNT_1">%1$d</xliff:g> datoteke.</item>
- <item quantity="other">Kopiranje <xliff:g id="COUNT_1">%1$d</xliff:g> datoteka.</item>
- </plurals>
- <plurals name="move_begin" formatted="false" msgid="8430330882138871643">
- <item quantity="one">Premešta se <xliff:g id="COUNT_1">%1$d</xliff:g> datoteka.</item>
- <item quantity="few">Premeštaju se <xliff:g id="COUNT_1">%1$d</xliff:g> datoteke.</item>
- <item quantity="other">Premešta se <xliff:g id="COUNT_1">%1$d</xliff:g> datoteka.</item>
- </plurals>
- <plurals name="deleting" formatted="false" msgid="5054338566802559411">
- <item quantity="one">Briše se <xliff:g id="COUNT_1">%1$d</xliff:g> datoteka.</item>
- <item quantity="few">Brišu se <xliff:g id="COUNT_1">%1$d</xliff:g> datoteke.</item>
- <item quantity="other">Briše se <xliff:g id="COUNT_1">%1$d</xliff:g> datoteka.</item>
- </plurals>
- <string name="undo" msgid="7905788502491742328">"Opozovi"</string>
- <string name="copy_preparing" msgid="3896202461003039386">"Priprema se kopiranje…"</string>
- <string name="move_preparing" msgid="2772219441375531410">"Priprema se premeštanje..."</string>
- <string name="delete_preparing" msgid="5655813182533491992">"Priprema se brisanje…"</string>
- <string name="delete_progress" msgid="5399405983046157222">"<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="7160447124922897689">
- <item quantity="one">Nismo uspeli da kopiramo <xliff:g id="COUNT_1">%1$d</xliff:g> datoteku</item>
- <item quantity="few">Nismo uspeli da kopiramo <xliff:g id="COUNT_1">%1$d</xliff:g> datoteke</item>
- <item quantity="other">Nismo uspeli da kopiramo <xliff:g id="COUNT_1">%1$d</xliff:g> datoteka</item>
- </plurals>
- <plurals name="move_error_notification_title" formatted="false" msgid="2710901971014783012">
- <item quantity="one">Premeštanje <xliff:g id="COUNT_1">%1$d</xliff:g> datoteke nije uspelo</item>
- <item quantity="few">Premeštanje <xliff:g id="COUNT_1">%1$d</xliff:g> datoteke nije uspelo</item>
- <item quantity="other">Premeštanje <xliff:g id="COUNT_1">%1$d</xliff:g> datoteka nije uspelo</item>
- </plurals>
- <plurals name="delete_error_notification_title" formatted="false" msgid="7228393157786591199">
- <item quantity="one">Brisanje <xliff:g id="COUNT_1">%1$d</xliff:g> datoteke nije uspelo</item>
- <item quantity="few">Brisanje <xliff:g id="COUNT_1">%1$d</xliff:g> datoteke nije uspelo</item>
- <item quantity="other">Brisanje <xliff:g id="COUNT_1">%1$d</xliff:g> datoteka nije uspelo</item>
- </plurals>
- <string name="notification_touch_for_details" msgid="6268189413228855582">"Dodirnite da biste prikazali detalje"</string>
- <string name="close" msgid="3043722427445528732">"Zatvori"</string>
- <string name="copy_failure_alert_content" msgid="4563147454522476183">"Sledeće datoteke nisu kopirane: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="move_failure_alert_content" msgid="2635075788682922861">"Sledeće datoteke nisu premeštene: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="delete_failure_alert_content" msgid="892393767207938353">"Sledeće datoteke nisu izbrisane: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="copy_converted_warning_content" msgid="5753861488218674361">"Ove datoteke su konvertovane u drugi format: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <plurals name="clipboard_files_clipped" formatted="false" msgid="855459017537058539">
- <item quantity="one">Kopirali ste <xliff:g id="COUNT_1">%1$d</xliff:g> datoteku u privremenu memoriju.</item>
- <item quantity="few">Kopirali ste <xliff:g id="COUNT_1">%1$d</xliff:g> datoteke u privremenu memoriju.</item>
- <item quantity="other">Kopirali ste <xliff:g id="COUNT_1">%1$d</xliff:g> datoteka u privremenu memoriju.</item>
- </plurals>
- <string name="clipboard_files_cannot_paste" msgid="2878324825602325706">"Izabrane datoteke ne mogu da se nalepe na ovoj lokaciji."</string>
- <string name="menu_rename" msgid="7678802479104285353">"Preimenuj"</string>
- <string name="rename_error" msgid="4203041674883412606">"Preimenovanje dokumenta nije uspelo"</string>
- <string name="menu_eject_root" msgid="2768224615494227325">"Izbaci"</string>
- <string name="notification_copy_files_converted_title" msgid="3153573223054275181">"Neke datoteke su konvertovane"</string>
- <string name="open_external_dialog_request" msgid="5789329484285817629">"Želite li da aplikaciji <xliff:g id="APPNAME"><b>^1</b></xliff:g> odobrite pristup direktorijumu <xliff:g id="DIRECTORY"><i>^2</i></xliff:g> na memorijskom prostoru <xliff:g id="STORAGE"><i>^3</i></xliff:g>?"</string>
- <string name="open_external_dialog_request_primary_volume" msgid="6635562535713428688">"Želite da dozvolite da <xliff:g id="APPNAME"><b>^1</b></xliff:g> pristupa direktorijumu <xliff:g id="DIRECTORY"><i>^2</i></xliff:g>?"</string>
- <string name="open_external_dialog_root_request" msgid="8899108702926347720">"Želite da li da dozvolite da aplikacija <xliff:g id="APPNAME"><b>^1</b></xliff:g> pristupa podacima, uključujući slike i video snimke, na lokaciji <xliff:g id="STORAGE"><i>^2</i></xliff:g>?"</string>
- <string name="never_ask_again" msgid="4295278542972859268">"Ne pitaj ponovo"</string>
- <string name="allow" msgid="7225948811296386551">"Dozvoli"</string>
- <string name="deny" msgid="2081879885755434506">"Odbij"</string>
- <plurals name="elements_selected" formatted="false" msgid="1376955402452875047">
- <item quantity="one">Izabrana je <xliff:g id="COUNT_1">%1$d</xliff:g> stavka</item>
- <item quantity="few">Izabrane su <xliff:g id="COUNT_1">%1$d</xliff:g> stavke</item>
- <item quantity="other">Izabrano je <xliff:g id="COUNT_1">%1$d</xliff:g> stavki</item>
- </plurals>
- <plurals name="elements_dragged" formatted="false" msgid="3727204615215602228">
- <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> stavka</item>
- <item quantity="few"><xliff:g id="COUNT_1">%1$d</xliff:g> stavke</item>
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> stavki</item>
- </plurals>
- <string name="delete_filename_confirmation_message" msgid="5312817725577537488">"Želite li da izbrišete „<xliff:g id="NAME">%1$s</xliff:g>“?"</string>
- <string name="delete_foldername_confirmation_message" msgid="5885501832257285329">"Želite li da izbrišete direktorijum „<xliff:g id="NAME">%1$s</xliff:g>“ i njegov sadržaj?"</string>
- <plurals name="delete_files_confirmation_message" formatted="false" msgid="8417505791395471802">
- <item quantity="one">Želite li da izbrišete <xliff:g id="COUNT_1">%1$d</xliff:g> datoteku?</item>
- <item quantity="few">Želite li da izbrišete <xliff:g id="COUNT_1">%1$d</xliff:g> datoteke?</item>
- <item quantity="other">Želite li da izbrišete <xliff:g id="COUNT_1">%1$d</xliff:g> datoteka?</item>
- </plurals>
- <plurals name="delete_folders_confirmation_message" formatted="false" msgid="9185648028213507769">
- <item quantity="one">Želite li da izbrišete <xliff:g id="COUNT_1">%1$d</xliff:g> direktorijum i njihov sadržaj?</item>
- <item quantity="few">Želite li da izbrišete <xliff:g id="COUNT_1">%1$d</xliff:g> direktorijuma i njihov sadržaj?</item>
- <item quantity="other">Želite li da izbrišete <xliff:g id="COUNT_1">%1$d</xliff:g> direktorijuma i njihov sadržaj?</item>
- </plurals>
- <plurals name="delete_items_confirmation_message" formatted="false" msgid="5376214433530243459">
- <item quantity="one">Želite li da izbrišete <xliff:g id="COUNT_1">%1$d</xliff:g> stavku?</item>
- <item quantity="few">Želite li da izbrišete <xliff:g id="COUNT_1">%1$d</xliff:g> stavke?</item>
- <item quantity="other">Želite li da izbrišete <xliff:g id="COUNT_1">%1$d</xliff:g> stavki?</item>
- </plurals>
-</resources>
diff --git a/packages/DocumentsUI/res/values-be-rBY/strings.xml b/packages/DocumentsUI/res/values-be-rBY/strings.xml
deleted file mode 100644
index 2fb069e..0000000
--- a/packages/DocumentsUI/res/values-be-rBY/strings.xml
+++ /dev/null
@@ -1,168 +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="app_label" msgid="1551050262492398204">"Файлы"</string>
- <string name="downloads_label" msgid="959113951084633612">"Спампоўкі"</string>
- <string name="title_open" msgid="4353228937663917801">"Адкрыць з"</string>
- <string name="title_save" msgid="2433679664882857999">"Захаваць у"</string>
- <string name="menu_create_dir" msgid="2547620241173881754">"Новая папка"</string>
- <string name="menu_grid" msgid="6878021334497835259">"У выглядзе табліцы"</string>
- <string name="menu_list" msgid="7279285939892417279">"У выглядзе спіса"</string>
- <string name="menu_sort" msgid="7677740407158414452">"Сартаваць па:"</string>
- <string name="menu_search" msgid="3816712084502856974">"Шукаць"</string>
- <string name="menu_settings" msgid="8239065133341597825">"Налады сховішча"</string>
- <string name="menu_open" msgid="432922957274920903">"Адкрыць"</string>
- <string name="menu_save" msgid="2394743337684426338">"Захаваць"</string>
- <string name="menu_share" msgid="3075149983979628146">"Абагуліць"</string>
- <string name="menu_delete" msgid="8138799623850614177">"Выдаліць"</string>
- <string name="menu_select_all" msgid="8323579667348729928">"Выбраць усё"</string>
- <string name="menu_copy" msgid="3612326052677229148">"Капіраваць у..."</string>
- <string name="menu_move" msgid="1828090633118079817">"Перамясціць у..."</string>
- <string name="menu_new_window" msgid="1226032889278727538">"Новае акно"</string>
- <string name="menu_cut_to_clipboard" msgid="2467149185452488383">"Выразаць"</string>
- <string name="menu_copy_to_clipboard" msgid="489311381979634291">"Капіраваць"</string>
- <string name="menu_paste_from_clipboard" msgid="2071583031180257091">"Уставіць"</string>
- <string name="menu_advanced_show" msgid="4693652895715631401">"Паказаць унутр. сховішча"</string>
- <string name="menu_advanced_hide" msgid="4218809952721972589">"Схаваць унутр. сховішча"</string>
- <string name="menu_file_size_show" msgid="3240323619260823076">"Паказаць памеры файлаў"</string>
- <string name="menu_file_size_hide" msgid="8881975928502581042">"Схаваць памеры файлаў"</string>
- <string name="button_select" msgid="527196987259139214">"Выбраць"</string>
- <string name="button_copy" msgid="8706475544635021302">"Капіраваць"</string>
- <string name="button_move" msgid="2202666023104202232">"Перамясціць"</string>
- <string name="button_dismiss" msgid="3714065566893946085">"Адхіліць"</string>
- <string name="button_retry" msgid="4392027584153752797">"Паўтарыце спробу"</string>
- <string name="sort_name" msgid="9183560467917256779">"Па назве"</string>
- <string name="sort_date" msgid="586080032956151448">"Па даце змянення"</string>
- <string name="sort_size" msgid="3350681319735474741">"Па памеры"</string>
- <string name="drawer_open" msgid="4545466532430226949">"Паказаць каранёвыя папкі"</string>
- <string name="drawer_close" msgid="7602734368552123318">"Схаваць каранёвыя папкі"</string>
- <string name="save_error" msgid="6167009778003223664">"Не атрымалася захаваць дакумент"</string>
- <string name="create_error" msgid="3735649141335444215">"Не атрымалася стварыць папку"</string>
- <string name="query_error" msgid="5999895349602476581">"Зараз немагчыма загрузіць змесціва"</string>
- <string name="root_recent" msgid="4470053704320518133">"Нядаўнія"</string>
- <string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> свабодна"</string>
- <string name="root_type_service" msgid="2178854894416775409">"Службы захоўвання"</string>
- <string name="root_type_shortcut" msgid="3318760609471618093">"Ярлыкі"</string>
- <string name="root_type_device" msgid="7121342474653483538">"Прылады"</string>
- <string name="root_type_apps" msgid="8838065367985945189">"Іншыя праграмы"</string>
- <string name="empty" msgid="7858882803708117596">"Няма элементаў"</string>
- <string name="no_results" msgid="6622510343880730446">"Няма супадзенняў у %1$s"</string>
- <string name="toast_no_application" msgid="4632640357724698144">"Немагчыма адкрыць файл"</string>
- <string name="toast_failed_delete" msgid="2180678019407244069">"Немагчыма выдаліць некаторыя дакументы"</string>
- <string name="share_via" msgid="8966594246261344259">"Абагуліць праз"</string>
- <string name="copy_notification_title" msgid="6374299806748219777">"Капіраванне файлаў"</string>
- <string name="move_notification_title" msgid="6193835179777284805">"Перамяшчэнне файлаў"</string>
- <string name="delete_notification_title" msgid="3329403967712437496">"Выдаленне файлаў"</string>
- <string name="copy_remaining" msgid="6283790937387975095">"Засталося <xliff:g id="DURATION">%s</xliff:g>"</string>
- <plurals name="copy_begin" formatted="false" msgid="9071199452634086365">
- <item quantity="one">Капіраванне <xliff:g id="COUNT_1">%1$d</xliff:g> файла.</item>
- <item quantity="few">Капіраванне <xliff:g id="COUNT_1">%1$d</xliff:g> файлаў.</item>
- <item quantity="many">Капіраванне <xliff:g id="COUNT_1">%1$d</xliff:g> файлаў.</item>
- <item quantity="other">Капіраванне <xliff:g id="COUNT_1">%1$d</xliff:g> файла.</item>
- </plurals>
- <plurals name="move_begin" formatted="false" msgid="8430330882138871643">
- <item quantity="one">Перамяшчэнне <xliff:g id="COUNT_1">%1$d</xliff:g> файла.</item>
- <item quantity="few">Перамяшчэнне <xliff:g id="COUNT_1">%1$d</xliff:g> файлаў.</item>
- <item quantity="many">Перамяшчэнне <xliff:g id="COUNT_1">%1$d</xliff:g> файлаў.</item>
- <item quantity="other">Перамяшчэнне <xliff:g id="COUNT_1">%1$d</xliff:g> файла.</item>
- </plurals>
- <plurals name="deleting" formatted="false" msgid="5054338566802559411">
- <item quantity="one">Выдаленне <xliff:g id="COUNT_1">%1$d</xliff:g> файла.</item>
- <item quantity="few">Выдаленне <xliff:g id="COUNT_1">%1$d</xliff:g> файлаў.</item>
- <item quantity="many">Выдаленне <xliff:g id="COUNT_1">%1$d</xliff:g> файлаў.</item>
- <item quantity="other">Выдаленне <xliff:g id="COUNT_1">%1$d</xliff:g> файла.</item>
- </plurals>
- <string name="undo" msgid="7905788502491742328">"Адрабіць"</string>
- <string name="copy_preparing" msgid="3896202461003039386">"Падрыхтоўка да капіравання..."</string>
- <string name="move_preparing" msgid="2772219441375531410">"Падрыхтоўка да перамяшчэння..."</string>
- <string name="delete_preparing" msgid="5655813182533491992">"Падрыхтоўка да выдалення..."</string>
- <string name="delete_progress" msgid="5399405983046157222">"<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="7160447124922897689">
- <item quantity="one">Не атрымалася скапіраваць <xliff:g id="COUNT_1">%1$d</xliff:g> файл</item>
- <item quantity="few">Не атрымалася скапіраваць <xliff:g id="COUNT_1">%1$d</xliff:g> файлы</item>
- <item quantity="many">Не атрымалася скапіраваць <xliff:g id="COUNT_1">%1$d</xliff:g> файлаў</item>
- <item quantity="other">Не атрымалася скапіраваць <xliff:g id="COUNT_1">%1$d</xliff:g> файла</item>
- </plurals>
- <plurals name="move_error_notification_title" formatted="false" msgid="2710901971014783012">
- <item quantity="one">Не атрымалася перамясціць <xliff:g id="COUNT_1">%1$d</xliff:g> файл</item>
- <item quantity="few">Не атрымалася перамясціць <xliff:g id="COUNT_1">%1$d</xliff:g> файлы</item>
- <item quantity="many">Не атрымалася перамясціць <xliff:g id="COUNT_1">%1$d</xliff:g> файлаў</item>
- <item quantity="other">Не атрымалася перамясціць <xliff:g id="COUNT_1">%1$d</xliff:g> файла</item>
- </plurals>
- <plurals name="delete_error_notification_title" formatted="false" msgid="7228393157786591199">
- <item quantity="one">Не атрымалася выдаліць <xliff:g id="COUNT_1">%1$d</xliff:g> файл</item>
- <item quantity="few">Не атрымалася выдаліць <xliff:g id="COUNT_1">%1$d</xliff:g> файлы</item>
- <item quantity="many">Не атрымалася выдаліць <xliff:g id="COUNT_1">%1$d</xliff:g> файлаў</item>
- <item quantity="other">Не атрымалася выдаліць <xliff:g id="COUNT_1">%1$d</xliff:g> файла</item>
- </plurals>
- <string name="notification_touch_for_details" msgid="6268189413228855582">"Дакраніцеся, каб прагледзець больш падрабязна"</string>
- <string name="close" msgid="3043722427445528732">"Закрыць"</string>
- <string name="copy_failure_alert_content" msgid="4563147454522476183">"Не былі скапіраваны наступныя файлы: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="move_failure_alert_content" msgid="2635075788682922861">"Не былі перамешчаны наступныя файлы: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="delete_failure_alert_content" msgid="892393767207938353">"Не былі выдалены наступныя файлы: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="copy_converted_warning_content" msgid="5753861488218674361">"Гэтыя файлы былі сканвертаваныя ў іншы фармат: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <plurals name="clipboard_files_clipped" formatted="false" msgid="855459017537058539">
- <item quantity="one">У буфер абмену скапіраваны <xliff:g id="COUNT_1">%1$d</xliff:g> файл.</item>
- <item quantity="few">У буфер абмену скапіраваны <xliff:g id="COUNT_1">%1$d</xliff:g> файлы.</item>
- <item quantity="many">У буфер абмену скапіравана <xliff:g id="COUNT_1">%1$d</xliff:g> файлаў.</item>
- <item quantity="other">У буфер абмену скапіравана <xliff:g id="COUNT_1">%1$d</xliff:g> файла.</item>
- </plurals>
- <string name="clipboard_files_cannot_paste" msgid="2878324825602325706">"Немагчыма ўставіць выбраныя файлы ў гэта месца."</string>
- <string name="menu_rename" msgid="7678802479104285353">"Перайменаваць"</string>
- <string name="rename_error" msgid="4203041674883412606">"Не атрымалася перайменаваць дакумент"</string>
- <string name="menu_eject_root" msgid="2768224615494227325">"Выняць"</string>
- <string name="notification_copy_files_converted_title" msgid="3153573223054275181">"Некаторыя файлы былі сканвертаваныя"</string>
- <string name="open_external_dialog_request" msgid="5789329484285817629">"Даць праграме <xliff:g id="APPNAME"><b>^1</b></xliff:g> доступ да дырэкторыі <xliff:g id="DIRECTORY"><i>^2</i></xliff:g> у <xliff:g id="STORAGE"><i>^3</i></xliff:g>?"</string>
- <string name="open_external_dialog_request_primary_volume" msgid="6635562535713428688">"Даць праграме <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="8899108702926347720">"Даць <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="4295278542972859268">"Больш не пытацца"</string>
- <string name="allow" msgid="7225948811296386551">"Дазволіць"</string>
- <string name="deny" msgid="2081879885755434506">"Адмовіць"</string>
- <plurals name="elements_selected" formatted="false" msgid="1376955402452875047">
- <item quantity="one">Выбраны <xliff:g id="COUNT_1">%1$d</xliff:g></item>
- <item quantity="few">Выбраны <xliff:g id="COUNT_1">%1$d</xliff:g></item>
- <item quantity="many">Выбрана <xliff:g id="COUNT_1">%1$d</xliff:g></item>
- <item quantity="other">Выбрана <xliff:g id="COUNT_1">%1$d</xliff:g></item>
- </plurals>
- <plurals name="elements_dragged" formatted="false" msgid="3727204615215602228">
- <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> элемент</item>
- <item quantity="few"><xliff:g id="COUNT_1">%1$d</xliff:g> элементы</item>
- <item quantity="many"><xliff:g id="COUNT_1">%1$d</xliff:g> элементаў</item>
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> элемента</item>
- </plurals>
- <string name="delete_filename_confirmation_message" msgid="5312817725577537488">"Выдаліць \"<xliff:g id="NAME">%1$s</xliff:g>\"?"</string>
- <string name="delete_foldername_confirmation_message" msgid="5885501832257285329">"Выдаліць папку \"<xliff:g id="NAME">%1$s</xliff:g>\" і яе змесціва?"</string>
- <plurals name="delete_files_confirmation_message" formatted="false" msgid="8417505791395471802">
- <item quantity="one">Выдаліць <xliff:g id="COUNT_1">%1$d</xliff:g> файл?</item>
- <item quantity="few">Выдаліць <xliff:g id="COUNT_1">%1$d</xliff:g> файлы?</item>
- <item quantity="many">Выдаліць <xliff:g id="COUNT_1">%1$d</xliff:g> файлаў?</item>
- <item quantity="other">Выдаліць <xliff:g id="COUNT_1">%1$d</xliff:g> файла?</item>
- </plurals>
- <plurals name="delete_folders_confirmation_message" formatted="false" msgid="9185648028213507769">
- <item quantity="one">Выдаліць <xliff:g id="COUNT_1">%1$d</xliff:g> папку і іх змесціва?</item>
- <item quantity="few">Выдаліць <xliff:g id="COUNT_1">%1$d</xliff:g> папкі і іх змесціва?</item>
- <item quantity="many">Выдаліць <xliff:g id="COUNT_1">%1$d</xliff:g> папак і іх змесціва?</item>
- <item quantity="other">Выдаліць <xliff:g id="COUNT_1">%1$d</xliff:g> папкі і іх змесціва?</item>
- </plurals>
- <plurals name="delete_items_confirmation_message" formatted="false" msgid="5376214433530243459">
- <item quantity="one">Выдаліць <xliff:g id="COUNT_1">%1$d</xliff:g> элемент?</item>
- <item quantity="few">Выдаліць <xliff:g id="COUNT_1">%1$d</xliff:g> элементы?</item>
- <item quantity="many">Выдаліць <xliff:g id="COUNT_1">%1$d</xliff:g> элементаў?</item>
- <item quantity="other">Выдаліць <xliff:g id="COUNT_1">%1$d</xliff:g> элемента?</item>
- </plurals>
-</resources>
diff --git a/packages/DocumentsUI/res/values-bg/strings.xml b/packages/DocumentsUI/res/values-bg/strings.xml
deleted file mode 100644
index ab9d228..0000000
--- a/packages/DocumentsUI/res/values-bg/strings.xml
+++ /dev/null
@@ -1,144 +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="app_label" msgid="1551050262492398204">"Файлове"</string>
- <string name="downloads_label" msgid="959113951084633612">"Изтегляния"</string>
- <string name="title_open" msgid="4353228937663917801">"Отваряне от"</string>
- <string name="title_save" msgid="2433679664882857999">"Запазване във:"</string>
- <string name="menu_create_dir" msgid="2547620241173881754">"Нова папка"</string>
- <string name="menu_grid" msgid="6878021334497835259">"Изглед в мрежа"</string>
- <string name="menu_list" msgid="7279285939892417279">"Списъчен изглед"</string>
- <string name="menu_sort" msgid="7677740407158414452">"Сортиране по"</string>
- <string name="menu_search" msgid="3816712084502856974">"Търсене"</string>
- <string name="menu_settings" msgid="8239065133341597825">"Настройки на хранилището"</string>
- <string name="menu_open" msgid="432922957274920903">"Отваряне"</string>
- <string name="menu_save" msgid="2394743337684426338">"Запазване"</string>
- <string name="menu_share" msgid="3075149983979628146">"Споделяне"</string>
- <string name="menu_delete" msgid="8138799623850614177">"Изтриване"</string>
- <string name="menu_select_all" msgid="8323579667348729928">"Избиране на всичко"</string>
- <string name="menu_copy" msgid="3612326052677229148">"Копиране във…"</string>
- <string name="menu_move" msgid="1828090633118079817">"Преместване във…"</string>
- <string name="menu_new_window" msgid="1226032889278727538">"Нов прозорец"</string>
- <string name="menu_cut_to_clipboard" msgid="2467149185452488383">"Изрязване"</string>
- <string name="menu_copy_to_clipboard" msgid="489311381979634291">"Копиране"</string>
- <string name="menu_paste_from_clipboard" msgid="2071583031180257091">"Поставяне"</string>
- <string name="menu_advanced_show" msgid="4693652895715631401">"Вътр. хранилище: Показв."</string>
- <string name="menu_advanced_hide" msgid="4218809952721972589">"Вътр. хранилище: Скрив."</string>
- <string name="menu_file_size_show" msgid="3240323619260823076">"Размер на файла: Показв."</string>
- <string name="menu_file_size_hide" msgid="8881975928502581042">"Размер на файла: Скрив."</string>
- <string name="button_select" msgid="527196987259139214">"Избиране"</string>
- <string name="button_copy" msgid="8706475544635021302">"Копиране"</string>
- <string name="button_move" msgid="2202666023104202232">"Преместване"</string>
- <string name="button_dismiss" msgid="3714065566893946085">"Отхвърляне"</string>
- <string name="button_retry" msgid="4392027584153752797">"Нов опит"</string>
- <string name="sort_name" msgid="9183560467917256779">"По име"</string>
- <string name="sort_date" msgid="586080032956151448">"По дата на промяната"</string>
- <string name="sort_size" msgid="3350681319735474741">"По размер"</string>
- <string name="drawer_open" msgid="4545466532430226949">"Показване на основните елементи"</string>
- <string name="drawer_close" msgid="7602734368552123318">"Скриване на основните елементи"</string>
- <string name="save_error" msgid="6167009778003223664">"Запазването на документа не бе успешно"</string>
- <string name="create_error" msgid="3735649141335444215">"Създаването на папката не бе успешно"</string>
- <string name="query_error" msgid="5999895349602476581">"Понастоящем съдържанието не може да се зареди"</string>
- <string name="root_recent" msgid="4470053704320518133">"Скорошни"</string>
- <string name="root_available_bytes" msgid="8568452858617033281">"Свободно: <xliff:g id="SIZE">%1$s</xliff:g>"</string>
- <string name="root_type_service" msgid="2178854894416775409">"Услуги за съхранение"</string>
- <string name="root_type_shortcut" msgid="3318760609471618093">"Преки пътища"</string>
- <string name="root_type_device" msgid="7121342474653483538">"Устройства"</string>
- <string name="root_type_apps" msgid="8838065367985945189">"Още приложения"</string>
- <string name="empty" msgid="7858882803708117596">"Няма елементи"</string>
- <string name="no_results" msgid="6622510343880730446">"В/ъв „%1$s“ няма съответствия"</string>
- <string name="toast_no_application" msgid="4632640357724698144">"Файлът не може да се отвори"</string>
- <string name="toast_failed_delete" msgid="2180678019407244069">"Някои документи не могат да бъдат изтрити"</string>
- <string name="share_via" msgid="8966594246261344259">"Споделяне чрез"</string>
- <string name="copy_notification_title" msgid="6374299806748219777">"Файловете се копират"</string>
- <string name="move_notification_title" msgid="6193835179777284805">"Файловете се преместват"</string>
- <string name="delete_notification_title" msgid="3329403967712437496">"Изтриване на файлове"</string>
- <string name="copy_remaining" msgid="6283790937387975095">"Оставащо време: <xliff:g id="DURATION">%s</xliff:g>"</string>
- <plurals name="copy_begin" formatted="false" msgid="9071199452634086365">
- <item quantity="other">Копират се <xliff:g id="COUNT_1">%1$d</xliff:g> файла.</item>
- <item quantity="one">Копира се <xliff:g id="COUNT_0">%1$d</xliff:g> файл.</item>
- </plurals>
- <plurals name="move_begin" formatted="false" msgid="8430330882138871643">
- <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="5054338566802559411">
- <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="7905788502491742328">"Отмяна"</string>
- <string name="copy_preparing" msgid="3896202461003039386">"Подготвя се за копиране…"</string>
- <string name="move_preparing" msgid="2772219441375531410">"Преместването се подготвя…"</string>
- <string name="delete_preparing" msgid="5655813182533491992">"Подготвя се за изтриване..."</string>
- <string name="delete_progress" msgid="5399405983046157222">"<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="7160447124922897689">
- <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="2710901971014783012">
- <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="7228393157786591199">
- <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="6268189413228855582">"Докоснете, за да видите подробности"</string>
- <string name="close" msgid="3043722427445528732">"Затваряне"</string>
- <string name="copy_failure_alert_content" msgid="4563147454522476183">"Следните файлове не бяха копирани: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="move_failure_alert_content" msgid="2635075788682922861">"Следните файлове не бяха преместени: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="delete_failure_alert_content" msgid="892393767207938353">"Следните файлове не бяха изтрити: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="copy_converted_warning_content" msgid="5753861488218674361">"Следните файлове бяха преобразувани в друг формат: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <plurals name="clipboard_files_clipped" formatted="false" msgid="855459017537058539">
- <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="clipboard_files_cannot_paste" msgid="2878324825602325706">"Избраните файлове не могат да се поставят на това място."</string>
- <string name="menu_rename" msgid="7678802479104285353">"Преименуване"</string>
- <string name="rename_error" msgid="4203041674883412606">"Преименуването на документа не бе успешно"</string>
- <string name="menu_eject_root" msgid="2768224615494227325">"Изваждане"</string>
- <string name="notification_copy_files_converted_title" msgid="3153573223054275181">"Някои файлове бяха преобразувани"</string>
- <string name="open_external_dialog_request" msgid="5789329484285817629">"Да се предостави ли на <xliff:g id="APPNAME"><b>^1</b></xliff:g> достъп до директорията „<xliff:g id="DIRECTORY"><i>^2</i></xliff:g>“ в/ъв <xliff:g id="STORAGE"><i>^3</i></xliff:g>?"</string>
- <string name="open_external_dialog_request_primary_volume" msgid="6635562535713428688">"Да се предостави ли на <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="8899108702926347720">"Да се предостави ли на <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="4295278542972859268">"Без повторно питане"</string>
- <string name="allow" msgid="7225948811296386551">"Разрешаване"</string>
- <string name="deny" msgid="2081879885755434506">"Отказване"</string>
- <plurals name="elements_selected" formatted="false" msgid="1376955402452875047">
- <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="3727204615215602228">
- <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="5312817725577537488">"Искате ли да изтриете „<xliff:g id="NAME">%1$s</xliff:g>“?"</string>
- <string name="delete_foldername_confirmation_message" msgid="5885501832257285329">"Искате ли да изтриете папката „<xliff:g id="NAME">%1$s</xliff:g>“ и съдържанието в нея?"</string>
- <plurals name="delete_files_confirmation_message" formatted="false" msgid="8417505791395471802">
- <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="9185648028213507769">
- <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="5376214433530243459">
- <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>
-</resources>
diff --git a/packages/DocumentsUI/res/values-bn-rBD/strings.xml b/packages/DocumentsUI/res/values-bn-rBD/strings.xml
deleted file mode 100644
index 3b2171d..0000000
--- a/packages/DocumentsUI/res/values-bn-rBD/strings.xml
+++ /dev/null
@@ -1,144 +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="app_label" msgid="1551050262492398204">"ফাইল"</string>
- <string name="downloads_label" msgid="959113951084633612">"ডাউনলোডগুলি"</string>
- <string name="title_open" msgid="4353228937663917801">"এখান থেকে খুলুন"</string>
- <string name="title_save" msgid="2433679664882857999">"এতে সংরক্ষণ করুন"</string>
- <string name="menu_create_dir" msgid="2547620241173881754">"নতুন ফোল্ডার"</string>
- <string name="menu_grid" msgid="6878021334497835259">"গ্রিড দৃশ্য"</string>
- <string name="menu_list" msgid="7279285939892417279">"তালিকা দৃশ্য"</string>
- <string name="menu_sort" msgid="7677740407158414452">"এই অনুসারে বাছুন"</string>
- <string name="menu_search" msgid="3816712084502856974">"অনুসন্ধান করুন"</string>
- <string name="menu_settings" msgid="8239065133341597825">"সঞ্চয়স্থান সেটিংস"</string>
- <string name="menu_open" msgid="432922957274920903">"খুলুন"</string>
- <string name="menu_save" msgid="2394743337684426338">"সংরক্ষণ করুন"</string>
- <string name="menu_share" msgid="3075149983979628146">"শেয়ার করুন"</string>
- <string name="menu_delete" msgid="8138799623850614177">"মুছুন"</string>
- <string name="menu_select_all" msgid="8323579667348729928">"সবগুলি নির্বাচন করুন"</string>
- <string name="menu_copy" msgid="3612326052677229148">"এতে কপি করুন…"</string>
- <string name="menu_move" msgid="1828090633118079817">"এতে সরান..."</string>
- <string name="menu_new_window" msgid="1226032889278727538">"নতুন উইন্ডো"</string>
- <string name="menu_cut_to_clipboard" msgid="2467149185452488383">"কাট করুন"</string>
- <string name="menu_copy_to_clipboard" msgid="489311381979634291">"প্রতিলিপি করুন"</string>
- <string name="menu_paste_from_clipboard" msgid="2071583031180257091">"আটকান"</string>
- <string name="menu_advanced_show" msgid="4693652895715631401">"অভ্যন্তরীণ সঞ্চয়স্থান দেখান"</string>
- <string name="menu_advanced_hide" msgid="4218809952721972589">"অভ্যন্তরীণ সঞ্চয়স্থান লুকান"</string>
- <string name="menu_file_size_show" msgid="3240323619260823076">"ফাইলের আকার দেখান"</string>
- <string name="menu_file_size_hide" msgid="8881975928502581042">"ফাইলের আকার লুকান"</string>
- <string name="button_select" msgid="527196987259139214">"নির্বাচন করুন"</string>
- <string name="button_copy" msgid="8706475544635021302">"কপি করুন"</string>
- <string name="button_move" msgid="2202666023104202232">"সরান"</string>
- <string name="button_dismiss" msgid="3714065566893946085">"খারিজ করুন"</string>
- <string name="button_retry" msgid="4392027584153752797">"আবার চেষ্টা করুন"</string>
- <string name="sort_name" msgid="9183560467917256779">"নামের দ্বারা"</string>
- <string name="sort_date" msgid="586080032956151448">"পরিবর্তনের তারিখ দ্বারা"</string>
- <string name="sort_size" msgid="3350681319735474741">"আকার অনুযায়ী"</string>
- <string name="drawer_open" msgid="4545466532430226949">"রুটগুলি দেখান"</string>
- <string name="drawer_close" msgid="7602734368552123318">"রুটগুলি লুকান"</string>
- <string name="save_error" msgid="6167009778003223664">"দস্তাবেজ সংরক্ষণ করতে ব্যর্থ হয়েছে"</string>
- <string name="create_error" msgid="3735649141335444215">"ফোল্ডার তৈরি করতে ব্যর্থ হয়েছে"</string>
- <string name="query_error" msgid="5999895349602476581">"এই মুহূর্তে সামগ্রী লোড করা যাবে না"</string>
- <string name="root_recent" msgid="4470053704320518133">"সাম্প্রতিক"</string>
- <string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> খালি আছে"</string>
- <string name="root_type_service" msgid="2178854894416775409">"সঞ্চয়স্থান পরিষেবাগুলি"</string>
- <string name="root_type_shortcut" msgid="3318760609471618093">"শর্টকাটগুলি"</string>
- <string name="root_type_device" msgid="7121342474653483538">"ডিভাইসগুলি"</string>
- <string name="root_type_apps" msgid="8838065367985945189">"আরো অ্যাপ্লিকেশান"</string>
- <string name="empty" msgid="7858882803708117596">"কোনো আইটেম নেই"</string>
- <string name="no_results" msgid="6622510343880730446">"%1$s এ কোনো মিল নেই"</string>
- <string name="toast_no_application" msgid="4632640357724698144">"ফাইল খোলা যাবে না"</string>
- <string name="toast_failed_delete" msgid="2180678019407244069">"কিছু দস্তাবেজ মুছতে অসমর্থ"</string>
- <string name="share_via" msgid="8966594246261344259">"এর মাধ্যমে শেয়ার করুন"</string>
- <string name="copy_notification_title" msgid="6374299806748219777">"ফাইলগুলি অনুলিপি করা হচ্ছে"</string>
- <string name="move_notification_title" msgid="6193835179777284805">"ফাইলগুলি সরানো হচ্ছে"</string>
- <string name="delete_notification_title" msgid="3329403967712437496">"ফাইলগুলি মোছা হচ্ছে"</string>
- <string name="copy_remaining" msgid="6283790937387975095">"<xliff:g id="DURATION">%s</xliff:g> বাকি"</string>
- <plurals name="copy_begin" formatted="false" msgid="9071199452634086365">
- <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g>টি ফাইল অনুলিপি করা হচ্ছে৷</item>
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g>টি ফাইল অনুলিপি করা হচ্ছে৷</item>
- </plurals>
- <plurals name="move_begin" formatted="false" msgid="8430330882138871643">
- <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="deleting" formatted="false" msgid="5054338566802559411">
- <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="7905788502491742328">"পূর্বাবস্থায় ফিরুন"</string>
- <string name="copy_preparing" msgid="3896202461003039386">"অনুলিপি করার জন্য প্রস্তুত করা হচ্ছে..."</string>
- <string name="move_preparing" msgid="2772219441375531410">"সরানোর জন্য প্রস্তুত হচ্ছে..."</string>
- <string name="delete_preparing" msgid="5655813182533491992">"মোছার জন্য প্রস্তুত করা হচ্ছে..."</string>
- <string name="delete_progress" msgid="5399405983046157222">"<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="7160447124922897689">
- <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="move_error_notification_title" formatted="false" msgid="2710901971014783012">
- <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_error_notification_title" formatted="false" msgid="7228393157786591199">
- <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="6268189413228855582">"বিশদ বিবরণ দেখতে আলতো চাপুন"</string>
- <string name="close" msgid="3043722427445528732">"বন্ধ করুন"</string>
- <string name="copy_failure_alert_content" msgid="4563147454522476183">"এই ফাইলগুলির প্রতিলিপি করা হয়নি: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="move_failure_alert_content" msgid="2635075788682922861">"এই ফাইলগুলি সরানো হয়নি: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="delete_failure_alert_content" msgid="892393767207938353">"এই ফাইলগুলি মোছা হয়নি: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="copy_converted_warning_content" msgid="5753861488218674361">"এই ফাইলগুলি অন্য ফরম্যাটে রূপান্তর করা হয়েছে: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <plurals name="clipboard_files_clipped" formatted="false" msgid="855459017537058539">
- <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="clipboard_files_cannot_paste" msgid="2878324825602325706">"এই স্থানে নির্বাচিত ফাইলগুলি আটকানো যাবে না।"</string>
- <string name="menu_rename" msgid="7678802479104285353">"পুনঃনামকরণ"</string>
- <string name="rename_error" msgid="4203041674883412606">"দস্তাবেজের পুনঃনামকরণ ব্যর্থ হয়েছে৷"</string>
- <string name="menu_eject_root" msgid="2768224615494227325">"সরিয়ে দিন"</string>
- <string name="notification_copy_files_converted_title" msgid="3153573223054275181">"কিছু ফাইল রূপান্তরিত হয়েছে"</string>
- <string name="open_external_dialog_request" msgid="5789329484285817629">"<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="6635562535713428688">"<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="8899108702926347720">"<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="4295278542972859268">"আর জিজ্ঞাসা করবেন না"</string>
- <string name="allow" msgid="7225948811296386551">"অনুমতি দিন"</string>
- <string name="deny" msgid="2081879885755434506">"আস্বীকার করুন"</string>
- <plurals name="elements_selected" formatted="false" msgid="1376955402452875047">
- <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="3727204615215602228">
- <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="5312817725577537488">"\"<xliff:g id="NAME">%1$s</xliff:g>\" মুছবেন?"</string>
- <string name="delete_foldername_confirmation_message" msgid="5885501832257285329">"\"<xliff:g id="NAME">%1$s</xliff:g>\" ফোল্ডার এবং এটির সামগ্রীগুলিকে মুছবেন?"</string>
- <plurals name="delete_files_confirmation_message" formatted="false" msgid="8417505791395471802">
- <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="9185648028213507769">
- <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="5376214433530243459">
- <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>
-</resources>
diff --git a/packages/DocumentsUI/res/values-bs-rBA/strings.xml b/packages/DocumentsUI/res/values-bs-rBA/strings.xml
deleted file mode 100644
index 5df3e53..0000000
--- a/packages/DocumentsUI/res/values-bs-rBA/strings.xml
+++ /dev/null
@@ -1,156 +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="app_label" msgid="1551050262492398204">"Fajlovi"</string>
- <string name="downloads_label" msgid="959113951084633612">"Preuzimanja"</string>
- <string name="title_open" msgid="4353228937663917801">"Otvori iz"</string>
- <string name="title_save" msgid="2433679664882857999">"Sačuvaj u"</string>
- <string name="menu_create_dir" msgid="2547620241173881754">"Nova fascikla"</string>
- <string name="menu_grid" msgid="6878021334497835259">"Prikaz u vidu mreže"</string>
- <string name="menu_list" msgid="7279285939892417279">"Prikaz u vidu liste"</string>
- <string name="menu_sort" msgid="7677740407158414452">"Sortiraj po"</string>
- <string name="menu_search" msgid="3816712084502856974">"Traži"</string>
- <string name="menu_settings" msgid="8239065133341597825">"Postavke pohrane"</string>
- <string name="menu_open" msgid="432922957274920903">"Otvori"</string>
- <string name="menu_save" msgid="2394743337684426338">"Sačuvaj"</string>
- <string name="menu_share" msgid="3075149983979628146">"Podijeli"</string>
- <string name="menu_delete" msgid="8138799623850614177">"Izbriši"</string>
- <string name="menu_select_all" msgid="8323579667348729928">"Odaberi sve"</string>
- <string name="menu_copy" msgid="3612326052677229148">"Kopiraj na..."</string>
- <string name="menu_move" msgid="1828090633118079817">"Premjesti u..."</string>
- <string name="menu_new_window" msgid="1226032889278727538">"Novi prozor"</string>
- <string name="menu_cut_to_clipboard" msgid="2467149185452488383">"Izreži"</string>
- <string name="menu_copy_to_clipboard" msgid="489311381979634291">"Kopiraj"</string>
- <string name="menu_paste_from_clipboard" msgid="2071583031180257091">"Zalijepi"</string>
- <string name="menu_advanced_show" msgid="4693652895715631401">"Pokaži internu pohranu"</string>
- <string name="menu_advanced_hide" msgid="4218809952721972589">"Sakrij internu pohranu"</string>
- <string name="menu_file_size_show" msgid="3240323619260823076">"Pokaži veličinu fajla"</string>
- <string name="menu_file_size_hide" msgid="8881975928502581042">"Sakrij veličinu fajla"</string>
- <string name="button_select" msgid="527196987259139214">"Odaberi"</string>
- <string name="button_copy" msgid="8706475544635021302">"Kopiraj"</string>
- <string name="button_move" msgid="2202666023104202232">"Premjesti"</string>
- <string name="button_dismiss" msgid="3714065566893946085">"Odbaci"</string>
- <string name="button_retry" msgid="4392027584153752797">"Pokušajte ponovo"</string>
- <string name="sort_name" msgid="9183560467917256779">"Po nazivu"</string>
- <string name="sort_date" msgid="586080032956151448">"Po datumu izmjene"</string>
- <string name="sort_size" msgid="3350681319735474741">"Po veličini"</string>
- <string name="drawer_open" msgid="4545466532430226949">"Pokaži korijeni"</string>
- <string name="drawer_close" msgid="7602734368552123318">"Sakrij korijenske foldere"</string>
- <string name="save_error" msgid="6167009778003223664">"Pohranjivanje dokumenta nije uspjelo"</string>
- <string name="create_error" msgid="3735649141335444215">"Kreiranje mape nije uspjelo"</string>
- <string name="query_error" msgid="5999895349602476581">"Trenutno nije moguće učitati sadržaj"</string>
- <string name="root_recent" msgid="4470053704320518133">"Nedavni"</string>
- <string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> slobodno"</string>
- <string name="root_type_service" msgid="2178854894416775409">"Usluge pohranjivanja"</string>
- <string name="root_type_shortcut" msgid="3318760609471618093">"Prečice"</string>
- <string name="root_type_device" msgid="7121342474653483538">"Uređaji"</string>
- <string name="root_type_apps" msgid="8838065367985945189">"Više aplikacija"</string>
- <string name="empty" msgid="7858882803708117596">"Nema stavki"</string>
- <string name="no_results" msgid="6622510343880730446">"Nema rezultata u %1$s"</string>
- <string name="toast_no_application" msgid="4632640357724698144">"Nije moguće otvoriti fajl"</string>
- <string name="toast_failed_delete" msgid="2180678019407244069">"Nije moguće obrisati neke dokumente"</string>
- <string name="share_via" msgid="8966594246261344259">"Podijeli preko"</string>
- <string name="copy_notification_title" msgid="6374299806748219777">"Kopiraju se fajlovi"</string>
- <string name="move_notification_title" msgid="6193835179777284805">"Premještanje fajlova"</string>
- <string name="delete_notification_title" msgid="3329403967712437496">"Brisanje fajlova"</string>
- <string name="copy_remaining" msgid="6283790937387975095">"Još <xliff:g id="DURATION">%s</xliff:g>"</string>
- <plurals name="copy_begin" formatted="false" msgid="9071199452634086365">
- <item quantity="one">Kopira se <xliff:g id="COUNT_1">%1$d</xliff:g> fajl.</item>
- <item quantity="few">Kopiraju se <xliff:g id="COUNT_1">%1$d</xliff:g> fajla.</item>
- <item quantity="other">Kopira se <xliff:g id="COUNT_1">%1$d</xliff:g> fajlova.</item>
- </plurals>
- <plurals name="move_begin" formatted="false" msgid="8430330882138871643">
- <item quantity="one">Premješta se <xliff:g id="COUNT_1">%1$d</xliff:g> fajl.</item>
- <item quantity="few">Premještaju se <xliff:g id="COUNT_1">%1$d</xliff:g> fajla.</item>
- <item quantity="other">Premješta se <xliff:g id="COUNT_1">%1$d</xliff:g> fajlova.</item>
- </plurals>
- <plurals name="deleting" formatted="false" msgid="5054338566802559411">
- <item quantity="one">Briše se <xliff:g id="COUNT_1">%1$d</xliff:g> fajl.</item>
- <item quantity="few">Brišu se <xliff:g id="COUNT_1">%1$d</xliff:g> fajla.</item>
- <item quantity="other">Briše se <xliff:g id="COUNT_1">%1$d</xliff:g> fajlova.</item>
- </plurals>
- <string name="undo" msgid="7905788502491742328">"Vrati"</string>
- <string name="copy_preparing" msgid="3896202461003039386">"Priprema se kopiranje..."</string>
- <string name="move_preparing" msgid="2772219441375531410">"Priprema za premještanje..."</string>
- <string name="delete_preparing" msgid="5655813182533491992">"Pripremanje za brisanje…"</string>
- <string name="delete_progress" msgid="5399405983046157222">"<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="7160447124922897689">
- <item quantity="one">Nije moguće kopirati <xliff:g id="COUNT_1">%1$d</xliff:g> fajl</item>
- <item quantity="few">Nije moguće kopirati <xliff:g id="COUNT_1">%1$d</xliff:g> fajla</item>
- <item quantity="other">Nije moguće kopirati <xliff:g id="COUNT_1">%1$d</xliff:g> fajlova</item>
- </plurals>
- <plurals name="move_error_notification_title" formatted="false" msgid="2710901971014783012">
- <item quantity="one">Nije moguće premjestiti <xliff:g id="COUNT_1">%1$d</xliff:g> fajl</item>
- <item quantity="few">Nije moguće premjestiti <xliff:g id="COUNT_1">%1$d</xliff:g> fajla</item>
- <item quantity="other">Nije moguće premjestiti <xliff:g id="COUNT_1">%1$d</xliff:g> fajlova</item>
- </plurals>
- <plurals name="delete_error_notification_title" formatted="false" msgid="7228393157786591199">
- <item quantity="one">Nije moguće izbrisati <xliff:g id="COUNT_1">%1$d</xliff:g> fajl</item>
- <item quantity="few">Nije moguće izbrisati <xliff:g id="COUNT_1">%1$d</xliff:g> fajla</item>
- <item quantity="other">Nije moguće izbrisati <xliff:g id="COUNT_1">%1$d</xliff:g> fajlova</item>
- </plurals>
- <string name="notification_touch_for_details" msgid="6268189413228855582">"Dodirnite za prikaz detalja"</string>
- <string name="close" msgid="3043722427445528732">"Zatvori"</string>
- <string name="copy_failure_alert_content" msgid="4563147454522476183">"Nisu kopirani sljedeći fajlovi: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="move_failure_alert_content" msgid="2635075788682922861">"Nisu premješteni sljedeći fajlovi: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="delete_failure_alert_content" msgid="892393767207938353">"Nisu izbrisani sljedeći fajlovi: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="copy_converted_warning_content" msgid="5753861488218674361">"Ove datoteke su pretvorene u drugi format: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <plurals name="clipboard_files_clipped" formatted="false" msgid="855459017537058539">
- <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> fajl je kopiran u međuspremnik.</item>
- <item quantity="few"><xliff:g id="COUNT_1">%1$d</xliff:g> fajla su kopirana u međuspremnik.</item>
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> fajlova je kopirano u međuspremnik.</item>
- </plurals>
- <string name="clipboard_files_cannot_paste" msgid="2878324825602325706">"Odabrani fajlovi se ne mogu zalijepiti na ovu lokaciju."</string>
- <string name="menu_rename" msgid="7678802479104285353">"Preimenuj"</string>
- <string name="rename_error" msgid="4203041674883412606">"Nije uspjelo preimenovanje dokumenta"</string>
- <string name="menu_eject_root" msgid="2768224615494227325">"Izbaci"</string>
- <string name="notification_copy_files_converted_title" msgid="3153573223054275181">"Neke od datoteka su pretvorene"</string>
- <string name="open_external_dialog_request" msgid="5789329484285817629">"Omogućiti <xliff:g id="APPNAME"><b>^1</b></xliff:g> pristup direktoriju <xliff:g id="DIRECTORY"><i>^2</i></xliff:g> sa <xliff:g id="STORAGE"><i>^3</i></xliff:g>?"</string>
- <string name="open_external_dialog_request_primary_volume" msgid="6635562535713428688">"Odobriti aplikaciji <xliff:g id="APPNAME"><b>^1</b></xliff:g> pristup direktoriju <xliff:g id="DIRECTORY"><i>^2</i></xliff:g>?"</string>
- <string name="open_external_dialog_root_request" msgid="8899108702926347720">"Želite li odobriti aplikaciji <xliff:g id="APPNAME"><b>^1</b></xliff:g> pristup svojim podacima, uključujući fotografije i video zapise, na <xliff:g id="STORAGE"><i>^2</i></xliff:g> ?"</string>
- <string name="never_ask_again" msgid="4295278542972859268">"Ne pitaj ponovo"</string>
- <string name="allow" msgid="7225948811296386551">"Dozvoli"</string>
- <string name="deny" msgid="2081879885755434506">"Odbijte"</string>
- <plurals name="elements_selected" formatted="false" msgid="1376955402452875047">
- <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> stavka je odabrana</item>
- <item quantity="few"><xliff:g id="COUNT_1">%1$d</xliff:g> stavke su odabrane</item>
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> stavki je odabrano</item>
- </plurals>
- <plurals name="elements_dragged" formatted="false" msgid="3727204615215602228">
- <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> stavka</item>
- <item quantity="few"><xliff:g id="COUNT_1">%1$d</xliff:g> stavke</item>
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> stavki</item>
- </plurals>
- <string name="delete_filename_confirmation_message" msgid="5312817725577537488">"Želite li izbrisati \"<xliff:g id="NAME">%1$s</xliff:g>\"?"</string>
- <string name="delete_foldername_confirmation_message" msgid="5885501832257285329">"Želite li izbrisati folder \"<xliff:g id="NAME">%1$s</xliff:g>\" i njegov sadržaj?"</string>
- <plurals name="delete_files_confirmation_message" formatted="false" msgid="8417505791395471802">
- <item quantity="one">Želite li izbrisati <xliff:g id="COUNT_1">%1$d</xliff:g> fajl?</item>
- <item quantity="few">Želite li izbrisati <xliff:g id="COUNT_1">%1$d</xliff:g> fajla?</item>
- <item quantity="other">Želite li izbrisati <xliff:g id="COUNT_1">%1$d</xliff:g> fajlova?</item>
- </plurals>
- <plurals name="delete_folders_confirmation_message" formatted="false" msgid="9185648028213507769">
- <item quantity="one">Želite li izbrisati <xliff:g id="COUNT_1">%1$d</xliff:g> folder i njihov sadržaj?</item>
- <item quantity="few">Želite li izbrisati <xliff:g id="COUNT_1">%1$d</xliff:g> foldera i njihov sadržaj?</item>
- <item quantity="other">Želite li izbrisati <xliff:g id="COUNT_1">%1$d</xliff:g> foldera i njihov sadržaj?</item>
- </plurals>
- <plurals name="delete_items_confirmation_message" formatted="false" msgid="5376214433530243459">
- <item quantity="one">Želite li izbrisati <xliff:g id="COUNT_1">%1$d</xliff:g> stavku?</item>
- <item quantity="few">Želite li izbrisati <xliff:g id="COUNT_1">%1$d</xliff:g> stavke?</item>
- <item quantity="other">Želite li izbrisati <xliff:g id="COUNT_1">%1$d</xliff:g> stavki?</item>
- </plurals>
-</resources>
diff --git a/packages/DocumentsUI/res/values-ca/strings.xml b/packages/DocumentsUI/res/values-ca/strings.xml
deleted file mode 100644
index 40e67cf..0000000
--- a/packages/DocumentsUI/res/values-ca/strings.xml
+++ /dev/null
@@ -1,144 +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="app_label" msgid="1551050262492398204">"Fitxers"</string>
- <string name="downloads_label" msgid="959113951084633612">"Baixades"</string>
- <string name="title_open" msgid="4353228937663917801">"Obre des de"</string>
- <string name="title_save" msgid="2433679664882857999">"Desa a"</string>
- <string name="menu_create_dir" msgid="2547620241173881754">"Carpeta nova"</string>
- <string name="menu_grid" msgid="6878021334497835259">"Visualització de quadrícula"</string>
- <string name="menu_list" msgid="7279285939892417279">"Visualització de llista"</string>
- <string name="menu_sort" msgid="7677740407158414452">"Ordena per"</string>
- <string name="menu_search" msgid="3816712084502856974">"Cerca"</string>
- <string name="menu_settings" msgid="8239065133341597825">"Config. d\'emmagatzematge"</string>
- <string name="menu_open" msgid="432922957274920903">"Obre"</string>
- <string name="menu_save" msgid="2394743337684426338">"Desa"</string>
- <string name="menu_share" msgid="3075149983979628146">"Comparteix"</string>
- <string name="menu_delete" msgid="8138799623850614177">"Suprimeix"</string>
- <string name="menu_select_all" msgid="8323579667348729928">"Selecciona-ho tot"</string>
- <string name="menu_copy" msgid="3612326052677229148">"Copia a…"</string>
- <string name="menu_move" msgid="1828090633118079817">"Mou a..."</string>
- <string name="menu_new_window" msgid="1226032889278727538">"Finestra nova"</string>
- <string name="menu_cut_to_clipboard" msgid="2467149185452488383">"Retalla"</string>
- <string name="menu_copy_to_clipboard" msgid="489311381979634291">"Copia"</string>
- <string name="menu_paste_from_clipboard" msgid="2071583031180257091">"Enganxa"</string>
- <string name="menu_advanced_show" msgid="4693652895715631401">"Mostra emmagatz. intern"</string>
- <string name="menu_advanced_hide" msgid="4218809952721972589">"Amaga emmagatz. intern"</string>
- <string name="menu_file_size_show" msgid="3240323619260823076">"Mostra la mida del fitxer"</string>
- <string name="menu_file_size_hide" msgid="8881975928502581042">"Amaga la mida del fitxer"</string>
- <string name="button_select" msgid="527196987259139214">"Selecciona"</string>
- <string name="button_copy" msgid="8706475544635021302">"Copia"</string>
- <string name="button_move" msgid="2202666023104202232">"Desplaça"</string>
- <string name="button_dismiss" msgid="3714065566893946085">"Ignora"</string>
- <string name="button_retry" msgid="4392027584153752797">"Torna-ho a provar"</string>
- <string name="sort_name" msgid="9183560467917256779">"Per nom"</string>
- <string name="sort_date" msgid="586080032956151448">"Per data de modificació"</string>
- <string name="sort_size" msgid="3350681319735474741">"Per mida"</string>
- <string name="drawer_open" msgid="4545466532430226949">"Mostra les arrels"</string>
- <string name="drawer_close" msgid="7602734368552123318">"Amaga les arrels"</string>
- <string name="save_error" msgid="6167009778003223664">"No s\'ha pogut desar el document."</string>
- <string name="create_error" msgid="3735649141335444215">"No s\'ha pogut crear la carpeta"</string>
- <string name="query_error" msgid="5999895349602476581">"En aquest moment no es pot carregar el contingut"</string>
- <string name="root_recent" msgid="4470053704320518133">"Recent"</string>
- <string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> lliures"</string>
- <string name="root_type_service" msgid="2178854894416775409">"Serveis d\'emmagatzematge"</string>
- <string name="root_type_shortcut" msgid="3318760609471618093">"Dreceres"</string>
- <string name="root_type_device" msgid="7121342474653483538">"Dispositius"</string>
- <string name="root_type_apps" msgid="8838065367985945189">"Més aplicacions"</string>
- <string name="empty" msgid="7858882803708117596">"Sense elements"</string>
- <string name="no_results" msgid="6622510343880730446">"No hi ha cap coincidència a %1$s"</string>
- <string name="toast_no_application" msgid="4632640357724698144">"No es pot obrir el fitxer"</string>
- <string name="toast_failed_delete" msgid="2180678019407244069">"No es poden suprimir alguns documents."</string>
- <string name="share_via" msgid="8966594246261344259">"Comparteix mitjançant"</string>
- <string name="copy_notification_title" msgid="6374299806748219777">"S\'estan copiant fitxers"</string>
- <string name="move_notification_title" msgid="6193835179777284805">"S\'estan movent fitxers"</string>
- <string name="delete_notification_title" msgid="3329403967712437496">"Suprimint els fitxers"</string>
- <string name="copy_remaining" msgid="6283790937387975095">"Temps restant: <xliff:g id="DURATION">%s</xliff:g>"</string>
- <plurals name="copy_begin" formatted="false" msgid="9071199452634086365">
- <item quantity="other">S\'estan copiant <xliff:g id="COUNT_1">%1$d</xliff:g> fitxers.</item>
- <item quantity="one">S\'està copiant <xliff:g id="COUNT_0">%1$d</xliff:g> fitxer.</item>
- </plurals>
- <plurals name="move_begin" formatted="false" msgid="8430330882138871643">
- <item quantity="other">S\'estan movent <xliff:g id="COUNT_1">%1$d</xliff:g> fitxers.</item>
- <item quantity="one">S\'està movent <xliff:g id="COUNT_0">%1$d</xliff:g> fitxer.</item>
- </plurals>
- <plurals name="deleting" formatted="false" msgid="5054338566802559411">
- <item quantity="other">S\'estan suprimint <xliff:g id="COUNT_1">%1$d</xliff:g> fitxers.</item>
- <item quantity="one">S\'està suprimint <xliff:g id="COUNT_0">%1$d</xliff:g> fitxer.</item>
- </plurals>
- <string name="undo" msgid="7905788502491742328">"Desfés"</string>
- <string name="copy_preparing" msgid="3896202461003039386">"S\'està preparant una còpia…"</string>
- <string name="move_preparing" msgid="2772219441375531410">"S\'està preparant per moure\'ls..."</string>
- <string name="delete_preparing" msgid="5655813182533491992">"S\'està preparant per suprimir…"</string>
- <string name="delete_progress" msgid="5399405983046157222">"<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="7160447124922897689">
- <item quantity="other">No s\'han pogut copiar <xliff:g id="COUNT_1">%1$d</xliff:g> fitxers</item>
- <item quantity="one">No s\'ha pogut copiar <xliff:g id="COUNT_0">%1$d</xliff:g> fitxer</item>
- </plurals>
- <plurals name="move_error_notification_title" formatted="false" msgid="2710901971014783012">
- <item quantity="other">No s\'han pogut moure <xliff:g id="COUNT_1">%1$d</xliff:g> fitxers</item>
- <item quantity="one">No s\'ha pogut moure <xliff:g id="COUNT_0">%1$d</xliff:g> fitxer</item>
- </plurals>
- <plurals name="delete_error_notification_title" formatted="false" msgid="7228393157786591199">
- <item quantity="other">No s\'han pogut suprimir <xliff:g id="COUNT_1">%1$d</xliff:g> fitxers</item>
- <item quantity="one">No s\'ha pogut suprimir <xliff:g id="COUNT_0">%1$d</xliff:g> fitxer</item>
- </plurals>
- <string name="notification_touch_for_details" msgid="6268189413228855582">"Toca per veure\'n els detalls"</string>
- <string name="close" msgid="3043722427445528732">"Tanca"</string>
- <string name="copy_failure_alert_content" msgid="4563147454522476183">"Aquests fitxers no s\'han copiat: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="move_failure_alert_content" msgid="2635075788682922861">"Aquests fitxers no s\'han mogut: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="delete_failure_alert_content" msgid="892393767207938353">"Aquests fitxers no s\'han suprimit: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="copy_converted_warning_content" msgid="5753861488218674361">"Aquests fitxers s\'han convertit a un altre format: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <plurals name="clipboard_files_clipped" formatted="false" msgid="855459017537058539">
- <item quantity="other">S\'han copiat <xliff:g id="COUNT_1">%1$d</xliff:g> fitxers al porta-retalls.</item>
- <item quantity="one">S\'ha copiat <xliff:g id="COUNT_0">%1$d</xliff:g> fitxer al porta-retalls.</item>
- </plurals>
- <string name="clipboard_files_cannot_paste" msgid="2878324825602325706">"No s\'han pogut enganxar els fitxers seleccionats en aquesta ubicació."</string>
- <string name="menu_rename" msgid="7678802479104285353">"Canvia el nom"</string>
- <string name="rename_error" msgid="4203041674883412606">"No s\'ha pogut canviar el nom del document"</string>
- <string name="menu_eject_root" msgid="2768224615494227325">"Expulsa"</string>
- <string name="notification_copy_files_converted_title" msgid="3153573223054275181">"S\'han convertit alguns fitxers"</string>
- <string name="open_external_dialog_request" msgid="5789329484285817629">"Vols que l\'aplicació <xliff:g id="APPNAME"><b>^1</b></xliff:g> tingui accés al directori <xliff:g id="DIRECTORY"><i>^2</i></xliff:g> de l\'emmagatzematge <xliff:g id="STORAGE"><i>^3</i></xliff:g>?"</string>
- <string name="open_external_dialog_request_primary_volume" msgid="6635562535713428688">"Vols que l\'aplicació <xliff:g id="APPNAME"><b>^1</b></xliff:g> tingui accés al directori <xliff:g id="DIRECTORY"><i>^2</i></xliff:g>?"</string>
- <string name="open_external_dialog_root_request" msgid="8899108702926347720">"Vols que l\'aplicació <xliff:g id="APPNAME"><b>^1</b></xliff:g> tingui accés a les dades de <xliff:g id="STORAGE"><i>^2</i></xliff:g>, incloses les fotos i els vídeos?"</string>
- <string name="never_ask_again" msgid="4295278542972859268">"No m\'ho demanis més"</string>
- <string name="allow" msgid="7225948811296386551">"Permet"</string>
- <string name="deny" msgid="2081879885755434506">"Denega"</string>
- <plurals name="elements_selected" formatted="false" msgid="1376955402452875047">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> elements seleccionats</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> element seleccionat</item>
- </plurals>
- <plurals name="elements_dragged" formatted="false" msgid="3727204615215602228">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> elements</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> element</item>
- </plurals>
- <string name="delete_filename_confirmation_message" msgid="5312817725577537488">"Vols suprimir el fitxer <xliff:g id="NAME">%1$s</xliff:g>?"</string>
- <string name="delete_foldername_confirmation_message" msgid="5885501832257285329">"Vols suprimir la carpeta <xliff:g id="NAME">%1$s</xliff:g> i el seu contingut?"</string>
- <plurals name="delete_files_confirmation_message" formatted="false" msgid="8417505791395471802">
- <item quantity="other">Vols suprimir <xliff:g id="COUNT_1">%1$d</xliff:g> fitxers?</item>
- <item quantity="one">Vols suprimir <xliff:g id="COUNT_0">%1$d</xliff:g> fitxer?</item>
- </plurals>
- <plurals name="delete_folders_confirmation_message" formatted="false" msgid="9185648028213507769">
- <item quantity="other">Vols suprimir <xliff:g id="COUNT_1">%1$d</xliff:g> carpetes i el seu contingut?</item>
- <item quantity="one">Vols suprimir <xliff:g id="COUNT_0">%1$d</xliff:g> carpeta i el seu contingut?</item>
- </plurals>
- <plurals name="delete_items_confirmation_message" formatted="false" msgid="5376214433530243459">
- <item quantity="other">Vols suprimir <xliff:g id="COUNT_1">%1$d</xliff:g> elements?</item>
- <item quantity="one">Vols suprimir <xliff:g id="COUNT_0">%1$d</xliff:g> element?</item>
- </plurals>
-</resources>
diff --git a/packages/DocumentsUI/res/values-cs/strings.xml b/packages/DocumentsUI/res/values-cs/strings.xml
deleted file mode 100644
index 0132bda..0000000
--- a/packages/DocumentsUI/res/values-cs/strings.xml
+++ /dev/null
@@ -1,168 +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="app_label" msgid="1551050262492398204">"Soubory"</string>
- <string name="downloads_label" msgid="959113951084633612">"Stahování"</string>
- <string name="title_open" msgid="4353228937663917801">"Otevřít"</string>
- <string name="title_save" msgid="2433679664882857999">"Uložit do"</string>
- <string name="menu_create_dir" msgid="2547620241173881754">"Nová složka"</string>
- <string name="menu_grid" msgid="6878021334497835259">"Mřížkové zobrazení"</string>
- <string name="menu_list" msgid="7279285939892417279">"Zobrazení seznamu"</string>
- <string name="menu_sort" msgid="7677740407158414452">"Řadit podle"</string>
- <string name="menu_search" msgid="3816712084502856974">"Hledat"</string>
- <string name="menu_settings" msgid="8239065133341597825">"Nastavení úložiště"</string>
- <string name="menu_open" msgid="432922957274920903">"Otevřít"</string>
- <string name="menu_save" msgid="2394743337684426338">"Uložit"</string>
- <string name="menu_share" msgid="3075149983979628146">"Sdílet"</string>
- <string name="menu_delete" msgid="8138799623850614177">"Smazat"</string>
- <string name="menu_select_all" msgid="8323579667348729928">"Vybrat vše"</string>
- <string name="menu_copy" msgid="3612326052677229148">"Kopírovat do…"</string>
- <string name="menu_move" msgid="1828090633118079817">"Přesunout do…"</string>
- <string name="menu_new_window" msgid="1226032889278727538">"Nové okno"</string>
- <string name="menu_cut_to_clipboard" msgid="2467149185452488383">"Vyjmout"</string>
- <string name="menu_copy_to_clipboard" msgid="489311381979634291">"Kopírovat"</string>
- <string name="menu_paste_from_clipboard" msgid="2071583031180257091">"Vložit"</string>
- <string name="menu_advanced_show" msgid="4693652895715631401">"Zobrazit inter. úložiště"</string>
- <string name="menu_advanced_hide" msgid="4218809952721972589">"Skrýt interní úložiště"</string>
- <string name="menu_file_size_show" msgid="3240323619260823076">"Zobrazit velikost souboru"</string>
- <string name="menu_file_size_hide" msgid="8881975928502581042">"Skrýt velikost souboru"</string>
- <string name="button_select" msgid="527196987259139214">"Vybrat"</string>
- <string name="button_copy" msgid="8706475544635021302">"Kopírovat"</string>
- <string name="button_move" msgid="2202666023104202232">"Přesunout"</string>
- <string name="button_dismiss" msgid="3714065566893946085">"Zavřít"</string>
- <string name="button_retry" msgid="4392027584153752797">"Zkusit znovu"</string>
- <string name="sort_name" msgid="9183560467917256779">"Podle názvu"</string>
- <string name="sort_date" msgid="586080032956151448">"Podle data úpravy"</string>
- <string name="sort_size" msgid="3350681319735474741">"Podle velikosti"</string>
- <string name="drawer_open" msgid="4545466532430226949">"Zobrazit kořeny"</string>
- <string name="drawer_close" msgid="7602734368552123318">"Skrýt kořeny"</string>
- <string name="save_error" msgid="6167009778003223664">"Uložení dokumentu se nezdařilo"</string>
- <string name="create_error" msgid="3735649141335444215">"Složku se nepodařilo vytvořit"</string>
- <string name="query_error" msgid="5999895349602476581">"Obsah nyní nelze načíst"</string>
- <string name="root_recent" msgid="4470053704320518133">"Nedávné"</string>
- <string name="root_available_bytes" msgid="8568452858617033281">"Volné místo: <xliff:g id="SIZE">%1$s</xliff:g>"</string>
- <string name="root_type_service" msgid="2178854894416775409">"Služby úložiště"</string>
- <string name="root_type_shortcut" msgid="3318760609471618093">"Klávesové zkratky"</string>
- <string name="root_type_device" msgid="7121342474653483538">"Zařízení"</string>
- <string name="root_type_apps" msgid="8838065367985945189">"Další aplikace"</string>
- <string name="empty" msgid="7858882803708117596">"Žádné položky"</string>
- <string name="no_results" msgid="6622510343880730446">"%1$s – žádné shody"</string>
- <string name="toast_no_application" msgid="4632640357724698144">"Soubor nelze otevřít"</string>
- <string name="toast_failed_delete" msgid="2180678019407244069">"Některé dokumenty nelze smazat"</string>
- <string name="share_via" msgid="8966594246261344259">"Sdílet pomocí"</string>
- <string name="copy_notification_title" msgid="6374299806748219777">"Kopírování souborů"</string>
- <string name="move_notification_title" msgid="6193835179777284805">"Přesouvání souborů"</string>
- <string name="delete_notification_title" msgid="3329403967712437496">"Mazání souborů"</string>
- <string name="copy_remaining" msgid="6283790937387975095">"Zbývající čas: <xliff:g id="DURATION">%s</xliff:g>"</string>
- <plurals name="copy_begin" formatted="false" msgid="9071199452634086365">
- <item quantity="few">Kopírování <xliff:g id="COUNT_1">%1$d</xliff:g> souborů</item>
- <item quantity="many">Kopírování <xliff:g id="COUNT_1">%1$d</xliff:g> souboru</item>
- <item quantity="other">Kopírování <xliff:g id="COUNT_1">%1$d</xliff:g> souborů</item>
- <item quantity="one">Kopírování <xliff:g id="COUNT_0">%1$d</xliff:g> souboru</item>
- </plurals>
- <plurals name="move_begin" formatted="false" msgid="8430330882138871643">
- <item quantity="few">Přesouvají se <xliff:g id="COUNT_1">%1$d</xliff:g> soubory.</item>
- <item quantity="many">Přesouvá se <xliff:g id="COUNT_1">%1$d</xliff:g> souboru.</item>
- <item quantity="other">Přesouvá se <xliff:g id="COUNT_1">%1$d</xliff:g> souborů.</item>
- <item quantity="one">Přesouvá se <xliff:g id="COUNT_0">%1$d</xliff:g> soubor.</item>
- </plurals>
- <plurals name="deleting" formatted="false" msgid="5054338566802559411">
- <item quantity="few">Mazání <xliff:g id="COUNT_1">%1$d</xliff:g> souborů.</item>
- <item quantity="many">Mazání <xliff:g id="COUNT_1">%1$d</xliff:g> souboru.</item>
- <item quantity="other">Mazání <xliff:g id="COUNT_1">%1$d</xliff:g> souborů.</item>
- <item quantity="one">Mazání <xliff:g id="COUNT_0">%1$d</xliff:g> souboru.</item>
- </plurals>
- <string name="undo" msgid="7905788502491742328">"Vrátit zpět"</string>
- <string name="copy_preparing" msgid="3896202461003039386">"Příprava na kopírování…"</string>
- <string name="move_preparing" msgid="2772219441375531410">"Příprava na přesunutí…"</string>
- <string name="delete_preparing" msgid="5655813182533491992">"Příprava na mazání…"</string>
- <string name="delete_progress" msgid="5399405983046157222">"<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="7160447124922897689">
- <item quantity="few"><xliff:g id="COUNT_1">%1$d</xliff:g> soubory se zkopírovat nepodařilo</item>
- <item quantity="many"><xliff:g id="COUNT_1">%1$d</xliff:g> souboru se zkopírovat nepodařilo</item>
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> souborů se zkopírovat nepodařilo</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> soubor se zkopírovat nepodařilo</item>
- </plurals>
- <plurals name="move_error_notification_title" formatted="false" msgid="2710901971014783012">
- <item quantity="few"><xliff:g id="COUNT_1">%1$d</xliff:g> soubory nelze přesunout</item>
- <item quantity="many"><xliff:g id="COUNT_1">%1$d</xliff:g> souboru nelze přesunout</item>
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> souborů nelze přesunout</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> soubor nelze přesunout</item>
- </plurals>
- <plurals name="delete_error_notification_title" formatted="false" msgid="7228393157786591199">
- <item quantity="few"><xliff:g id="COUNT_1">%1$d</xliff:g> soubory se smazat nepodařilo</item>
- <item quantity="many"><xliff:g id="COUNT_1">%1$d</xliff:g> souboru se smazat nepodařilo</item>
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> souborů se smazat nepodařilo</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> soubor se smazat nepodařilo</item>
- </plurals>
- <string name="notification_touch_for_details" msgid="6268189413228855582">"Klepnutím zobrazíte podrobnosti"</string>
- <string name="close" msgid="3043722427445528732">"Zavřít"</string>
- <string name="copy_failure_alert_content" msgid="4563147454522476183">"Následující soubory nebyly zkopírovány: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="move_failure_alert_content" msgid="2635075788682922861">"Následující soubory nebyly přesunuty: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="delete_failure_alert_content" msgid="892393767207938353">"Následující soubory nebyly smazány: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="copy_converted_warning_content" msgid="5753861488218674361">"Soubory byly převedeny do jiného formátu: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <plurals name="clipboard_files_clipped" formatted="false" msgid="855459017537058539">
- <item quantity="few"><xliff:g id="COUNT_1">%1$d</xliff:g> soubory byly zkopírovány do schránky.</item>
- <item quantity="many"><xliff:g id="COUNT_1">%1$d</xliff:g> souboru bylo zkopírováno do schránky.</item>
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> souborů bylo zkopírováno do schránky.</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> soubor byl zkopírován do schránky.</item>
- </plurals>
- <string name="clipboard_files_cannot_paste" msgid="2878324825602325706">"Vybrané soubory nelze vložit do tohoto umístění."</string>
- <string name="menu_rename" msgid="7678802479104285353">"Přejmenovat"</string>
- <string name="rename_error" msgid="4203041674883412606">"Dokument se nepodařilo přejmenovat."</string>
- <string name="menu_eject_root" msgid="2768224615494227325">"Odpojit"</string>
- <string name="notification_copy_files_converted_title" msgid="3153573223054275181">"Některé soubory byly převedeny"</string>
- <string name="open_external_dialog_request" msgid="5789329484285817629">"Chcete aplikaci <xliff:g id="APPNAME"><b>^1</b></xliff:g> udělit přístup k adresáři <xliff:g id="DIRECTORY"><i>^2</i></xliff:g> v úložišti <xliff:g id="STORAGE"><i>^3</i></xliff:g>?"</string>
- <string name="open_external_dialog_request_primary_volume" msgid="6635562535713428688">"Chcete aplikaci <xliff:g id="APPNAME"><b>^1</b></xliff:g> udělit přístup k adresáři <xliff:g id="DIRECTORY"><i>^2</i></xliff:g>?"</string>
- <string name="open_external_dialog_root_request" msgid="8899108702926347720">"Chcete aplikaci <xliff:g id="APPNAME"><b>^1</b></xliff:g> udělit přístup ke svým datům v úložišti <xliff:g id="STORAGE"><i>^2</i></xliff:g>, včetně fotek a videí?"</string>
- <string name="never_ask_again" msgid="4295278542972859268">"Příště se neptat"</string>
- <string name="allow" msgid="7225948811296386551">"Povolit"</string>
- <string name="deny" msgid="2081879885755434506">"Odepřít"</string>
- <plurals name="elements_selected" formatted="false" msgid="1376955402452875047">
- <item quantity="few">Vybrány <xliff:g id="COUNT_1">%1$d</xliff:g> položky</item>
- <item quantity="many">Vybráno <xliff:g id="COUNT_1">%1$d</xliff:g> položky</item>
- <item quantity="other">Vybráno <xliff:g id="COUNT_1">%1$d</xliff:g> položek</item>
- <item quantity="one">Vybrána <xliff:g id="COUNT_0">%1$d</xliff:g> položka</item>
- </plurals>
- <plurals name="elements_dragged" formatted="false" msgid="3727204615215602228">
- <item quantity="few"><xliff:g id="COUNT_1">%1$d</xliff:g> položky</item>
- <item quantity="many"><xliff:g id="COUNT_1">%1$d</xliff:g> položky</item>
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> položek</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> položka</item>
- </plurals>
- <string name="delete_filename_confirmation_message" msgid="5312817725577537488">"Smazat soubor <xliff:g id="NAME">%1$s</xliff:g>?"</string>
- <string name="delete_foldername_confirmation_message" msgid="5885501832257285329">"Smazat složku <xliff:g id="NAME">%1$s</xliff:g> a její obsah?"</string>
- <plurals name="delete_files_confirmation_message" formatted="false" msgid="8417505791395471802">
- <item quantity="few">Smazat <xliff:g id="COUNT_1">%1$d</xliff:g> soubory?</item>
- <item quantity="many">Smazat <xliff:g id="COUNT_1">%1$d</xliff:g> souboru?</item>
- <item quantity="other">Smazat <xliff:g id="COUNT_1">%1$d</xliff:g> souborů?</item>
- <item quantity="one">Smazat <xliff:g id="COUNT_0">%1$d</xliff:g> soubor?</item>
- </plurals>
- <plurals name="delete_folders_confirmation_message" formatted="false" msgid="9185648028213507769">
- <item quantity="few">Smazat <xliff:g id="COUNT_1">%1$d</xliff:g> složky a jejich obsah?</item>
- <item quantity="many">Smazat <xliff:g id="COUNT_1">%1$d</xliff:g> složky a jejich obsah?</item>
- <item quantity="other">Smazat <xliff:g id="COUNT_1">%1$d</xliff:g> složek a jejich obsah?</item>
- <item quantity="one">Smazat <xliff:g id="COUNT_0">%1$d</xliff:g> složku a její obsah?</item>
- </plurals>
- <plurals name="delete_items_confirmation_message" formatted="false" msgid="5376214433530243459">
- <item quantity="few">Smazat <xliff:g id="COUNT_1">%1$d</xliff:g> položky?</item>
- <item quantity="many">Smazat <xliff:g id="COUNT_1">%1$d</xliff:g> položky?</item>
- <item quantity="other">Smazat <xliff:g id="COUNT_1">%1$d</xliff:g> položek?</item>
- <item quantity="one">Smazat <xliff:g id="COUNT_0">%1$d</xliff:g> položku?</item>
- </plurals>
-</resources>
diff --git a/packages/DocumentsUI/res/values-da/strings.xml b/packages/DocumentsUI/res/values-da/strings.xml
deleted file mode 100644
index b47326e..0000000
--- a/packages/DocumentsUI/res/values-da/strings.xml
+++ /dev/null
@@ -1,144 +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="app_label" msgid="1551050262492398204">"Filer"</string>
- <string name="downloads_label" msgid="959113951084633612">"Downloads"</string>
- <string name="title_open" msgid="4353228937663917801">"Åbn fra"</string>
- <string name="title_save" msgid="2433679664882857999">"Gem i"</string>
- <string name="menu_create_dir" msgid="2547620241173881754">"Ny mappe"</string>
- <string name="menu_grid" msgid="6878021334497835259">"Gittervisning"</string>
- <string name="menu_list" msgid="7279285939892417279">"Listevisning"</string>
- <string name="menu_sort" msgid="7677740407158414452">"Sortér efter"</string>
- <string name="menu_search" msgid="3816712084502856974">"Søg"</string>
- <string name="menu_settings" msgid="8239065133341597825">"Indstillinger for lager"</string>
- <string name="menu_open" msgid="432922957274920903">"Åbn"</string>
- <string name="menu_save" msgid="2394743337684426338">"Gem"</string>
- <string name="menu_share" msgid="3075149983979628146">"Del"</string>
- <string name="menu_delete" msgid="8138799623850614177">"Slet"</string>
- <string name="menu_select_all" msgid="8323579667348729928">"Markér alle"</string>
- <string name="menu_copy" msgid="3612326052677229148">"Kopiér til…"</string>
- <string name="menu_move" msgid="1828090633118079817">"Flyt til…"</string>
- <string name="menu_new_window" msgid="1226032889278727538">"Nyt vindue"</string>
- <string name="menu_cut_to_clipboard" msgid="2467149185452488383">"Klip"</string>
- <string name="menu_copy_to_clipboard" msgid="489311381979634291">"Kopiér"</string>
- <string name="menu_paste_from_clipboard" msgid="2071583031180257091">"Indsæt"</string>
- <string name="menu_advanced_show" msgid="4693652895715631401">"Vis intern lagerplads"</string>
- <string name="menu_advanced_hide" msgid="4218809952721972589">"Skjul intern lagerplads"</string>
- <string name="menu_file_size_show" msgid="3240323619260823076">"Vis filstørrelse"</string>
- <string name="menu_file_size_hide" msgid="8881975928502581042">"Skjul filstørrelse"</string>
- <string name="button_select" msgid="527196987259139214">"Vælg"</string>
- <string name="button_copy" msgid="8706475544635021302">"Kopiér"</string>
- <string name="button_move" msgid="2202666023104202232">"Flyt"</string>
- <string name="button_dismiss" msgid="3714065566893946085">"Luk"</string>
- <string name="button_retry" msgid="4392027584153752797">"Prøv igen"</string>
- <string name="sort_name" msgid="9183560467917256779">"Efter navn"</string>
- <string name="sort_date" msgid="586080032956151448">"Efter ændringsdato"</string>
- <string name="sort_size" msgid="3350681319735474741">"Efter størrelse"</string>
- <string name="drawer_open" msgid="4545466532430226949">"Vis rødder"</string>
- <string name="drawer_close" msgid="7602734368552123318">"Skjul rødder"</string>
- <string name="save_error" msgid="6167009778003223664">"Dokumentet kunne ikke gemmes"</string>
- <string name="create_error" msgid="3735649141335444215">"Mappen kunne ikke oprettes"</string>
- <string name="query_error" msgid="5999895349602476581">"Der kan ikke indlæses indhold i øjeblikket"</string>
- <string name="root_recent" msgid="4470053704320518133">"Seneste"</string>
- <string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> ledig plads"</string>
- <string name="root_type_service" msgid="2178854894416775409">"Lagringstjenester"</string>
- <string name="root_type_shortcut" msgid="3318760609471618093">"Genveje"</string>
- <string name="root_type_device" msgid="7121342474653483538">"Enheder"</string>
- <string name="root_type_apps" msgid="8838065367985945189">"Flere apps"</string>
- <string name="empty" msgid="7858882803708117596">"Ingen elementer"</string>
- <string name="no_results" msgid="6622510343880730446">"Ingen kampe i %1$s"</string>
- <string name="toast_no_application" msgid="4632640357724698144">"Filen kan ikke åbnes"</string>
- <string name="toast_failed_delete" msgid="2180678019407244069">"Nogle dokumenter kan ikke slettes"</string>
- <string name="share_via" msgid="8966594246261344259">"Del via"</string>
- <string name="copy_notification_title" msgid="6374299806748219777">"Kopierer filer"</string>
- <string name="move_notification_title" msgid="6193835179777284805">"Flytter filer"</string>
- <string name="delete_notification_title" msgid="3329403967712437496">"Filerne slettes"</string>
- <string name="copy_remaining" msgid="6283790937387975095">"<xliff:g id="DURATION">%s</xliff:g> tilbage"</string>
- <plurals name="copy_begin" formatted="false" msgid="9071199452634086365">
- <item quantity="one">Kopierer <xliff:g id="COUNT_1">%1$d</xliff:g> filer.</item>
- <item quantity="other">Kopierer <xliff:g id="COUNT_1">%1$d</xliff:g> filer.</item>
- </plurals>
- <plurals name="move_begin" formatted="false" msgid="8430330882138871643">
- <item quantity="one">Flytter <xliff:g id="COUNT_1">%1$d</xliff:g> filer.</item>
- <item quantity="other">Flytter <xliff:g id="COUNT_1">%1$d</xliff:g> filer.</item>
- </plurals>
- <plurals name="deleting" formatted="false" msgid="5054338566802559411">
- <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> filer slettes.</item>
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> filer slettes.</item>
- </plurals>
- <string name="undo" msgid="7905788502491742328">"Fortryd"</string>
- <string name="copy_preparing" msgid="3896202461003039386">"Forbereder kopiering…"</string>
- <string name="move_preparing" msgid="2772219441375531410">"Forbereder flytning…"</string>
- <string name="delete_preparing" msgid="5655813182533491992">"Forbereder til sletning…"</string>
- <string name="delete_progress" msgid="5399405983046157222">"<xliff:g id="COUNT_0">%1$d</xliff:g> af <xliff:g id="TOTALCOUNT">%2$d</xliff:g>"</string>
- <plurals name="copy_error_notification_title" formatted="false" msgid="7160447124922897689">
- <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> fil kunne ikke kopieres</item>
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> filer kunne ikke kopieres</item>
- </plurals>
- <plurals name="move_error_notification_title" formatted="false" msgid="2710901971014783012">
- <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> fil kunne ikke flyttes</item>
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> filer kunne ikke flyttes</item>
- </plurals>
- <plurals name="delete_error_notification_title" formatted="false" msgid="7228393157786591199">
- <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> fil kunne ikke slettes</item>
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> filer kunne ikke slettes</item>
- </plurals>
- <string name="notification_touch_for_details" msgid="6268189413228855582">"Tryk for at se oplysninger"</string>
- <string name="close" msgid="3043722427445528732">"Luk"</string>
- <string name="copy_failure_alert_content" msgid="4563147454522476183">"Disse filer blev ikke kopieret: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="move_failure_alert_content" msgid="2635075788682922861">"Disse filer blev ikke flyttet: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="delete_failure_alert_content" msgid="892393767207938353">"Disse filer blev ikke slettet: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="copy_converted_warning_content" msgid="5753861488218674361">"Disse filer er konverteret til et andet format: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <plurals name="clipboard_files_clipped" formatted="false" msgid="855459017537058539">
- <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> filer blev kopieret til udklipsholder.</item>
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> filer blev kopieret til udklipsholder.</item>
- </plurals>
- <string name="clipboard_files_cannot_paste" msgid="2878324825602325706">"De valgte filer kan ikke indsættes på denne placering."</string>
- <string name="menu_rename" msgid="7678802479104285353">"Omdøb"</string>
- <string name="rename_error" msgid="4203041674883412606">"Dokumentet kunne ikke omdøbes"</string>
- <string name="menu_eject_root" msgid="2768224615494227325">"Skub ud"</string>
- <string name="notification_copy_files_converted_title" msgid="3153573223054275181">"Nogle filer er konverteret"</string>
- <string name="open_external_dialog_request" msgid="5789329484285817629">"Vil du give <xliff:g id="APPNAME"><b>^1</b></xliff:g> adgang til mappen <xliff:g id="DIRECTORY"><i>^2</i></xliff:g> på <xliff:g id="STORAGE"><i>^3</i></xliff:g>?"</string>
- <string name="open_external_dialog_request_primary_volume" msgid="6635562535713428688">"Vil du give <xliff:g id="APPNAME"><b>^1</b></xliff:g> adgang til indekset <xliff:g id="DIRECTORY"><i>^2</i></xliff:g>?"</string>
- <string name="open_external_dialog_root_request" msgid="8899108702926347720">"Vil du give <xliff:g id="APPNAME"><b>^1</b></xliff:g> adgang til dine data, herunder billeder og videoer på <xliff:g id="STORAGE"><i>^2</i></xliff:g>?"</string>
- <string name="never_ask_again" msgid="4295278542972859268">"Spørg ikke igen"</string>
- <string name="allow" msgid="7225948811296386551">"Tillad"</string>
- <string name="deny" msgid="2081879885755434506">"Afvis"</string>
- <plurals name="elements_selected" formatted="false" msgid="1376955402452875047">
- <item quantity="one">Der er valgt <xliff:g id="COUNT_1">%1$d</xliff:g></item>
- <item quantity="other">Der er valgt <xliff:g id="COUNT_1">%1$d</xliff:g></item>
- </plurals>
- <plurals name="elements_dragged" formatted="false" msgid="3727204615215602228">
- <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> element</item>
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> elementer</item>
- </plurals>
- <string name="delete_filename_confirmation_message" msgid="5312817725577537488">"Vil du slette \"<xliff:g id="NAME">%1$s</xliff:g>\"?"</string>
- <string name="delete_foldername_confirmation_message" msgid="5885501832257285329">"Vil du slette mappen \"<xliff:g id="NAME">%1$s</xliff:g>\" og dens indhold?"</string>
- <plurals name="delete_files_confirmation_message" formatted="false" msgid="8417505791395471802">
- <item quantity="one">Vil du slette <xliff:g id="COUNT_1">%1$d</xliff:g> fil?</item>
- <item quantity="other">Vil du slette <xliff:g id="COUNT_1">%1$d</xliff:g> filer?</item>
- </plurals>
- <plurals name="delete_folders_confirmation_message" formatted="false" msgid="9185648028213507769">
- <item quantity="one">Vil du slette <xliff:g id="COUNT_1">%1$d</xliff:g> mappe og dens indhold?</item>
- <item quantity="other">Vil du slette <xliff:g id="COUNT_1">%1$d</xliff:g> mapper og deres indhold?</item>
- </plurals>
- <plurals name="delete_items_confirmation_message" formatted="false" msgid="5376214433530243459">
- <item quantity="one">Vil du slette <xliff:g id="COUNT_1">%1$d</xliff:g> element?</item>
- <item quantity="other">Vil du slette <xliff:g id="COUNT_1">%1$d</xliff:g> elementer?</item>
- </plurals>
-</resources>
diff --git a/packages/DocumentsUI/res/values-de/strings.xml b/packages/DocumentsUI/res/values-de/strings.xml
deleted file mode 100644
index 123bf19..0000000
--- a/packages/DocumentsUI/res/values-de/strings.xml
+++ /dev/null
@@ -1,144 +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="app_label" msgid="1551050262492398204">"Dateien"</string>
- <string name="downloads_label" msgid="959113951084633612">"Downloads"</string>
- <string name="title_open" msgid="4353228937663917801">"Öffnen von"</string>
- <string name="title_save" msgid="2433679664882857999">"Speichern unter"</string>
- <string name="menu_create_dir" msgid="2547620241173881754">"Neuer Ordner"</string>
- <string name="menu_grid" msgid="6878021334497835259">"Rasteransicht"</string>
- <string name="menu_list" msgid="7279285939892417279">"Listenansicht"</string>
- <string name="menu_sort" msgid="7677740407158414452">"Sortieren nach"</string>
- <string name="menu_search" msgid="3816712084502856974">"Suchen"</string>
- <string name="menu_settings" msgid="8239065133341597825">"Speichereinstellungen"</string>
- <string name="menu_open" msgid="432922957274920903">"Öffnen"</string>
- <string name="menu_save" msgid="2394743337684426338">"Speichern"</string>
- <string name="menu_share" msgid="3075149983979628146">"Teilen"</string>
- <string name="menu_delete" msgid="8138799623850614177">"Löschen"</string>
- <string name="menu_select_all" msgid="8323579667348729928">"Alle auswählen"</string>
- <string name="menu_copy" msgid="3612326052677229148">"Kopieren nach..."</string>
- <string name="menu_move" msgid="1828090633118079817">"Verschieben nach…"</string>
- <string name="menu_new_window" msgid="1226032889278727538">"Neues Fenster"</string>
- <string name="menu_cut_to_clipboard" msgid="2467149185452488383">"Ausschneiden"</string>
- <string name="menu_copy_to_clipboard" msgid="489311381979634291">"Kopieren"</string>
- <string name="menu_paste_from_clipboard" msgid="2071583031180257091">"Einfügen"</string>
- <string name="menu_advanced_show" msgid="4693652895715631401">"Int. Speicher anzeigen"</string>
- <string name="menu_advanced_hide" msgid="4218809952721972589">"Int. Speicher ausblenden"</string>
- <string name="menu_file_size_show" msgid="3240323619260823076">"Dateigröße anzeigen"</string>
- <string name="menu_file_size_hide" msgid="8881975928502581042">"Dateigröße ausblenden"</string>
- <string name="button_select" msgid="527196987259139214">"Auswählen"</string>
- <string name="button_copy" msgid="8706475544635021302">"Kopieren"</string>
- <string name="button_move" msgid="2202666023104202232">"Verschieben"</string>
- <string name="button_dismiss" msgid="3714065566893946085">"Schließen"</string>
- <string name="button_retry" msgid="4392027584153752797">"Erneut versuchen"</string>
- <string name="sort_name" msgid="9183560467917256779">"Nach Name"</string>
- <string name="sort_date" msgid="586080032956151448">"Nach Änderungsdatum"</string>
- <string name="sort_size" msgid="3350681319735474741">"Nach Größe"</string>
- <string name="drawer_open" msgid="4545466532430226949">"Root-Verzeichnis anzeigen"</string>
- <string name="drawer_close" msgid="7602734368552123318">"Root-Verzeichnis ausblenden"</string>
- <string name="save_error" msgid="6167009778003223664">"Dokument konnte nicht gespeichert werden."</string>
- <string name="create_error" msgid="3735649141335444215">"Ordner konnte nicht erstellt werden."</string>
- <string name="query_error" msgid="5999895349602476581">"Inhalte können momentan nicht geladen werden"</string>
- <string name="root_recent" msgid="4470053704320518133">"Letzte"</string>
- <string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> verfügbar"</string>
- <string name="root_type_service" msgid="2178854894416775409">"Speicherdienste"</string>
- <string name="root_type_shortcut" msgid="3318760609471618093">"Verknüpfungen"</string>
- <string name="root_type_device" msgid="7121342474653483538">"Geräte"</string>
- <string name="root_type_apps" msgid="8838065367985945189">"Weitere Apps"</string>
- <string name="empty" msgid="7858882803708117596">"Keine Dokumente"</string>
- <string name="no_results" msgid="6622510343880730446">"Keine Übereinstimmungen in %1$s"</string>
- <string name="toast_no_application" msgid="4632640357724698144">"Datei kann nicht geöffnet werden"</string>
- <string name="toast_failed_delete" msgid="2180678019407244069">"Einige Dokumente konnten nicht gelöscht werden."</string>
- <string name="share_via" msgid="8966594246261344259">"Teilen über"</string>
- <string name="copy_notification_title" msgid="6374299806748219777">"Dateien werden kopiert"</string>
- <string name="move_notification_title" msgid="6193835179777284805">"Dateien werden verschoben"</string>
- <string name="delete_notification_title" msgid="3329403967712437496">"Dateien werden gelöscht"</string>
- <string name="copy_remaining" msgid="6283790937387975095">"Noch <xliff:g id="DURATION">%s</xliff:g>"</string>
- <plurals name="copy_begin" formatted="false" msgid="9071199452634086365">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> Dateien werden kopiert.</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> Datei wird kopiert.</item>
- </plurals>
- <plurals name="move_begin" formatted="false" msgid="8430330882138871643">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> Dateien werden verschoben.</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> Datei wird verschoben.</item>
- </plurals>
- <plurals name="deleting" formatted="false" msgid="5054338566802559411">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> Dateien werden gelöscht.</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> Datei wird gelöscht.</item>
- </plurals>
- <string name="undo" msgid="7905788502491742328">"Rückgängig machen"</string>
- <string name="copy_preparing" msgid="3896202461003039386">"Kopieren wird vorbereitet…"</string>
- <string name="move_preparing" msgid="2772219441375531410">"Verschieben wird vorbereitet…"</string>
- <string name="delete_preparing" msgid="5655813182533491992">"Löschvorgang wird vorbereitet…"</string>
- <string name="delete_progress" msgid="5399405983046157222">"<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="7160447124922897689">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> Dateien konnten nicht kopiert werden</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> Datei konnte nicht kopiert werden</item>
- </plurals>
- <plurals name="move_error_notification_title" formatted="false" msgid="2710901971014783012">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> Dateien konnten nicht verschoben werden</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> Datei konnte nicht verschoben werden</item>
- </plurals>
- <plurals name="delete_error_notification_title" formatted="false" msgid="7228393157786591199">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> Dateien konnten nicht gelöscht werden</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> Datei konnte nicht gelöscht werden</item>
- </plurals>
- <string name="notification_touch_for_details" msgid="6268189413228855582">"Zum Ansehen der Details tippen"</string>
- <string name="close" msgid="3043722427445528732">"Schließen"</string>
- <string name="copy_failure_alert_content" msgid="4563147454522476183">"Diese Dateien wurden nicht kopiert: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="move_failure_alert_content" msgid="2635075788682922861">"Diese Dateien wurden nicht verschoben: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="delete_failure_alert_content" msgid="892393767207938353">"Diese Dateien wurden nicht gelöscht: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="copy_converted_warning_content" msgid="5753861488218674361">"Folgende Dateien wurden in ein anderes Format konvertiert: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <plurals name="clipboard_files_clipped" formatted="false" msgid="855459017537058539">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> Dateien wurden in die Zwischenablage kopiert.</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> Datei wurde in die Zwischenablage kopiert.</item>
- </plurals>
- <string name="clipboard_files_cannot_paste" msgid="2878324825602325706">"Die ausgewählten Dateien können an diesem Ort nicht eingefügt werden."</string>
- <string name="menu_rename" msgid="7678802479104285353">"Umbenennen"</string>
- <string name="rename_error" msgid="4203041674883412606">"Dokument konnte nicht umbenannt werden"</string>
- <string name="menu_eject_root" msgid="2768224615494227325">"Auswerfen"</string>
- <string name="notification_copy_files_converted_title" msgid="3153573223054275181">"Einige Dateien wurden konvertiert"</string>
- <string name="open_external_dialog_request" msgid="5789329484285817629">"<xliff:g id="APPNAME"><b>^1</b></xliff:g> Zugriff auf das Verzeichnis <xliff:g id="DIRECTORY"><i>^2</i></xliff:g> auf <xliff:g id="STORAGE"><i>^3</i></xliff:g> geben?"</string>
- <string name="open_external_dialog_request_primary_volume" msgid="6635562535713428688">"Möchtest du <xliff:g id="APPNAME"><b>^1</b></xliff:g> Zugriff auf das Verzeichnis <xliff:g id="DIRECTORY"><i>^2</i></xliff:g> geben?"</string>
- <string name="open_external_dialog_root_request" msgid="8899108702926347720">"Möchtest du <xliff:g id="APPNAME"><b>^1</b></xliff:g> Zugriff auf deine Daten auf <xliff:g id="STORAGE"><i>^2</i></xliff:g> geben, einschließlich Fotos und Videos?"</string>
- <string name="never_ask_again" msgid="4295278542972859268">"Nicht mehr fragen"</string>
- <string name="allow" msgid="7225948811296386551">"Zulassen"</string>
- <string name="deny" msgid="2081879885755434506">"Ablehnen"</string>
- <plurals name="elements_selected" formatted="false" msgid="1376955402452875047">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> ausgewählt</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> ausgewählt</item>
- </plurals>
- <plurals name="elements_dragged" formatted="false" msgid="3727204615215602228">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> Einträge</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> Eintrag</item>
- </plurals>
- <string name="delete_filename_confirmation_message" msgid="5312817725577537488">"\"<xliff:g id="NAME">%1$s</xliff:g>\" löschen?"</string>
- <string name="delete_foldername_confirmation_message" msgid="5885501832257285329">"Ordner \"<xliff:g id="NAME">%1$s</xliff:g>\" und dessen Inhalte löschen?"</string>
- <plurals name="delete_files_confirmation_message" formatted="false" msgid="8417505791395471802">
- <item quantity="other">Möchtest du <xliff:g id="COUNT_1">%1$d</xliff:g> Dateien löschen?</item>
- <item quantity="one">Möchtest du <xliff:g id="COUNT_0">%1$d</xliff:g> Datei löschen?</item>
- </plurals>
- <plurals name="delete_folders_confirmation_message" formatted="false" msgid="9185648028213507769">
- <item quantity="other">Möchtest du <xliff:g id="COUNT_1">%1$d</xliff:g> Ordner und deren Inhalte löschen?</item>
- <item quantity="one">Möchtest du <xliff:g id="COUNT_0">%1$d</xliff:g> Ordner und dessen Inhalte löschen?</item>
- </plurals>
- <plurals name="delete_items_confirmation_message" formatted="false" msgid="5376214433530243459">
- <item quantity="other">Möchtest du <xliff:g id="COUNT_1">%1$d</xliff:g> Elemente löschen?</item>
- <item quantity="one">Möchtest du <xliff:g id="COUNT_0">%1$d</xliff:g> Element löschen?</item>
- </plurals>
-</resources>
diff --git a/packages/DocumentsUI/res/values-el/strings.xml b/packages/DocumentsUI/res/values-el/strings.xml
deleted file mode 100644
index 5a199d7..0000000
--- a/packages/DocumentsUI/res/values-el/strings.xml
+++ /dev/null
@@ -1,144 +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="app_label" msgid="1551050262492398204">"Αρχεία"</string>
- <string name="downloads_label" msgid="959113951084633612">"Λήψεις"</string>
- <string name="title_open" msgid="4353228937663917801">"Άνοιγμα από"</string>
- <string name="title_save" msgid="2433679664882857999">"Αποθήκευση σε"</string>
- <string name="menu_create_dir" msgid="2547620241173881754">"Νέος φάκελος"</string>
- <string name="menu_grid" msgid="6878021334497835259">"Προβολή πλέγματος"</string>
- <string name="menu_list" msgid="7279285939892417279">"Προβολή λίστας"</string>
- <string name="menu_sort" msgid="7677740407158414452">"Ταξινόμηση κατά"</string>
- <string name="menu_search" msgid="3816712084502856974">"Αναζήτηση"</string>
- <string name="menu_settings" msgid="8239065133341597825">"Ρυθμίσεις αποθ/κού χώρου"</string>
- <string name="menu_open" msgid="432922957274920903">"Άνοιγμα"</string>
- <string name="menu_save" msgid="2394743337684426338">"Αποθήκευση"</string>
- <string name="menu_share" msgid="3075149983979628146">"Κοινή χρήση"</string>
- <string name="menu_delete" msgid="8138799623850614177">"Διαγραφή"</string>
- <string name="menu_select_all" msgid="8323579667348729928">"Επιλογή όλων"</string>
- <string name="menu_copy" msgid="3612326052677229148">"Αντιγραφή σε…"</string>
- <string name="menu_move" msgid="1828090633118079817">"Μετακίνηση σε..."</string>
- <string name="menu_new_window" msgid="1226032889278727538">"Νέο παράθυρο"</string>
- <string name="menu_cut_to_clipboard" msgid="2467149185452488383">"Αποκοπή"</string>
- <string name="menu_copy_to_clipboard" msgid="489311381979634291">"Αντιγραφή"</string>
- <string name="menu_paste_from_clipboard" msgid="2071583031180257091">"Επικόλληση"</string>
- <string name="menu_advanced_show" msgid="4693652895715631401">"Εμφ.εσωτ.χώρου αποθήκ."</string>
- <string name="menu_advanced_hide" msgid="4218809952721972589">"Απόκρ.εσωτ.χώρου αποθήκ."</string>
- <string name="menu_file_size_show" msgid="3240323619260823076">"Εμφ. μεγέθους αρχείου"</string>
- <string name="menu_file_size_hide" msgid="8881975928502581042">"Απόκρ. μεγέθους αρχείου"</string>
- <string name="button_select" msgid="527196987259139214">"Επιλογή"</string>
- <string name="button_copy" msgid="8706475544635021302">"Αντιγραφή"</string>
- <string name="button_move" msgid="2202666023104202232">"Μετακίνηση"</string>
- <string name="button_dismiss" msgid="3714065566893946085">"Παράβλεψη"</string>
- <string name="button_retry" msgid="4392027584153752797">"Δοκιμάστε ξανά"</string>
- <string name="sort_name" msgid="9183560467917256779">"Κατά όνομα"</string>
- <string name="sort_date" msgid="586080032956151448">"Κατά ημερομηνία τροποποίησης"</string>
- <string name="sort_size" msgid="3350681319735474741">"Κατά μέγεθος"</string>
- <string name="drawer_open" msgid="4545466532430226949">"Εμφάνιση ρίζας"</string>
- <string name="drawer_close" msgid="7602734368552123318">"Απόκρυψη ρίζας"</string>
- <string name="save_error" msgid="6167009778003223664">"Αποτυχία αποθήκευσης του εγγράφου"</string>
- <string name="create_error" msgid="3735649141335444215">"Αποτυχία δημιουργίας φακέλου"</string>
- <string name="query_error" msgid="5999895349602476581">"Δεν είναι δυνατή η φόρτωση περιεχομένου τώρα"</string>
- <string name="root_recent" msgid="4470053704320518133">"Πρόσφατα"</string>
- <string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> ελεύθερα"</string>
- <string name="root_type_service" msgid="2178854894416775409">"Υπηρεσίες αποθήκευσης"</string>
- <string name="root_type_shortcut" msgid="3318760609471618093">"Συντομεύσεις"</string>
- <string name="root_type_device" msgid="7121342474653483538">"Συσκευές"</string>
- <string name="root_type_apps" msgid="8838065367985945189">"Περισσότερες εφαρμογές"</string>
- <string name="empty" msgid="7858882803708117596">"Δεν υπάρχουν στοιχεία"</string>
- <string name="no_results" msgid="6622510343880730446">"Χωρίς αντιστοιχίσεις στο %1$s"</string>
- <string name="toast_no_application" msgid="4632640357724698144">"Δεν είναι δυνατό το άνοιγμα του αρχείου"</string>
- <string name="toast_failed_delete" msgid="2180678019407244069">"Δεν είναι δυνατή η διαγραφή ορισμένων εγγράφων"</string>
- <string name="share_via" msgid="8966594246261344259">"Κοινοποίηση μέσω"</string>
- <string name="copy_notification_title" msgid="6374299806748219777">"Αντιγραφή αρχείων"</string>
- <string name="move_notification_title" msgid="6193835179777284805">"Μετακίνηση αρχείων"</string>
- <string name="delete_notification_title" msgid="3329403967712437496">"Διαγραφή αρχείων"</string>
- <string name="copy_remaining" msgid="6283790937387975095">"Απομένουν <xliff:g id="DURATION">%s</xliff:g>"</string>
- <plurals name="copy_begin" formatted="false" msgid="9071199452634086365">
- <item quantity="other">Αντιγραφή <xliff:g id="COUNT_1">%1$d</xliff:g> αρχείων.</item>
- <item quantity="one">Αντιγραφή <xliff:g id="COUNT_0">%1$d</xliff:g> αρχείου.</item>
- </plurals>
- <plurals name="move_begin" formatted="false" msgid="8430330882138871643">
- <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="5054338566802559411">
- <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="7905788502491742328">"Αναίρεση"</string>
- <string name="copy_preparing" msgid="3896202461003039386">"Προετοιμασία για αντιγραφή…"</string>
- <string name="move_preparing" msgid="2772219441375531410">"Προετοιμασία για μετακίνηση…"</string>
- <string name="delete_preparing" msgid="5655813182533491992">"Προετοιμασία για διαγραφή…"</string>
- <string name="delete_progress" msgid="5399405983046157222">"<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="7160447124922897689">
- <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="2710901971014783012">
- <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="7228393157786591199">
- <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="6268189413228855582">"Πατήστε για προβολή λεπτομερειών"</string>
- <string name="close" msgid="3043722427445528732">"Κλείσιμο"</string>
- <string name="copy_failure_alert_content" msgid="4563147454522476183">"Αυτά τα αρχεία δεν αντιγράφηκαν: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="move_failure_alert_content" msgid="2635075788682922861">"Αυτά τα αρχεία δεν μετακινήθηκαν: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="delete_failure_alert_content" msgid="892393767207938353">"Αυτά τα αρχεία δεν διαγράφηκαν: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="copy_converted_warning_content" msgid="5753861488218674361">"Αυτά τα αρχεία μετατράπηκαν σε άλλη μορφή: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <plurals name="clipboard_files_clipped" formatted="false" msgid="855459017537058539">
- <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="clipboard_files_cannot_paste" msgid="2878324825602325706">"Δεν είναι δυνατή η επικόλληση των επιλεγμένων αρχείων σε αυτήν την τοποθεσία."</string>
- <string name="menu_rename" msgid="7678802479104285353">"Μετονομασία"</string>
- <string name="rename_error" msgid="4203041674883412606">"Αποτυχία μετονομασίας εγγράφου"</string>
- <string name="menu_eject_root" msgid="2768224615494227325">"Εξαγωγή"</string>
- <string name="notification_copy_files_converted_title" msgid="3153573223054275181">"Ορισμένα αρχεία μετατράπηκαν"</string>
- <string name="open_external_dialog_request" msgid="5789329484285817629">"Να εκχωρηθεί στην εφαρμογή <xliff:g id="APPNAME"><b>^1</b></xliff:g> πρόσβαση στον κατάλογο <xliff:g id="DIRECTORY"><i>^2</i></xliff:g> στον αποθηκευτικό χώρο <xliff:g id="STORAGE"><i>^3</i></xliff:g>;"</string>
- <string name="open_external_dialog_request_primary_volume" msgid="6635562535713428688">"Εκχώρηση πρόσβασης στην εφαρμογή <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="8899108702926347720">"Θέλετε να εκχωρήσετε πρόσβαση στα δεδομένα σας στην εφαρμογή <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="4295278542972859268">"Να μην ερωτηθώ ξανά"</string>
- <string name="allow" msgid="7225948811296386551">"Να επιτρέπεται"</string>
- <string name="deny" msgid="2081879885755434506">"Άρνηση"</string>
- <plurals name="elements_selected" formatted="false" msgid="1376955402452875047">
- <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="3727204615215602228">
- <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="5312817725577537488">"Να διαγραφεί το αρχείο \"<xliff:g id="NAME">%1$s</xliff:g>\";"</string>
- <string name="delete_foldername_confirmation_message" msgid="5885501832257285329">"Να διαγραφεί ο φάκελος \"<xliff:g id="NAME">%1$s</xliff:g>\" και τα περιεχόμενά του;"</string>
- <plurals name="delete_files_confirmation_message" formatted="false" msgid="8417505791395471802">
- <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="9185648028213507769">
- <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="5376214433530243459">
- <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>
-</resources>
diff --git a/packages/DocumentsUI/res/values-en-rAU/strings.xml b/packages/DocumentsUI/res/values-en-rAU/strings.xml
deleted file mode 100644
index f2b25b8..0000000
--- a/packages/DocumentsUI/res/values-en-rAU/strings.xml
+++ /dev/null
@@ -1,144 +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="app_label" msgid="1551050262492398204">"Files"</string>
- <string name="downloads_label" msgid="959113951084633612">"Downloads"</string>
- <string name="title_open" msgid="4353228937663917801">"Open from"</string>
- <string name="title_save" msgid="2433679664882857999">"Save to"</string>
- <string name="menu_create_dir" msgid="2547620241173881754">"New folder"</string>
- <string name="menu_grid" msgid="6878021334497835259">"Grid view"</string>
- <string name="menu_list" msgid="7279285939892417279">"List view"</string>
- <string name="menu_sort" msgid="7677740407158414452">"Sort by"</string>
- <string name="menu_search" msgid="3816712084502856974">"Search"</string>
- <string name="menu_settings" msgid="8239065133341597825">"Storage settings"</string>
- <string name="menu_open" msgid="432922957274920903">"Open"</string>
- <string name="menu_save" msgid="2394743337684426338">"Save"</string>
- <string name="menu_share" msgid="3075149983979628146">"Share"</string>
- <string name="menu_delete" msgid="8138799623850614177">"Delete"</string>
- <string name="menu_select_all" msgid="8323579667348729928">"Select all"</string>
- <string name="menu_copy" msgid="3612326052677229148">"Copy to…"</string>
- <string name="menu_move" msgid="1828090633118079817">"Move to…"</string>
- <string name="menu_new_window" msgid="1226032889278727538">"New window"</string>
- <string name="menu_cut_to_clipboard" msgid="2467149185452488383">"Cut"</string>
- <string name="menu_copy_to_clipboard" msgid="489311381979634291">"Copy"</string>
- <string name="menu_paste_from_clipboard" msgid="2071583031180257091">"Paste"</string>
- <string name="menu_advanced_show" msgid="4693652895715631401">"Show internal storage"</string>
- <string name="menu_advanced_hide" msgid="4218809952721972589">"Hide internal storage"</string>
- <string name="menu_file_size_show" msgid="3240323619260823076">"Show file size"</string>
- <string name="menu_file_size_hide" msgid="8881975928502581042">"Hide file size"</string>
- <string name="button_select" msgid="527196987259139214">"select"</string>
- <string name="button_copy" msgid="8706475544635021302">"Copy"</string>
- <string name="button_move" msgid="2202666023104202232">"Move"</string>
- <string name="button_dismiss" msgid="3714065566893946085">"Dismiss"</string>
- <string name="button_retry" msgid="4392027584153752797">"Try again"</string>
- <string name="sort_name" msgid="9183560467917256779">"By name"</string>
- <string name="sort_date" msgid="586080032956151448">"By date modified"</string>
- <string name="sort_size" msgid="3350681319735474741">"By size"</string>
- <string name="drawer_open" msgid="4545466532430226949">"Show roots"</string>
- <string name="drawer_close" msgid="7602734368552123318">"Hide roots"</string>
- <string name="save_error" msgid="6167009778003223664">"Failed to save document"</string>
- <string name="create_error" msgid="3735649141335444215">"Failed to create folder"</string>
- <string name="query_error" msgid="5999895349602476581">"Can’t load content at the moment"</string>
- <string name="root_recent" msgid="4470053704320518133">"Recent"</string>
- <string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> free"</string>
- <string name="root_type_service" msgid="2178854894416775409">"Storage services"</string>
- <string name="root_type_shortcut" msgid="3318760609471618093">"Shortcuts"</string>
- <string name="root_type_device" msgid="7121342474653483538">"Devices"</string>
- <string name="root_type_apps" msgid="8838065367985945189">"More apps"</string>
- <string name="empty" msgid="7858882803708117596">"No items"</string>
- <string name="no_results" msgid="6622510343880730446">"No matches in %1$s"</string>
- <string name="toast_no_application" msgid="4632640357724698144">"Can’t open file"</string>
- <string name="toast_failed_delete" msgid="2180678019407244069">"Unable to delete some documents"</string>
- <string name="share_via" msgid="8966594246261344259">"Share via"</string>
- <string name="copy_notification_title" msgid="6374299806748219777">"Copying files"</string>
- <string name="move_notification_title" msgid="6193835179777284805">"Moving files"</string>
- <string name="delete_notification_title" msgid="3329403967712437496">"Deleting files"</string>
- <string name="copy_remaining" msgid="6283790937387975095">"<xliff:g id="DURATION">%s</xliff:g> left"</string>
- <plurals name="copy_begin" formatted="false" msgid="9071199452634086365">
- <item quantity="other">Copying <xliff:g id="COUNT_1">%1$d</xliff:g> files.</item>
- <item quantity="one">Copying <xliff:g id="COUNT_0">%1$d</xliff:g> file.</item>
- </plurals>
- <plurals name="move_begin" formatted="false" msgid="8430330882138871643">
- <item quantity="other">Moving <xliff:g id="COUNT_1">%1$d</xliff:g> files.</item>
- <item quantity="one">Moving <xliff:g id="COUNT_0">%1$d</xliff:g> file.</item>
- </plurals>
- <plurals name="deleting" formatted="false" msgid="5054338566802559411">
- <item quantity="other">Deleting <xliff:g id="COUNT_1">%1$d</xliff:g> files.</item>
- <item quantity="one">Deleting <xliff:g id="COUNT_0">%1$d</xliff:g> file.</item>
- </plurals>
- <string name="undo" msgid="7905788502491742328">"Undo"</string>
- <string name="copy_preparing" msgid="3896202461003039386">"Preparing for copy…"</string>
- <string name="move_preparing" msgid="2772219441375531410">"Preparing for move…"</string>
- <string name="delete_preparing" msgid="5655813182533491992">"Preparing to delete…"</string>
- <string name="delete_progress" msgid="5399405983046157222">"<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="7160447124922897689">
- <item quantity="other">Couldn’t copy <xliff:g id="COUNT_1">%1$d</xliff:g> files</item>
- <item quantity="one">Couldn’t copy <xliff:g id="COUNT_0">%1$d</xliff:g> file</item>
- </plurals>
- <plurals name="move_error_notification_title" formatted="false" msgid="2710901971014783012">
- <item quantity="other">Couldn’t move <xliff:g id="COUNT_1">%1$d</xliff:g> files</item>
- <item quantity="one">Couldn’t move <xliff:g id="COUNT_0">%1$d</xliff:g> file</item>
- </plurals>
- <plurals name="delete_error_notification_title" formatted="false" msgid="7228393157786591199">
- <item quantity="other">Couldn’t delete <xliff:g id="COUNT_1">%1$d</xliff:g> files</item>
- <item quantity="one">Couldn’t delete <xliff:g id="COUNT_0">%1$d</xliff:g> file</item>
- </plurals>
- <string name="notification_touch_for_details" msgid="6268189413228855582">"Tap to view details"</string>
- <string name="close" msgid="3043722427445528732">"Close"</string>
- <string name="copy_failure_alert_content" msgid="4563147454522476183">"These files weren’t copied: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="move_failure_alert_content" msgid="2635075788682922861">"These files weren’t moved: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="delete_failure_alert_content" msgid="892393767207938353">"These files weren’t deleted: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="copy_converted_warning_content" msgid="5753861488218674361">"These files were converted to another format: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <plurals name="clipboard_files_clipped" formatted="false" msgid="855459017537058539">
- <item quantity="other">Copied <xliff:g id="COUNT_1">%1$d</xliff:g> files to clipboard.</item>
- <item quantity="one">Copied <xliff:g id="COUNT_0">%1$d</xliff:g> file to clipboard.</item>
- </plurals>
- <string name="clipboard_files_cannot_paste" msgid="2878324825602325706">"Cannot paste the selected files in this location."</string>
- <string name="menu_rename" msgid="7678802479104285353">"Rename"</string>
- <string name="rename_error" msgid="4203041674883412606">"Failed to rename document"</string>
- <string name="menu_eject_root" msgid="2768224615494227325">"Eject"</string>
- <string name="notification_copy_files_converted_title" msgid="3153573223054275181">"Some files were converted"</string>
- <string name="open_external_dialog_request" msgid="5789329484285817629">"Grant <xliff:g id="APPNAME"><b>^1</b></xliff:g> access to <xliff:g id="DIRECTORY"><i>^2</i></xliff:g> directory on <xliff:g id="STORAGE"><i>^3</i></xliff:g>?"</string>
- <string name="open_external_dialog_request_primary_volume" msgid="6635562535713428688">"Grant <xliff:g id="APPNAME"><b>^1</b></xliff:g> access to <xliff:g id="DIRECTORY"><i>^2</i></xliff:g> directory?"</string>
- <string name="open_external_dialog_root_request" msgid="8899108702926347720">"Grant <xliff:g id="APPNAME"><b>^1</b></xliff:g> access to your data, including photos and videos, on <xliff:g id="STORAGE"><i>^2</i></xliff:g>?"</string>
- <string name="never_ask_again" msgid="4295278542972859268">"Don\'t ask again"</string>
- <string name="allow" msgid="7225948811296386551">"Allow"</string>
- <string name="deny" msgid="2081879885755434506">"Deny"</string>
- <plurals name="elements_selected" formatted="false" msgid="1376955402452875047">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> selected</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> selected</item>
- </plurals>
- <plurals name="elements_dragged" formatted="false" msgid="3727204615215602228">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> items</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> item</item>
- </plurals>
- <string name="delete_filename_confirmation_message" msgid="5312817725577537488">"Delete \"<xliff:g id="NAME">%1$s</xliff:g>\"?"</string>
- <string name="delete_foldername_confirmation_message" msgid="5885501832257285329">"Delete folder \"<xliff:g id="NAME">%1$s</xliff:g>\" and its contents?"</string>
- <plurals name="delete_files_confirmation_message" formatted="false" msgid="8417505791395471802">
- <item quantity="other">Delete <xliff:g id="COUNT_1">%1$d</xliff:g> files?</item>
- <item quantity="one">Delete <xliff:g id="COUNT_0">%1$d</xliff:g> file?</item>
- </plurals>
- <plurals name="delete_folders_confirmation_message" formatted="false" msgid="9185648028213507769">
- <item quantity="other">Delete <xliff:g id="COUNT_1">%1$d</xliff:g> folders and their contents?</item>
- <item quantity="one">Delete <xliff:g id="COUNT_0">%1$d</xliff:g> folder and its contents?</item>
- </plurals>
- <plurals name="delete_items_confirmation_message" formatted="false" msgid="5376214433530243459">
- <item quantity="other">Delete <xliff:g id="COUNT_1">%1$d</xliff:g> items?</item>
- <item quantity="one">Delete <xliff:g id="COUNT_0">%1$d</xliff:g> item?</item>
- </plurals>
-</resources>
diff --git a/packages/DocumentsUI/res/values-en-rGB/strings.xml b/packages/DocumentsUI/res/values-en-rGB/strings.xml
deleted file mode 100644
index f2b25b8..0000000
--- a/packages/DocumentsUI/res/values-en-rGB/strings.xml
+++ /dev/null
@@ -1,144 +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="app_label" msgid="1551050262492398204">"Files"</string>
- <string name="downloads_label" msgid="959113951084633612">"Downloads"</string>
- <string name="title_open" msgid="4353228937663917801">"Open from"</string>
- <string name="title_save" msgid="2433679664882857999">"Save to"</string>
- <string name="menu_create_dir" msgid="2547620241173881754">"New folder"</string>
- <string name="menu_grid" msgid="6878021334497835259">"Grid view"</string>
- <string name="menu_list" msgid="7279285939892417279">"List view"</string>
- <string name="menu_sort" msgid="7677740407158414452">"Sort by"</string>
- <string name="menu_search" msgid="3816712084502856974">"Search"</string>
- <string name="menu_settings" msgid="8239065133341597825">"Storage settings"</string>
- <string name="menu_open" msgid="432922957274920903">"Open"</string>
- <string name="menu_save" msgid="2394743337684426338">"Save"</string>
- <string name="menu_share" msgid="3075149983979628146">"Share"</string>
- <string name="menu_delete" msgid="8138799623850614177">"Delete"</string>
- <string name="menu_select_all" msgid="8323579667348729928">"Select all"</string>
- <string name="menu_copy" msgid="3612326052677229148">"Copy to…"</string>
- <string name="menu_move" msgid="1828090633118079817">"Move to…"</string>
- <string name="menu_new_window" msgid="1226032889278727538">"New window"</string>
- <string name="menu_cut_to_clipboard" msgid="2467149185452488383">"Cut"</string>
- <string name="menu_copy_to_clipboard" msgid="489311381979634291">"Copy"</string>
- <string name="menu_paste_from_clipboard" msgid="2071583031180257091">"Paste"</string>
- <string name="menu_advanced_show" msgid="4693652895715631401">"Show internal storage"</string>
- <string name="menu_advanced_hide" msgid="4218809952721972589">"Hide internal storage"</string>
- <string name="menu_file_size_show" msgid="3240323619260823076">"Show file size"</string>
- <string name="menu_file_size_hide" msgid="8881975928502581042">"Hide file size"</string>
- <string name="button_select" msgid="527196987259139214">"select"</string>
- <string name="button_copy" msgid="8706475544635021302">"Copy"</string>
- <string name="button_move" msgid="2202666023104202232">"Move"</string>
- <string name="button_dismiss" msgid="3714065566893946085">"Dismiss"</string>
- <string name="button_retry" msgid="4392027584153752797">"Try again"</string>
- <string name="sort_name" msgid="9183560467917256779">"By name"</string>
- <string name="sort_date" msgid="586080032956151448">"By date modified"</string>
- <string name="sort_size" msgid="3350681319735474741">"By size"</string>
- <string name="drawer_open" msgid="4545466532430226949">"Show roots"</string>
- <string name="drawer_close" msgid="7602734368552123318">"Hide roots"</string>
- <string name="save_error" msgid="6167009778003223664">"Failed to save document"</string>
- <string name="create_error" msgid="3735649141335444215">"Failed to create folder"</string>
- <string name="query_error" msgid="5999895349602476581">"Can’t load content at the moment"</string>
- <string name="root_recent" msgid="4470053704320518133">"Recent"</string>
- <string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> free"</string>
- <string name="root_type_service" msgid="2178854894416775409">"Storage services"</string>
- <string name="root_type_shortcut" msgid="3318760609471618093">"Shortcuts"</string>
- <string name="root_type_device" msgid="7121342474653483538">"Devices"</string>
- <string name="root_type_apps" msgid="8838065367985945189">"More apps"</string>
- <string name="empty" msgid="7858882803708117596">"No items"</string>
- <string name="no_results" msgid="6622510343880730446">"No matches in %1$s"</string>
- <string name="toast_no_application" msgid="4632640357724698144">"Can’t open file"</string>
- <string name="toast_failed_delete" msgid="2180678019407244069">"Unable to delete some documents"</string>
- <string name="share_via" msgid="8966594246261344259">"Share via"</string>
- <string name="copy_notification_title" msgid="6374299806748219777">"Copying files"</string>
- <string name="move_notification_title" msgid="6193835179777284805">"Moving files"</string>
- <string name="delete_notification_title" msgid="3329403967712437496">"Deleting files"</string>
- <string name="copy_remaining" msgid="6283790937387975095">"<xliff:g id="DURATION">%s</xliff:g> left"</string>
- <plurals name="copy_begin" formatted="false" msgid="9071199452634086365">
- <item quantity="other">Copying <xliff:g id="COUNT_1">%1$d</xliff:g> files.</item>
- <item quantity="one">Copying <xliff:g id="COUNT_0">%1$d</xliff:g> file.</item>
- </plurals>
- <plurals name="move_begin" formatted="false" msgid="8430330882138871643">
- <item quantity="other">Moving <xliff:g id="COUNT_1">%1$d</xliff:g> files.</item>
- <item quantity="one">Moving <xliff:g id="COUNT_0">%1$d</xliff:g> file.</item>
- </plurals>
- <plurals name="deleting" formatted="false" msgid="5054338566802559411">
- <item quantity="other">Deleting <xliff:g id="COUNT_1">%1$d</xliff:g> files.</item>
- <item quantity="one">Deleting <xliff:g id="COUNT_0">%1$d</xliff:g> file.</item>
- </plurals>
- <string name="undo" msgid="7905788502491742328">"Undo"</string>
- <string name="copy_preparing" msgid="3896202461003039386">"Preparing for copy…"</string>
- <string name="move_preparing" msgid="2772219441375531410">"Preparing for move…"</string>
- <string name="delete_preparing" msgid="5655813182533491992">"Preparing to delete…"</string>
- <string name="delete_progress" msgid="5399405983046157222">"<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="7160447124922897689">
- <item quantity="other">Couldn’t copy <xliff:g id="COUNT_1">%1$d</xliff:g> files</item>
- <item quantity="one">Couldn’t copy <xliff:g id="COUNT_0">%1$d</xliff:g> file</item>
- </plurals>
- <plurals name="move_error_notification_title" formatted="false" msgid="2710901971014783012">
- <item quantity="other">Couldn’t move <xliff:g id="COUNT_1">%1$d</xliff:g> files</item>
- <item quantity="one">Couldn’t move <xliff:g id="COUNT_0">%1$d</xliff:g> file</item>
- </plurals>
- <plurals name="delete_error_notification_title" formatted="false" msgid="7228393157786591199">
- <item quantity="other">Couldn’t delete <xliff:g id="COUNT_1">%1$d</xliff:g> files</item>
- <item quantity="one">Couldn’t delete <xliff:g id="COUNT_0">%1$d</xliff:g> file</item>
- </plurals>
- <string name="notification_touch_for_details" msgid="6268189413228855582">"Tap to view details"</string>
- <string name="close" msgid="3043722427445528732">"Close"</string>
- <string name="copy_failure_alert_content" msgid="4563147454522476183">"These files weren’t copied: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="move_failure_alert_content" msgid="2635075788682922861">"These files weren’t moved: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="delete_failure_alert_content" msgid="892393767207938353">"These files weren’t deleted: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="copy_converted_warning_content" msgid="5753861488218674361">"These files were converted to another format: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <plurals name="clipboard_files_clipped" formatted="false" msgid="855459017537058539">
- <item quantity="other">Copied <xliff:g id="COUNT_1">%1$d</xliff:g> files to clipboard.</item>
- <item quantity="one">Copied <xliff:g id="COUNT_0">%1$d</xliff:g> file to clipboard.</item>
- </plurals>
- <string name="clipboard_files_cannot_paste" msgid="2878324825602325706">"Cannot paste the selected files in this location."</string>
- <string name="menu_rename" msgid="7678802479104285353">"Rename"</string>
- <string name="rename_error" msgid="4203041674883412606">"Failed to rename document"</string>
- <string name="menu_eject_root" msgid="2768224615494227325">"Eject"</string>
- <string name="notification_copy_files_converted_title" msgid="3153573223054275181">"Some files were converted"</string>
- <string name="open_external_dialog_request" msgid="5789329484285817629">"Grant <xliff:g id="APPNAME"><b>^1</b></xliff:g> access to <xliff:g id="DIRECTORY"><i>^2</i></xliff:g> directory on <xliff:g id="STORAGE"><i>^3</i></xliff:g>?"</string>
- <string name="open_external_dialog_request_primary_volume" msgid="6635562535713428688">"Grant <xliff:g id="APPNAME"><b>^1</b></xliff:g> access to <xliff:g id="DIRECTORY"><i>^2</i></xliff:g> directory?"</string>
- <string name="open_external_dialog_root_request" msgid="8899108702926347720">"Grant <xliff:g id="APPNAME"><b>^1</b></xliff:g> access to your data, including photos and videos, on <xliff:g id="STORAGE"><i>^2</i></xliff:g>?"</string>
- <string name="never_ask_again" msgid="4295278542972859268">"Don\'t ask again"</string>
- <string name="allow" msgid="7225948811296386551">"Allow"</string>
- <string name="deny" msgid="2081879885755434506">"Deny"</string>
- <plurals name="elements_selected" formatted="false" msgid="1376955402452875047">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> selected</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> selected</item>
- </plurals>
- <plurals name="elements_dragged" formatted="false" msgid="3727204615215602228">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> items</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> item</item>
- </plurals>
- <string name="delete_filename_confirmation_message" msgid="5312817725577537488">"Delete \"<xliff:g id="NAME">%1$s</xliff:g>\"?"</string>
- <string name="delete_foldername_confirmation_message" msgid="5885501832257285329">"Delete folder \"<xliff:g id="NAME">%1$s</xliff:g>\" and its contents?"</string>
- <plurals name="delete_files_confirmation_message" formatted="false" msgid="8417505791395471802">
- <item quantity="other">Delete <xliff:g id="COUNT_1">%1$d</xliff:g> files?</item>
- <item quantity="one">Delete <xliff:g id="COUNT_0">%1$d</xliff:g> file?</item>
- </plurals>
- <plurals name="delete_folders_confirmation_message" formatted="false" msgid="9185648028213507769">
- <item quantity="other">Delete <xliff:g id="COUNT_1">%1$d</xliff:g> folders and their contents?</item>
- <item quantity="one">Delete <xliff:g id="COUNT_0">%1$d</xliff:g> folder and its contents?</item>
- </plurals>
- <plurals name="delete_items_confirmation_message" formatted="false" msgid="5376214433530243459">
- <item quantity="other">Delete <xliff:g id="COUNT_1">%1$d</xliff:g> items?</item>
- <item quantity="one">Delete <xliff:g id="COUNT_0">%1$d</xliff:g> item?</item>
- </plurals>
-</resources>
diff --git a/packages/DocumentsUI/res/values-en-rIN/strings.xml b/packages/DocumentsUI/res/values-en-rIN/strings.xml
deleted file mode 100644
index f2b25b8..0000000
--- a/packages/DocumentsUI/res/values-en-rIN/strings.xml
+++ /dev/null
@@ -1,144 +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="app_label" msgid="1551050262492398204">"Files"</string>
- <string name="downloads_label" msgid="959113951084633612">"Downloads"</string>
- <string name="title_open" msgid="4353228937663917801">"Open from"</string>
- <string name="title_save" msgid="2433679664882857999">"Save to"</string>
- <string name="menu_create_dir" msgid="2547620241173881754">"New folder"</string>
- <string name="menu_grid" msgid="6878021334497835259">"Grid view"</string>
- <string name="menu_list" msgid="7279285939892417279">"List view"</string>
- <string name="menu_sort" msgid="7677740407158414452">"Sort by"</string>
- <string name="menu_search" msgid="3816712084502856974">"Search"</string>
- <string name="menu_settings" msgid="8239065133341597825">"Storage settings"</string>
- <string name="menu_open" msgid="432922957274920903">"Open"</string>
- <string name="menu_save" msgid="2394743337684426338">"Save"</string>
- <string name="menu_share" msgid="3075149983979628146">"Share"</string>
- <string name="menu_delete" msgid="8138799623850614177">"Delete"</string>
- <string name="menu_select_all" msgid="8323579667348729928">"Select all"</string>
- <string name="menu_copy" msgid="3612326052677229148">"Copy to…"</string>
- <string name="menu_move" msgid="1828090633118079817">"Move to…"</string>
- <string name="menu_new_window" msgid="1226032889278727538">"New window"</string>
- <string name="menu_cut_to_clipboard" msgid="2467149185452488383">"Cut"</string>
- <string name="menu_copy_to_clipboard" msgid="489311381979634291">"Copy"</string>
- <string name="menu_paste_from_clipboard" msgid="2071583031180257091">"Paste"</string>
- <string name="menu_advanced_show" msgid="4693652895715631401">"Show internal storage"</string>
- <string name="menu_advanced_hide" msgid="4218809952721972589">"Hide internal storage"</string>
- <string name="menu_file_size_show" msgid="3240323619260823076">"Show file size"</string>
- <string name="menu_file_size_hide" msgid="8881975928502581042">"Hide file size"</string>
- <string name="button_select" msgid="527196987259139214">"select"</string>
- <string name="button_copy" msgid="8706475544635021302">"Copy"</string>
- <string name="button_move" msgid="2202666023104202232">"Move"</string>
- <string name="button_dismiss" msgid="3714065566893946085">"Dismiss"</string>
- <string name="button_retry" msgid="4392027584153752797">"Try again"</string>
- <string name="sort_name" msgid="9183560467917256779">"By name"</string>
- <string name="sort_date" msgid="586080032956151448">"By date modified"</string>
- <string name="sort_size" msgid="3350681319735474741">"By size"</string>
- <string name="drawer_open" msgid="4545466532430226949">"Show roots"</string>
- <string name="drawer_close" msgid="7602734368552123318">"Hide roots"</string>
- <string name="save_error" msgid="6167009778003223664">"Failed to save document"</string>
- <string name="create_error" msgid="3735649141335444215">"Failed to create folder"</string>
- <string name="query_error" msgid="5999895349602476581">"Can’t load content at the moment"</string>
- <string name="root_recent" msgid="4470053704320518133">"Recent"</string>
- <string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> free"</string>
- <string name="root_type_service" msgid="2178854894416775409">"Storage services"</string>
- <string name="root_type_shortcut" msgid="3318760609471618093">"Shortcuts"</string>
- <string name="root_type_device" msgid="7121342474653483538">"Devices"</string>
- <string name="root_type_apps" msgid="8838065367985945189">"More apps"</string>
- <string name="empty" msgid="7858882803708117596">"No items"</string>
- <string name="no_results" msgid="6622510343880730446">"No matches in %1$s"</string>
- <string name="toast_no_application" msgid="4632640357724698144">"Can’t open file"</string>
- <string name="toast_failed_delete" msgid="2180678019407244069">"Unable to delete some documents"</string>
- <string name="share_via" msgid="8966594246261344259">"Share via"</string>
- <string name="copy_notification_title" msgid="6374299806748219777">"Copying files"</string>
- <string name="move_notification_title" msgid="6193835179777284805">"Moving files"</string>
- <string name="delete_notification_title" msgid="3329403967712437496">"Deleting files"</string>
- <string name="copy_remaining" msgid="6283790937387975095">"<xliff:g id="DURATION">%s</xliff:g> left"</string>
- <plurals name="copy_begin" formatted="false" msgid="9071199452634086365">
- <item quantity="other">Copying <xliff:g id="COUNT_1">%1$d</xliff:g> files.</item>
- <item quantity="one">Copying <xliff:g id="COUNT_0">%1$d</xliff:g> file.</item>
- </plurals>
- <plurals name="move_begin" formatted="false" msgid="8430330882138871643">
- <item quantity="other">Moving <xliff:g id="COUNT_1">%1$d</xliff:g> files.</item>
- <item quantity="one">Moving <xliff:g id="COUNT_0">%1$d</xliff:g> file.</item>
- </plurals>
- <plurals name="deleting" formatted="false" msgid="5054338566802559411">
- <item quantity="other">Deleting <xliff:g id="COUNT_1">%1$d</xliff:g> files.</item>
- <item quantity="one">Deleting <xliff:g id="COUNT_0">%1$d</xliff:g> file.</item>
- </plurals>
- <string name="undo" msgid="7905788502491742328">"Undo"</string>
- <string name="copy_preparing" msgid="3896202461003039386">"Preparing for copy…"</string>
- <string name="move_preparing" msgid="2772219441375531410">"Preparing for move…"</string>
- <string name="delete_preparing" msgid="5655813182533491992">"Preparing to delete…"</string>
- <string name="delete_progress" msgid="5399405983046157222">"<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="7160447124922897689">
- <item quantity="other">Couldn’t copy <xliff:g id="COUNT_1">%1$d</xliff:g> files</item>
- <item quantity="one">Couldn’t copy <xliff:g id="COUNT_0">%1$d</xliff:g> file</item>
- </plurals>
- <plurals name="move_error_notification_title" formatted="false" msgid="2710901971014783012">
- <item quantity="other">Couldn’t move <xliff:g id="COUNT_1">%1$d</xliff:g> files</item>
- <item quantity="one">Couldn’t move <xliff:g id="COUNT_0">%1$d</xliff:g> file</item>
- </plurals>
- <plurals name="delete_error_notification_title" formatted="false" msgid="7228393157786591199">
- <item quantity="other">Couldn’t delete <xliff:g id="COUNT_1">%1$d</xliff:g> files</item>
- <item quantity="one">Couldn’t delete <xliff:g id="COUNT_0">%1$d</xliff:g> file</item>
- </plurals>
- <string name="notification_touch_for_details" msgid="6268189413228855582">"Tap to view details"</string>
- <string name="close" msgid="3043722427445528732">"Close"</string>
- <string name="copy_failure_alert_content" msgid="4563147454522476183">"These files weren’t copied: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="move_failure_alert_content" msgid="2635075788682922861">"These files weren’t moved: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="delete_failure_alert_content" msgid="892393767207938353">"These files weren’t deleted: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="copy_converted_warning_content" msgid="5753861488218674361">"These files were converted to another format: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <plurals name="clipboard_files_clipped" formatted="false" msgid="855459017537058539">
- <item quantity="other">Copied <xliff:g id="COUNT_1">%1$d</xliff:g> files to clipboard.</item>
- <item quantity="one">Copied <xliff:g id="COUNT_0">%1$d</xliff:g> file to clipboard.</item>
- </plurals>
- <string name="clipboard_files_cannot_paste" msgid="2878324825602325706">"Cannot paste the selected files in this location."</string>
- <string name="menu_rename" msgid="7678802479104285353">"Rename"</string>
- <string name="rename_error" msgid="4203041674883412606">"Failed to rename document"</string>
- <string name="menu_eject_root" msgid="2768224615494227325">"Eject"</string>
- <string name="notification_copy_files_converted_title" msgid="3153573223054275181">"Some files were converted"</string>
- <string name="open_external_dialog_request" msgid="5789329484285817629">"Grant <xliff:g id="APPNAME"><b>^1</b></xliff:g> access to <xliff:g id="DIRECTORY"><i>^2</i></xliff:g> directory on <xliff:g id="STORAGE"><i>^3</i></xliff:g>?"</string>
- <string name="open_external_dialog_request_primary_volume" msgid="6635562535713428688">"Grant <xliff:g id="APPNAME"><b>^1</b></xliff:g> access to <xliff:g id="DIRECTORY"><i>^2</i></xliff:g> directory?"</string>
- <string name="open_external_dialog_root_request" msgid="8899108702926347720">"Grant <xliff:g id="APPNAME"><b>^1</b></xliff:g> access to your data, including photos and videos, on <xliff:g id="STORAGE"><i>^2</i></xliff:g>?"</string>
- <string name="never_ask_again" msgid="4295278542972859268">"Don\'t ask again"</string>
- <string name="allow" msgid="7225948811296386551">"Allow"</string>
- <string name="deny" msgid="2081879885755434506">"Deny"</string>
- <plurals name="elements_selected" formatted="false" msgid="1376955402452875047">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> selected</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> selected</item>
- </plurals>
- <plurals name="elements_dragged" formatted="false" msgid="3727204615215602228">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> items</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> item</item>
- </plurals>
- <string name="delete_filename_confirmation_message" msgid="5312817725577537488">"Delete \"<xliff:g id="NAME">%1$s</xliff:g>\"?"</string>
- <string name="delete_foldername_confirmation_message" msgid="5885501832257285329">"Delete folder \"<xliff:g id="NAME">%1$s</xliff:g>\" and its contents?"</string>
- <plurals name="delete_files_confirmation_message" formatted="false" msgid="8417505791395471802">
- <item quantity="other">Delete <xliff:g id="COUNT_1">%1$d</xliff:g> files?</item>
- <item quantity="one">Delete <xliff:g id="COUNT_0">%1$d</xliff:g> file?</item>
- </plurals>
- <plurals name="delete_folders_confirmation_message" formatted="false" msgid="9185648028213507769">
- <item quantity="other">Delete <xliff:g id="COUNT_1">%1$d</xliff:g> folders and their contents?</item>
- <item quantity="one">Delete <xliff:g id="COUNT_0">%1$d</xliff:g> folder and its contents?</item>
- </plurals>
- <plurals name="delete_items_confirmation_message" formatted="false" msgid="5376214433530243459">
- <item quantity="other">Delete <xliff:g id="COUNT_1">%1$d</xliff:g> items?</item>
- <item quantity="one">Delete <xliff:g id="COUNT_0">%1$d</xliff:g> item?</item>
- </plurals>
-</resources>
diff --git a/packages/DocumentsUI/res/values-es-rUS/strings.xml b/packages/DocumentsUI/res/values-es-rUS/strings.xml
deleted file mode 100644
index 1cd7428..0000000
--- a/packages/DocumentsUI/res/values-es-rUS/strings.xml
+++ /dev/null
@@ -1,144 +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="app_label" msgid="1551050262492398204">"Archivos"</string>
- <string name="downloads_label" msgid="959113951084633612">"Descargas"</string>
- <string name="title_open" msgid="4353228937663917801">"Abrir desde"</string>
- <string name="title_save" msgid="2433679664882857999">"Guardar en"</string>
- <string name="menu_create_dir" msgid="2547620241173881754">"Carpeta nueva"</string>
- <string name="menu_grid" msgid="6878021334497835259">"Vista de cuadrícula"</string>
- <string name="menu_list" msgid="7279285939892417279">"Vista de lista"</string>
- <string name="menu_sort" msgid="7677740407158414452">"Ordenar por"</string>
- <string name="menu_search" msgid="3816712084502856974">"Buscar"</string>
- <string name="menu_settings" msgid="8239065133341597825">"Configuración"</string>
- <string name="menu_open" msgid="432922957274920903">"Abrir"</string>
- <string name="menu_save" msgid="2394743337684426338">"Guardar"</string>
- <string name="menu_share" msgid="3075149983979628146">"Compartir"</string>
- <string name="menu_delete" msgid="8138799623850614177">"Eliminar"</string>
- <string name="menu_select_all" msgid="8323579667348729928">"Seleccionar todo"</string>
- <string name="menu_copy" msgid="3612326052677229148">"Copiar a…"</string>
- <string name="menu_move" msgid="1828090633118079817">"Mover a…"</string>
- <string name="menu_new_window" msgid="1226032889278727538">"Ventana nueva"</string>
- <string name="menu_cut_to_clipboard" msgid="2467149185452488383">"Cortar"</string>
- <string name="menu_copy_to_clipboard" msgid="489311381979634291">"Copiar"</string>
- <string name="menu_paste_from_clipboard" msgid="2071583031180257091">"Pegar"</string>
- <string name="menu_advanced_show" msgid="4693652895715631401">"Mostrar almacen. interno"</string>
- <string name="menu_advanced_hide" msgid="4218809952721972589">"Ocultar almacen. interno"</string>
- <string name="menu_file_size_show" msgid="3240323619260823076">"Mostrar tamaño archivos"</string>
- <string name="menu_file_size_hide" msgid="8881975928502581042">"Ocultar tamaño archivos"</string>
- <string name="button_select" msgid="527196987259139214">"Seleccionar"</string>
- <string name="button_copy" msgid="8706475544635021302">"Copiar"</string>
- <string name="button_move" msgid="2202666023104202232">"Mover"</string>
- <string name="button_dismiss" msgid="3714065566893946085">"Descartar"</string>
- <string name="button_retry" msgid="4392027584153752797">"Reintentar"</string>
- <string name="sort_name" msgid="9183560467917256779">"Por nombre"</string>
- <string name="sort_date" msgid="586080032956151448">"Por fecha de modificación"</string>
- <string name="sort_size" msgid="3350681319735474741">"Por tamaño"</string>
- <string name="drawer_open" msgid="4545466532430226949">"Mostrar raíces"</string>
- <string name="drawer_close" msgid="7602734368552123318">"Ocultar raíces"</string>
- <string name="save_error" msgid="6167009778003223664">"Error al guardar el documento"</string>
- <string name="create_error" msgid="3735649141335444215">"Error al crear la carpeta"</string>
- <string name="query_error" msgid="5999895349602476581">"No se puede cargar el contenido en este momento"</string>
- <string name="root_recent" msgid="4470053704320518133">"Recientes"</string>
- <string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> de espacio libre"</string>
- <string name="root_type_service" msgid="2178854894416775409">"Almacenamiento"</string>
- <string name="root_type_shortcut" msgid="3318760609471618093">"Accesos directos"</string>
- <string name="root_type_device" msgid="7121342474653483538">"Dispositivos"</string>
- <string name="root_type_apps" msgid="8838065367985945189">"Más aplicaciones"</string>
- <string name="empty" msgid="7858882803708117596">"Sin elementos"</string>
- <string name="no_results" msgid="6622510343880730446">"No hay coincidencias en %1$s"</string>
- <string name="toast_no_application" msgid="4632640357724698144">"No se puede abrir el archivo"</string>
- <string name="toast_failed_delete" msgid="2180678019407244069">"No es posible eliminar algunos documentos."</string>
- <string name="share_via" msgid="8966594246261344259">"Compartir mediante"</string>
- <string name="copy_notification_title" msgid="6374299806748219777">"Copiando archivos"</string>
- <string name="move_notification_title" msgid="6193835179777284805">"Moviendo archivos"</string>
- <string name="delete_notification_title" msgid="3329403967712437496">"Borrando los archivos"</string>
- <string name="copy_remaining" msgid="6283790937387975095">"Faltan <xliff:g id="DURATION">%s</xliff:g>."</string>
- <plurals name="copy_begin" formatted="false" msgid="9071199452634086365">
- <item quantity="other">Copiando <xliff:g id="COUNT_1">%1$d</xliff:g> archivos</item>
- <item quantity="one">Copiando <xliff:g id="COUNT_0">%1$d</xliff:g> archivo</item>
- </plurals>
- <plurals name="move_begin" formatted="false" msgid="8430330882138871643">
- <item quantity="other">Moviendo <xliff:g id="COUNT_1">%1$d</xliff:g> archivos</item>
- <item quantity="one">Moviendo <xliff:g id="COUNT_0">%1$d</xliff:g> archivo</item>
- </plurals>
- <plurals name="deleting" formatted="false" msgid="5054338566802559411">
- <item quantity="other">Se están borrando <xliff:g id="COUNT_1">%1$d</xliff:g> archivos.</item>
- <item quantity="one">Se está borrando <xliff:g id="COUNT_0">%1$d</xliff:g> archivo.</item>
- </plurals>
- <string name="undo" msgid="7905788502491742328">"Deshacer"</string>
- <string name="copy_preparing" msgid="3896202461003039386">"Preparando para copiar…"</string>
- <string name="move_preparing" msgid="2772219441375531410">"Preparación para mover archivos…"</string>
- <string name="delete_preparing" msgid="5655813182533491992">"Preparando para borrar…"</string>
- <string name="delete_progress" msgid="5399405983046157222">"<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="7160447124922897689">
- <item quantity="other">No se pudieron copiar <xliff:g id="COUNT_1">%1$d</xliff:g> archivos</item>
- <item quantity="one">No se pudo copiar <xliff:g id="COUNT_0">%1$d</xliff:g> archivo</item>
- </plurals>
- <plurals name="move_error_notification_title" formatted="false" msgid="2710901971014783012">
- <item quantity="other">No se pudieron trasladar <xliff:g id="COUNT_1">%1$d</xliff:g> archivos</item>
- <item quantity="one">No se pudo trasladar <xliff:g id="COUNT_0">%1$d</xliff:g> archivo</item>
- </plurals>
- <plurals name="delete_error_notification_title" formatted="false" msgid="7228393157786591199">
- <item quantity="other">No se pudieron borrar <xliff:g id="COUNT_1">%1$d</xliff:g> archivos</item>
- <item quantity="one">No se pudo borrar <xliff:g id="COUNT_0">%1$d</xliff:g> archivo</item>
- </plurals>
- <string name="notification_touch_for_details" msgid="6268189413228855582">"Presiona para ver los detalles"</string>
- <string name="close" msgid="3043722427445528732">"Cerrar"</string>
- <string name="copy_failure_alert_content" msgid="4563147454522476183">"Los siguientes archivos no se pudieron copiar: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="move_failure_alert_content" msgid="2635075788682922861">"Los siguientes archivos no se trasladaron: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="delete_failure_alert_content" msgid="892393767207938353">"Los siguientes archivos no se pudieron borrar: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="copy_converted_warning_content" msgid="5753861488218674361">"Estos archivos se convirtieron a otro formato: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <plurals name="clipboard_files_clipped" formatted="false" msgid="855459017537058539">
- <item quantity="other">Se copiaron <xliff:g id="COUNT_1">%1$d</xliff:g> archivos al portapapeles.</item>
- <item quantity="one">Se copió <xliff:g id="COUNT_0">%1$d</xliff:g> archivo al portapapeles.</item>
- </plurals>
- <string name="clipboard_files_cannot_paste" msgid="2878324825602325706">"No se pueden pegar los archivos seleccionados en esta ubicación."</string>
- <string name="menu_rename" msgid="7678802479104285353">"Cambiar nombre"</string>
- <string name="rename_error" msgid="4203041674883412606">"No se pudo cambiar el nombre del documento"</string>
- <string name="menu_eject_root" msgid="2768224615494227325">"Expulsar"</string>
- <string name="notification_copy_files_converted_title" msgid="3153573223054275181">"Se convirtieron algunos archivos"</string>
- <string name="open_external_dialog_request" msgid="5789329484285817629">"¿Otorgar acceso a <xliff:g id="APPNAME"><b>^1</b></xliff:g> al directorio <xliff:g id="DIRECTORY"><i>^2</i></xliff:g> en <xliff:g id="STORAGE"><i>^3</i></xliff:g>?"</string>
- <string name="open_external_dialog_request_primary_volume" msgid="6635562535713428688">"¿Quieres otorgar acceso a <xliff:g id="APPNAME"><b>^1</b></xliff:g> al directorio <xliff:g id="DIRECTORY"><i>^2</i></xliff:g>?"</string>
- <string name="open_external_dialog_root_request" msgid="8899108702926347720">"¿Quieres otorgar acceso a la app de <xliff:g id="APPNAME"><b>^1</b></xliff:g> a tus datos, incluidas tus fotos y videos en <xliff:g id="STORAGE"><i>^2</i></xliff:g>?"</string>
- <string name="never_ask_again" msgid="4295278542972859268">"No volver a preguntar"</string>
- <string name="allow" msgid="7225948811296386551">"Permitir"</string>
- <string name="deny" msgid="2081879885755434506">"Denegar"</string>
- <plurals name="elements_selected" formatted="false" msgid="1376955402452875047">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> elementos seleccionados</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> elemento seleccionado</item>
- </plurals>
- <plurals name="elements_dragged" formatted="false" msgid="3727204615215602228">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> elementos</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> elemento</item>
- </plurals>
- <string name="delete_filename_confirmation_message" msgid="5312817725577537488">"¿Deseas borrar \"<xliff:g id="NAME">%1$s</xliff:g>\"?"</string>
- <string name="delete_foldername_confirmation_message" msgid="5885501832257285329">"¿Deseas borrar la carpeta \"<xliff:g id="NAME">%1$s</xliff:g>\" y su contenido?"</string>
- <plurals name="delete_files_confirmation_message" formatted="false" msgid="8417505791395471802">
- <item quantity="other">¿Deseas borrar <xliff:g id="COUNT_1">%1$d</xliff:g> archivos?</item>
- <item quantity="one">¿Deseas borrar <xliff:g id="COUNT_0">%1$d</xliff:g> archivo?</item>
- </plurals>
- <plurals name="delete_folders_confirmation_message" formatted="false" msgid="9185648028213507769">
- <item quantity="other">¿Deseas borrar <xliff:g id="COUNT_1">%1$d</xliff:g> carpetas y su contenido?</item>
- <item quantity="one">¿Deseas borrar <xliff:g id="COUNT_0">%1$d</xliff:g> carpeta y su contenido?</item>
- </plurals>
- <plurals name="delete_items_confirmation_message" formatted="false" msgid="5376214433530243459">
- <item quantity="other">¿Deseas borrar <xliff:g id="COUNT_1">%1$d</xliff:g> elementos?</item>
- <item quantity="one">¿Deseas borrar <xliff:g id="COUNT_0">%1$d</xliff:g> elemento?</item>
- </plurals>
-</resources>
diff --git a/packages/DocumentsUI/res/values-es/strings.xml b/packages/DocumentsUI/res/values-es/strings.xml
deleted file mode 100644
index e3de716..0000000
--- a/packages/DocumentsUI/res/values-es/strings.xml
+++ /dev/null
@@ -1,144 +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="app_label" msgid="1551050262492398204">"Archivos"</string>
- <string name="downloads_label" msgid="959113951084633612">"Descargas"</string>
- <string name="title_open" msgid="4353228937663917801">"Abrir desde"</string>
- <string name="title_save" msgid="2433679664882857999">"Guardar en"</string>
- <string name="menu_create_dir" msgid="2547620241173881754">"Nueva carpeta"</string>
- <string name="menu_grid" msgid="6878021334497835259">"Vista de cuadrícula"</string>
- <string name="menu_list" msgid="7279285939892417279">"Vista de lista"</string>
- <string name="menu_sort" msgid="7677740407158414452">"Ordenar por"</string>
- <string name="menu_search" msgid="3816712084502856974">"Buscar"</string>
- <string name="menu_settings" msgid="8239065133341597825">"Ajustes de almacenamiento"</string>
- <string name="menu_open" msgid="432922957274920903">"Abrir"</string>
- <string name="menu_save" msgid="2394743337684426338">"Guardar"</string>
- <string name="menu_share" msgid="3075149983979628146">"Compartir"</string>
- <string name="menu_delete" msgid="8138799623850614177">"Eliminar"</string>
- <string name="menu_select_all" msgid="8323579667348729928">"Seleccionar todo"</string>
- <string name="menu_copy" msgid="3612326052677229148">"Copiar en…"</string>
- <string name="menu_move" msgid="1828090633118079817">"Mover a…"</string>
- <string name="menu_new_window" msgid="1226032889278727538">"Nueva ventana"</string>
- <string name="menu_cut_to_clipboard" msgid="2467149185452488383">"Cortar"</string>
- <string name="menu_copy_to_clipboard" msgid="489311381979634291">"Copiar"</string>
- <string name="menu_paste_from_clipboard" msgid="2071583031180257091">"Pegar"</string>
- <string name="menu_advanced_show" msgid="4693652895715631401">"Mostrar almac. interno"</string>
- <string name="menu_advanced_hide" msgid="4218809952721972589">"Ocultar almac. interno"</string>
- <string name="menu_file_size_show" msgid="3240323619260823076">"Mostrar tamaño del archivo"</string>
- <string name="menu_file_size_hide" msgid="8881975928502581042">"Ocultar tamaño del archivo"</string>
- <string name="button_select" msgid="527196987259139214">"Seleccionar"</string>
- <string name="button_copy" msgid="8706475544635021302">"Copiar"</string>
- <string name="button_move" msgid="2202666023104202232">"Mover"</string>
- <string name="button_dismiss" msgid="3714065566893946085">"Descartar"</string>
- <string name="button_retry" msgid="4392027584153752797">"Reintentar"</string>
- <string name="sort_name" msgid="9183560467917256779">"Por nombre"</string>
- <string name="sort_date" msgid="586080032956151448">"Por fecha de modificación"</string>
- <string name="sort_size" msgid="3350681319735474741">"Por tamaño"</string>
- <string name="drawer_open" msgid="4545466532430226949">"Mostrar raíces"</string>
- <string name="drawer_close" msgid="7602734368552123318">"Ocultar raíces"</string>
- <string name="save_error" msgid="6167009778003223664">"Error al guardar documento"</string>
- <string name="create_error" msgid="3735649141335444215">"Error al crear la carpeta"</string>
- <string name="query_error" msgid="5999895349602476581">"No se puede cargar contenido en este momento"</string>
- <string name="root_recent" msgid="4470053704320518133">"Reciente"</string>
- <string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> de espacio libre"</string>
- <string name="root_type_service" msgid="2178854894416775409">"Servicios almacenamiento"</string>
- <string name="root_type_shortcut" msgid="3318760609471618093">"Accesos directos"</string>
- <string name="root_type_device" msgid="7121342474653483538">"Dispositivos"</string>
- <string name="root_type_apps" msgid="8838065367985945189">"Más aplicaciones"</string>
- <string name="empty" msgid="7858882803708117596">"No hay elementos"</string>
- <string name="no_results" msgid="6622510343880730446">"Sin coincidencias en %1$s"</string>
- <string name="toast_no_application" msgid="4632640357724698144">"No se puede abrir el archivo"</string>
- <string name="toast_failed_delete" msgid="2180678019407244069">"No es posible eliminar algunos documentos"</string>
- <string name="share_via" msgid="8966594246261344259">"Compartir a través de"</string>
- <string name="copy_notification_title" msgid="6374299806748219777">"Copiando archivos"</string>
- <string name="move_notification_title" msgid="6193835179777284805">"Moviendo archivos"</string>
- <string name="delete_notification_title" msgid="3329403967712437496">"Eliminando archivos"</string>
- <string name="copy_remaining" msgid="6283790937387975095">"Tiempo restante: <xliff:g id="DURATION">%s</xliff:g>"</string>
- <plurals name="copy_begin" formatted="false" msgid="9071199452634086365">
- <item quantity="other">Copiando <xliff:g id="COUNT_1">%1$d</xliff:g> archivos.</item>
- <item quantity="one">Copiando <xliff:g id="COUNT_0">%1$d</xliff:g> archivo.</item>
- </plurals>
- <plurals name="move_begin" formatted="false" msgid="8430330882138871643">
- <item quantity="other">Moviendo <xliff:g id="COUNT_1">%1$d</xliff:g> archivos.</item>
- <item quantity="one">Moviendo <xliff:g id="COUNT_0">%1$d</xliff:g> archivo.</item>
- </plurals>
- <plurals name="deleting" formatted="false" msgid="5054338566802559411">
- <item quantity="other">Eliminando <xliff:g id="COUNT_1">%1$d</xliff:g> archivos.</item>
- <item quantity="one">Eliminando <xliff:g id="COUNT_0">%1$d</xliff:g> archivo.</item>
- </plurals>
- <string name="undo" msgid="7905788502491742328">"Deshacer"</string>
- <string name="copy_preparing" msgid="3896202461003039386">"Preparando para copiar..."</string>
- <string name="move_preparing" msgid="2772219441375531410">"Preparando para mover…"</string>
- <string name="delete_preparing" msgid="5655813182533491992">"Preparando para eliminar…"</string>
- <string name="delete_progress" msgid="5399405983046157222">"<xliff:g id="COUNT_0">%1$d</xliff:g> de <xliff:g id="TOTALCOUNT">%2$d</xliff:g>"</string>
- <plurals name="copy_error_notification_title" formatted="false" msgid="7160447124922897689">
- <item quantity="other">No se han podido copiar <xliff:g id="COUNT_1">%1$d</xliff:g> archivos</item>
- <item quantity="one">No se ha podido copiar <xliff:g id="COUNT_0">%1$d</xliff:g> archivo</item>
- </plurals>
- <plurals name="move_error_notification_title" formatted="false" msgid="2710901971014783012">
- <item quantity="other">No se han podido mover <xliff:g id="COUNT_1">%1$d</xliff:g> archivos</item>
- <item quantity="one">No se ha podido mover <xliff:g id="COUNT_0">%1$d</xliff:g> archivo</item>
- </plurals>
- <plurals name="delete_error_notification_title" formatted="false" msgid="7228393157786591199">
- <item quantity="other">No se han podido eliminar <xliff:g id="COUNT_1">%1$d</xliff:g> archivos</item>
- <item quantity="one">No se ha podido eliminar <xliff:g id="COUNT_0">%1$d</xliff:g> archivo</item>
- </plurals>
- <string name="notification_touch_for_details" msgid="6268189413228855582">"Toca para ver detalles"</string>
- <string name="close" msgid="3043722427445528732">"Cerrar"</string>
- <string name="copy_failure_alert_content" msgid="4563147454522476183">"Archivos que no se han copiado: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="move_failure_alert_content" msgid="2635075788682922861">"Archivos que no se han movido: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="delete_failure_alert_content" msgid="892393767207938353">"Archivos que no se han eliminado: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="copy_converted_warning_content" msgid="5753861488218674361">"Estos archivos se han convertido a otro formato: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <plurals name="clipboard_files_clipped" formatted="false" msgid="855459017537058539">
- <item quantity="other">Se han copiado <xliff:g id="COUNT_1">%1$d</xliff:g> archivos al portapapeles.</item>
- <item quantity="one">Se ha copiado <xliff:g id="COUNT_0">%1$d</xliff:g> archivo al portapapeles.</item>
- </plurals>
- <string name="clipboard_files_cannot_paste" msgid="2878324825602325706">"Los archivos seleccionados no se pueden pegar en esta ubicación."</string>
- <string name="menu_rename" msgid="7678802479104285353">"Cambiar nombre"</string>
- <string name="rename_error" msgid="4203041674883412606">"Error al cambiar el nombre del documento"</string>
- <string name="menu_eject_root" msgid="2768224615494227325">"Expulsar"</string>
- <string name="notification_copy_files_converted_title" msgid="3153573223054275181">"Se han convertido algunos archivos"</string>
- <string name="open_external_dialog_request" msgid="5789329484285817629">"¿Permitir que <xliff:g id="APPNAME"><b>^1</b></xliff:g> acceda al directorio <xliff:g id="DIRECTORY"><i>^2</i></xliff:g> (<xliff:g id="STORAGE"><i>^3</i></xliff:g>)?"</string>
- <string name="open_external_dialog_request_primary_volume" msgid="6635562535713428688">"¿Permitir que <xliff:g id="APPNAME"><b>^1</b></xliff:g> acceda al directorio <xliff:g id="DIRECTORY"><i>^2</i></xliff:g>?"</string>
- <string name="open_external_dialog_root_request" msgid="8899108702926347720">"¿Permitir que <xliff:g id="APPNAME"><b>^1</b></xliff:g> acceda a tus datos, incluidos los vídeos y las fotos, de <xliff:g id="STORAGE"><i>^2</i></xliff:g>?"</string>
- <string name="never_ask_again" msgid="4295278542972859268">"No volver a preguntar"</string>
- <string name="allow" msgid="7225948811296386551">"Permitir"</string>
- <string name="deny" msgid="2081879885755434506">"Denegar"</string>
- <plurals name="elements_selected" formatted="false" msgid="1376955402452875047">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> seleccionados</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> seleccionado</item>
- </plurals>
- <plurals name="elements_dragged" formatted="false" msgid="3727204615215602228">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> elementos</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> elemento</item>
- </plurals>
- <string name="delete_filename_confirmation_message" msgid="5312817725577537488">"¿Eliminar <xliff:g id="NAME">%1$s</xliff:g>?"</string>
- <string name="delete_foldername_confirmation_message" msgid="5885501832257285329">"¿Eliminar la carpeta <xliff:g id="NAME">%1$s</xliff:g> y su contenido?"</string>
- <plurals name="delete_files_confirmation_message" formatted="false" msgid="8417505791395471802">
- <item quantity="other">¿Eliminar <xliff:g id="COUNT_1">%1$d</xliff:g> archivos?</item>
- <item quantity="one">¿Eliminar <xliff:g id="COUNT_0">%1$d</xliff:g> archivo?</item>
- </plurals>
- <plurals name="delete_folders_confirmation_message" formatted="false" msgid="9185648028213507769">
- <item quantity="other">¿Eliminar <xliff:g id="COUNT_1">%1$d</xliff:g> carpetas y su contenido?</item>
- <item quantity="one">¿Eliminar <xliff:g id="COUNT_0">%1$d</xliff:g> carpeta y su contenido?</item>
- </plurals>
- <plurals name="delete_items_confirmation_message" formatted="false" msgid="5376214433530243459">
- <item quantity="other">¿Eliminar <xliff:g id="COUNT_1">%1$d</xliff:g> elementos?</item>
- <item quantity="one">¿Eliminar <xliff:g id="COUNT_0">%1$d</xliff:g> elemento?</item>
- </plurals>
-</resources>
diff --git a/packages/DocumentsUI/res/values-et-rEE/strings.xml b/packages/DocumentsUI/res/values-et-rEE/strings.xml
deleted file mode 100644
index 91f9204..0000000
--- a/packages/DocumentsUI/res/values-et-rEE/strings.xml
+++ /dev/null
@@ -1,144 +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="app_label" msgid="1551050262492398204">"Failid"</string>
- <string name="downloads_label" msgid="959113951084633612">"Allalaadimised"</string>
- <string name="title_open" msgid="4353228937663917801">"Ava asukohast:"</string>
- <string name="title_save" msgid="2433679664882857999">"Salvesta:"</string>
- <string name="menu_create_dir" msgid="2547620241173881754">"Uus kaust"</string>
- <string name="menu_grid" msgid="6878021334497835259">"Ruudustikkuva"</string>
- <string name="menu_list" msgid="7279285939892417279">"Loendikuva"</string>
- <string name="menu_sort" msgid="7677740407158414452">"Sortimisalus"</string>
- <string name="menu_search" msgid="3816712084502856974">"Otsing"</string>
- <string name="menu_settings" msgid="8239065133341597825">"Salvestusruumi seaded"</string>
- <string name="menu_open" msgid="432922957274920903">"Ava"</string>
- <string name="menu_save" msgid="2394743337684426338">"Salvesta"</string>
- <string name="menu_share" msgid="3075149983979628146">"Jaga"</string>
- <string name="menu_delete" msgid="8138799623850614177">"Kustuta"</string>
- <string name="menu_select_all" msgid="8323579667348729928">"Vali kõik"</string>
- <string name="menu_copy" msgid="3612326052677229148">"Kopeeri asukohta..."</string>
- <string name="menu_move" msgid="1828090633118079817">"Teisalda asukohta..."</string>
- <string name="menu_new_window" msgid="1226032889278727538">"Uus aken"</string>
- <string name="menu_cut_to_clipboard" msgid="2467149185452488383">"Lõika"</string>
- <string name="menu_copy_to_clipboard" msgid="489311381979634291">"Kopeeri"</string>
- <string name="menu_paste_from_clipboard" msgid="2071583031180257091">"Kleebi"</string>
- <string name="menu_advanced_show" msgid="4693652895715631401">"Kuva sis. salvestusruum"</string>
- <string name="menu_advanced_hide" msgid="4218809952721972589">"Peida sis. salvestusruum"</string>
- <string name="menu_file_size_show" msgid="3240323619260823076">"Kuva faili suurus"</string>
- <string name="menu_file_size_hide" msgid="8881975928502581042">"Peida faili suurus"</string>
- <string name="button_select" msgid="527196987259139214">"Vali"</string>
- <string name="button_copy" msgid="8706475544635021302">"Kopeeri"</string>
- <string name="button_move" msgid="2202666023104202232">"Teisalda"</string>
- <string name="button_dismiss" msgid="3714065566893946085">"Loobu"</string>
- <string name="button_retry" msgid="4392027584153752797">"Proovi uuesti"</string>
- <string name="sort_name" msgid="9183560467917256779">"Nime järgi"</string>
- <string name="sort_date" msgid="586080032956151448">"Muutmiskuupäeva järgi"</string>
- <string name="sort_size" msgid="3350681319735474741">"Suuruse järgi"</string>
- <string name="drawer_open" msgid="4545466532430226949">"Kuva juured"</string>
- <string name="drawer_close" msgid="7602734368552123318">"Peida juured"</string>
- <string name="save_error" msgid="6167009778003223664">"Dokumendi salvestamine ebaõnnestus"</string>
- <string name="create_error" msgid="3735649141335444215">"Kausta loomine ebaõnnestus"</string>
- <string name="query_error" msgid="5999895349602476581">"Sisu ei saa praegu laadida"</string>
- <string name="root_recent" msgid="4470053704320518133">"Hiljutised"</string>
- <string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> on vaba"</string>
- <string name="root_type_service" msgid="2178854894416775409">"Mäluruumi teenused"</string>
- <string name="root_type_shortcut" msgid="3318760609471618093">"Otseteed"</string>
- <string name="root_type_device" msgid="7121342474653483538">"Seadmed"</string>
- <string name="root_type_apps" msgid="8838065367985945189">"Rohkem rakendusi"</string>
- <string name="empty" msgid="7858882803708117596">"Üksusi ei ole"</string>
- <string name="no_results" msgid="6622510343880730446">"Otsing %1$s ei andnud vasteid"</string>
- <string name="toast_no_application" msgid="4632640357724698144">"Faili ei saa avada"</string>
- <string name="toast_failed_delete" msgid="2180678019407244069">"Mõnda dokumenti ei õnnestu kustutada"</string>
- <string name="share_via" msgid="8966594246261344259">"Jagage teenusega"</string>
- <string name="copy_notification_title" msgid="6374299806748219777">"Failide kopeerimine"</string>
- <string name="move_notification_title" msgid="6193835179777284805">"Failide teisaldamine"</string>
- <string name="delete_notification_title" msgid="3329403967712437496">"Failide kustutamine"</string>
- <string name="copy_remaining" msgid="6283790937387975095">"Jäänud on <xliff:g id="DURATION">%s</xliff:g>"</string>
- <plurals name="copy_begin" formatted="false" msgid="9071199452634086365">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> faili kopeerimine.</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> faili kopeerimine.</item>
- </plurals>
- <plurals name="move_begin" formatted="false" msgid="8430330882138871643">
- <item quantity="other">Teisaldatakse <xliff:g id="COUNT_1">%1$d</xliff:g> faili.</item>
- <item quantity="one">Teisaldatakse <xliff:g id="COUNT_0">%1$d</xliff:g> fail.</item>
- </plurals>
- <plurals name="deleting" formatted="false" msgid="5054338566802559411">
- <item quantity="other">Kustutatakse <xliff:g id="COUNT_1">%1$d</xliff:g> faili.</item>
- <item quantity="one">Kustutatakse <xliff:g id="COUNT_0">%1$d</xliff:g> fail.</item>
- </plurals>
- <string name="undo" msgid="7905788502491742328">"Võta tagasi"</string>
- <string name="copy_preparing" msgid="3896202461003039386">"Kopeerimise ettevalmistamine …"</string>
- <string name="move_preparing" msgid="2772219441375531410">"Teisaldamise ettevalmistamine …"</string>
- <string name="delete_preparing" msgid="5655813182533491992">"Kustutamise ettevalmistamine …"</string>
- <string name="delete_progress" msgid="5399405983046157222">"<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="7160447124922897689">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> faili ei saanud kopeerida</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> faili ei saanud kopeerida</item>
- </plurals>
- <plurals name="move_error_notification_title" formatted="false" msgid="2710901971014783012">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> faili ei saanud teisaldada</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> faili ei saanud teisaldada</item>
- </plurals>
- <plurals name="delete_error_notification_title" formatted="false" msgid="7228393157786591199">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> faili ei saanud kustutada</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> faili ei saanud kustutada</item>
- </plurals>
- <string name="notification_touch_for_details" msgid="6268189413228855582">"Puudutage üksikasjade vaatamiseks"</string>
- <string name="close" msgid="3043722427445528732">"Sule"</string>
- <string name="copy_failure_alert_content" msgid="4563147454522476183">"Neid faile ei kopeeritud: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="move_failure_alert_content" msgid="2635075788682922861">"Neid faile ei teisaldatud: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="delete_failure_alert_content" msgid="892393767207938353">"Neid faile ei kustutatud: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="copy_converted_warning_content" msgid="5753861488218674361">"Need failid teisendati teise vormingusse: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <plurals name="clipboard_files_clipped" formatted="false" msgid="855459017537058539">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> faili kopeeriti lõikelauale.</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> fail kopeeriti lõikelauale.</item>
- </plurals>
- <string name="clipboard_files_cannot_paste" msgid="2878324825602325706">"Valitud faile ei saa sellesse asukohta kleepida."</string>
- <string name="menu_rename" msgid="7678802479104285353">"Nimeta ümber"</string>
- <string name="rename_error" msgid="4203041674883412606">"Dokumendi ümbernimetamine ebaõnnestus"</string>
- <string name="menu_eject_root" msgid="2768224615494227325">"Eemalda"</string>
- <string name="notification_copy_files_converted_title" msgid="3153573223054275181">"Mõned failid teisendati"</string>
- <string name="open_external_dialog_request" msgid="5789329484285817629">"Kas anda rakendusele <xliff:g id="APPNAME"><b>^1</b></xliff:g> juurdepääs kataloogile <xliff:g id="DIRECTORY"><i>^2</i></xliff:g> salvestusruumis <xliff:g id="STORAGE"><i>^3</i></xliff:g>?"</string>
- <string name="open_external_dialog_request_primary_volume" msgid="6635562535713428688">"Kas anda rakendusele <xliff:g id="APPNAME"><b>^1</b></xliff:g> juurdepääs kataloogile <xliff:g id="DIRECTORY"><i>^2</i></xliff:g>?"</string>
- <string name="open_external_dialog_root_request" msgid="8899108702926347720">"Kas anda rakendusele <xliff:g id="APPNAME"><b>^1</b></xliff:g> juurdepääs teie andmetele (sh fotod ja videod) salvestusruumis <xliff:g id="STORAGE"><i>^2</i></xliff:g>?"</string>
- <string name="never_ask_again" msgid="4295278542972859268">"Ära enam küsi"</string>
- <string name="allow" msgid="7225948811296386551">"Luba"</string>
- <string name="deny" msgid="2081879885755434506">"Keela"</string>
- <plurals name="elements_selected" formatted="false" msgid="1376955402452875047">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> on valitud</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> on valitud</item>
- </plurals>
- <plurals name="elements_dragged" formatted="false" msgid="3727204615215602228">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> üksust</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> üksus</item>
- </plurals>
- <string name="delete_filename_confirmation_message" msgid="5312817725577537488">"Kas kustutada fail „<xliff:g id="NAME">%1$s</xliff:g>”?"</string>
- <string name="delete_foldername_confirmation_message" msgid="5885501832257285329">"Kas kustutada kaust „<xliff:g id="NAME">%1$s</xliff:g>” ja selle sisu?"</string>
- <plurals name="delete_files_confirmation_message" formatted="false" msgid="8417505791395471802">
- <item quantity="other">Kas kustutada <xliff:g id="COUNT_1">%1$d</xliff:g> faili?</item>
- <item quantity="one">Kas kustutada <xliff:g id="COUNT_0">%1$d</xliff:g> fail?</item>
- </plurals>
- <plurals name="delete_folders_confirmation_message" formatted="false" msgid="9185648028213507769">
- <item quantity="other">Kas kustutada <xliff:g id="COUNT_1">%1$d</xliff:g> kausta ja nende sisu?</item>
- <item quantity="one">Kas kustutada <xliff:g id="COUNT_0">%1$d</xliff:g> kaust ja selle sisu?</item>
- </plurals>
- <plurals name="delete_items_confirmation_message" formatted="false" msgid="5376214433530243459">
- <item quantity="other">Kas kustutada <xliff:g id="COUNT_1">%1$d</xliff:g> üksust?</item>
- <item quantity="one">Kas kustutada <xliff:g id="COUNT_0">%1$d</xliff:g> üksus?</item>
- </plurals>
-</resources>
diff --git a/packages/DocumentsUI/res/values-eu-rES/strings.xml b/packages/DocumentsUI/res/values-eu-rES/strings.xml
deleted file mode 100644
index 34db965..0000000
--- a/packages/DocumentsUI/res/values-eu-rES/strings.xml
+++ /dev/null
@@ -1,144 +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="app_label" msgid="1551050262492398204">"Fitxategiak"</string>
- <string name="downloads_label" msgid="959113951084633612">"Deskargak"</string>
- <string name="title_open" msgid="4353228937663917801">"Ireki hemendik"</string>
- <string name="title_save" msgid="2433679664882857999">"Gorde hemen"</string>
- <string name="menu_create_dir" msgid="2547620241173881754">"Karpeta berria"</string>
- <string name="menu_grid" msgid="6878021334497835259">"Sareta-ikuspegia"</string>
- <string name="menu_list" msgid="7279285939892417279">"Zerrenda-ikuspegia"</string>
- <string name="menu_sort" msgid="7677740407158414452">"Ordenatzeko irizpidea"</string>
- <string name="menu_search" msgid="3816712084502856974">"Bilatu"</string>
- <string name="menu_settings" msgid="8239065133341597825">"Memoriaren ezarpenak"</string>
- <string name="menu_open" msgid="432922957274920903">"Ireki"</string>
- <string name="menu_save" msgid="2394743337684426338">"Gorde"</string>
- <string name="menu_share" msgid="3075149983979628146">"Partekatu"</string>
- <string name="menu_delete" msgid="8138799623850614177">"Ezabatu"</string>
- <string name="menu_select_all" msgid="8323579667348729928">"Hautatu guztiak"</string>
- <string name="menu_copy" msgid="3612326052677229148">"Kopiatu hemen…"</string>
- <string name="menu_move" msgid="1828090633118079817">"Eraman hona…"</string>
- <string name="menu_new_window" msgid="1226032889278727538">"Leiho berria"</string>
- <string name="menu_cut_to_clipboard" msgid="2467149185452488383">"Ebaki"</string>
- <string name="menu_copy_to_clipboard" msgid="489311381979634291">"Kopiatu"</string>
- <string name="menu_paste_from_clipboard" msgid="2071583031180257091">"Itsatsi"</string>
- <string name="menu_advanced_show" msgid="4693652895715631401">"Erakutsi barneko memoria"</string>
- <string name="menu_advanced_hide" msgid="4218809952721972589">"Ezkutatu barneko memoria"</string>
- <string name="menu_file_size_show" msgid="3240323619260823076">"Erakutsi fitxategi-tamaina"</string>
- <string name="menu_file_size_hide" msgid="8881975928502581042">"Ezkutatu fitxategi-tamaina"</string>
- <string name="button_select" msgid="527196987259139214">"Hautatu"</string>
- <string name="button_copy" msgid="8706475544635021302">"Kopiatu"</string>
- <string name="button_move" msgid="2202666023104202232">"Mugitu"</string>
- <string name="button_dismiss" msgid="3714065566893946085">"Baztertu"</string>
- <string name="button_retry" msgid="4392027584153752797">"Saiatu berriro"</string>
- <string name="sort_name" msgid="9183560467917256779">"Izenaren arabera"</string>
- <string name="sort_date" msgid="586080032956151448">"Aldatze-dataren arabera"</string>
- <string name="sort_size" msgid="3350681319735474741">"Tamainaren arabera"</string>
- <string name="drawer_open" msgid="4545466532430226949">"Erakutsi erroko karpetak"</string>
- <string name="drawer_close" msgid="7602734368552123318">"Ezkutatu erroko karpetak"</string>
- <string name="save_error" msgid="6167009778003223664">"Ezin izan da dokumentua gorde"</string>
- <string name="create_error" msgid="3735649141335444215">"Ezin izan da karpeta sortu"</string>
- <string name="query_error" msgid="5999895349602476581">"Une honetan ezin da kargatu edukia"</string>
- <string name="root_recent" msgid="4470053704320518133">"Azkenak"</string>
- <string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> doan"</string>
- <string name="root_type_service" msgid="2178854894416775409">"Biltegiratze-zerbitzuak"</string>
- <string name="root_type_shortcut" msgid="3318760609471618093">"Lasterbideak"</string>
- <string name="root_type_device" msgid="7121342474653483538">"Gailuak"</string>
- <string name="root_type_apps" msgid="8838065367985945189">"Aplikazio gehiago"</string>
- <string name="empty" msgid="7858882803708117596">"Ez dago elementurik"</string>
- <string name="no_results" msgid="6622510343880730446">"Ez da aurkitu ezer %1$s atalean"</string>
- <string name="toast_no_application" msgid="4632640357724698144">"Ezin da ireki fitxategia"</string>
- <string name="toast_failed_delete" msgid="2180678019407244069">"Ezin izan dira dokumentu batzuk ezabatu"</string>
- <string name="share_via" msgid="8966594246261344259">"Partekatu honen bidez:"</string>
- <string name="copy_notification_title" msgid="6374299806748219777">"Fitxategiak kopiatzen"</string>
- <string name="move_notification_title" msgid="6193835179777284805">"Fitxategiak mugitzea"</string>
- <string name="delete_notification_title" msgid="3329403967712437496">"Fitxategiak ezabatzea"</string>
- <string name="copy_remaining" msgid="6283790937387975095">"Falta den denbora: <xliff:g id="DURATION">%s</xliff:g>"</string>
- <plurals name="copy_begin" formatted="false" msgid="9071199452634086365">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> fitxategi kopiatzen.</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> fitxategi kopiatzen.</item>
- </plurals>
- <plurals name="move_begin" formatted="false" msgid="8430330882138871643">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> fitxategi mugitzen.</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> fitxategi mugitzen.</item>
- </plurals>
- <plurals name="deleting" formatted="false" msgid="5054338566802559411">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> fitxategi ezabatzen ari dira.</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> fitxategi ezabatzen ari da.</item>
- </plurals>
- <string name="undo" msgid="7905788502491742328">"Desegin"</string>
- <string name="copy_preparing" msgid="3896202461003039386">"Kopiatzeko prestatzen…"</string>
- <string name="move_preparing" msgid="2772219441375531410">"Mugitzeko prestatzen…"</string>
- <string name="delete_preparing" msgid="5655813182533491992">"Ezabatzeko prestatzen…"</string>
- <string name="delete_progress" msgid="5399405983046157222">"<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="7160447124922897689">
- <item quantity="other">Ezin izan dira kopiatu <xliff:g id="COUNT_1">%1$d</xliff:g> fitxategi</item>
- <item quantity="one">Ezin izan da kopiatu <xliff:g id="COUNT_0">%1$d</xliff:g> fitxategi</item>
- </plurals>
- <plurals name="move_error_notification_title" formatted="false" msgid="2710901971014783012">
- <item quantity="other">Ezin izan dira mugitu <xliff:g id="COUNT_1">%1$d</xliff:g> fitxategi</item>
- <item quantity="one">Ezin izan da mugitu <xliff:g id="COUNT_0">%1$d</xliff:g> fitxategi</item>
- </plurals>
- <plurals name="delete_error_notification_title" formatted="false" msgid="7228393157786591199">
- <item quantity="other">Ezin izan dira ezabatu <xliff:g id="COUNT_1">%1$d</xliff:g> fitxategi</item>
- <item quantity="one">Ezin izan da ezabatu <xliff:g id="COUNT_0">%1$d</xliff:g> fitxategi</item>
- </plurals>
- <string name="notification_touch_for_details" msgid="6268189413228855582">"Sakatu xehetasunak ikusteko"</string>
- <string name="close" msgid="3043722427445528732">"Itxi"</string>
- <string name="copy_failure_alert_content" msgid="4563147454522476183">"Ez dira kopiatu fitxategi hauek: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="move_failure_alert_content" msgid="2635075788682922861">"Ez dira mugitu fitxategi hauek: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="delete_failure_alert_content" msgid="892393767207938353">"Ez dira ezabatu fitxategi hauek: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="copy_converted_warning_content" msgid="5753861488218674361">"Fitxategi hauek beste formatu bateko fitxategi bihurtu dira: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <plurals name="clipboard_files_clipped" formatted="false" msgid="855459017537058539">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> fitxategi kopiatu dira arbelean.</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> fitxategi kopiatu da arbelean.</item>
- </plurals>
- <string name="clipboard_files_cannot_paste" msgid="2878324825602325706">"Ezin dira itsatsi hautatutako fitxategiak kokapen honetan."</string>
- <string name="menu_rename" msgid="7678802479104285353">"Aldatu izena"</string>
- <string name="rename_error" msgid="4203041674883412606">"Ezin izan zaio aldatu izena dokumentuari"</string>
- <string name="menu_eject_root" msgid="2768224615494227325">"Atera"</string>
- <string name="notification_copy_files_converted_title" msgid="3153573223054275181">"Artxibo batzuk bihurtu dira"</string>
- <string name="open_external_dialog_request" msgid="5789329484285817629">"<xliff:g id="APPNAME"><b>^1</b></xliff:g> aplikazioari <xliff:g id="STORAGE"><i>^3</i></xliff:g> unitateko <xliff:g id="DIRECTORY"><i>^2</i></xliff:g> direktorioa atzitzeko baimena eman nahi diozu?"</string>
- <string name="open_external_dialog_request_primary_volume" msgid="6635562535713428688">"<xliff:g id="APPNAME"><b>^1</b></xliff:g> aplikazioari <xliff:g id="DIRECTORY"><i>^2</i></xliff:g> direktoriorako sarbidea eman nahi diozu?"</string>
- <string name="open_external_dialog_root_request" msgid="8899108702926347720">"<xliff:g id="APPNAME"><b>^1</b></xliff:g> aplikazioari zure datuak atzitzea baimendu nahi diozu, besteak beste, <xliff:g id="STORAGE"><i>^2</i></xliff:g> biltegian dituzun argazkiak eta bideoak?"</string>
- <string name="never_ask_again" msgid="4295278542972859268">"Ez galdetu berriro"</string>
- <string name="allow" msgid="7225948811296386551">"Onartu"</string>
- <string name="deny" msgid="2081879885755434506">"Ukatu"</string>
- <plurals name="elements_selected" formatted="false" msgid="1376955402452875047">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> hautatuta</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> hautatuta</item>
- </plurals>
- <plurals name="elements_dragged" formatted="false" msgid="3727204615215602228">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> elementu</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> elementu</item>
- </plurals>
- <string name="delete_filename_confirmation_message" msgid="5312817725577537488">"\"<xliff:g id="NAME">%1$s</xliff:g>\" ezabatu nahi duzu?"</string>
- <string name="delete_foldername_confirmation_message" msgid="5885501832257285329">"\"<xliff:g id="NAME">%1$s</xliff:g>\" karpeta eta bertako edukia ezabatu nahi duzu?"</string>
- <plurals name="delete_files_confirmation_message" formatted="false" msgid="8417505791395471802">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> fitxategi ezabatu nahi dituzu?</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> fitxategi ezabatu nahi duzu?</item>
- </plurals>
- <plurals name="delete_folders_confirmation_message" formatted="false" msgid="9185648028213507769">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> karpeta eta beren eduki guztia ezabatu nahi duzu?</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> karpeta eta bere eduki guztia ezabatu nahi duzu?</item>
- </plurals>
- <plurals name="delete_items_confirmation_message" formatted="false" msgid="5376214433530243459">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> elementu ezabatu nahi dituzu?</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> elementu ezabatu nahi duzu?</item>
- </plurals>
-</resources>
diff --git a/packages/DocumentsUI/res/values-fa/strings.xml b/packages/DocumentsUI/res/values-fa/strings.xml
deleted file mode 100644
index 4db84b9..0000000
--- a/packages/DocumentsUI/res/values-fa/strings.xml
+++ /dev/null
@@ -1,144 +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="app_label" msgid="1551050262492398204">"Files"</string>
- <string name="downloads_label" msgid="959113951084633612">"بارگیریها"</string>
- <string name="title_open" msgid="4353228937663917801">"باز کردن از"</string>
- <string name="title_save" msgid="2433679664882857999">"ذخیره در"</string>
- <string name="menu_create_dir" msgid="2547620241173881754">"پوشه جدید"</string>
- <string name="menu_grid" msgid="6878021334497835259">"نمای جدولی"</string>
- <string name="menu_list" msgid="7279285939892417279">"نمای فهرستی"</string>
- <string name="menu_sort" msgid="7677740407158414452">"مرتبسازی براساس"</string>
- <string name="menu_search" msgid="3816712084502856974">"جستجو"</string>
- <string name="menu_settings" msgid="8239065133341597825">"تنظیمات ذخیرهسازی"</string>
- <string name="menu_open" msgid="432922957274920903">"باز کردن"</string>
- <string name="menu_save" msgid="2394743337684426338">"ذخیره"</string>
- <string name="menu_share" msgid="3075149983979628146">"اشتراکگذاری"</string>
- <string name="menu_delete" msgid="8138799623850614177">"حذف"</string>
- <string name="menu_select_all" msgid="8323579667348729928">"انتخاب همه"</string>
- <string name="menu_copy" msgid="3612326052677229148">"کپی در..."</string>
- <string name="menu_move" msgid="1828090633118079817">"انتقال به…"</string>
- <string name="menu_new_window" msgid="1226032889278727538">"پنجره جدید"</string>
- <string name="menu_cut_to_clipboard" msgid="2467149185452488383">"برش"</string>
- <string name="menu_copy_to_clipboard" msgid="489311381979634291">"کپی"</string>
- <string name="menu_paste_from_clipboard" msgid="2071583031180257091">"جایگذاری"</string>
- <string name="menu_advanced_show" msgid="4693652895715631401">"نمایش فضای ذخیرهسازی داخلی"</string>
- <string name="menu_advanced_hide" msgid="4218809952721972589">"پنهان کردن فضای ذخیرهسازی داخلی"</string>
- <string name="menu_file_size_show" msgid="3240323619260823076">"نمایش اندازه فایل"</string>
- <string name="menu_file_size_hide" msgid="8881975928502581042">"پنهان کردن اندازه فایل"</string>
- <string name="button_select" msgid="527196987259139214">"انتخاب"</string>
- <string name="button_copy" msgid="8706475544635021302">"کپی"</string>
- <string name="button_move" msgid="2202666023104202232">"انتقال"</string>
- <string name="button_dismiss" msgid="3714065566893946085">"نپذیرفتن"</string>
- <string name="button_retry" msgid="4392027584153752797">"دوباره امتحان کنید"</string>
- <string name="sort_name" msgid="9183560467917256779">"براساس نام"</string>
- <string name="sort_date" msgid="586080032956151448">"براساس تاریخ اصلاح"</string>
- <string name="sort_size" msgid="3350681319735474741">"براساس اندازه"</string>
- <string name="drawer_open" msgid="4545466532430226949">"نمایش ریشهها"</string>
- <string name="drawer_close" msgid="7602734368552123318">"پنهان کردن ریشهها"</string>
- <string name="save_error" msgid="6167009778003223664">"ذخیره سند انجام نشد"</string>
- <string name="create_error" msgid="3735649141335444215">"ایجاد پوشه انجام نشد"</string>
- <string name="query_error" msgid="5999895349602476581">"محتوا درحال حاضر بارگیری نمیشود"</string>
- <string name="root_recent" msgid="4470053704320518133">"اخیر"</string>
- <string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> آزاد"</string>
- <string name="root_type_service" msgid="2178854894416775409">"خدمات ذخیرهسازی"</string>
- <string name="root_type_shortcut" msgid="3318760609471618093">"میانبرها"</string>
- <string name="root_type_device" msgid="7121342474653483538">"دستگاهها"</string>
- <string name="root_type_apps" msgid="8838065367985945189">"برنامههای بیشتر"</string>
- <string name="empty" msgid="7858882803708117596">"موردی موجود نیست"</string>
- <string name="no_results" msgid="6622510343880730446">"مورد منطبقی در %1$s وجود ندارد"</string>
- <string name="toast_no_application" msgid="4632640357724698144">"فایل باز نمیشود"</string>
- <string name="toast_failed_delete" msgid="2180678019407244069">"برخی از اسناد حذف نمیشوند"</string>
- <string name="share_via" msgid="8966594246261344259">"اشتراکگذاری از طریق"</string>
- <string name="copy_notification_title" msgid="6374299806748219777">"در حال کپی کردن فایلها"</string>
- <string name="move_notification_title" msgid="6193835179777284805">"درحال انتقال فایلها"</string>
- <string name="delete_notification_title" msgid="3329403967712437496">"در حال حذف فایلها"</string>
- <string name="copy_remaining" msgid="6283790937387975095">"<xliff:g id="DURATION">%s</xliff:g> باقیمانده"</string>
- <plurals name="copy_begin" formatted="false" msgid="9071199452634086365">
- <item quantity="one">در حال کپی کردن <xliff:g id="COUNT_1">%1$d</xliff:g> فایل.</item>
- <item quantity="other">در حال کپی کردن <xliff:g id="COUNT_1">%1$d</xliff:g> فایل.</item>
- </plurals>
- <plurals name="move_begin" formatted="false" msgid="8430330882138871643">
- <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="deleting" formatted="false" msgid="5054338566802559411">
- <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="7905788502491742328">"لغو"</string>
- <string name="copy_preparing" msgid="3896202461003039386">"در حال آمادهسازی برای کپی..."</string>
- <string name="move_preparing" msgid="2772219441375531410">"درحال آمادهسازی برای انتقال…"</string>
- <string name="delete_preparing" msgid="5655813182533491992">"درحال آمادهسازی برای حذف…"</string>
- <string name="delete_progress" msgid="5399405983046157222">"<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="7160447124922897689">
- <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="move_error_notification_title" formatted="false" msgid="2710901971014783012">
- <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_error_notification_title" formatted="false" msgid="7228393157786591199">
- <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="6268189413228855582">"برای مشاهده جزئیات ضربه بزنید"</string>
- <string name="close" msgid="3043722427445528732">"بستن"</string>
- <string name="copy_failure_alert_content" msgid="4563147454522476183">"این فایلها کپی نشدند: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="move_failure_alert_content" msgid="2635075788682922861">"این فایلها منتقل نشدند: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="delete_failure_alert_content" msgid="892393767207938353">"این فایلها حذف نشدند: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="copy_converted_warning_content" msgid="5753861488218674361">"این فایلها به قالب دیگری تبدیل شدند: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <plurals name="clipboard_files_clipped" formatted="false" msgid="855459017537058539">
- <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="clipboard_files_cannot_paste" msgid="2878324825602325706">"نمیتوان فایلهای انتخابی را در این مکان جایگذاری کرد."</string>
- <string name="menu_rename" msgid="7678802479104285353">"تغییر نام"</string>
- <string name="rename_error" msgid="4203041674883412606">"نام سند تغییر نکرد"</string>
- <string name="menu_eject_root" msgid="2768224615494227325">"بیرون راندن"</string>
- <string name="notification_copy_files_converted_title" msgid="3153573223054275181">"بعضی از فایلها تبدیل شدند"</string>
- <string name="open_external_dialog_request" msgid="5789329484285817629">"به <xliff:g id="APPNAME"><b>^1</b></xliff:g> اجازه داده شود به فهرست راهنمای <xliff:g id="DIRECTORY"><i>^2</i></xliff:g> در <xliff:g id="STORAGE"><i>^3</i></xliff:g> دسترسی داشته باشد؟"</string>
- <string name="open_external_dialog_request_primary_volume" msgid="6635562535713428688">"به <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="8899108702926347720">"به <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="4295278542972859268">"دوباره سؤال نشود"</string>
- <string name="allow" msgid="7225948811296386551">"ارزیابیشده"</string>
- <string name="deny" msgid="2081879885755434506">"اجازه ندارد"</string>
- <plurals name="elements_selected" formatted="false" msgid="1376955402452875047">
- <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="3727204615215602228">
- <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="5312817725577537488">"«<xliff:g id="NAME">%1$s</xliff:g>» حذف شود؟"</string>
- <string name="delete_foldername_confirmation_message" msgid="5885501832257285329">"پوشه «<xliff:g id="NAME">%1$s</xliff:g>» و محتوای آن حذف شود؟"</string>
- <plurals name="delete_files_confirmation_message" formatted="false" msgid="8417505791395471802">
- <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="9185648028213507769">
- <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="5376214433530243459">
- <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>
-</resources>
diff --git a/packages/DocumentsUI/res/values-fi/strings.xml b/packages/DocumentsUI/res/values-fi/strings.xml
deleted file mode 100644
index d1d0032..0000000
--- a/packages/DocumentsUI/res/values-fi/strings.xml
+++ /dev/null
@@ -1,144 +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="app_label" msgid="1551050262492398204">"Tiedostot"</string>
- <string name="downloads_label" msgid="959113951084633612">"Lataukset"</string>
- <string name="title_open" msgid="4353228937663917801">"Avaa sijainnista"</string>
- <string name="title_save" msgid="2433679664882857999">"Tallenna kohteeseen"</string>
- <string name="menu_create_dir" msgid="2547620241173881754">"Uusi kansio"</string>
- <string name="menu_grid" msgid="6878021334497835259">"Ruudukkonäkymä"</string>
- <string name="menu_list" msgid="7279285939892417279">"Luettelonäkymä"</string>
- <string name="menu_sort" msgid="7677740407158414452">"Lajitteluperuste"</string>
- <string name="menu_search" msgid="3816712084502856974">"Haku"</string>
- <string name="menu_settings" msgid="8239065133341597825">"Tallennusasetukset"</string>
- <string name="menu_open" msgid="432922957274920903">"Avaa"</string>
- <string name="menu_save" msgid="2394743337684426338">"Tallenna"</string>
- <string name="menu_share" msgid="3075149983979628146">"Jaa"</string>
- <string name="menu_delete" msgid="8138799623850614177">"Poista"</string>
- <string name="menu_select_all" msgid="8323579667348729928">"Valitse kaikki"</string>
- <string name="menu_copy" msgid="3612326052677229148">"Kopioi kohteeseen…"</string>
- <string name="menu_move" msgid="1828090633118079817">"Siirrä kohteeseen…"</string>
- <string name="menu_new_window" msgid="1226032889278727538">"Uusi ikkuna"</string>
- <string name="menu_cut_to_clipboard" msgid="2467149185452488383">"Leikkaa"</string>
- <string name="menu_copy_to_clipboard" msgid="489311381979634291">"Kopioi"</string>
- <string name="menu_paste_from_clipboard" msgid="2071583031180257091">"Liitä"</string>
- <string name="menu_advanced_show" msgid="4693652895715631401">"Näytä sis. tallennustila"</string>
- <string name="menu_advanced_hide" msgid="4218809952721972589">"Piilota sis. tallennust."</string>
- <string name="menu_file_size_show" msgid="3240323619260823076">"Näytä tiedostokoko"</string>
- <string name="menu_file_size_hide" msgid="8881975928502581042">"Piilota tiedostokoko"</string>
- <string name="button_select" msgid="527196987259139214">"Valitse"</string>
- <string name="button_copy" msgid="8706475544635021302">"Kopioi"</string>
- <string name="button_move" msgid="2202666023104202232">"Siirrä"</string>
- <string name="button_dismiss" msgid="3714065566893946085">"Hylkää"</string>
- <string name="button_retry" msgid="4392027584153752797">"Yritä uudelleen"</string>
- <string name="sort_name" msgid="9183560467917256779">"Nimen mukaan"</string>
- <string name="sort_date" msgid="586080032956151448">"Muokkauspäivän mukaan"</string>
- <string name="sort_size" msgid="3350681319735474741">"Koon mukaan"</string>
- <string name="drawer_open" msgid="4545466532430226949">"Näytä juuret"</string>
- <string name="drawer_close" msgid="7602734368552123318">"Piilota juuret"</string>
- <string name="save_error" msgid="6167009778003223664">"Asiakirjan tallennus epäonnistui"</string>
- <string name="create_error" msgid="3735649141335444215">"Kansion luominen epäonnistui"</string>
- <string name="query_error" msgid="5999895349602476581">"Sisältöä ei juuri nyt voi ladata."</string>
- <string name="root_recent" msgid="4470053704320518133">"Viimeisimmät"</string>
- <string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> vapaana"</string>
- <string name="root_type_service" msgid="2178854894416775409">"Tallennuspalvelut"</string>
- <string name="root_type_shortcut" msgid="3318760609471618093">"Pikakuvakkeet"</string>
- <string name="root_type_device" msgid="7121342474653483538">"Laitteet"</string>
- <string name="root_type_apps" msgid="8838065367985945189">"Lisää sovelluksia"</string>
- <string name="empty" msgid="7858882803708117596">"Ei kohteita"</string>
- <string name="no_results" msgid="6622510343880730446">"Ei osumia kohteessa %1$s"</string>
- <string name="toast_no_application" msgid="4632640357724698144">"Tiedoston avaaminen epäonnistui."</string>
- <string name="toast_failed_delete" msgid="2180678019407244069">"Joitakin asiakirjoja ei voi poistaa"</string>
- <string name="share_via" msgid="8966594246261344259">"Jaa sovelluksessa"</string>
- <string name="copy_notification_title" msgid="6374299806748219777">"Kopioidaan tiedostoja"</string>
- <string name="move_notification_title" msgid="6193835179777284805">"Siirretään tiedostoja"</string>
- <string name="delete_notification_title" msgid="3329403967712437496">"Poistetaan tiedostoja"</string>
- <string name="copy_remaining" msgid="6283790937387975095">"<xliff:g id="DURATION">%s</xliff:g> jäljellä"</string>
- <plurals name="copy_begin" formatted="false" msgid="9071199452634086365">
- <item quantity="other">Kopioidaan <xliff:g id="COUNT_1">%1$d</xliff:g> tiedostoa.</item>
- <item quantity="one">Kopioidaan <xliff:g id="COUNT_0">%1$d</xliff:g> tiedosto.</item>
- </plurals>
- <plurals name="move_begin" formatted="false" msgid="8430330882138871643">
- <item quantity="other">Siirretään <xliff:g id="COUNT_1">%1$d</xliff:g> tiedostoa.</item>
- <item quantity="one">Siirretään <xliff:g id="COUNT_0">%1$d</xliff:g> tiedosto.</item>
- </plurals>
- <plurals name="deleting" formatted="false" msgid="5054338566802559411">
- <item quantity="other">Poistetaan <xliff:g id="COUNT_1">%1$d</xliff:g> tiedostoa.</item>
- <item quantity="one">Poistetaan <xliff:g id="COUNT_0">%1$d</xliff:g> tiedosto.</item>
- </plurals>
- <string name="undo" msgid="7905788502491742328">"Kumoa"</string>
- <string name="copy_preparing" msgid="3896202461003039386">"Valmistellaan kopiointia…"</string>
- <string name="move_preparing" msgid="2772219441375531410">"Valmistellaan siirtämistä…"</string>
- <string name="delete_preparing" msgid="5655813182533491992">"Valmistellaan poistamista…"</string>
- <string name="delete_progress" msgid="5399405983046157222">"<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="7160447124922897689">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> tiedoston kopioiminen epäonnistui.</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> tiedoston kopioiminen epäonnistui.</item>
- </plurals>
- <plurals name="move_error_notification_title" formatted="false" msgid="2710901971014783012">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> tiedoston siirtäminen epäonnistui.</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> tiedoston siirtäminen epäonnistui.</item>
- </plurals>
- <plurals name="delete_error_notification_title" formatted="false" msgid="7228393157786591199">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> tiedoston poistaminen epäonnistui.</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> tiedoston poistaminen epäonnistui.</item>
- </plurals>
- <string name="notification_touch_for_details" msgid="6268189413228855582">"Tarkastele tietoja napauttamalla"</string>
- <string name="close" msgid="3043722427445528732">"Sulje"</string>
- <string name="copy_failure_alert_content" msgid="4563147454522476183">"Näitä tiedostoja ei kopioitu: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="move_failure_alert_content" msgid="2635075788682922861">"Näitä tiedostoja ei siirretty: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="delete_failure_alert_content" msgid="892393767207938353">"Näitä tiedostoja ei poistettu: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="copy_converted_warning_content" msgid="5753861488218674361">"Seuraavat tiedostot muunnettiin toiseen muotoon: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <plurals name="clipboard_files_clipped" formatted="false" msgid="855459017537058539">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> tiedostoa kopioitiin leikepöydälle.</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> tiedosto kopioitiin leikepöydälle.</item>
- </plurals>
- <string name="clipboard_files_cannot_paste" msgid="2878324825602325706">"Valittuja tiedostoja ei voi liittää tähän sijaintiin."</string>
- <string name="menu_rename" msgid="7678802479104285353">"Nimeä uudelleen"</string>
- <string name="rename_error" msgid="4203041674883412606">"Dokumentin nimen muuttaminen epäonnistui."</string>
- <string name="menu_eject_root" msgid="2768224615494227325">"Poista"</string>
- <string name="notification_copy_files_converted_title" msgid="3153573223054275181">"Joitakin tiedostoja muunnettiin."</string>
- <string name="open_external_dialog_request" msgid="5789329484285817629">"Myönnetäänkö sovellukselle <xliff:g id="APPNAME"><b>^1</b></xliff:g> sijainnissa <xliff:g id="STORAGE"><i>^3</i></xliff:g> olevan hakemiston <xliff:g id="DIRECTORY"><i>^2</i></xliff:g> käyttöoikeus?"</string>
- <string name="open_external_dialog_request_primary_volume" msgid="6635562535713428688">"Saako <xliff:g id="APPNAME"><b>^1</b></xliff:g> käyttää hakemistoa <xliff:g id="DIRECTORY"><i>^2</i></xliff:g>?"</string>
- <string name="open_external_dialog_root_request" msgid="8899108702926347720">"Myönnetäänkö sovellukselle <xliff:g id="APPNAME"><b>^1</b></xliff:g> sijainnissa <xliff:g id="STORAGE"><i>^2</i></xliff:g> olevien tietojesi, mukaan lukien valokuviesi ja videoidesi, käyttöoikeus?"</string>
- <string name="never_ask_again" msgid="4295278542972859268">"Älä kysy uudestaan"</string>
- <string name="allow" msgid="7225948811296386551">"Salli"</string>
- <string name="deny" msgid="2081879885755434506">"Kiellä"</string>
- <plurals name="elements_selected" formatted="false" msgid="1376955402452875047">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> valittu</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> valittu</item>
- </plurals>
- <plurals name="elements_dragged" formatted="false" msgid="3727204615215602228">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> kohdetta</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> kohde</item>
- </plurals>
- <string name="delete_filename_confirmation_message" msgid="5312817725577537488">"Poistetaanko <xliff:g id="NAME">%1$s</xliff:g>?"</string>
- <string name="delete_foldername_confirmation_message" msgid="5885501832257285329">"Poistetaanko kansio <xliff:g id="NAME">%1$s</xliff:g> ja sen sisältö?"</string>
- <plurals name="delete_files_confirmation_message" formatted="false" msgid="8417505791395471802">
- <item quantity="other">Poistetaanko <xliff:g id="COUNT_1">%1$d</xliff:g> tiedostoa?</item>
- <item quantity="one">Poistetaanko <xliff:g id="COUNT_0">%1$d</xliff:g> tiedosto?</item>
- </plurals>
- <plurals name="delete_folders_confirmation_message" formatted="false" msgid="9185648028213507769">
- <item quantity="other">Poistetaanko <xliff:g id="COUNT_1">%1$d</xliff:g> kansiota ja niiden sisältö?</item>
- <item quantity="one">Poistetaanko <xliff:g id="COUNT_0">%1$d</xliff:g> kansio ja sen sisältö?</item>
- </plurals>
- <plurals name="delete_items_confirmation_message" formatted="false" msgid="5376214433530243459">
- <item quantity="other">Poistetaanko <xliff:g id="COUNT_1">%1$d</xliff:g> kohdetta?</item>
- <item quantity="one">Poistetaanko <xliff:g id="COUNT_0">%1$d</xliff:g> kohde?</item>
- </plurals>
-</resources>
diff --git a/packages/DocumentsUI/res/values-fr-rCA/strings.xml b/packages/DocumentsUI/res/values-fr-rCA/strings.xml
deleted file mode 100644
index ae76565..0000000
--- a/packages/DocumentsUI/res/values-fr-rCA/strings.xml
+++ /dev/null
@@ -1,144 +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="app_label" msgid="1551050262492398204">"Fichiers"</string>
- <string name="downloads_label" msgid="959113951084633612">"Téléchargements"</string>
- <string name="title_open" msgid="4353228937663917801">"Ouvrir à partir de"</string>
- <string name="title_save" msgid="2433679664882857999">"Enregistrer dans"</string>
- <string name="menu_create_dir" msgid="2547620241173881754">"Nouveau dossier"</string>
- <string name="menu_grid" msgid="6878021334497835259">"Grille"</string>
- <string name="menu_list" msgid="7279285939892417279">"Liste"</string>
- <string name="menu_sort" msgid="7677740407158414452">"Trier par"</string>
- <string name="menu_search" msgid="3816712084502856974">"Rechercher"</string>
- <string name="menu_settings" msgid="8239065133341597825">"Paramètres de stockage"</string>
- <string name="menu_open" msgid="432922957274920903">"Ouvrir"</string>
- <string name="menu_save" msgid="2394743337684426338">"Enregistrer"</string>
- <string name="menu_share" msgid="3075149983979628146">"Partager"</string>
- <string name="menu_delete" msgid="8138799623850614177">"Supprimer"</string>
- <string name="menu_select_all" msgid="8323579667348729928">"Tout sélectionner"</string>
- <string name="menu_copy" msgid="3612326052677229148">"Copier dans..."</string>
- <string name="menu_move" msgid="1828090633118079817">"Déplacer dans…"</string>
- <string name="menu_new_window" msgid="1226032889278727538">"Nouvelle fenêtre"</string>
- <string name="menu_cut_to_clipboard" msgid="2467149185452488383">"Couper"</string>
- <string name="menu_copy_to_clipboard" msgid="489311381979634291">"Copier"</string>
- <string name="menu_paste_from_clipboard" msgid="2071583031180257091">"Coller"</string>
- <string name="menu_advanced_show" msgid="4693652895715631401">"Aff. mém. stock. interne"</string>
- <string name="menu_advanced_hide" msgid="4218809952721972589">"Masquer mém. stock. int."</string>
- <string name="menu_file_size_show" msgid="3240323619260823076">"Afficher taille fichier"</string>
- <string name="menu_file_size_hide" msgid="8881975928502581042">"Masquer taille fichier"</string>
- <string name="button_select" msgid="527196987259139214">"Sélectionner"</string>
- <string name="button_copy" msgid="8706475544635021302">"Copier"</string>
- <string name="button_move" msgid="2202666023104202232">"Déplacer"</string>
- <string name="button_dismiss" msgid="3714065566893946085">"Faire disparaître"</string>
- <string name="button_retry" msgid="4392027584153752797">"Réessayer"</string>
- <string name="sort_name" msgid="9183560467917256779">"Par nom"</string>
- <string name="sort_date" msgid="586080032956151448">"Par date de modification"</string>
- <string name="sort_size" msgid="3350681319735474741">"Par taille"</string>
- <string name="drawer_open" msgid="4545466532430226949">"Afficher les racines"</string>
- <string name="drawer_close" msgid="7602734368552123318">"Masquer les racines"</string>
- <string name="save_error" msgid="6167009778003223664">"Échec de l\'enregistrement du document"</string>
- <string name="create_error" msgid="3735649141335444215">"Échec de la création du dossier"</string>
- <string name="query_error" msgid="5999895349602476581">"Impossible de charger le contenu pour le moment"</string>
- <string name="root_recent" msgid="4470053704320518133">"Récents"</string>
- <string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> disponible"</string>
- <string name="root_type_service" msgid="2178854894416775409">"Services de stockage"</string>
- <string name="root_type_shortcut" msgid="3318760609471618093">"Raccourcis"</string>
- <string name="root_type_device" msgid="7121342474653483538">"Appareils"</string>
- <string name="root_type_apps" msgid="8838065367985945189">"Plus d\'applications"</string>
- <string name="empty" msgid="7858882803708117596">"Aucun élément"</string>
- <string name="no_results" msgid="6622510343880730446">"Aucune correspondance dans %1$s"</string>
- <string name="toast_no_application" msgid="4632640357724698144">"Impossible d\'ouvrir le fichier"</string>
- <string name="toast_failed_delete" msgid="2180678019407244069">"Impossible de supprimer certains documents"</string>
- <string name="share_via" msgid="8966594246261344259">"Partager par"</string>
- <string name="copy_notification_title" msgid="6374299806748219777">"Copie de fichiers..."</string>
- <string name="move_notification_title" msgid="6193835179777284805">"Déplacement des fichiers"</string>
- <string name="delete_notification_title" msgid="3329403967712437496">"Suppression des fichiers"</string>
- <string name="copy_remaining" msgid="6283790937387975095">"Durée restante : <xliff:g id="DURATION">%s</xliff:g>"</string>
- <plurals name="copy_begin" formatted="false" msgid="9071199452634086365">
- <item quantity="one">Copier de <xliff:g id="COUNT_1">%1$d</xliff:g> fichier en cours.</item>
- <item quantity="other">Copier de <xliff:g id="COUNT_1">%1$d</xliff:g> fichiers en cours.</item>
- </plurals>
- <plurals name="move_begin" formatted="false" msgid="8430330882138871643">
- <item quantity="one">Déplacement de <xliff:g id="COUNT_1">%1$d</xliff:g> fichier en cours.</item>
- <item quantity="other">Déplacement de <xliff:g id="COUNT_1">%1$d</xliff:g> fichiers en cours.</item>
- </plurals>
- <plurals name="deleting" formatted="false" msgid="5054338566802559411">
- <item quantity="one">Suppression de <xliff:g id="COUNT_1">%1$d</xliff:g> fichier.</item>
- <item quantity="other">Suppression de <xliff:g id="COUNT_1">%1$d</xliff:g> fichiers.</item>
- </plurals>
- <string name="undo" msgid="7905788502491742328">"Annuler"</string>
- <string name="copy_preparing" msgid="3896202461003039386">"Préparation de la copie en cours"</string>
- <string name="move_preparing" msgid="2772219441375531410">"Préparation du déplacement..."</string>
- <string name="delete_preparing" msgid="5655813182533491992">"Préparation de la suppression..."</string>
- <string name="delete_progress" msgid="5399405983046157222">"<xliff:g id="COUNT_0">%1$d</xliff:g> sur <xliff:g id="TOTALCOUNT">%2$d</xliff:g>"</string>
- <plurals name="copy_error_notification_title" formatted="false" msgid="7160447124922897689">
- <item quantity="one">Impossible de copier <xliff:g id="COUNT_1">%1$d</xliff:g> fichier</item>
- <item quantity="other">Impossible de copier <xliff:g id="COUNT_1">%1$d</xliff:g> fichiers</item>
- </plurals>
- <plurals name="move_error_notification_title" formatted="false" msgid="2710901971014783012">
- <item quantity="one">Impossible de déplacer <xliff:g id="COUNT_1">%1$d</xliff:g> fichier</item>
- <item quantity="other">Impossible de déplacer <xliff:g id="COUNT_1">%1$d</xliff:g> fichiers</item>
- </plurals>
- <plurals name="delete_error_notification_title" formatted="false" msgid="7228393157786591199">
- <item quantity="one">Impossible de supprimer <xliff:g id="COUNT_1">%1$d</xliff:g> dossier</item>
- <item quantity="other">Impossible de supprimer <xliff:g id="COUNT_1">%1$d</xliff:g> dossiers</item>
- </plurals>
- <string name="notification_touch_for_details" msgid="6268189413228855582">"Touchez pour afficher les détails"</string>
- <string name="close" msgid="3043722427445528732">"Fermer"</string>
- <string name="copy_failure_alert_content" msgid="4563147454522476183">"Ces fichiers ne ont pas été copiés : <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="move_failure_alert_content" msgid="2635075788682922861">"Ces fichiers n\'ont pas été déplacés : <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="delete_failure_alert_content" msgid="892393767207938353">"Ces fichiers n\'ont pas été supprimés : <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="copy_converted_warning_content" msgid="5753861488218674361">"Ces fichiers ont été convertis dans un autre format : <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <plurals name="clipboard_files_clipped" formatted="false" msgid="855459017537058539">
- <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> fichier a été copié dans le presse-papiers.</item>
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> fichiers ont été copiés dans le presse-papiers.</item>
- </plurals>
- <string name="clipboard_files_cannot_paste" msgid="2878324825602325706">"Impossible de coller les fichiers sélectionnés à cet endroit."</string>
- <string name="menu_rename" msgid="7678802479104285353">"Renommer"</string>
- <string name="rename_error" msgid="4203041674883412606">"Impossible de renommer le document"</string>
- <string name="menu_eject_root" msgid="2768224615494227325">"Éjecter"</string>
- <string name="notification_copy_files_converted_title" msgid="3153573223054275181">"Certains fichiers ont été convertis"</string>
- <string name="open_external_dialog_request" msgid="5789329484285817629">"Accorder à <xliff:g id="APPNAME"><b>^1</b></xliff:g> l\'accès au répertoire <xliff:g id="DIRECTORY"><i>^2</i></xliff:g> sur <xliff:g id="STORAGE"><i>^3</i></xliff:g>?"</string>
- <string name="open_external_dialog_request_primary_volume" msgid="6635562535713428688">"Accorder à <xliff:g id="APPNAME"><b>^1</b></xliff:g> l\'accès au répertoire <xliff:g id="DIRECTORY"><i>^2</i></xliff:g>?"</string>
- <string name="open_external_dialog_root_request" msgid="8899108702926347720">"Voulez-vous accorder l\'accès à vos données à <xliff:g id="APPNAME"><b>^1</b></xliff:g>, y compris vos photos et vos vidéos, sur <xliff:g id="STORAGE"><i>^2</i></xliff:g>?"</string>
- <string name="never_ask_again" msgid="4295278542972859268">"Ne plus me demander"</string>
- <string name="allow" msgid="7225948811296386551">"Autoriser"</string>
- <string name="deny" msgid="2081879885755434506">"Refuser"</string>
- <plurals name="elements_selected" formatted="false" msgid="1376955402452875047">
- <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> sélectionné</item>
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> sélectionnés</item>
- </plurals>
- <plurals name="elements_dragged" formatted="false" msgid="3727204615215602228">
- <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> article</item>
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> articles</item>
- </plurals>
- <string name="delete_filename_confirmation_message" msgid="5312817725577537488">"Supprimer « <xliff:g id="NAME">%1$s</xliff:g> »?"</string>
- <string name="delete_foldername_confirmation_message" msgid="5885501832257285329">"Supprimer le dossier « <xliff:g id="NAME">%1$s</xliff:g> » et son contenu?"</string>
- <plurals name="delete_files_confirmation_message" formatted="false" msgid="8417505791395471802">
- <item quantity="one">Supprimer <xliff:g id="COUNT_1">%1$d</xliff:g> fichier?</item>
- <item quantity="other">Supprimer <xliff:g id="COUNT_1">%1$d</xliff:g> fichiers?</item>
- </plurals>
- <plurals name="delete_folders_confirmation_message" formatted="false" msgid="9185648028213507769">
- <item quantity="one">Supprimer <xliff:g id="COUNT_1">%1$d</xliff:g> dossier et son contenu?</item>
- <item quantity="other">Supprimer <xliff:g id="COUNT_1">%1$d</xliff:g> dossiers et leur contenu?</item>
- </plurals>
- <plurals name="delete_items_confirmation_message" formatted="false" msgid="5376214433530243459">
- <item quantity="one">Supprimer <xliff:g id="COUNT_1">%1$d</xliff:g> élément?</item>
- <item quantity="other">Supprimer <xliff:g id="COUNT_1">%1$d</xliff:g> éléments?</item>
- </plurals>
-</resources>
diff --git a/packages/DocumentsUI/res/values-fr/strings.xml b/packages/DocumentsUI/res/values-fr/strings.xml
deleted file mode 100644
index 5f45aae..0000000
--- a/packages/DocumentsUI/res/values-fr/strings.xml
+++ /dev/null
@@ -1,144 +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="app_label" msgid="1551050262492398204">"Fichiers"</string>
- <string name="downloads_label" msgid="959113951084633612">"Téléchargements"</string>
- <string name="title_open" msgid="4353228937663917801">"Ouvrir à partir de"</string>
- <string name="title_save" msgid="2433679664882857999">"Enregistrer sous"</string>
- <string name="menu_create_dir" msgid="2547620241173881754">"Nouveau dossier"</string>
- <string name="menu_grid" msgid="6878021334497835259">"Grille"</string>
- <string name="menu_list" msgid="7279285939892417279">"Liste"</string>
- <string name="menu_sort" msgid="7677740407158414452">"Trier par"</string>
- <string name="menu_search" msgid="3816712084502856974">"Rechercher"</string>
- <string name="menu_settings" msgid="8239065133341597825">"Paramètres de stockage"</string>
- <string name="menu_open" msgid="432922957274920903">"Ouvrir"</string>
- <string name="menu_save" msgid="2394743337684426338">"Enregistrer"</string>
- <string name="menu_share" msgid="3075149983979628146">"Partager"</string>
- <string name="menu_delete" msgid="8138799623850614177">"Supprimer"</string>
- <string name="menu_select_all" msgid="8323579667348729928">"Tout sélectionner"</string>
- <string name="menu_copy" msgid="3612326052677229148">"Copier vers…"</string>
- <string name="menu_move" msgid="1828090633118079817">"Placer dans…"</string>
- <string name="menu_new_window" msgid="1226032889278727538">"Nouvelle fenêtre"</string>
- <string name="menu_cut_to_clipboard" msgid="2467149185452488383">"Couper"</string>
- <string name="menu_copy_to_clipboard" msgid="489311381979634291">"Copier"</string>
- <string name="menu_paste_from_clipboard" msgid="2071583031180257091">"Coller"</string>
- <string name="menu_advanced_show" msgid="4693652895715631401">"Aff. mém. stock. interne"</string>
- <string name="menu_advanced_hide" msgid="4218809952721972589">"Masquer mém. stock. int."</string>
- <string name="menu_file_size_show" msgid="3240323619260823076">"Afficher taille fichier"</string>
- <string name="menu_file_size_hide" msgid="8881975928502581042">"Masquer taille fichier"</string>
- <string name="button_select" msgid="527196987259139214">"Sélectionner"</string>
- <string name="button_copy" msgid="8706475544635021302">"Copier"</string>
- <string name="button_move" msgid="2202666023104202232">"Déplacer"</string>
- <string name="button_dismiss" msgid="3714065566893946085">"Fermer"</string>
- <string name="button_retry" msgid="4392027584153752797">"Réessayer"</string>
- <string name="sort_name" msgid="9183560467917256779">"Par nom"</string>
- <string name="sort_date" msgid="586080032956151448">"Par date de modification"</string>
- <string name="sort_size" msgid="3350681319735474741">"Par taille"</string>
- <string name="drawer_open" msgid="4545466532430226949">"Afficher les répertoires racines"</string>
- <string name="drawer_close" msgid="7602734368552123318">"Masquer les répertoires racines"</string>
- <string name="save_error" msgid="6167009778003223664">"Échec de l\'enregistrement du document."</string>
- <string name="create_error" msgid="3735649141335444215">"Échec de la création du dossier."</string>
- <string name="query_error" msgid="5999895349602476581">"Impossible de charger le contenu pour le moment"</string>
- <string name="root_recent" msgid="4470053704320518133">"Récents"</string>
- <string name="root_available_bytes" msgid="8568452858617033281">"Espace disponible : <xliff:g id="SIZE">%1$s</xliff:g>"</string>
- <string name="root_type_service" msgid="2178854894416775409">"Services de stockage"</string>
- <string name="root_type_shortcut" msgid="3318760609471618093">"Raccourcis"</string>
- <string name="root_type_device" msgid="7121342474653483538">"Appareils"</string>
- <string name="root_type_apps" msgid="8838065367985945189">"Autres applications"</string>
- <string name="empty" msgid="7858882803708117596">"Aucun élément"</string>
- <string name="no_results" msgid="6622510343880730446">"Aucune correspondance dans %1$s."</string>
- <string name="toast_no_application" msgid="4632640357724698144">"Impossible d\'ouvrir le fichier"</string>
- <string name="toast_failed_delete" msgid="2180678019407244069">"Impossible de supprimer certains documents."</string>
- <string name="share_via" msgid="8966594246261344259">"Partager via"</string>
- <string name="copy_notification_title" msgid="6374299806748219777">"Copie de fichiers en cours"</string>
- <string name="move_notification_title" msgid="6193835179777284805">"Déplacement de fichiers"</string>
- <string name="delete_notification_title" msgid="3329403967712437496">"Suppression des fichiers…"</string>
- <string name="copy_remaining" msgid="6283790937387975095">"Temps restant : <xliff:g id="DURATION">%s</xliff:g>"</string>
- <plurals name="copy_begin" formatted="false" msgid="9071199452634086365">
- <item quantity="one">Copie de <xliff:g id="COUNT_1">%1$d</xliff:g> fichier en cours…</item>
- <item quantity="other">Copie de <xliff:g id="COUNT_1">%1$d</xliff:g> fichiers en cours…</item>
- </plurals>
- <plurals name="move_begin" formatted="false" msgid="8430330882138871643">
- <item quantity="one">Déplacement de <xliff:g id="COUNT_1">%1$d</xliff:g> fichier en cours…</item>
- <item quantity="other">Déplacement de <xliff:g id="COUNT_1">%1$d</xliff:g> fichiers en cours…</item>
- </plurals>
- <plurals name="deleting" formatted="false" msgid="5054338566802559411">
- <item quantity="one">Suppression de <xliff:g id="COUNT_1">%1$d</xliff:g> fichier en cours…</item>
- <item quantity="other">Suppression de <xliff:g id="COUNT_1">%1$d</xliff:g> fichiers en cours…</item>
- </plurals>
- <string name="undo" msgid="7905788502491742328">"Annuler"</string>
- <string name="copy_preparing" msgid="3896202461003039386">"Préparation de la copie en cours…"</string>
- <string name="move_preparing" msgid="2772219441375531410">"Préparation au déplacement…"</string>
- <string name="delete_preparing" msgid="5655813182533491992">"Préparation à la suppression…"</string>
- <string name="delete_progress" msgid="5399405983046157222">"<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="7160447124922897689">
- <item quantity="one">Impossible de copier <xliff:g id="COUNT_1">%1$d</xliff:g> fichier</item>
- <item quantity="other">Impossible de copier <xliff:g id="COUNT_1">%1$d</xliff:g> fichiers</item>
- </plurals>
- <plurals name="move_error_notification_title" formatted="false" msgid="2710901971014783012">
- <item quantity="one">Impossible de déplacer <xliff:g id="COUNT_1">%1$d</xliff:g> fichier</item>
- <item quantity="other">Impossible de déplacer <xliff:g id="COUNT_1">%1$d</xliff:g> fichiers</item>
- </plurals>
- <plurals name="delete_error_notification_title" formatted="false" msgid="7228393157786591199">
- <item quantity="one">Impossible de supprimer <xliff:g id="COUNT_1">%1$d</xliff:g> fichier</item>
- <item quantity="other">Impossible de supprimer <xliff:g id="COUNT_1">%1$d</xliff:g> fichiers</item>
- </plurals>
- <string name="notification_touch_for_details" msgid="6268189413228855582">"Appuyez pour afficher plus d\'informations."</string>
- <string name="close" msgid="3043722427445528732">"Fermer"</string>
- <string name="copy_failure_alert_content" msgid="4563147454522476183">"Les fichiers suivants n\'ont pas été copiés : <xliff:g id="LIST">%1$s</xliff:g>."</string>
- <string name="move_failure_alert_content" msgid="2635075788682922861">"Les fichiers suivants n\'ont pas été déplacés : <xliff:g id="LIST">%1$s</xliff:g>."</string>
- <string name="delete_failure_alert_content" msgid="892393767207938353">"Les fichiers suivants n\'ont pas été supprimés : <xliff:g id="LIST">%1$s</xliff:g>."</string>
- <string name="copy_converted_warning_content" msgid="5753861488218674361">"Ces fichiers ont été convertis dans un autre format : <xliff:g id="LIST">%1$s</xliff:g>."</string>
- <plurals name="clipboard_files_clipped" formatted="false" msgid="855459017537058539">
- <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> fichier a bien été copié dans le Presse-papiers.</item>
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> fichiers ont bien été copiés dans le Presse-papiers.</item>
- </plurals>
- <string name="clipboard_files_cannot_paste" msgid="2878324825602325706">"Impossible de coller les fichiers sélectionnés à cet endroit."</string>
- <string name="menu_rename" msgid="7678802479104285353">"Renommer"</string>
- <string name="rename_error" msgid="4203041674883412606">"Échec du changement de nom du document."</string>
- <string name="menu_eject_root" msgid="2768224615494227325">"Éjecter"</string>
- <string name="notification_copy_files_converted_title" msgid="3153573223054275181">"Certains fichiers ont été convertis"</string>
- <string name="open_external_dialog_request" msgid="5789329484285817629">"Autoriser <xliff:g id="APPNAME"><b>^1</b></xliff:g> à accéder à l\'annuaire \"<xliff:g id="DIRECTORY"><i>^2</i></xliff:g>\" sur <xliff:g id="STORAGE"><i>^3</i></xliff:g> ?"</string>
- <string name="open_external_dialog_request_primary_volume" msgid="6635562535713428688">"Autoriser <xliff:g id="APPNAME"><b>^1</b></xliff:g> à accéder à l\'annuaire \"<xliff:g id="DIRECTORY"><i>^2</i></xliff:g>\" ?"</string>
- <string name="open_external_dialog_root_request" msgid="8899108702926347720">"Autoriser <xliff:g id="APPNAME"><b>^1</b></xliff:g> à accéder à vos données, y compris les photos et les vidéos, sur <xliff:g id="STORAGE"><i>^2</i></xliff:g> ?"</string>
- <string name="never_ask_again" msgid="4295278542972859268">"Ne plus demander"</string>
- <string name="allow" msgid="7225948811296386551">"Autoriser"</string>
- <string name="deny" msgid="2081879885755434506">"Refuser"</string>
- <plurals name="elements_selected" formatted="false" msgid="1376955402452875047">
- <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> élément sélectionné</item>
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> éléments sélectionnés</item>
- </plurals>
- <plurals name="elements_dragged" formatted="false" msgid="3727204615215602228">
- <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> élément</item>
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> éléments</item>
- </plurals>
- <string name="delete_filename_confirmation_message" msgid="5312817725577537488">"Supprimer \"<xliff:g id="NAME">%1$s</xliff:g>\" ?"</string>
- <string name="delete_foldername_confirmation_message" msgid="5885501832257285329">"Supprimer le dossier \"<xliff:g id="NAME">%1$s</xliff:g>\" et son contenu ?"</string>
- <plurals name="delete_files_confirmation_message" formatted="false" msgid="8417505791395471802">
- <item quantity="one">Supprimer <xliff:g id="COUNT_1">%1$d</xliff:g> fichier ?</item>
- <item quantity="other">Supprimer <xliff:g id="COUNT_1">%1$d</xliff:g> fichiers ?</item>
- </plurals>
- <plurals name="delete_folders_confirmation_message" formatted="false" msgid="9185648028213507769">
- <item quantity="one">Supprimer <xliff:g id="COUNT_1">%1$d</xliff:g> dossier et son contenu ?</item>
- <item quantity="other">Supprimer <xliff:g id="COUNT_1">%1$d</xliff:g> dossiers et leur contenu ?</item>
- </plurals>
- <plurals name="delete_items_confirmation_message" formatted="false" msgid="5376214433530243459">
- <item quantity="one">Supprimer <xliff:g id="COUNT_1">%1$d</xliff:g> élément ?</item>
- <item quantity="other">Supprimer <xliff:g id="COUNT_1">%1$d</xliff:g> éléments ?</item>
- </plurals>
-</resources>
diff --git a/packages/DocumentsUI/res/values-gl-rES/strings.xml b/packages/DocumentsUI/res/values-gl-rES/strings.xml
deleted file mode 100644
index 46a5fb0..0000000
--- a/packages/DocumentsUI/res/values-gl-rES/strings.xml
+++ /dev/null
@@ -1,144 +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="app_label" msgid="1551050262492398204">"Ficheiros"</string>
- <string name="downloads_label" msgid="959113951084633612">"Descargas"</string>
- <string name="title_open" msgid="4353228937663917801">"Abrir desde"</string>
- <string name="title_save" msgid="2433679664882857999">"Gardar en"</string>
- <string name="menu_create_dir" msgid="2547620241173881754">"Novo cartafol"</string>
- <string name="menu_grid" msgid="6878021334497835259">"Vista de grade"</string>
- <string name="menu_list" msgid="7279285939892417279">"Vista de lista"</string>
- <string name="menu_sort" msgid="7677740407158414452">"Ordenar por"</string>
- <string name="menu_search" msgid="3816712084502856974">"Buscar"</string>
- <string name="menu_settings" msgid="8239065133341597825">"Configur. almacenamento"</string>
- <string name="menu_open" msgid="432922957274920903">"Abrir"</string>
- <string name="menu_save" msgid="2394743337684426338">"Gardar"</string>
- <string name="menu_share" msgid="3075149983979628146">"Compartir"</string>
- <string name="menu_delete" msgid="8138799623850614177">"Eliminar"</string>
- <string name="menu_select_all" msgid="8323579667348729928">"Seleccionar todo"</string>
- <string name="menu_copy" msgid="3612326052677229148">"Copiar en…"</string>
- <string name="menu_move" msgid="1828090633118079817">"Mover a…"</string>
- <string name="menu_new_window" msgid="1226032889278727538">"Nova ventá"</string>
- <string name="menu_cut_to_clipboard" msgid="2467149185452488383">"Cortar"</string>
- <string name="menu_copy_to_clipboard" msgid="489311381979634291">"Copiar"</string>
- <string name="menu_paste_from_clipboard" msgid="2071583031180257091">"Pegar"</string>
- <string name="menu_advanced_show" msgid="4693652895715631401">"Mostrar almacen. interno"</string>
- <string name="menu_advanced_hide" msgid="4218809952721972589">"Ocultar almacen. interno"</string>
- <string name="menu_file_size_show" msgid="3240323619260823076">"Mostrar tamaño ficheiro"</string>
- <string name="menu_file_size_hide" msgid="8881975928502581042">"Ocultar tamaño ficheiro"</string>
- <string name="button_select" msgid="527196987259139214">"Seleccionar"</string>
- <string name="button_copy" msgid="8706475544635021302">"Copiar"</string>
- <string name="button_move" msgid="2202666023104202232">"Mover"</string>
- <string name="button_dismiss" msgid="3714065566893946085">"Ignorar"</string>
- <string name="button_retry" msgid="4392027584153752797">"Tentar de novo"</string>
- <string name="sort_name" msgid="9183560467917256779">"Por nome"</string>
- <string name="sort_date" msgid="586080032956151448">"Por data de modificación"</string>
- <string name="sort_size" msgid="3350681319735474741">"Por tamaño"</string>
- <string name="drawer_open" msgid="4545466532430226949">"Mostrar raíces"</string>
- <string name="drawer_close" msgid="7602734368552123318">"Ocultar raíces"</string>
- <string name="save_error" msgid="6167009778003223664">"Non se puido gardar o documento"</string>
- <string name="create_error" msgid="3735649141335444215">"Non se puido crear o cartafol"</string>
- <string name="query_error" msgid="5999895349602476581">"Non se pode cargar o contido neste momento"</string>
- <string name="root_recent" msgid="4470053704320518133">"Recentes"</string>
- <string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> libres"</string>
- <string name="root_type_service" msgid="2178854894416775409">"Servizos de almacenamento"</string>
- <string name="root_type_shortcut" msgid="3318760609471618093">"Atallos"</string>
- <string name="root_type_device" msgid="7121342474653483538">"Dispositivos"</string>
- <string name="root_type_apps" msgid="8838065367985945189">"Máis aplicacións"</string>
- <string name="empty" msgid="7858882803708117596">"Ningún elemento"</string>
- <string name="no_results" msgid="6622510343880730446">"Non hai coincidencias en %1$s"</string>
- <string name="toast_no_application" msgid="4632640357724698144">"Non se pode abrir o ficheiro"</string>
- <string name="toast_failed_delete" msgid="2180678019407244069">"Non se poden eliminar algúns documentos"</string>
- <string name="share_via" msgid="8966594246261344259">"Compartir a través de"</string>
- <string name="copy_notification_title" msgid="6374299806748219777">"Copiando ficheiros"</string>
- <string name="move_notification_title" msgid="6193835179777284805">"Mover ficheiros"</string>
- <string name="delete_notification_title" msgid="3329403967712437496">"Eliminando ficheiros"</string>
- <string name="copy_remaining" msgid="6283790937387975095">"Tempo restante: <xliff:g id="DURATION">%s</xliff:g>"</string>
- <plurals name="copy_begin" formatted="false" msgid="9071199452634086365">
- <item quantity="other">Copiando <xliff:g id="COUNT_1">%1$d</xliff:g> ficheiros.</item>
- <item quantity="one">Copianto <xliff:g id="COUNT_0">%1$d</xliff:g> ficheiro.</item>
- </plurals>
- <plurals name="move_begin" formatted="false" msgid="8430330882138871643">
- <item quantity="other">Movendo <xliff:g id="COUNT_1">%1$d</xliff:g> ficheiros.</item>
- <item quantity="one">Movendo <xliff:g id="COUNT_0">%1$d</xliff:g> ficheiro.</item>
- </plurals>
- <plurals name="deleting" formatted="false" msgid="5054338566802559411">
- <item quantity="other">Eliminando <xliff:g id="COUNT_1">%1$d</xliff:g> ficheiros.</item>
- <item quantity="one">Eliminando <xliff:g id="COUNT_0">%1$d</xliff:g> ficheiro.</item>
- </plurals>
- <string name="undo" msgid="7905788502491742328">"Desfacer"</string>
- <string name="copy_preparing" msgid="3896202461003039386">"Preparando para copiar…"</string>
- <string name="move_preparing" msgid="2772219441375531410">"Preparándose para mover..."</string>
- <string name="delete_preparing" msgid="5655813182533491992">"Preparando para eliminar…"</string>
- <string name="delete_progress" msgid="5399405983046157222">"<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="7160447124922897689">
- <item quantity="other">Non se puideron copiar <xliff:g id="COUNT_1">%1$d</xliff:g> ficheiros</item>
- <item quantity="one">Non se puido copiar <xliff:g id="COUNT_0">%1$d</xliff:g> ficheiro</item>
- </plurals>
- <plurals name="move_error_notification_title" formatted="false" msgid="2710901971014783012">
- <item quantity="other">Non se puideron mover <xliff:g id="COUNT_1">%1$d</xliff:g> ficheiros</item>
- <item quantity="one">Non se puido mover <xliff:g id="COUNT_0">%1$d</xliff:g> ficheiro</item>
- </plurals>
- <plurals name="delete_error_notification_title" formatted="false" msgid="7228393157786591199">
- <item quantity="other">Non se puideron eliminar <xliff:g id="COUNT_1">%1$d</xliff:g> ficheiros</item>
- <item quantity="one">Non se puido eliminar <xliff:g id="COUNT_0">%1$d</xliff:g> ficheiro</item>
- </plurals>
- <string name="notification_touch_for_details" msgid="6268189413228855582">"Toca para ver detalles"</string>
- <string name="close" msgid="3043722427445528732">"Pechar"</string>
- <string name="copy_failure_alert_content" msgid="4563147454522476183">"Non se copiaron estes ficheiros: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="move_failure_alert_content" msgid="2635075788682922861">"Non se moveron estes ficheiros: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="delete_failure_alert_content" msgid="892393767207938353">"Non se eliminaron estes ficheiros: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="copy_converted_warning_content" msgid="5753861488218674361">"Estes ficheiros convertéronse a outro formato: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <plurals name="clipboard_files_clipped" formatted="false" msgid="855459017537058539">
- <item quantity="other">Copiáronse <xliff:g id="COUNT_1">%1$d</xliff:g> ficheiros no portapapeis.</item>
- <item quantity="one">Copiouse <xliff:g id="COUNT_0">%1$d</xliff:g> ficheiro no portapapeis.</item>
- </plurals>
- <string name="clipboard_files_cannot_paste" msgid="2878324825602325706">"Non se poden pegar os ficheiros seleccionados nesta localización."</string>
- <string name="menu_rename" msgid="7678802479104285353">"Cambiar nome"</string>
- <string name="rename_error" msgid="4203041674883412606">"Non se puido cambiar o nome do documento"</string>
- <string name="menu_eject_root" msgid="2768224615494227325">"Expulsar"</string>
- <string name="notification_copy_files_converted_title" msgid="3153573223054275181">"Convertéronse algúns ficheiros"</string>
- <string name="open_external_dialog_request" msgid="5789329484285817629">"Queres outorgar acceso a <xliff:g id="APPNAME"><b>^1</b></xliff:g> ao directorio <xliff:g id="DIRECTORY"><i>^2</i></xliff:g> no almacenamento de <xliff:g id="STORAGE"><i>^3</i></xliff:g>?"</string>
- <string name="open_external_dialog_request_primary_volume" msgid="6635562535713428688">"Queres darlle acceso a <xliff:g id="APPNAME"><b>^1</b></xliff:g> ao directorio <xliff:g id="DIRECTORY"><i>^2</i></xliff:g>?"</string>
- <string name="open_external_dialog_root_request" msgid="8899108702926347720">"Queres darlle acceso a <xliff:g id="APPNAME"><b>^1</b></xliff:g> aos teus datos almacenados en <xliff:g id="STORAGE"><i>^2</i></xliff:g>, incluídos vídeos e fotos?"</string>
- <string name="never_ask_again" msgid="4295278542972859268">"Non preguntar de novo"</string>
- <string name="allow" msgid="7225948811296386551">"Permitir"</string>
- <string name="deny" msgid="2081879885755434506">"Rexeitar"</string>
- <plurals name="elements_selected" formatted="false" msgid="1376955402452875047">
- <item quantity="other">Seleccionáronse <xliff:g id="COUNT_1">%1$d</xliff:g></item>
- <item quantity="one">Seleccionouse <xliff:g id="COUNT_0">%1$d</xliff:g></item>
- </plurals>
- <plurals name="elements_dragged" formatted="false" msgid="3727204615215602228">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> elementos</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> elemento</item>
- </plurals>
- <string name="delete_filename_confirmation_message" msgid="5312817725577537488">"Queres eliminar \"<xliff:g id="NAME">%1$s</xliff:g>\"?"</string>
- <string name="delete_foldername_confirmation_message" msgid="5885501832257285329">"Queres eliminar o cartafol \"<xliff:g id="NAME">%1$s</xliff:g>\" e o seu contido?"</string>
- <plurals name="delete_files_confirmation_message" formatted="false" msgid="8417505791395471802">
- <item quantity="other">Queres eliminar <xliff:g id="COUNT_1">%1$d</xliff:g> ficheiros?</item>
- <item quantity="one">Queres eliminar <xliff:g id="COUNT_0">%1$d</xliff:g> ficheiro?</item>
- </plurals>
- <plurals name="delete_folders_confirmation_message" formatted="false" msgid="9185648028213507769">
- <item quantity="other">Queres eliminar <xliff:g id="COUNT_1">%1$d</xliff:g> cartafoles e os seus contidos?</item>
- <item quantity="one">Queres eliminar <xliff:g id="COUNT_0">%1$d</xliff:g> cartafol e os seus contidos?</item>
- </plurals>
- <plurals name="delete_items_confirmation_message" formatted="false" msgid="5376214433530243459">
- <item quantity="other">Queres eliminar <xliff:g id="COUNT_1">%1$d</xliff:g> elementos?</item>
- <item quantity="one">Queres eliminar <xliff:g id="COUNT_0">%1$d</xliff:g> elemento?</item>
- </plurals>
-</resources>
diff --git a/packages/DocumentsUI/res/values-gu-rIN/strings.xml b/packages/DocumentsUI/res/values-gu-rIN/strings.xml
deleted file mode 100644
index 974d1f2..0000000
--- a/packages/DocumentsUI/res/values-gu-rIN/strings.xml
+++ /dev/null
@@ -1,144 +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="app_label" msgid="1551050262492398204">"ફાઇલો"</string>
- <string name="downloads_label" msgid="959113951084633612">"ડાઉનલોડ્સ"</string>
- <string name="title_open" msgid="4353228937663917801">"અહીંથી ખોલો"</string>
- <string name="title_save" msgid="2433679664882857999">"આમાં સાચવો"</string>
- <string name="menu_create_dir" msgid="2547620241173881754">"નવું ફોલ્ડર"</string>
- <string name="menu_grid" msgid="6878021334497835259">"ગ્રિડ દૃશ્ય"</string>
- <string name="menu_list" msgid="7279285939892417279">"સૂચિ દૃશ્ય"</string>
- <string name="menu_sort" msgid="7677740407158414452">"આ પ્રમાણે સૉર્ટ કરો"</string>
- <string name="menu_search" msgid="3816712084502856974">"શોધો"</string>
- <string name="menu_settings" msgid="8239065133341597825">"સ્ટોરેજ સેટિંગ્સ"</string>
- <string name="menu_open" msgid="432922957274920903">"ખોલો"</string>
- <string name="menu_save" msgid="2394743337684426338">"સાચવો"</string>
- <string name="menu_share" msgid="3075149983979628146">"શેર કરો"</string>
- <string name="menu_delete" msgid="8138799623850614177">"કાઢી નાખો"</string>
- <string name="menu_select_all" msgid="8323579667348729928">"બધા પસંદ કરો"</string>
- <string name="menu_copy" msgid="3612326052677229148">"આના પર કૉપિ કરો…"</string>
- <string name="menu_move" msgid="1828090633118079817">"આમાં ખસેડો…"</string>
- <string name="menu_new_window" msgid="1226032889278727538">"નવી વિંડો"</string>
- <string name="menu_cut_to_clipboard" msgid="2467149185452488383">"કાપો"</string>
- <string name="menu_copy_to_clipboard" msgid="489311381979634291">"કૉપિ કરો"</string>
- <string name="menu_paste_from_clipboard" msgid="2071583031180257091">"પેસ્ટ કરો"</string>
- <string name="menu_advanced_show" msgid="4693652895715631401">"આંતરિક સ્ટોરેજ બતાવો"</string>
- <string name="menu_advanced_hide" msgid="4218809952721972589">"આંતરિક સંગ્રહ છુપાવો"</string>
- <string name="menu_file_size_show" msgid="3240323619260823076">"ફાઇલ કદ બતાવો"</string>
- <string name="menu_file_size_hide" msgid="8881975928502581042">"ફાઇલ કદ છુપાવો"</string>
- <string name="button_select" msgid="527196987259139214">"પસંદ કરો"</string>
- <string name="button_copy" msgid="8706475544635021302">"કૉપિ કરો"</string>
- <string name="button_move" msgid="2202666023104202232">"ખસેડો"</string>
- <string name="button_dismiss" msgid="3714065566893946085">"છોડી દો"</string>
- <string name="button_retry" msgid="4392027584153752797">"ફરીથી પ્રયત્ન કરો"</string>
- <string name="sort_name" msgid="9183560467917256779">"નામ દ્વારા"</string>
- <string name="sort_date" msgid="586080032956151448">"સંશોધન તારીખ દ્વારા"</string>
- <string name="sort_size" msgid="3350681319735474741">"કદ દ્વારા"</string>
- <string name="drawer_open" msgid="4545466532430226949">"રૂટ્સ બતાવો"</string>
- <string name="drawer_close" msgid="7602734368552123318">"રૂટ્સ છુપાવો"</string>
- <string name="save_error" msgid="6167009778003223664">"દસ્તાવેજ સાચવવામાં નિષ્ફળ થયાં."</string>
- <string name="create_error" msgid="3735649141335444215">"ફોલ્ડર બનાવવામાં નિષ્ફળ થયા"</string>
- <string name="query_error" msgid="5999895349602476581">"આ પળે સામગ્રી લોડ કરી શકતાં નથી"</string>
- <string name="root_recent" msgid="4470053704320518133">"તાજેતરના"</string>
- <string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> ખાલી"</string>
- <string name="root_type_service" msgid="2178854894416775409">"સંગ્રહ સેવાઓ"</string>
- <string name="root_type_shortcut" msgid="3318760609471618093">"શોર્ટકટ્સ"</string>
- <string name="root_type_device" msgid="7121342474653483538">"ઉપકરણો"</string>
- <string name="root_type_apps" msgid="8838065367985945189">"વધુ ઍપ્લિકેશનો"</string>
- <string name="empty" msgid="7858882803708117596">"કોઈ આઇટમ્સ નથી"</string>
- <string name="no_results" msgid="6622510343880730446">"%1$s માં કોઇ મેળ નથી"</string>
- <string name="toast_no_application" msgid="4632640357724698144">"ફાઇલ ખોલી શકતાં નથી"</string>
- <string name="toast_failed_delete" msgid="2180678019407244069">"કેટલાક દસ્તાવેજો કાઢી નાખવામાં અસમર્થ"</string>
- <string name="share_via" msgid="8966594246261344259">"આના દ્વારા શેર કરો"</string>
- <string name="copy_notification_title" msgid="6374299806748219777">"ફાઇલો કૉપિ કરી રહ્યાં છે"</string>
- <string name="move_notification_title" msgid="6193835179777284805">"ફાઇલો ખસેડી રહ્યાં છે"</string>
- <string name="delete_notification_title" msgid="3329403967712437496">"ફાઇલને નીકાળી રહ્યાં છે"</string>
- <string name="copy_remaining" msgid="6283790937387975095">"<xliff:g id="DURATION">%s</xliff:g> બાકી"</string>
- <plurals name="copy_begin" formatted="false" msgid="9071199452634086365">
- <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> ફાઇલો કૉપિ કરી રહ્યાં છે.</item>
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> ફાઇલો કૉપિ કરી રહ્યાં છે.</item>
- </plurals>
- <plurals name="move_begin" formatted="false" msgid="8430330882138871643">
- <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="deleting" formatted="false" msgid="5054338566802559411">
- <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="7905788502491742328">"પૂર્વવત્ કરો"</string>
- <string name="copy_preparing" msgid="3896202461003039386">"કૉપિ માટે તૈયારી કરી રહ્યું છે…"</string>
- <string name="move_preparing" msgid="2772219441375531410">"ખસેડવા માટે તૈયાર કરી રહ્યું છે…"</string>
- <string name="delete_preparing" msgid="5655813182533491992">"કાઢી નાખવાની તૈયારી કરી રહ્યાં છે…"</string>
- <string name="delete_progress" msgid="5399405983046157222">"<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="7160447124922897689">
- <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="move_error_notification_title" formatted="false" msgid="2710901971014783012">
- <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_error_notification_title" formatted="false" msgid="7228393157786591199">
- <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="6268189413228855582">"વિગતો જોવા માટે ટૅપ કરો"</string>
- <string name="close" msgid="3043722427445528732">"બંધ કરો"</string>
- <string name="copy_failure_alert_content" msgid="4563147454522476183">"આ ફાઇલો કૉપિ કરી નહોતી: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="move_failure_alert_content" msgid="2635075788682922861">"આ ફાઇલો ખસેડી નહોતી: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="delete_failure_alert_content" msgid="892393767207938353">"આ ફાઇલો કાઢી નાખી નહોતી: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="copy_converted_warning_content" msgid="5753861488218674361">"આ ફાઇલો બીજા ફોર્મેટમાં રૂપાંતરિત કરી હતી: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <plurals name="clipboard_files_clipped" formatted="false" msgid="855459017537058539">
- <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="clipboard_files_cannot_paste" msgid="2878324825602325706">"આ સ્થાનમાં પસંદ કરેલ ફાઇલો પેસ્ટ કરી શકાતી નથી."</string>
- <string name="menu_rename" msgid="7678802479104285353">"નામ બદલો"</string>
- <string name="rename_error" msgid="4203041674883412606">"દસ્તાવેજનું નામ બદલવામાં નિષ્ફળ થયાં"</string>
- <string name="menu_eject_root" msgid="2768224615494227325">"બહાર કાઢો"</string>
- <string name="notification_copy_files_converted_title" msgid="3153573223054275181">"કેટલીક ફાઇલો રૂપાંતરિત કરી હતી"</string>
- <string name="open_external_dialog_request" msgid="5789329484285817629">"<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="6635562535713428688">"<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="8899108702926347720">"<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="4295278542972859268">"ફરીથી પૂછશો નહીં"</string>
- <string name="allow" msgid="7225948811296386551">"મંજૂરી આપો"</string>
- <string name="deny" msgid="2081879885755434506">"નકારો"</string>
- <plurals name="elements_selected" formatted="false" msgid="1376955402452875047">
- <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="3727204615215602228">
- <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="5312817725577537488">"\"<xliff:g id="NAME">%1$s</xliff:g>\" ને કાઢી નાખીએ?"</string>
- <string name="delete_foldername_confirmation_message" msgid="5885501832257285329">"\"<xliff:g id="NAME">%1$s</xliff:g>\" ફોલ્ડર અને તેની સામગ્રીઓને કાઢી નાખીએ?"</string>
- <plurals name="delete_files_confirmation_message" formatted="false" msgid="8417505791395471802">
- <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="9185648028213507769">
- <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="5376214433530243459">
- <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>
-</resources>
diff --git a/packages/DocumentsUI/res/values-hi/strings.xml b/packages/DocumentsUI/res/values-hi/strings.xml
deleted file mode 100644
index ff0faed..0000000
--- a/packages/DocumentsUI/res/values-hi/strings.xml
+++ /dev/null
@@ -1,144 +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="app_label" msgid="1551050262492398204">"फ़ाइल"</string>
- <string name="downloads_label" msgid="959113951084633612">"डाउनलोड"</string>
- <string name="title_open" msgid="4353228937663917801">"यहां से खोलें"</string>
- <string name="title_save" msgid="2433679664882857999">"यहां सहेजें"</string>
- <string name="menu_create_dir" msgid="2547620241173881754">"नया फ़ोल्डर"</string>
- <string name="menu_grid" msgid="6878021334497835259">"ग्रिड दृश्य"</string>
- <string name="menu_list" msgid="7279285939892417279">"सूची दृश्य"</string>
- <string name="menu_sort" msgid="7677740407158414452">"इससे क्रमित करें"</string>
- <string name="menu_search" msgid="3816712084502856974">"खोजें"</string>
- <string name="menu_settings" msgid="8239065133341597825">"मेमोरी सेटिंग"</string>
- <string name="menu_open" msgid="432922957274920903">"खोलें"</string>
- <string name="menu_save" msgid="2394743337684426338">"जोड़ें"</string>
- <string name="menu_share" msgid="3075149983979628146">"साझा करें"</string>
- <string name="menu_delete" msgid="8138799623850614177">"हटाएं"</string>
- <string name="menu_select_all" msgid="8323579667348729928">"सभी चुनें"</string>
- <string name="menu_copy" msgid="3612326052677229148">"इनकी कॉपी बनाएं..."</string>
- <string name="menu_move" msgid="1828090633118079817">"इसमें ले जाएं…"</string>
- <string name="menu_new_window" msgid="1226032889278727538">"नई विंडो"</string>
- <string name="menu_cut_to_clipboard" msgid="2467149185452488383">"काटें"</string>
- <string name="menu_copy_to_clipboard" msgid="489311381979634291">"कॉपी करें"</string>
- <string name="menu_paste_from_clipboard" msgid="2071583031180257091">"चिपकाएं"</string>
- <string name="menu_advanced_show" msgid="4693652895715631401">"आंतरिक मेमोरी दिखाएं"</string>
- <string name="menu_advanced_hide" msgid="4218809952721972589">"आंतरिक मेमोरी छिपाएं"</string>
- <string name="menu_file_size_show" msgid="3240323619260823076">"फ़ाइल आकार दिखाएं"</string>
- <string name="menu_file_size_hide" msgid="8881975928502581042">"फ़ाइल आकार छिपाएं"</string>
- <string name="button_select" msgid="527196987259139214">"चुनें"</string>
- <string name="button_copy" msgid="8706475544635021302">"कॉपी करें"</string>
- <string name="button_move" msgid="2202666023104202232">"ले जाएं"</string>
- <string name="button_dismiss" msgid="3714065566893946085">"ख़ारिज करें"</string>
- <string name="button_retry" msgid="4392027584153752797">"पुनः प्रयास करें"</string>
- <string name="sort_name" msgid="9183560467917256779">"नाम के अनुसार"</string>
- <string name="sort_date" msgid="586080032956151448">"बदलाव के दिनांक के अनुसार"</string>
- <string name="sort_size" msgid="3350681319735474741">"आकार के अनुसार"</string>
- <string name="drawer_open" msgid="4545466532430226949">"रूट दिखाएं"</string>
- <string name="drawer_close" msgid="7602734368552123318">"रूट छिपाएं"</string>
- <string name="save_error" msgid="6167009778003223664">"दस्तावेज़ सहेजने में विफल रहा"</string>
- <string name="create_error" msgid="3735649141335444215">"फ़ोल्डर बनाने में विफल"</string>
- <string name="query_error" msgid="5999895349602476581">"इस समय सामग्री लोड नहीं की जा सकती"</string>
- <string name="root_recent" msgid="4470053704320518133">"हाल ही के"</string>
- <string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> खाली"</string>
- <string name="root_type_service" msgid="2178854894416775409">"मेमोरी सेवाएं"</string>
- <string name="root_type_shortcut" msgid="3318760609471618093">"शॉर्टकट"</string>
- <string name="root_type_device" msgid="7121342474653483538">"डिवाइस"</string>
- <string name="root_type_apps" msgid="8838065367985945189">"अधिक ऐप्स"</string>
- <string name="empty" msgid="7858882803708117596">"कोई आइटम नहीं"</string>
- <string name="no_results" msgid="6622510343880730446">"%1$s में कोई मिलान नहीं मिला"</string>
- <string name="toast_no_application" msgid="4632640357724698144">"फ़ाइल नहीं खोली जा सकती"</string>
- <string name="toast_failed_delete" msgid="2180678019407244069">"कुछ दस्तावेज़ों को हटाने में अक्षम"</string>
- <string name="share_via" msgid="8966594246261344259">"इसके द्वारा साझा करें"</string>
- <string name="copy_notification_title" msgid="6374299806748219777">"फ़ाइलें कॉपी हो रही हैं"</string>
- <string name="move_notification_title" msgid="6193835179777284805">"फाइलें ले जाई जा रही हैं"</string>
- <string name="delete_notification_title" msgid="3329403967712437496">"फ़ाइलें हटाई जा रही हैं"</string>
- <string name="copy_remaining" msgid="6283790937387975095">"<xliff:g id="DURATION">%s</xliff:g> शेष"</string>
- <plurals name="copy_begin" formatted="false" msgid="9071199452634086365">
- <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> फ़ाइलें कॉपी की जा रही हैं.</item>
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> फ़ाइलें कॉपी की जा रही हैं.</item>
- </plurals>
- <plurals name="move_begin" formatted="false" msgid="8430330882138871643">
- <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="deleting" formatted="false" msgid="5054338566802559411">
- <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="7905788502491742328">"वापस लाएं"</string>
- <string name="copy_preparing" msgid="3896202461003039386">"कॉपी करने की तैयारी हो रही है…"</string>
- <string name="move_preparing" msgid="2772219441375531410">"ले जाने की तैयारी हो रही है…"</string>
- <string name="delete_preparing" msgid="5655813182533491992">"हटाने के लिए तैयार हो रहा है…"</string>
- <string name="delete_progress" msgid="5399405983046157222">"<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="7160447124922897689">
- <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="move_error_notification_title" formatted="false" msgid="2710901971014783012">
- <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_error_notification_title" formatted="false" msgid="7228393157786591199">
- <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="6268189413228855582">"विवरणों को देखने के लिए टैप करें"</string>
- <string name="close" msgid="3043722427445528732">"बंद करें"</string>
- <string name="copy_failure_alert_content" msgid="4563147454522476183">"इन फ़ाइलों की कॉपी नहीं बनाई गई: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="move_failure_alert_content" msgid="2635075788682922861">"ये फ़ाइलें नहीं ले जाई गईं: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="delete_failure_alert_content" msgid="892393767207938353">"इन फ़ाइलों को हटाया नहीं गया: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="copy_converted_warning_content" msgid="5753861488218674361">"ये फ़ाइलें किसी अन्य प्रारूप में रूपांतरित हो गई थीं: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <plurals name="clipboard_files_clipped" formatted="false" msgid="855459017537058539">
- <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="clipboard_files_cannot_paste" msgid="2878324825602325706">"चयनित फ़ाइलों को इस स्थान में नहीं चिपकाया जा सकता."</string>
- <string name="menu_rename" msgid="7678802479104285353">"नाम बदलें"</string>
- <string name="rename_error" msgid="4203041674883412606">"दस्तावेज़ का नाम बदलना विफल रहा"</string>
- <string name="menu_eject_root" msgid="2768224615494227325">"निकालें"</string>
- <string name="notification_copy_files_converted_title" msgid="3153573223054275181">"कुछ फ़ाइलें रूपांतरित हो गई थीं"</string>
- <string name="open_external_dialog_request" msgid="5789329484285817629">"<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="6635562535713428688">"<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="8899108702926347720">"<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="4295278542972859268">"फिर से ना पूछें"</string>
- <string name="allow" msgid="7225948811296386551">"अनुमति दें"</string>
- <string name="deny" msgid="2081879885755434506">"अस्वीकारें"</string>
- <plurals name="elements_selected" formatted="false" msgid="1376955402452875047">
- <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="3727204615215602228">
- <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="5312817725577537488">"\"<xliff:g id="NAME">%1$s</xliff:g>\" को हटाएं?"</string>
- <string name="delete_foldername_confirmation_message" msgid="5885501832257285329">"\"<xliff:g id="NAME">%1$s</xliff:g>\" फ़ोल्डर और उसकी सामग्रियां हटाएं?"</string>
- <plurals name="delete_files_confirmation_message" formatted="false" msgid="8417505791395471802">
- <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="9185648028213507769">
- <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="5376214433530243459">
- <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>
-</resources>
diff --git a/packages/DocumentsUI/res/values-hr/strings.xml b/packages/DocumentsUI/res/values-hr/strings.xml
deleted file mode 100644
index dfaebd3..0000000
--- a/packages/DocumentsUI/res/values-hr/strings.xml
+++ /dev/null
@@ -1,156 +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="app_label" msgid="1551050262492398204">"Datoteke"</string>
- <string name="downloads_label" msgid="959113951084633612">"Preuzimanja"</string>
- <string name="title_open" msgid="4353228937663917801">"Otvori iz"</string>
- <string name="title_save" msgid="2433679664882857999">"Spremi u"</string>
- <string name="menu_create_dir" msgid="2547620241173881754">"Nova mapa"</string>
- <string name="menu_grid" msgid="6878021334497835259">"Prikaz rešetke"</string>
- <string name="menu_list" msgid="7279285939892417279">"Prikaz popisa"</string>
- <string name="menu_sort" msgid="7677740407158414452">"Poredano po"</string>
- <string name="menu_search" msgid="3816712084502856974">"Pretraživanje"</string>
- <string name="menu_settings" msgid="8239065133341597825">"Postavke pohrane"</string>
- <string name="menu_open" msgid="432922957274920903">"Otvaranje"</string>
- <string name="menu_save" msgid="2394743337684426338">"Spremi"</string>
- <string name="menu_share" msgid="3075149983979628146">"Dijeli"</string>
- <string name="menu_delete" msgid="8138799623850614177">"Izbriši"</string>
- <string name="menu_select_all" msgid="8323579667348729928">"Odaberi sve"</string>
- <string name="menu_copy" msgid="3612326052677229148">"Kopiraj u…"</string>
- <string name="menu_move" msgid="1828090633118079817">"Premjesti u…"</string>
- <string name="menu_new_window" msgid="1226032889278727538">"Novi prozor"</string>
- <string name="menu_cut_to_clipboard" msgid="2467149185452488383">"Izreži"</string>
- <string name="menu_copy_to_clipboard" msgid="489311381979634291">"Kopiraj"</string>
- <string name="menu_paste_from_clipboard" msgid="2071583031180257091">"Zalijepi"</string>
- <string name="menu_advanced_show" msgid="4693652895715631401">"Pokaži internu pohranu"</string>
- <string name="menu_advanced_hide" msgid="4218809952721972589">"Sakrij internu pohranu"</string>
- <string name="menu_file_size_show" msgid="3240323619260823076">"Pokaži veličinu datoteke"</string>
- <string name="menu_file_size_hide" msgid="8881975928502581042">"Sakrij veličinu datoteke"</string>
- <string name="button_select" msgid="527196987259139214">"Odaberi"</string>
- <string name="button_copy" msgid="8706475544635021302">"Kopiraj"</string>
- <string name="button_move" msgid="2202666023104202232">"Premjesti"</string>
- <string name="button_dismiss" msgid="3714065566893946085">"Odbaci"</string>
- <string name="button_retry" msgid="4392027584153752797">"Pokušaj ponovo"</string>
- <string name="sort_name" msgid="9183560467917256779">"Po nazivu"</string>
- <string name="sort_date" msgid="586080032956151448">"Po datumu izmjene"</string>
- <string name="sort_size" msgid="3350681319735474741">"Po veličini"</string>
- <string name="drawer_open" msgid="4545466532430226949">"Prikaži korijene"</string>
- <string name="drawer_close" msgid="7602734368552123318">"Sakrij korijene"</string>
- <string name="save_error" msgid="6167009778003223664">"Nije uspjelo spremanje dokumenta"</string>
- <string name="create_error" msgid="3735649141335444215">"Izrada mape nije uspjela"</string>
- <string name="query_error" msgid="5999895349602476581">"Sadržaj se trenutačno ne može učitati"</string>
- <string name="root_recent" msgid="4470053704320518133">"Nedavno"</string>
- <string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> besplatno"</string>
- <string name="root_type_service" msgid="2178854894416775409">"Usluge pohrane"</string>
- <string name="root_type_shortcut" msgid="3318760609471618093">"Prečaci"</string>
- <string name="root_type_device" msgid="7121342474653483538">"Uređaji"</string>
- <string name="root_type_apps" msgid="8838065367985945189">"Više aplikacija"</string>
- <string name="empty" msgid="7858882803708117596">"Nema stavki"</string>
- <string name="no_results" msgid="6622510343880730446">"%1$s ne sadrži podudaranja"</string>
- <string name="toast_no_application" msgid="4632640357724698144">"Datoteka se ne može otvoriti"</string>
- <string name="toast_failed_delete" msgid="2180678019407244069">"Nije moguće izbrisati neke dokumente"</string>
- <string name="share_via" msgid="8966594246261344259">"Dijeli putem"</string>
- <string name="copy_notification_title" msgid="6374299806748219777">"Kopiranje datoteka"</string>
- <string name="move_notification_title" msgid="6193835179777284805">"Premještanje datoteka"</string>
- <string name="delete_notification_title" msgid="3329403967712437496">"Brisanje datoteka"</string>
- <string name="copy_remaining" msgid="6283790937387975095">"Još <xliff:g id="DURATION">%s</xliff:g>"</string>
- <plurals name="copy_begin" formatted="false" msgid="9071199452634086365">
- <item quantity="one">Kopiranje <xliff:g id="COUNT_1">%1$d</xliff:g> datoteke.</item>
- <item quantity="few">Kopiranje <xliff:g id="COUNT_1">%1$d</xliff:g> datoteke.</item>
- <item quantity="other">Kopiranje <xliff:g id="COUNT_1">%1$d</xliff:g> datoteka.</item>
- </plurals>
- <plurals name="move_begin" formatted="false" msgid="8430330882138871643">
- <item quantity="one">Premještanje <xliff:g id="COUNT_1">%1$d</xliff:g> datoteke.</item>
- <item quantity="few">Premještanje <xliff:g id="COUNT_1">%1$d</xliff:g> datoteke.</item>
- <item quantity="other">Premještanje <xliff:g id="COUNT_1">%1$d</xliff:g> datoteka.</item>
- </plurals>
- <plurals name="deleting" formatted="false" msgid="5054338566802559411">
- <item quantity="one">Brisanje <xliff:g id="COUNT_1">%1$d</xliff:g> datoteke.</item>
- <item quantity="few">Brisanje <xliff:g id="COUNT_1">%1$d</xliff:g> datoteke.</item>
- <item quantity="other">Brisanje <xliff:g id="COUNT_1">%1$d</xliff:g> datoteka.</item>
- </plurals>
- <string name="undo" msgid="7905788502491742328">"Poništi"</string>
- <string name="copy_preparing" msgid="3896202461003039386">"Priprema za kopiranje…"</string>
- <string name="move_preparing" msgid="2772219441375531410">"Priprema za premještanje…"</string>
- <string name="delete_preparing" msgid="5655813182533491992">"Priprema za brisanje…"</string>
- <string name="delete_progress" msgid="5399405983046157222">"<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="7160447124922897689">
- <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> datoteka nije kopirana</item>
- <item quantity="few"><xliff:g id="COUNT_1">%1$d</xliff:g> datoteke nisu kopirane</item>
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> datoteka nije kopirano</item>
- </plurals>
- <plurals name="move_error_notification_title" formatted="false" msgid="2710901971014783012">
- <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> datoteka nije premještena</item>
- <item quantity="few"><xliff:g id="COUNT_1">%1$d</xliff:g> datoteke nisu premještene</item>
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> datoteka nije premješteno</item>
- </plurals>
- <plurals name="delete_error_notification_title" formatted="false" msgid="7228393157786591199">
- <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> datoteka nije izbrisana</item>
- <item quantity="few"><xliff:g id="COUNT_1">%1$d</xliff:g> datoteke nisu izbrisane</item>
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> datoteka nije izbrisano</item>
- </plurals>
- <string name="notification_touch_for_details" msgid="6268189413228855582">"Dodirnite da biste vidjeli pojedinosti"</string>
- <string name="close" msgid="3043722427445528732">"Zatvori"</string>
- <string name="copy_failure_alert_content" msgid="4563147454522476183">"Ove datoteke nisu kopirane: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="move_failure_alert_content" msgid="2635075788682922861">"Ove datoteke nisu premještene: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="delete_failure_alert_content" msgid="892393767207938353">"Ove datoteke nisu izbrisane: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="copy_converted_warning_content" msgid="5753861488218674361">"Ove su datoteke konvertirane u neki drugi format: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <plurals name="clipboard_files_clipped" formatted="false" msgid="855459017537058539">
- <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> datoteka kopirana je u međuspremnik.</item>
- <item quantity="few"><xliff:g id="COUNT_1">%1$d</xliff:g> datoteke kopirane su u međuspremnik.</item>
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> datoteka kopirano je u međuspremnik.</item>
- </plurals>
- <string name="clipboard_files_cannot_paste" msgid="2878324825602325706">"Nije moguće zalijepiti odabrane datoteke na ovu lokaciju."</string>
- <string name="menu_rename" msgid="7678802479104285353">"Promijeni naziv"</string>
- <string name="rename_error" msgid="4203041674883412606">"Naziv dokumenta nije promijenjen"</string>
- <string name="menu_eject_root" msgid="2768224615494227325">"Izbaci"</string>
- <string name="notification_copy_files_converted_title" msgid="3153573223054275181">"Neke su datoteke konvertirane"</string>
- <string name="open_external_dialog_request" msgid="5789329484285817629">"Želite li aplikaciji <xliff:g id="APPNAME"><b>^1</b></xliff:g> odobriti pristup direktoriju <xliff:g id="DIRECTORY"><i>^2</i></xliff:g> na pohrani <xliff:g id="STORAGE"><i>^3</i></xliff:g>?"</string>
- <string name="open_external_dialog_request_primary_volume" msgid="6635562535713428688">"Želite li aplikaciji <xliff:g id="APPNAME"><b>^1</b></xliff:g> odobriti da pristupa direktoriju <xliff:g id="DIRECTORY"><i>^2</i></xliff:g>?"</string>
- <string name="open_external_dialog_root_request" msgid="8899108702926347720">"Želite li aplikaciji <xliff:g id="APPNAME"><b>^1</b></xliff:g> dopustiti pristup podacima, uključujući fotografije i videozapise na vanjskoj pohrani (<xliff:g id="STORAGE"><i>^2</i></xliff:g>)?"</string>
- <string name="never_ask_again" msgid="4295278542972859268">"Više me ne pitaj"</string>
- <string name="allow" msgid="7225948811296386551">"Dopusti"</string>
- <string name="deny" msgid="2081879885755434506">"Odbij"</string>
- <plurals name="elements_selected" formatted="false" msgid="1376955402452875047">
- <item quantity="one">Odabrano: <xliff:g id="COUNT_1">%1$d</xliff:g></item>
- <item quantity="few">Odabrano: <xliff:g id="COUNT_1">%1$d</xliff:g></item>
- <item quantity="other">Odabrano: <xliff:g id="COUNT_1">%1$d</xliff:g></item>
- </plurals>
- <plurals name="elements_dragged" formatted="false" msgid="3727204615215602228">
- <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> stavka</item>
- <item quantity="few"><xliff:g id="COUNT_1">%1$d</xliff:g> stavke</item>
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> stavki</item>
- </plurals>
- <string name="delete_filename_confirmation_message" msgid="5312817725577537488">"Želite li izbrisati datoteku \"<xliff:g id="NAME">%1$s</xliff:g>\"?"</string>
- <string name="delete_foldername_confirmation_message" msgid="5885501832257285329">"Želite li izbrisati mapu \"<xliff:g id="NAME">%1$s</xliff:g>\" i njezin sadržaj?"</string>
- <plurals name="delete_files_confirmation_message" formatted="false" msgid="8417505791395471802">
- <item quantity="one">Želite li izbrisati <xliff:g id="COUNT_1">%1$d</xliff:g> datoteku?</item>
- <item quantity="few">Želite li izbrisati <xliff:g id="COUNT_1">%1$d</xliff:g> datoteke?</item>
- <item quantity="other">Želite li izbrisati <xliff:g id="COUNT_1">%1$d</xliff:g> datoteka?</item>
- </plurals>
- <plurals name="delete_folders_confirmation_message" formatted="false" msgid="9185648028213507769">
- <item quantity="one">Želite li izbrisati <xliff:g id="COUNT_1">%1$d</xliff:g> mapu i njihov sadržaj?</item>
- <item quantity="few">Želite li izbrisati <xliff:g id="COUNT_1">%1$d</xliff:g> mape i njihov sadržaj?</item>
- <item quantity="other">Želite li izbrisati <xliff:g id="COUNT_1">%1$d</xliff:g> mapa i njihov sadržaj?</item>
- </plurals>
- <plurals name="delete_items_confirmation_message" formatted="false" msgid="5376214433530243459">
- <item quantity="one">Želite li izbrisati <xliff:g id="COUNT_1">%1$d</xliff:g> stavku?</item>
- <item quantity="few">Želite li izbrisati <xliff:g id="COUNT_1">%1$d</xliff:g> stavke?</item>
- <item quantity="other">Želite li izbrisati <xliff:g id="COUNT_1">%1$d</xliff:g> stavki?</item>
- </plurals>
-</resources>
diff --git a/packages/DocumentsUI/res/values-hu/strings.xml b/packages/DocumentsUI/res/values-hu/strings.xml
deleted file mode 100644
index 0044081..0000000
--- a/packages/DocumentsUI/res/values-hu/strings.xml
+++ /dev/null
@@ -1,144 +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="app_label" msgid="1551050262492398204">"Fájlok"</string>
- <string name="downloads_label" msgid="959113951084633612">"Letöltések"</string>
- <string name="title_open" msgid="4353228937663917801">"Megnyitás innen"</string>
- <string name="title_save" msgid="2433679664882857999">"Mentés ide"</string>
- <string name="menu_create_dir" msgid="2547620241173881754">"Új mappa"</string>
- <string name="menu_grid" msgid="6878021334497835259">"Rács"</string>
- <string name="menu_list" msgid="7279285939892417279">"Lista"</string>
- <string name="menu_sort" msgid="7677740407158414452">"Rendezés alapja"</string>
- <string name="menu_search" msgid="3816712084502856974">"Keresés"</string>
- <string name="menu_settings" msgid="8239065133341597825">"Tárolóhely beállításai"</string>
- <string name="menu_open" msgid="432922957274920903">"Megnyitás"</string>
- <string name="menu_save" msgid="2394743337684426338">"Mentés"</string>
- <string name="menu_share" msgid="3075149983979628146">"Megosztás"</string>
- <string name="menu_delete" msgid="8138799623850614177">"Törlés"</string>
- <string name="menu_select_all" msgid="8323579667348729928">"Összes kijelölése"</string>
- <string name="menu_copy" msgid="3612326052677229148">"Másolás ide…"</string>
- <string name="menu_move" msgid="1828090633118079817">"Áthelyezés…"</string>
- <string name="menu_new_window" msgid="1226032889278727538">"Új ablak"</string>
- <string name="menu_cut_to_clipboard" msgid="2467149185452488383">"Kivágás"</string>
- <string name="menu_copy_to_clipboard" msgid="489311381979634291">"Másolás"</string>
- <string name="menu_paste_from_clipboard" msgid="2071583031180257091">"Beillesztés"</string>
- <string name="menu_advanced_show" msgid="4693652895715631401">"Belső tárhely"</string>
- <string name="menu_advanced_hide" msgid="4218809952721972589">"Belső tárhely elrejtése"</string>
- <string name="menu_file_size_show" msgid="3240323619260823076">"Fájlméret megjelenítése"</string>
- <string name="menu_file_size_hide" msgid="8881975928502581042">"Fájlméret elrejtése"</string>
- <string name="button_select" msgid="527196987259139214">"Kiválasztás"</string>
- <string name="button_copy" msgid="8706475544635021302">"Másolás"</string>
- <string name="button_move" msgid="2202666023104202232">"Áthelyezés"</string>
- <string name="button_dismiss" msgid="3714065566893946085">"Elvetés"</string>
- <string name="button_retry" msgid="4392027584153752797">"Újrapróbálkozás"</string>
- <string name="sort_name" msgid="9183560467917256779">"Név szerint"</string>
- <string name="sort_date" msgid="586080032956151448">"Módosítás dátuma szerint"</string>
- <string name="sort_size" msgid="3350681319735474741">"Méret szerint"</string>
- <string name="drawer_open" msgid="4545466532430226949">"Gyökérszint megjelenítése"</string>
- <string name="drawer_close" msgid="7602734368552123318">"Gyökérszint elrejtése"</string>
- <string name="save_error" msgid="6167009778003223664">"Nem sikerült menteni a dokumentumot"</string>
- <string name="create_error" msgid="3735649141335444215">"Nem sikerült létrehozni a mappát"</string>
- <string name="query_error" msgid="5999895349602476581">"Jelenleg nem lehet tartalmat betölteni"</string>
- <string name="root_recent" msgid="4470053704320518133">"Legutóbbiak"</string>
- <string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> szabad"</string>
- <string name="root_type_service" msgid="2178854894416775409">"Tárhelyszolgáltatások"</string>
- <string name="root_type_shortcut" msgid="3318760609471618093">"Parancsikonok"</string>
- <string name="root_type_device" msgid="7121342474653483538">"Eszközök"</string>
- <string name="root_type_apps" msgid="8838065367985945189">"További alkalmazások"</string>
- <string name="empty" msgid="7858882803708117596">"Nincsenek elemek"</string>
- <string name="no_results" msgid="6622510343880730446">"Nincs találat itt: %1$s"</string>
- <string name="toast_no_application" msgid="4632640357724698144">"A fájlt nem lehet megnyitni"</string>
- <string name="toast_failed_delete" msgid="2180678019407244069">"Néhány dokumentumot nem lehet törölni"</string>
- <string name="share_via" msgid="8966594246261344259">"Megosztás itt:"</string>
- <string name="copy_notification_title" msgid="6374299806748219777">"Fájlok másolása"</string>
- <string name="move_notification_title" msgid="6193835179777284805">"Fájlok áthelyezése"</string>
- <string name="delete_notification_title" msgid="3329403967712437496">"Fájlok törlése"</string>
- <string name="copy_remaining" msgid="6283790937387975095">"<xliff:g id="DURATION">%s</xliff:g> van hátra"</string>
- <plurals name="copy_begin" formatted="false" msgid="9071199452634086365">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> fájl másolása.</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> fájl másolása.</item>
- </plurals>
- <plurals name="move_begin" formatted="false" msgid="8430330882138871643">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> fájl áthelyezése.</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> fájl áthelyezése.</item>
- </plurals>
- <plurals name="deleting" formatted="false" msgid="5054338566802559411">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> fájl törlése.</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> fájl törlése.</item>
- </plurals>
- <string name="undo" msgid="7905788502491742328">"Visszavonás"</string>
- <string name="copy_preparing" msgid="3896202461003039386">"Felkészülés a másolásra…"</string>
- <string name="move_preparing" msgid="2772219441375531410">"Áthelyezés előkészítése…"</string>
- <string name="delete_preparing" msgid="5655813182533491992">"Törlés előkészítése…"</string>
- <string name="delete_progress" msgid="5399405983046157222">"<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="7160447124922897689">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> fájlt nem sikerült átmásolni</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> fájlt nem sikerült átmásolni</item>
- </plurals>
- <plurals name="move_error_notification_title" formatted="false" msgid="2710901971014783012">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> fájlt nem sikerült áthelyezni</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> fájlt nem sikerült áthelyezni</item>
- </plurals>
- <plurals name="delete_error_notification_title" formatted="false" msgid="7228393157786591199">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> fájlt nem sikerült törölni</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> fájlt nem sikerült törölni</item>
- </plurals>
- <string name="notification_touch_for_details" msgid="6268189413228855582">"Koppintson rá a részletek megtekintéséhez"</string>
- <string name="close" msgid="3043722427445528732">"Bezárás"</string>
- <string name="copy_failure_alert_content" msgid="4563147454522476183">"A következő fájlokat nem sikerült átmásolni: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="move_failure_alert_content" msgid="2635075788682922861">"A következő fájlokat nem sikerült áthelyezni: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="delete_failure_alert_content" msgid="892393767207938353">"A következő fájlokat nem sikerült törölni: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="copy_converted_warning_content" msgid="5753861488218674361">"A következő fájlokat a rendszer más formátumba konvertálta: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <plurals name="clipboard_files_clipped" formatted="false" msgid="855459017537058539">
- <item quantity="other"> <xliff:g id="COUNT_1">%1$d</xliff:g> fájl vágólapra másolva.</item>
- <item quantity="one"> <xliff:g id="COUNT_0">%1$d</xliff:g> fájl vágólapra másolva.</item>
- </plurals>
- <string name="clipboard_files_cannot_paste" msgid="2878324825602325706">"A kijelölt fájlokat nem lehet beilleszteni erre a helyre."</string>
- <string name="menu_rename" msgid="7678802479104285353">"Átnevezés"</string>
- <string name="rename_error" msgid="4203041674883412606">"Nem sikerült átnevezni a dokumentumot"</string>
- <string name="menu_eject_root" msgid="2768224615494227325">"Kiadás"</string>
- <string name="notification_copy_files_converted_title" msgid="3153573223054275181">"Egyes fájlokat konvertált a rendszer"</string>
- <string name="open_external_dialog_request" msgid="5789329484285817629">"Hozzáférést biztosít a(z) <xliff:g id="APPNAME"><b>^1</b></xliff:g> számára a(z) <xliff:g id="DIRECTORY"><i>^2</i></xliff:g> könyvtárhoz itt: <xliff:g id="STORAGE"><i>^3</i></xliff:g>?"</string>
- <string name="open_external_dialog_request_primary_volume" msgid="6635562535713428688">"Hozzáférést biztosít a(z) <xliff:g id="APPNAME"><b>^1</b></xliff:g> alkalmazásnak a(z) <xliff:g id="DIRECTORY"><i>^2</i></xliff:g> könyvtárhoz?"</string>
- <string name="open_external_dialog_root_request" msgid="8899108702926347720">"Hozzáférést biztosít a(z) <xliff:g id="APPNAME"><b>^1</b></xliff:g> számára az Ön adataihoz, beleértve a következő tárhelyen található képekhez és videókhoz: <xliff:g id="STORAGE"><i>^2</i></xliff:g>?"</string>
- <string name="never_ask_again" msgid="4295278542972859268">"Ne jelenjen meg többé"</string>
- <string name="allow" msgid="7225948811296386551">"Engedélyezés"</string>
- <string name="deny" msgid="2081879885755434506">"Elutasítás"</string>
- <plurals name="elements_selected" formatted="false" msgid="1376955402452875047">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> kiválasztva</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> kiválasztva</item>
- </plurals>
- <plurals name="elements_dragged" formatted="false" msgid="3727204615215602228">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> elem</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> elem</item>
- </plurals>
- <string name="delete_filename_confirmation_message" msgid="5312817725577537488">"Törli a következőt: „<xliff:g id="NAME">%1$s</xliff:g>”?"</string>
- <string name="delete_foldername_confirmation_message" msgid="5885501832257285329">"Törli „<xliff:g id="NAME">%1$s</xliff:g>” mappát a tartalmával együtt?"</string>
- <plurals name="delete_files_confirmation_message" formatted="false" msgid="8417505791395471802">
- <item quantity="other">Töröl <xliff:g id="COUNT_1">%1$d</xliff:g> fájlt?</item>
- <item quantity="one">Töröl <xliff:g id="COUNT_0">%1$d</xliff:g> fájlt?</item>
- </plurals>
- <plurals name="delete_folders_confirmation_message" formatted="false" msgid="9185648028213507769">
- <item quantity="other">Töröl <xliff:g id="COUNT_1">%1$d</xliff:g> mappát a tartalmukkal együtt?</item>
- <item quantity="one">Töröl <xliff:g id="COUNT_0">%1$d</xliff:g> mappát a tartalmával együtt?</item>
- </plurals>
- <plurals name="delete_items_confirmation_message" formatted="false" msgid="5376214433530243459">
- <item quantity="other">Töröl <xliff:g id="COUNT_1">%1$d</xliff:g> elemet?</item>
- <item quantity="one">Töröl <xliff:g id="COUNT_0">%1$d</xliff:g> elemet?</item>
- </plurals>
-</resources>
diff --git a/packages/DocumentsUI/res/values-hy-rAM/strings.xml b/packages/DocumentsUI/res/values-hy-rAM/strings.xml
deleted file mode 100644
index f4c85c3..0000000
--- a/packages/DocumentsUI/res/values-hy-rAM/strings.xml
+++ /dev/null
@@ -1,144 +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="app_label" msgid="1551050262492398204">"Ֆայլեր"</string>
- <string name="downloads_label" msgid="959113951084633612">"Ներբեռնումներ"</string>
- <string name="title_open" msgid="4353228937663917801">"Բացել այստեղից"</string>
- <string name="title_save" msgid="2433679664882857999">"Պահել այստեղ"</string>
- <string name="menu_create_dir" msgid="2547620241173881754">"Նոր պանակ"</string>
- <string name="menu_grid" msgid="6878021334497835259">"Ցանցի տեսքով"</string>
- <string name="menu_list" msgid="7279285939892417279">"Ցուցակի տեսք"</string>
- <string name="menu_sort" msgid="7677740407158414452">"Դասավորել ըստ"</string>
- <string name="menu_search" msgid="3816712084502856974">"Որոնել"</string>
- <string name="menu_settings" msgid="8239065133341597825">"Հիշասարքի կարգավորումներ"</string>
- <string name="menu_open" msgid="432922957274920903">"Բացել"</string>
- <string name="menu_save" msgid="2394743337684426338">"Պահել"</string>
- <string name="menu_share" msgid="3075149983979628146">"Կիսվել"</string>
- <string name="menu_delete" msgid="8138799623850614177">"Ջնջել"</string>
- <string name="menu_select_all" msgid="8323579667348729928">"Ընտրել բոլորը"</string>
- <string name="menu_copy" msgid="3612326052677229148">"Պատճենել…"</string>
- <string name="menu_move" msgid="1828090633118079817">"Տեղափոխել…"</string>
- <string name="menu_new_window" msgid="1226032889278727538">"Նոր պատուհան"</string>
- <string name="menu_cut_to_clipboard" msgid="2467149185452488383">"Կտրել"</string>
- <string name="menu_copy_to_clipboard" msgid="489311381979634291">"Պատճենել"</string>
- <string name="menu_paste_from_clipboard" msgid="2071583031180257091">"Տեղադրել"</string>
- <string name="menu_advanced_show" msgid="4693652895715631401">"Ցույց տալ ներքին պահոցը"</string>
- <string name="menu_advanced_hide" msgid="4218809952721972589">"Թաքցնել ներքին պահոցը"</string>
- <string name="menu_file_size_show" msgid="3240323619260823076">"Ցույց տալ ֆայլի չափը"</string>
- <string name="menu_file_size_hide" msgid="8881975928502581042">"Թաքցնել ֆայլի չափը"</string>
- <string name="button_select" msgid="527196987259139214">"Ընտրել"</string>
- <string name="button_copy" msgid="8706475544635021302">"Պատճենել"</string>
- <string name="button_move" msgid="2202666023104202232">"Տեղափոխել"</string>
- <string name="button_dismiss" msgid="3714065566893946085">"Փակել"</string>
- <string name="button_retry" msgid="4392027584153752797">"Փորձել նորից"</string>
- <string name="sort_name" msgid="9183560467917256779">"Ըստ անվան"</string>
- <string name="sort_date" msgid="586080032956151448">"Ըստ փոփոխման ամսաթվի"</string>
- <string name="sort_size" msgid="3350681319735474741">"Ըստ չափի"</string>
- <string name="drawer_open" msgid="4545466532430226949">"Ցույց տալ արմատները"</string>
- <string name="drawer_close" msgid="7602734368552123318">"Թաքցնել արմատները"</string>
- <string name="save_error" msgid="6167009778003223664">"Չհաջողվեց պահել փաստաթուղթը"</string>
- <string name="create_error" msgid="3735649141335444215">"Չհաջողվեց ստեղծել պանակը"</string>
- <string name="query_error" msgid="5999895349602476581">"Այս պահին հնարավոր չէ բեռնել բովանդակությունը"</string>
- <string name="root_recent" msgid="4470053704320518133">"Վերջին"</string>
- <string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> ազատ է"</string>
- <string name="root_type_service" msgid="2178854894416775409">"Պահուստի ծառայություններ"</string>
- <string name="root_type_shortcut" msgid="3318760609471618093">"Դյուրանցումներ"</string>
- <string name="root_type_device" msgid="7121342474653483538">"Սարքեր"</string>
- <string name="root_type_apps" msgid="8838065367985945189">"Հավելյալ ծրագրեր"</string>
- <string name="empty" msgid="7858882803708117596">"Ոչինչ չկա"</string>
- <string name="no_results" msgid="6622510343880730446">"%1$s-ում համընկնումներ չկան"</string>
- <string name="toast_no_application" msgid="4632640357724698144">"Հնարավոր չէ բացել ֆայլը"</string>
- <string name="toast_failed_delete" msgid="2180678019407244069">"Անհնար է ջնջել որոշ փաստաթղթեր"</string>
- <string name="share_via" msgid="8966594246261344259">"Կիսվել"</string>
- <string name="copy_notification_title" msgid="6374299806748219777">"Ֆայլերի պատճենում"</string>
- <string name="move_notification_title" msgid="6193835179777284805">"Ֆայլերի տեղափոխում"</string>
- <string name="delete_notification_title" msgid="3329403967712437496">"Ֆայլերը ջնջվում են"</string>
- <string name="copy_remaining" msgid="6283790937387975095">"Մնացել է <xliff:g id="DURATION">%s</xliff:g>"</string>
- <plurals name="copy_begin" formatted="false" msgid="9071199452634086365">
- <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> ֆայլի պատճենում:</item>
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> ֆայլի պատճենում:</item>
- </plurals>
- <plurals name="move_begin" formatted="false" msgid="8430330882138871643">
- <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="deleting" formatted="false" msgid="5054338566802559411">
- <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="7905788502491742328">"Հետարկել"</string>
- <string name="copy_preparing" msgid="3896202461003039386">"Պատճենման նախապատրաստում…"</string>
- <string name="move_preparing" msgid="2772219441375531410">"Տեղափոխման նախապատրաստում…"</string>
- <string name="delete_preparing" msgid="5655813182533491992">"Պատրաստվում է ջնջել…"</string>
- <string name="delete_progress" msgid="5399405983046157222">"<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="7160447124922897689">
- <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="move_error_notification_title" formatted="false" msgid="2710901971014783012">
- <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_error_notification_title" formatted="false" msgid="7228393157786591199">
- <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="6268189413228855582">"Հպեք՝ մանրամասները դիտելու համար"</string>
- <string name="close" msgid="3043722427445528732">"Փակել"</string>
- <string name="copy_failure_alert_content" msgid="4563147454522476183">"Հետևյալ ֆայլերը չեն պատճենվել՝ <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="move_failure_alert_content" msgid="2635075788682922861">"Հետևյալ ֆայլերը չեն տեղափոխվել՝ <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="delete_failure_alert_content" msgid="892393767207938353">"Հետևյալ ֆայլերը չեն ջնջվել՝ <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="copy_converted_warning_content" msgid="5753861488218674361">"Այս ֆայլերը փոխարկվել են մեկ այլ ձևաչափի՝ <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <plurals name="clipboard_files_clipped" formatted="false" msgid="855459017537058539">
- <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="clipboard_files_cannot_paste" msgid="2878324825602325706">"Հնարավոր չէ տեղադրել ընտրված ֆայլերը այս տեղադրությունում:"</string>
- <string name="menu_rename" msgid="7678802479104285353">"Վերանվանել"</string>
- <string name="rename_error" msgid="4203041674883412606">"Չհաջողվեց վերանվանել փաստաթուղթը"</string>
- <string name="menu_eject_root" msgid="2768224615494227325">"Անջատել"</string>
- <string name="notification_copy_files_converted_title" msgid="3153573223054275181">"Որոշ ֆայլեր փոխարկվել են"</string>
- <string name="open_external_dialog_request" msgid="5789329484285817629">"<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="6635562535713428688">"<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="8899108702926347720">"<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="4295278542972859268">"Այլևս չհարցնել"</string>
- <string name="allow" msgid="7225948811296386551">"Թույլատրել"</string>
- <string name="deny" msgid="2081879885755434506">"Մերժել"</string>
- <plurals name="elements_selected" formatted="false" msgid="1376955402452875047">
- <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="3727204615215602228">
- <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="5312817725577537488">"Ջնջե՞լ «<xliff:g id="NAME">%1$s</xliff:g>» ֆայլը:"</string>
- <string name="delete_foldername_confirmation_message" msgid="5885501832257285329">"Ջնջե՞լ «<xliff:g id="NAME">%1$s</xliff:g>» պանակը՝ բովանդակության հետ մեկտեղ:"</string>
- <plurals name="delete_files_confirmation_message" formatted="false" msgid="8417505791395471802">
- <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="9185648028213507769">
- <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="5376214433530243459">
- <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>
-</resources>
diff --git a/packages/DocumentsUI/res/values-in/strings.xml b/packages/DocumentsUI/res/values-in/strings.xml
deleted file mode 100644
index 964c69a..0000000
--- a/packages/DocumentsUI/res/values-in/strings.xml
+++ /dev/null
@@ -1,144 +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="app_label" msgid="1551050262492398204">"File"</string>
- <string name="downloads_label" msgid="959113951084633612">"Unduhan"</string>
- <string name="title_open" msgid="4353228937663917801">"Buka dari"</string>
- <string name="title_save" msgid="2433679664882857999">"Simpan ke"</string>
- <string name="menu_create_dir" msgid="2547620241173881754">"Folder baru"</string>
- <string name="menu_grid" msgid="6878021334497835259">"Tampilan kisi"</string>
- <string name="menu_list" msgid="7279285939892417279">"Tampilan daftar"</string>
- <string name="menu_sort" msgid="7677740407158414452">"Urutkan menurut"</string>
- <string name="menu_search" msgid="3816712084502856974">"Telusuri"</string>
- <string name="menu_settings" msgid="8239065133341597825">"Setelan penyimpanan"</string>
- <string name="menu_open" msgid="432922957274920903">"Buka"</string>
- <string name="menu_save" msgid="2394743337684426338">"Simpan"</string>
- <string name="menu_share" msgid="3075149983979628146">"Bagikan"</string>
- <string name="menu_delete" msgid="8138799623850614177">"Hapus"</string>
- <string name="menu_select_all" msgid="8323579667348729928">"Pilih semua"</string>
- <string name="menu_copy" msgid="3612326052677229148">"Salin ke…"</string>
- <string name="menu_move" msgid="1828090633118079817">"Pindahkan ke..."</string>
- <string name="menu_new_window" msgid="1226032889278727538">"Jendela baru"</string>
- <string name="menu_cut_to_clipboard" msgid="2467149185452488383">"Potong"</string>
- <string name="menu_copy_to_clipboard" msgid="489311381979634291">"Salin"</string>
- <string name="menu_paste_from_clipboard" msgid="2071583031180257091">"Tempel"</string>
- <string name="menu_advanced_show" msgid="4693652895715631401">"Tampilkan simpanan internal"</string>
- <string name="menu_advanced_hide" msgid="4218809952721972589">"Sembunyikan simpanan internal"</string>
- <string name="menu_file_size_show" msgid="3240323619260823076">"Tampilkan ukuran file"</string>
- <string name="menu_file_size_hide" msgid="8881975928502581042">"Sembunyikan ukuran file"</string>
- <string name="button_select" msgid="527196987259139214">"Pilih"</string>
- <string name="button_copy" msgid="8706475544635021302">"Salin"</string>
- <string name="button_move" msgid="2202666023104202232">"Pindahkan"</string>
- <string name="button_dismiss" msgid="3714065566893946085">"Tutup"</string>
- <string name="button_retry" msgid="4392027584153752797">"Coba Lagi"</string>
- <string name="sort_name" msgid="9183560467917256779">"Menurut nama"</string>
- <string name="sort_date" msgid="586080032956151448">"Menurut tanggal diubah"</string>
- <string name="sort_size" msgid="3350681319735474741">"Menurut ukuran"</string>
- <string name="drawer_open" msgid="4545466532430226949">"Tampilkan akar"</string>
- <string name="drawer_close" msgid="7602734368552123318">"Sembunyikan akar"</string>
- <string name="save_error" msgid="6167009778003223664">"Gagal menyimpan dokumen"</string>
- <string name="create_error" msgid="3735649141335444215">"Gagal membuat folder"</string>
- <string name="query_error" msgid="5999895349602476581">"Saat ini tidak dapat memuat konten"</string>
- <string name="root_recent" msgid="4470053704320518133">"Terkini"</string>
- <string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> kosong"</string>
- <string name="root_type_service" msgid="2178854894416775409">"Layanan penyimpanan"</string>
- <string name="root_type_shortcut" msgid="3318760609471618093">"Pintasan"</string>
- <string name="root_type_device" msgid="7121342474653483538">"Perangkat"</string>
- <string name="root_type_apps" msgid="8838065367985945189">"Aplikasi lain"</string>
- <string name="empty" msgid="7858882803708117596">"Tidak ada item"</string>
- <string name="no_results" msgid="6622510343880730446">"Tidak ada kecocokan dalam %1$s"</string>
- <string name="toast_no_application" msgid="4632640357724698144">"Tidak dapat membuka file"</string>
- <string name="toast_failed_delete" msgid="2180678019407244069">"Tidak dapat menghapus beberapa dokumen"</string>
- <string name="share_via" msgid="8966594246261344259">"Bagikan melalui"</string>
- <string name="copy_notification_title" msgid="6374299806748219777">"Menyalin file"</string>
- <string name="move_notification_title" msgid="6193835179777284805">"Memindahkan file"</string>
- <string name="delete_notification_title" msgid="3329403967712437496">"Menghapus file"</string>
- <string name="copy_remaining" msgid="6283790937387975095">"<xliff:g id="DURATION">%s</xliff:g> lagi"</string>
- <plurals name="copy_begin" formatted="false" msgid="9071199452634086365">
- <item quantity="other">Menyalin <xliff:g id="COUNT_1">%1$d</xliff:g> file.</item>
- <item quantity="one">Menyalin <xliff:g id="COUNT_0">%1$d</xliff:g> file.</item>
- </plurals>
- <plurals name="move_begin" formatted="false" msgid="8430330882138871643">
- <item quantity="other">Memindahkan <xliff:g id="COUNT_1">%1$d</xliff:g> file.</item>
- <item quantity="one">Memindahkan <xliff:g id="COUNT_0">%1$d</xliff:g> file.</item>
- </plurals>
- <plurals name="deleting" formatted="false" msgid="5054338566802559411">
- <item quantity="other">Menghapus <xliff:g id="COUNT_1">%1$d</xliff:g> file.</item>
- <item quantity="one">Menghapus <xliff:g id="COUNT_0">%1$d</xliff:g> file.</item>
- </plurals>
- <string name="undo" msgid="7905788502491742328">"Urungkan"</string>
- <string name="copy_preparing" msgid="3896202461003039386">"Menyiapkan salinan..."</string>
- <string name="move_preparing" msgid="2772219441375531410">"Menyiapkan pemindahan…"</string>
- <string name="delete_preparing" msgid="5655813182533491992">"Bersiap menghapus…"</string>
- <string name="delete_progress" msgid="5399405983046157222">"<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="7160447124922897689">
- <item quantity="other">Tidak dapat menyalin <xliff:g id="COUNT_1">%1$d</xliff:g> file</item>
- <item quantity="one">Tidak dapat menyalin <xliff:g id="COUNT_0">%1$d</xliff:g> file</item>
- </plurals>
- <plurals name="move_error_notification_title" formatted="false" msgid="2710901971014783012">
- <item quantity="other">Tidak dapat memindahkan <xliff:g id="COUNT_1">%1$d</xliff:g> file</item>
- <item quantity="one">Tidak dapat memindahkan <xliff:g id="COUNT_0">%1$d</xliff:g> file</item>
- </plurals>
- <plurals name="delete_error_notification_title" formatted="false" msgid="7228393157786591199">
- <item quantity="other">Tidak dapat menghapus <xliff:g id="COUNT_1">%1$d</xliff:g> file</item>
- <item quantity="one">Tidak dapat menghapus <xliff:g id="COUNT_0">%1$d</xliff:g> file</item>
- </plurals>
- <string name="notification_touch_for_details" msgid="6268189413228855582">"Ketuk untuk melihat detail"</string>
- <string name="close" msgid="3043722427445528732">"Tutup"</string>
- <string name="copy_failure_alert_content" msgid="4563147454522476183">"Semua file ini tidak disalin: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="move_failure_alert_content" msgid="2635075788682922861">"Semua file ini tidak dipindahkan: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="delete_failure_alert_content" msgid="892393767207938353">"Semua file ini tidak dihapus: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="copy_converted_warning_content" msgid="5753861488218674361">"File ini dikonversi ke format lain: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <plurals name="clipboard_files_clipped" formatted="false" msgid="855459017537058539">
- <item quantity="other"> <xliff:g id="COUNT_1">%1$d</xliff:g> file disalin ke papan klip.</item>
- <item quantity="one"> <xliff:g id="COUNT_0">%1$d</xliff:g> file disalin ke papan klip.</item>
- </plurals>
- <string name="clipboard_files_cannot_paste" msgid="2878324825602325706">"Tidak dapat menempel file yang dipilih di lokasi ini."</string>
- <string name="menu_rename" msgid="7678802479104285353">"Ganti nama"</string>
- <string name="rename_error" msgid="4203041674883412606">"Gagal mengganti nama dokumen"</string>
- <string name="menu_eject_root" msgid="2768224615494227325">"Keluarkan"</string>
- <string name="notification_copy_files_converted_title" msgid="3153573223054275181">"Beberapa file dikonversi"</string>
- <string name="open_external_dialog_request" msgid="5789329484285817629">"Beri <xliff:g id="APPNAME"><b>^1</b></xliff:g> akses ke direktori <xliff:g id="DIRECTORY"><i>^2</i></xliff:g> di <xliff:g id="STORAGE"><i>^3</i></xliff:g>?"</string>
- <string name="open_external_dialog_request_primary_volume" msgid="6635562535713428688">"Beri <xliff:g id="APPNAME"><b>^1</b></xliff:g> akses ke direktori <xliff:g id="DIRECTORY"><i>^2</i></xliff:g>?"</string>
- <string name="open_external_dialog_root_request" msgid="8899108702926347720">"Beri <xliff:g id="APPNAME"><b>^1</b></xliff:g> akses ke data Anda, termasuk foto dan video, di <xliff:g id="STORAGE"><i>^2</i></xliff:g>?"</string>
- <string name="never_ask_again" msgid="4295278542972859268">"Jangan tanya lagi"</string>
- <string name="allow" msgid="7225948811296386551">"Izinkan"</string>
- <string name="deny" msgid="2081879885755434506">"Tolak"</string>
- <plurals name="elements_selected" formatted="false" msgid="1376955402452875047">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> dipilih</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> dipilih</item>
- </plurals>
- <plurals name="elements_dragged" formatted="false" msgid="3727204615215602228">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> item</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> item</item>
- </plurals>
- <string name="delete_filename_confirmation_message" msgid="5312817725577537488">"Hapus \"<xliff:g id="NAME">%1$s</xliff:g>\"?"</string>
- <string name="delete_foldername_confirmation_message" msgid="5885501832257285329">"Hapus folder \"<xliff:g id="NAME">%1$s</xliff:g>\" dan kontennya?"</string>
- <plurals name="delete_files_confirmation_message" formatted="false" msgid="8417505791395471802">
- <item quantity="other">Hapus <xliff:g id="COUNT_1">%1$d</xliff:g> file?</item>
- <item quantity="one">Hapus <xliff:g id="COUNT_0">%1$d</xliff:g> file?</item>
- </plurals>
- <plurals name="delete_folders_confirmation_message" formatted="false" msgid="9185648028213507769">
- <item quantity="other">Hapus <xliff:g id="COUNT_1">%1$d</xliff:g> folder dan kontennya?</item>
- <item quantity="one">Hapus <xliff:g id="COUNT_0">%1$d</xliff:g> folder dan kontennya?</item>
- </plurals>
- <plurals name="delete_items_confirmation_message" formatted="false" msgid="5376214433530243459">
- <item quantity="other">Hapus <xliff:g id="COUNT_1">%1$d</xliff:g> item?</item>
- <item quantity="one">Hapus <xliff:g id="COUNT_0">%1$d</xliff:g> item?</item>
- </plurals>
-</resources>
diff --git a/packages/DocumentsUI/res/values-is-rIS/strings.xml b/packages/DocumentsUI/res/values-is-rIS/strings.xml
deleted file mode 100644
index 983090c..0000000
--- a/packages/DocumentsUI/res/values-is-rIS/strings.xml
+++ /dev/null
@@ -1,144 +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="app_label" msgid="1551050262492398204">"Skrár"</string>
- <string name="downloads_label" msgid="959113951084633612">"Niðurhal"</string>
- <string name="title_open" msgid="4353228937663917801">"Opna frá"</string>
- <string name="title_save" msgid="2433679664882857999">"Vista í"</string>
- <string name="menu_create_dir" msgid="2547620241173881754">"Ný mappa"</string>
- <string name="menu_grid" msgid="6878021334497835259">"Töfluyfirlit"</string>
- <string name="menu_list" msgid="7279285939892417279">"Listayfirlit"</string>
- <string name="menu_sort" msgid="7677740407158414452">"Raða eftir"</string>
- <string name="menu_search" msgid="3816712084502856974">"Leita"</string>
- <string name="menu_settings" msgid="8239065133341597825">"Geymslustillingar"</string>
- <string name="menu_open" msgid="432922957274920903">"Opna"</string>
- <string name="menu_save" msgid="2394743337684426338">"Vista"</string>
- <string name="menu_share" msgid="3075149983979628146">"Deila"</string>
- <string name="menu_delete" msgid="8138799623850614177">"Eyða"</string>
- <string name="menu_select_all" msgid="8323579667348729928">"Velja allt"</string>
- <string name="menu_copy" msgid="3612326052677229148">"Afrita í ..."</string>
- <string name="menu_move" msgid="1828090633118079817">"Færa í…"</string>
- <string name="menu_new_window" msgid="1226032889278727538">"Nýr gluggi"</string>
- <string name="menu_cut_to_clipboard" msgid="2467149185452488383">"Klippa"</string>
- <string name="menu_copy_to_clipboard" msgid="489311381979634291">"Afrita"</string>
- <string name="menu_paste_from_clipboard" msgid="2071583031180257091">"Líma"</string>
- <string name="menu_advanced_show" msgid="4693652895715631401">"Sýna innbyggða geymslu"</string>
- <string name="menu_advanced_hide" msgid="4218809952721972589">"Fela innbyggða geymslu"</string>
- <string name="menu_file_size_show" msgid="3240323619260823076">"Sýna skráarstærð"</string>
- <string name="menu_file_size_hide" msgid="8881975928502581042">"Fela skráarstærð"</string>
- <string name="button_select" msgid="527196987259139214">"Velja"</string>
- <string name="button_copy" msgid="8706475544635021302">"Afrita"</string>
- <string name="button_move" msgid="2202666023104202232">"Færa"</string>
- <string name="button_dismiss" msgid="3714065566893946085">"Hunsa"</string>
- <string name="button_retry" msgid="4392027584153752797">"Reyna aftur"</string>
- <string name="sort_name" msgid="9183560467917256779">"Eftir heiti"</string>
- <string name="sort_date" msgid="586080032956151448">"Eftir breytingadags."</string>
- <string name="sort_size" msgid="3350681319735474741">"Eftir stærð"</string>
- <string name="drawer_open" msgid="4545466532430226949">"Sýna rótarsöfn"</string>
- <string name="drawer_close" msgid="7602734368552123318">"Fela rótarsöfn"</string>
- <string name="save_error" msgid="6167009778003223664">"Mistókst að vista skjalið"</string>
- <string name="create_error" msgid="3735649141335444215">"Mistókst að búa til möppu"</string>
- <string name="query_error" msgid="5999895349602476581">"Ekki hægt að hlaða efni í augnablikinu"</string>
- <string name="root_recent" msgid="4470053704320518133">"Nýlegt"</string>
- <string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> laus"</string>
- <string name="root_type_service" msgid="2178854894416775409">"Geymsluþjónusta"</string>
- <string name="root_type_shortcut" msgid="3318760609471618093">"Flýtileiðir"</string>
- <string name="root_type_device" msgid="7121342474653483538">"Tæki"</string>
- <string name="root_type_apps" msgid="8838065367985945189">"Fleiri forrit"</string>
- <string name="empty" msgid="7858882803708117596">"Engin atriði"</string>
- <string name="no_results" msgid="6622510343880730446">"Engar samsvarandi niðurstöður í %1$s"</string>
- <string name="toast_no_application" msgid="4632640357724698144">"Ekki hægt að opna skrá"</string>
- <string name="toast_failed_delete" msgid="2180678019407244069">"Ekki er hægt að eyða einhverjum skjölum"</string>
- <string name="share_via" msgid="8966594246261344259">"Deila í gegnum"</string>
- <string name="copy_notification_title" msgid="6374299806748219777">"Afritar skrár"</string>
- <string name="move_notification_title" msgid="6193835179777284805">"Skrár færðar"</string>
- <string name="delete_notification_title" msgid="3329403967712437496">"Eyðir skrám"</string>
- <string name="copy_remaining" msgid="6283790937387975095">"<xliff:g id="DURATION">%s</xliff:g> eftir"</string>
- <plurals name="copy_begin" formatted="false" msgid="9071199452634086365">
- <item quantity="one">Afritar <xliff:g id="COUNT_1">%1$d</xliff:g> skrá.</item>
- <item quantity="other">Afritar <xliff:g id="COUNT_1">%1$d</xliff:g> skrár.</item>
- </plurals>
- <plurals name="move_begin" formatted="false" msgid="8430330882138871643">
- <item quantity="one">Færir <xliff:g id="COUNT_1">%1$d</xliff:g> skrá.</item>
- <item quantity="other">Færir <xliff:g id="COUNT_1">%1$d</xliff:g> skrár.</item>
- </plurals>
- <plurals name="deleting" formatted="false" msgid="5054338566802559411">
- <item quantity="one">Eyðir <xliff:g id="COUNT_1">%1$d</xliff:g> skrá.</item>
- <item quantity="other">Eyðir <xliff:g id="COUNT_1">%1$d</xliff:g> skrám.</item>
- </plurals>
- <string name="undo" msgid="7905788502491742328">"Afturkalla"</string>
- <string name="copy_preparing" msgid="3896202461003039386">"Undirbúningur fyrir afritun…"</string>
- <string name="move_preparing" msgid="2772219441375531410">"Flutningur undirbúinn…"</string>
- <string name="delete_preparing" msgid="5655813182533491992">"Býr sig undir að eyða…"</string>
- <string name="delete_progress" msgid="5399405983046157222">"<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="7160447124922897689">
- <item quantity="one">Ekki tókst að afrita <xliff:g id="COUNT_1">%1$d</xliff:g> skrá</item>
- <item quantity="other">Ekki tókst að afrita <xliff:g id="COUNT_1">%1$d</xliff:g> skrár</item>
- </plurals>
- <plurals name="move_error_notification_title" formatted="false" msgid="2710901971014783012">
- <item quantity="one">Ekki tókst að færa <xliff:g id="COUNT_1">%1$d</xliff:g> skrá</item>
- <item quantity="other">Ekki tókst að færa <xliff:g id="COUNT_1">%1$d</xliff:g> skrár</item>
- </plurals>
- <plurals name="delete_error_notification_title" formatted="false" msgid="7228393157786591199">
- <item quantity="one">Ekki tókst að eyða <xliff:g id="COUNT_1">%1$d</xliff:g> skrá</item>
- <item quantity="other">Ekki tókst að eyða <xliff:g id="COUNT_1">%1$d</xliff:g> skrám</item>
- </plurals>
- <string name="notification_touch_for_details" msgid="6268189413228855582">"Ýttu til að skoða frekari upplýsingar"</string>
- <string name="close" msgid="3043722427445528732">"Loka"</string>
- <string name="copy_failure_alert_content" msgid="4563147454522476183">"Þessar skrár voru ekki afritaðar: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="move_failure_alert_content" msgid="2635075788682922861">"Þessar skrár voru ekki færðar: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="delete_failure_alert_content" msgid="892393767207938353">"Þessum skrám var ekki eytt: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="copy_converted_warning_content" msgid="5753861488218674361">"Þessum skrám var umbreytt yfir á annað snið: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <plurals name="clipboard_files_clipped" formatted="false" msgid="855459017537058539">
- <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> skrá afrituð á klippiborð.</item>
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> skrár afritaðar á klippiborð.</item>
- </plurals>
- <string name="clipboard_files_cannot_paste" msgid="2878324825602325706">"Ekki er hægt að vista valdar skrár á þessum stað."</string>
- <string name="menu_rename" msgid="7678802479104285353">"Endurnefna"</string>
- <string name="rename_error" msgid="4203041674883412606">"Ekki tókst að endurnefna skjalið"</string>
- <string name="menu_eject_root" msgid="2768224615494227325">"Fjarlægja"</string>
- <string name="notification_copy_files_converted_title" msgid="3153573223054275181">"Sumum skrám var umbreytt"</string>
- <string name="open_external_dialog_request" msgid="5789329484285817629">"Veita <xliff:g id="APPNAME"><b>^1</b></xliff:g> aðgang að skráasafninu <xliff:g id="DIRECTORY"><i>^2</i></xliff:g> á <xliff:g id="STORAGE"><i>^3</i></xliff:g>?"</string>
- <string name="open_external_dialog_request_primary_volume" msgid="6635562535713428688">"Viltu veita <xliff:g id="APPNAME"><b>^1</b></xliff:g> aðgang að skráasafninu <xliff:g id="DIRECTORY"><i>^2</i></xliff:g>?"</string>
- <string name="open_external_dialog_root_request" msgid="8899108702926347720">"Veita <xliff:g id="APPNAME"><b>^1</b></xliff:g> aðgang að gögnunum þínum, þar á meðal myndum og myndskeiðum, á <xliff:g id="STORAGE"><i>^2</i></xliff:g>?"</string>
- <string name="never_ask_again" msgid="4295278542972859268">"Ekki spyrja aftur"</string>
- <string name="allow" msgid="7225948811296386551">"Leyfa"</string>
- <string name="deny" msgid="2081879885755434506">"Hafna"</string>
- <plurals name="elements_selected" formatted="false" msgid="1376955402452875047">
- <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> valið</item>
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> valin</item>
- </plurals>
- <plurals name="elements_dragged" formatted="false" msgid="3727204615215602228">
- <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> atriði</item>
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> atriði</item>
- </plurals>
- <string name="delete_filename_confirmation_message" msgid="5312817725577537488">"Eyða „<xliff:g id="NAME">%1$s</xliff:g>“?"</string>
- <string name="delete_foldername_confirmation_message" msgid="5885501832257285329">"Eyða möppunni „<xliff:g id="NAME">%1$s</xliff:g>“ og öllu innihaldi hennar?"</string>
- <plurals name="delete_files_confirmation_message" formatted="false" msgid="8417505791395471802">
- <item quantity="one">Eyða <xliff:g id="COUNT_1">%1$d</xliff:g> skrá?</item>
- <item quantity="other">Eyða <xliff:g id="COUNT_1">%1$d</xliff:g> skrám?</item>
- </plurals>
- <plurals name="delete_folders_confirmation_message" formatted="false" msgid="9185648028213507769">
- <item quantity="one">Eyða <xliff:g id="COUNT_1">%1$d</xliff:g> möppu og innihaldi þeirra?</item>
- <item quantity="other">Eyða <xliff:g id="COUNT_1">%1$d</xliff:g> möppum og innihaldi þeirra?</item>
- </plurals>
- <plurals name="delete_items_confirmation_message" formatted="false" msgid="5376214433530243459">
- <item quantity="one">Eyða <xliff:g id="COUNT_1">%1$d</xliff:g> atriði?</item>
- <item quantity="other">Eyða <xliff:g id="COUNT_1">%1$d</xliff:g> atriðum?</item>
- </plurals>
-</resources>
diff --git a/packages/DocumentsUI/res/values-it/strings.xml b/packages/DocumentsUI/res/values-it/strings.xml
deleted file mode 100644
index df287fe..0000000
--- a/packages/DocumentsUI/res/values-it/strings.xml
+++ /dev/null
@@ -1,144 +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="app_label" msgid="1551050262492398204">"File"</string>
- <string name="downloads_label" msgid="959113951084633612">"Download"</string>
- <string name="title_open" msgid="4353228937663917801">"Apri da"</string>
- <string name="title_save" msgid="2433679664882857999">"Salva in"</string>
- <string name="menu_create_dir" msgid="2547620241173881754">"Nuova cartella"</string>
- <string name="menu_grid" msgid="6878021334497835259">"Visualizzazione griglia"</string>
- <string name="menu_list" msgid="7279285939892417279">"Visualizzazione elenco"</string>
- <string name="menu_sort" msgid="7677740407158414452">"Ordina per"</string>
- <string name="menu_search" msgid="3816712084502856974">"Cerca"</string>
- <string name="menu_settings" msgid="8239065133341597825">"Impostazioni memoria"</string>
- <string name="menu_open" msgid="432922957274920903">"Apri"</string>
- <string name="menu_save" msgid="2394743337684426338">"Salva"</string>
- <string name="menu_share" msgid="3075149983979628146">"Condividi"</string>
- <string name="menu_delete" msgid="8138799623850614177">"Elimina"</string>
- <string name="menu_select_all" msgid="8323579667348729928">"Seleziona tutto"</string>
- <string name="menu_copy" msgid="3612326052677229148">"Copia in…"</string>
- <string name="menu_move" msgid="1828090633118079817">"Sposta in..."</string>
- <string name="menu_new_window" msgid="1226032889278727538">"Nuova finestra"</string>
- <string name="menu_cut_to_clipboard" msgid="2467149185452488383">"Taglia"</string>
- <string name="menu_copy_to_clipboard" msgid="489311381979634291">"Copia"</string>
- <string name="menu_paste_from_clipboard" msgid="2071583031180257091">"Incolla"</string>
- <string name="menu_advanced_show" msgid="4693652895715631401">"Mostra memoria interna"</string>
- <string name="menu_advanced_hide" msgid="4218809952721972589">"Nascondi memoria interna"</string>
- <string name="menu_file_size_show" msgid="3240323619260823076">"Mostra dimensioni file"</string>
- <string name="menu_file_size_hide" msgid="8881975928502581042">"Nascondi dimensioni file"</string>
- <string name="button_select" msgid="527196987259139214">"Seleziona"</string>
- <string name="button_copy" msgid="8706475544635021302">"Copia"</string>
- <string name="button_move" msgid="2202666023104202232">"Sposta"</string>
- <string name="button_dismiss" msgid="3714065566893946085">"Ignora"</string>
- <string name="button_retry" msgid="4392027584153752797">"Riprova"</string>
- <string name="sort_name" msgid="9183560467917256779">"Per nome"</string>
- <string name="sort_date" msgid="586080032956151448">"Per data di modifica"</string>
- <string name="sort_size" msgid="3350681319735474741">"Per dimensioni"</string>
- <string name="drawer_open" msgid="4545466532430226949">"Mostra nodi principali"</string>
- <string name="drawer_close" msgid="7602734368552123318">"Nascondi nodi principali"</string>
- <string name="save_error" msgid="6167009778003223664">"Impossibile salvare il documento"</string>
- <string name="create_error" msgid="3735649141335444215">"Impossibile creare la cartella"</string>
- <string name="query_error" msgid="5999895349602476581">"Impossibile caricare i contenuti al momento"</string>
- <string name="root_recent" msgid="4470053704320518133">"Recenti"</string>
- <string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> liberi"</string>
- <string name="root_type_service" msgid="2178854894416775409">"Servizi di archiviazione"</string>
- <string name="root_type_shortcut" msgid="3318760609471618093">"Scorciatoie"</string>
- <string name="root_type_device" msgid="7121342474653483538">"Dispositivi"</string>
- <string name="root_type_apps" msgid="8838065367985945189">"Altre app"</string>
- <string name="empty" msgid="7858882803708117596">"Nessun elemento"</string>
- <string name="no_results" msgid="6622510343880730446">"Nessuna corrispondenza in %1$s"</string>
- <string name="toast_no_application" msgid="4632640357724698144">"Impossibile aprire il file"</string>
- <string name="toast_failed_delete" msgid="2180678019407244069">"Impossibile eliminare alcuni documenti"</string>
- <string name="share_via" msgid="8966594246261344259">"Condividi via"</string>
- <string name="copy_notification_title" msgid="6374299806748219777">"Copia di file in corso"</string>
- <string name="move_notification_title" msgid="6193835179777284805">"Spostamento di file"</string>
- <string name="delete_notification_title" msgid="3329403967712437496">"Eliminazione dei file"</string>
- <string name="copy_remaining" msgid="6283790937387975095">"<xliff:g id="DURATION">%s</xliff:g> rimanenti"</string>
- <plurals name="copy_begin" formatted="false" msgid="9071199452634086365">
- <item quantity="other">Copia di <xliff:g id="COUNT_1">%1$d</xliff:g> file in corso.</item>
- <item quantity="one">Copia di <xliff:g id="COUNT_0">%1$d</xliff:g> file in corso.</item>
- </plurals>
- <plurals name="move_begin" formatted="false" msgid="8430330882138871643">
- <item quantity="other">Spostamento di <xliff:g id="COUNT_1">%1$d</xliff:g> file.</item>
- <item quantity="one">Spostamento di <xliff:g id="COUNT_0">%1$d</xliff:g> file.</item>
- </plurals>
- <plurals name="deleting" formatted="false" msgid="5054338566802559411">
- <item quantity="other">Eliminazione di <xliff:g id="COUNT_1">%1$d</xliff:g> file.</item>
- <item quantity="one">Eliminazione di <xliff:g id="COUNT_0">%1$d</xliff:g> file.</item>
- </plurals>
- <string name="undo" msgid="7905788502491742328">"Annulla"</string>
- <string name="copy_preparing" msgid="3896202461003039386">"Preparazione alla copia…"</string>
- <string name="move_preparing" msgid="2772219441375531410">"Preparazione dello spostamento…"</string>
- <string name="delete_preparing" msgid="5655813182533491992">"Preparazione eliminazione…"</string>
- <string name="delete_progress" msgid="5399405983046157222">"<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="7160447124922897689">
- <item quantity="other">Impossibile copiare <xliff:g id="COUNT_1">%1$d</xliff:g> file</item>
- <item quantity="one">Impossibile copiare <xliff:g id="COUNT_0">%1$d</xliff:g> file</item>
- </plurals>
- <plurals name="move_error_notification_title" formatted="false" msgid="2710901971014783012">
- <item quantity="other">Impossibile spostare <xliff:g id="COUNT_1">%1$d</xliff:g> file</item>
- <item quantity="one">Impossibile spostare <xliff:g id="COUNT_0">%1$d</xliff:g> file</item>
- </plurals>
- <plurals name="delete_error_notification_title" formatted="false" msgid="7228393157786591199">
- <item quantity="other">Impossibile eliminare <xliff:g id="COUNT_1">%1$d</xliff:g> file</item>
- <item quantity="one">Impossibile eliminare <xliff:g id="COUNT_0">%1$d</xliff:g> file</item>
- </plurals>
- <string name="notification_touch_for_details" msgid="6268189413228855582">"Tocca per vedere i dettagli"</string>
- <string name="close" msgid="3043722427445528732">"Chiudi"</string>
- <string name="copy_failure_alert_content" msgid="4563147454522476183">"I seguenti file non sono stati copiati: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="move_failure_alert_content" msgid="2635075788682922861">"I seguenti file non sono stati spostati: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="delete_failure_alert_content" msgid="892393767207938353">"I seguenti file non sono stati eliminati: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="copy_converted_warning_content" msgid="5753861488218674361">"I file sono stati convertiti in un altro formato: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <plurals name="clipboard_files_clipped" formatted="false" msgid="855459017537058539">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> file copiati negli appunti.</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> file copiato negli appunti.</item>
- </plurals>
- <string name="clipboard_files_cannot_paste" msgid="2878324825602325706">"Impossibile incollare i file selezionati in questa posizione."</string>
- <string name="menu_rename" msgid="7678802479104285353">"Rinomina"</string>
- <string name="rename_error" msgid="4203041674883412606">"Ridenominazione documento non riuscita"</string>
- <string name="menu_eject_root" msgid="2768224615494227325">"Espelli"</string>
- <string name="notification_copy_files_converted_title" msgid="3153573223054275181">"Alcuni file sono stati convertiti"</string>
- <string name="open_external_dialog_request" msgid="5789329484285817629">"Concedere all\'app <xliff:g id="APPNAME"><b>^1</b></xliff:g> l\'accesso alla directory <xliff:g id="DIRECTORY"><i>^2</i></xliff:g> su <xliff:g id="STORAGE"><i>^3</i></xliff:g>?"</string>
- <string name="open_external_dialog_request_primary_volume" msgid="6635562535713428688">"Concedere all\'app <xliff:g id="APPNAME"><b>^1</b></xliff:g> l\'accesso alla directory <xliff:g id="DIRECTORY"><i>^2</i></xliff:g>?"</string>
- <string name="open_external_dialog_root_request" msgid="8899108702926347720">"Concedere all\'app <xliff:g id="APPNAME"><b>^1</b></xliff:g> l\'accesso ai tuoi dati, inclusi video e foto, sull\'unità <xliff:g id="STORAGE"><i>^2</i></xliff:g>?"</string>
- <string name="never_ask_again" msgid="4295278542972859268">"Non chiedermelo più"</string>
- <string name="allow" msgid="7225948811296386551">"Consenti"</string>
- <string name="deny" msgid="2081879885755434506">"Nega"</string>
- <plurals name="elements_selected" formatted="false" msgid="1376955402452875047">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> file selezionati</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> file selezionato</item>
- </plurals>
- <plurals name="elements_dragged" formatted="false" msgid="3727204615215602228">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> elementi</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> elemento</item>
- </plurals>
- <string name="delete_filename_confirmation_message" msgid="5312817725577537488">"Eliminare \"<xliff:g id="NAME">%1$s</xliff:g>\"?"</string>
- <string name="delete_foldername_confirmation_message" msgid="5885501832257285329">"Eliminare la cartella \"<xliff:g id="NAME">%1$s</xliff:g>\" e i relativi contenuti?"</string>
- <plurals name="delete_files_confirmation_message" formatted="false" msgid="8417505791395471802">
- <item quantity="other">Eliminare <xliff:g id="COUNT_1">%1$d</xliff:g> file?</item>
- <item quantity="one">Eliminare <xliff:g id="COUNT_0">%1$d</xliff:g> file?</item>
- </plurals>
- <plurals name="delete_folders_confirmation_message" formatted="false" msgid="9185648028213507769">
- <item quantity="other">Eliminare <xliff:g id="COUNT_1">%1$d</xliff:g> cartelle e i relativi contenuti?</item>
- <item quantity="one">Eliminare <xliff:g id="COUNT_0">%1$d</xliff:g> cartella e i relativi contenuti?</item>
- </plurals>
- <plurals name="delete_items_confirmation_message" formatted="false" msgid="5376214433530243459">
- <item quantity="other">Eliminare <xliff:g id="COUNT_1">%1$d</xliff:g> elementi?</item>
- <item quantity="one">Eliminare <xliff:g id="COUNT_0">%1$d</xliff:g> elemento?</item>
- </plurals>
-</resources>
diff --git a/packages/DocumentsUI/res/values-iw/strings.xml b/packages/DocumentsUI/res/values-iw/strings.xml
deleted file mode 100644
index 19e3790..0000000
--- a/packages/DocumentsUI/res/values-iw/strings.xml
+++ /dev/null
@@ -1,168 +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="app_label" msgid="1551050262492398204">"קבצים"</string>
- <string name="downloads_label" msgid="959113951084633612">"הורדות"</string>
- <string name="title_open" msgid="4353228937663917801">"פתח מ-"</string>
- <string name="title_save" msgid="2433679664882857999">"שמור ב-"</string>
- <string name="menu_create_dir" msgid="2547620241173881754">"תיקייה חדשה"</string>
- <string name="menu_grid" msgid="6878021334497835259">"תצוגת רשת"</string>
- <string name="menu_list" msgid="7279285939892417279">"תצוגת רשימה"</string>
- <string name="menu_sort" msgid="7677740407158414452">"מיין לפי"</string>
- <string name="menu_search" msgid="3816712084502856974">"חפש"</string>
- <string name="menu_settings" msgid="8239065133341597825">"הגדרות אחסון"</string>
- <string name="menu_open" msgid="432922957274920903">"פתח"</string>
- <string name="menu_save" msgid="2394743337684426338">"שמור"</string>
- <string name="menu_share" msgid="3075149983979628146">"שתף"</string>
- <string name="menu_delete" msgid="8138799623850614177">"מחק"</string>
- <string name="menu_select_all" msgid="8323579667348729928">"בחר הכל"</string>
- <string name="menu_copy" msgid="3612326052677229148">"העתק אל…"</string>
- <string name="menu_move" msgid="1828090633118079817">"העבר אל…"</string>
- <string name="menu_new_window" msgid="1226032889278727538">"חלון חדש"</string>
- <string name="menu_cut_to_clipboard" msgid="2467149185452488383">"גזור"</string>
- <string name="menu_copy_to_clipboard" msgid="489311381979634291">"העתק"</string>
- <string name="menu_paste_from_clipboard" msgid="2071583031180257091">"הדבק"</string>
- <string name="menu_advanced_show" msgid="4693652895715631401">"הצג אחסון פנימי"</string>
- <string name="menu_advanced_hide" msgid="4218809952721972589">"הסתר אחסון פנימי"</string>
- <string name="menu_file_size_show" msgid="3240323619260823076">"הצג גודל קובץ"</string>
- <string name="menu_file_size_hide" msgid="8881975928502581042">"הסתר גודל קובץ"</string>
- <string name="button_select" msgid="527196987259139214">"בחר"</string>
- <string name="button_copy" msgid="8706475544635021302">"העתק"</string>
- <string name="button_move" msgid="2202666023104202232">"העבר"</string>
- <string name="button_dismiss" msgid="3714065566893946085">"הסר"</string>
- <string name="button_retry" msgid="4392027584153752797">"נסה שוב"</string>
- <string name="sort_name" msgid="9183560467917256779">"לפי שם"</string>
- <string name="sort_date" msgid="586080032956151448">"לפי תאריך שינוי"</string>
- <string name="sort_size" msgid="3350681319735474741">"לפי גודל"</string>
- <string name="drawer_open" msgid="4545466532430226949">"הצג שורשים"</string>
- <string name="drawer_close" msgid="7602734368552123318">"הסתר שורשים"</string>
- <string name="save_error" msgid="6167009778003223664">"שמירת המסמך נכשלה"</string>
- <string name="create_error" msgid="3735649141335444215">"יצירת התיקיה נכשלה"</string>
- <string name="query_error" msgid="5999895349602476581">"לא ניתן כרגע לטעון תוכן"</string>
- <string name="root_recent" msgid="4470053704320518133">"מהזמן האחרון"</string>
- <string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> של שטח פנוי"</string>
- <string name="root_type_service" msgid="2178854894416775409">"שירותי אחסון"</string>
- <string name="root_type_shortcut" msgid="3318760609471618093">"קיצורי דרך"</string>
- <string name="root_type_device" msgid="7121342474653483538">"מכשירים"</string>
- <string name="root_type_apps" msgid="8838065367985945189">"עוד אפליקציות"</string>
- <string name="empty" msgid="7858882803708117596">"אין פריטים"</string>
- <string name="no_results" msgid="6622510343880730446">"אין התאמות ב-%1$s"</string>
- <string name="toast_no_application" msgid="4632640357724698144">"לא ניתן לפתוח את הקובץ"</string>
- <string name="toast_failed_delete" msgid="2180678019407244069">"לא ניתן למחוק חלק מהמסמכים"</string>
- <string name="share_via" msgid="8966594246261344259">"שתף באמצעות"</string>
- <string name="copy_notification_title" msgid="6374299806748219777">"מעתיק קבצים"</string>
- <string name="move_notification_title" msgid="6193835179777284805">"מעביר קבצים"</string>
- <string name="delete_notification_title" msgid="3329403967712437496">"מחיקת קבצים מתבצעת"</string>
- <string name="copy_remaining" msgid="6283790937387975095">"זמן נותר: <xliff:g id="DURATION">%s</xliff:g>"</string>
- <plurals name="copy_begin" formatted="false" msgid="9071199452634086365">
- <item quantity="two">מעתיק <xliff:g id="COUNT_1">%1$d</xliff:g> קבצים.</item>
- <item quantity="many">מעתיק <xliff:g id="COUNT_1">%1$d</xliff:g> קבצים.</item>
- <item quantity="other">מעתיק <xliff:g id="COUNT_1">%1$d</xliff:g> קבצים.</item>
- <item quantity="one">מעתיק קובץ <xliff:g id="COUNT_0">%1$d</xliff:g>.</item>
- </plurals>
- <plurals name="move_begin" formatted="false" msgid="8430330882138871643">
- <item quantity="two">מעביר <xliff:g id="COUNT_1">%1$d</xliff:g> קבצים.</item>
- <item quantity="many">מעביר <xliff:g id="COUNT_1">%1$d</xliff:g> קבצים.</item>
- <item quantity="other">מעביר <xliff:g id="COUNT_1">%1$d</xliff:g> קבצים.</item>
- <item quantity="one">מעביר קובץ <xliff:g id="COUNT_0">%1$d</xliff:g>.</item>
- </plurals>
- <plurals name="deleting" formatted="false" msgid="5054338566802559411">
- <item quantity="two">מוחק <xliff:g id="COUNT_1">%1$d</xliff:g> קבצים.</item>
- <item quantity="many">מוחק <xliff:g id="COUNT_1">%1$d</xliff:g> קבצים.</item>
- <item quantity="other">מוחק <xliff:g id="COUNT_1">%1$d</xliff:g> קבצים.</item>
- <item quantity="one"> מוחק קובץ <xliff:g id="COUNT_0">%1$d</xliff:g>.</item>
- </plurals>
- <string name="undo" msgid="7905788502491742328">"בטל"</string>
- <string name="copy_preparing" msgid="3896202461003039386">"מתכונן להעתקה..."</string>
- <string name="move_preparing" msgid="2772219441375531410">"מתכונן להעברה…"</string>
- <string name="delete_preparing" msgid="5655813182533491992">"מתכונן למחיקה…"</string>
- <string name="delete_progress" msgid="5399405983046157222">"<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="7160447124922897689">
- <item quantity="two">לא ניתן היה להעתיק <xliff:g id="COUNT_1">%1$d</xliff:g> קבצים</item>
- <item quantity="many">לא ניתן היה להעתיק <xliff:g id="COUNT_1">%1$d</xliff:g> קבצים</item>
- <item quantity="other">לא ניתן היה להעתיק <xliff:g id="COUNT_1">%1$d</xliff:g> קבצים</item>
- <item quantity="one">לא ניתן היה להעתיק <xliff:g id="COUNT_0">%1$d</xliff:g> קובץ</item>
- </plurals>
- <plurals name="move_error_notification_title" formatted="false" msgid="2710901971014783012">
- <item quantity="two">לא ניתן היה להעביר <xliff:g id="COUNT_1">%1$d</xliff:g> קבצים</item>
- <item quantity="many">לא ניתן היה להעביר <xliff:g id="COUNT_1">%1$d</xliff:g> קבצים</item>
- <item quantity="other">לא ניתן היה להעביר <xliff:g id="COUNT_1">%1$d</xliff:g> קבצים</item>
- <item quantity="one">לא ניתן היה להעביר <xliff:g id="COUNT_0">%1$d</xliff:g> קובץ</item>
- </plurals>
- <plurals name="delete_error_notification_title" formatted="false" msgid="7228393157786591199">
- <item quantity="two">לא ניתן היה למחוק <xliff:g id="COUNT_1">%1$d</xliff:g> קבצים</item>
- <item quantity="many">לא ניתן היה למחוק <xliff:g id="COUNT_1">%1$d</xliff:g> קבצים</item>
- <item quantity="other">לא ניתן היה למחוק <xliff:g id="COUNT_1">%1$d</xliff:g> קבצים</item>
- <item quantity="one">לא ניתן היה למחוק <xliff:g id="COUNT_0">%1$d</xliff:g> קובץ</item>
- </plurals>
- <string name="notification_touch_for_details" msgid="6268189413228855582">"הקש כדי להציג פרטים"</string>
- <string name="close" msgid="3043722427445528732">"סגור"</string>
- <string name="copy_failure_alert_content" msgid="4563147454522476183">"הקבצים הבאים לא הועתקו: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="move_failure_alert_content" msgid="2635075788682922861">"הקבצים הבאים לא הועברו: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="delete_failure_alert_content" msgid="892393767207938353">"הקבצים הבאים לא נמחקו: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="copy_converted_warning_content" msgid="5753861488218674361">"הקבצים האלה הומרו לפורמט אחר: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <plurals name="clipboard_files_clipped" formatted="false" msgid="855459017537058539">
- <item quantity="two"><xliff:g id="COUNT_1">%1$d</xliff:g> קבצים הועתקו אל הלוח.</item>
- <item quantity="many"><xliff:g id="COUNT_1">%1$d</xliff:g> קבצים הועתקו אל הלוח.</item>
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> קבצים הועתקו אל הלוח.</item>
- <item quantity="one">קובץ <xliff:g id="COUNT_0">%1$d</xliff:g> הועתק אל הלוח.</item>
- </plurals>
- <string name="clipboard_files_cannot_paste" msgid="2878324825602325706">"לא ניתן להדביק את הקבצים הנבחרים במיקום הזה."</string>
- <string name="menu_rename" msgid="7678802479104285353">"שנה שם"</string>
- <string name="rename_error" msgid="4203041674883412606">"ניסיון שינוי שם המסמך נכשל"</string>
- <string name="menu_eject_root" msgid="2768224615494227325">"הוצא"</string>
- <string name="notification_copy_files_converted_title" msgid="3153573223054275181">"קבצים מסוימים הומרו"</string>
- <string name="open_external_dialog_request" msgid="5789329484285817629">"האם להעניק לאפליקציה <xliff:g id="APPNAME"><b>^1</b></xliff:g> גישה לספריה <xliff:g id="DIRECTORY"><i>^2</i></xliff:g> באחסון <xliff:g id="STORAGE"><i>^3</i></xliff:g>?"</string>
- <string name="open_external_dialog_request_primary_volume" msgid="6635562535713428688">"האם להעניק לאפליקציה <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="8899108702926347720">"האם להעניק לאפליקציה <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="4295278542972859268">"אל תשאל שוב"</string>
- <string name="allow" msgid="7225948811296386551">"אפשר"</string>
- <string name="deny" msgid="2081879885755434506">"דחה"</string>
- <plurals name="elements_selected" formatted="false" msgid="1376955402452875047">
- <item quantity="two"><xliff:g id="COUNT_1">%1$d</xliff:g> נבחרו</item>
- <item quantity="many"><xliff:g id="COUNT_1">%1$d</xliff:g> נבחרו</item>
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> נבחרו</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> נבחר</item>
- </plurals>
- <plurals name="elements_dragged" formatted="false" msgid="3727204615215602228">
- <item quantity="two"><xliff:g id="COUNT_1">%1$d</xliff:g> פריטים</item>
- <item quantity="many"><xliff:g id="COUNT_1">%1$d</xliff:g> פריטים</item>
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> פריטים</item>
- <item quantity="one">פריט <xliff:g id="COUNT_0">%1$d</xliff:g></item>
- </plurals>
- <string name="delete_filename_confirmation_message" msgid="5312817725577537488">"האם למחוק את \"<xliff:g id="NAME">%1$s</xliff:g>\"?"</string>
- <string name="delete_foldername_confirmation_message" msgid="5885501832257285329">"האם למחוק את התיקייה \"<xliff:g id="NAME">%1$s</xliff:g>\" ואת התוכן שלה?"</string>
- <plurals name="delete_files_confirmation_message" formatted="false" msgid="8417505791395471802">
- <item quantity="two">האם למחוק <xliff:g id="COUNT_1">%1$d</xliff:g> קבצים?</item>
- <item quantity="many">האם למחוק <xliff:g id="COUNT_1">%1$d</xliff:g> קבצים?</item>
- <item quantity="other">האם למחוק <xliff:g id="COUNT_1">%1$d</xliff:g> קבצים?</item>
- <item quantity="one">האם למחוק <xliff:g id="COUNT_0">%1$d</xliff:g> קובץ?</item>
- </plurals>
- <plurals name="delete_folders_confirmation_message" formatted="false" msgid="9185648028213507769">
- <item quantity="two">האם למחוק <xliff:g id="COUNT_1">%1$d</xliff:g> תיקיות ואת התוכן שלהן?</item>
- <item quantity="many">האם למחוק <xliff:g id="COUNT_1">%1$d</xliff:g> תיקיות ואת התוכן שלהן?</item>
- <item quantity="other">האם למחוק <xliff:g id="COUNT_1">%1$d</xliff:g> תיקיות ואת התוכן שלהן?</item>
- <item quantity="one">האם למחוק <xliff:g id="COUNT_0">%1$d</xliff:g> תיקייה ואת התוכן שלה?</item>
- </plurals>
- <plurals name="delete_items_confirmation_message" formatted="false" msgid="5376214433530243459">
- <item quantity="two">האם למחוק <xliff:g id="COUNT_1">%1$d</xliff:g> פריטים?</item>
- <item quantity="many">האם למחוק <xliff:g id="COUNT_1">%1$d</xliff:g> פריטים?</item>
- <item quantity="other">האם למחוק <xliff:g id="COUNT_1">%1$d</xliff:g> פריטים?</item>
- <item quantity="one">האם למחוק <xliff:g id="COUNT_0">%1$d</xliff:g> פריט?</item>
- </plurals>
-</resources>
diff --git a/packages/DocumentsUI/res/values-ja/strings.xml b/packages/DocumentsUI/res/values-ja/strings.xml
deleted file mode 100644
index 3cee741..0000000
--- a/packages/DocumentsUI/res/values-ja/strings.xml
+++ /dev/null
@@ -1,144 +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="app_label" msgid="1551050262492398204">"ファイル"</string>
- <string name="downloads_label" msgid="959113951084633612">"ダウンロード"</string>
- <string name="title_open" msgid="4353228937663917801">"次から開く:"</string>
- <string name="title_save" msgid="2433679664882857999">"次に保存:"</string>
- <string name="menu_create_dir" msgid="2547620241173881754">"新しいフォルダ"</string>
- <string name="menu_grid" msgid="6878021334497835259">"グリッド表示"</string>
- <string name="menu_list" msgid="7279285939892417279">"リスト表示"</string>
- <string name="menu_sort" msgid="7677740407158414452">"並べ替え"</string>
- <string name="menu_search" msgid="3816712084502856974">"検索"</string>
- <string name="menu_settings" msgid="8239065133341597825">"ストレージの設定"</string>
- <string name="menu_open" msgid="432922957274920903">"開く"</string>
- <string name="menu_save" msgid="2394743337684426338">"保存"</string>
- <string name="menu_share" msgid="3075149983979628146">"共有"</string>
- <string name="menu_delete" msgid="8138799623850614177">"削除"</string>
- <string name="menu_select_all" msgid="8323579667348729928">"すべて選択"</string>
- <string name="menu_copy" msgid="3612326052677229148">"コピー…"</string>
- <string name="menu_move" msgid="1828090633118079817">"移動..."</string>
- <string name="menu_new_window" msgid="1226032889278727538">"新しいウィンドウ"</string>
- <string name="menu_cut_to_clipboard" msgid="2467149185452488383">"切り取り"</string>
- <string name="menu_copy_to_clipboard" msgid="489311381979634291">"コピー"</string>
- <string name="menu_paste_from_clipboard" msgid="2071583031180257091">"貼り付け"</string>
- <string name="menu_advanced_show" msgid="4693652895715631401">"内部ストレージを表示"</string>
- <string name="menu_advanced_hide" msgid="4218809952721972589">"内部ストレージを非表示"</string>
- <string name="menu_file_size_show" msgid="3240323619260823076">"ファイルサイズを表示"</string>
- <string name="menu_file_size_hide" msgid="8881975928502581042">"ファイルサイズを非表示"</string>
- <string name="button_select" msgid="527196987259139214">"選択"</string>
- <string name="button_copy" msgid="8706475544635021302">"コピー"</string>
- <string name="button_move" msgid="2202666023104202232">"移動"</string>
- <string name="button_dismiss" msgid="3714065566893946085">"表示しない"</string>
- <string name="button_retry" msgid="4392027584153752797">"再試行"</string>
- <string name="sort_name" msgid="9183560467917256779">"名前順"</string>
- <string name="sort_date" msgid="586080032956151448">"更新日順"</string>
- <string name="sort_size" msgid="3350681319735474741">"サイズ順"</string>
- <string name="drawer_open" msgid="4545466532430226949">"ルートを表示する"</string>
- <string name="drawer_close" msgid="7602734368552123318">"ルートを非表示にする"</string>
- <string name="save_error" msgid="6167009778003223664">"ドキュメントを保存できませんでした"</string>
- <string name="create_error" msgid="3735649141335444215">"フォルダを作成できませんでした"</string>
- <string name="query_error" msgid="5999895349602476581">"現在、コンテンツを読み込むことができません"</string>
- <string name="root_recent" msgid="4470053704320518133">"最近"</string>
- <string name="root_available_bytes" msgid="8568452858617033281">"空き容量: <xliff:g id="SIZE">%1$s</xliff:g>"</string>
- <string name="root_type_service" msgid="2178854894416775409">"ストレージサービス"</string>
- <string name="root_type_shortcut" msgid="3318760609471618093">"ショートカット"</string>
- <string name="root_type_device" msgid="7121342474653483538">"端末"</string>
- <string name="root_type_apps" msgid="8838065367985945189">"その他のアプリ"</string>
- <string name="empty" msgid="7858882803708117596">"アイテムがありません"</string>
- <string name="no_results" msgid="6622510343880730446">"該当するものは %1$s にありません"</string>
- <string name="toast_no_application" msgid="4632640357724698144">"ファイルを開けません"</string>
- <string name="toast_failed_delete" msgid="2180678019407244069">"一部のドキュメントを削除できません"</string>
- <string name="share_via" msgid="8966594246261344259">"共有ツール"</string>
- <string name="copy_notification_title" msgid="6374299806748219777">"ファイルのコピー中"</string>
- <string name="move_notification_title" msgid="6193835179777284805">"ファイルを移動中"</string>
- <string name="delete_notification_title" msgid="3329403967712437496">"ファイルを削除しています"</string>
- <string name="copy_remaining" msgid="6283790937387975095">"残り<xliff:g id="DURATION">%s</xliff:g>"</string>
- <plurals name="copy_begin" formatted="false" msgid="9071199452634086365">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g>個のファイルをコピーしています。</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g>個のファイルをコピーしています。</item>
- </plurals>
- <plurals name="move_begin" formatted="false" msgid="8430330882138871643">
- <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="5054338566802559411">
- <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="7905788502491742328">"元に戻す"</string>
- <string name="copy_preparing" msgid="3896202461003039386">"コピーの準備をしています…"</string>
- <string name="move_preparing" msgid="2772219441375531410">"移動の準備をしています…"</string>
- <string name="delete_preparing" msgid="5655813182533491992">"削除の準備をしています…"</string>
- <string name="delete_progress" msgid="5399405983046157222">"<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="7160447124922897689">
- <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="2710901971014783012">
- <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="7228393157786591199">
- <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="6268189413228855582">"タップすると詳細が表示されます"</string>
- <string name="close" msgid="3043722427445528732">"閉じる"</string>
- <string name="copy_failure_alert_content" msgid="4563147454522476183">"次のファイルをコピーできませんでした: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="move_failure_alert_content" msgid="2635075788682922861">"次のファイルを移動できませんでした: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="delete_failure_alert_content" msgid="892393767207938353">"次のファイルを削除できませんでした: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="copy_converted_warning_content" msgid="5753861488218674361">"次のファイルが別の形式に変換されました: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <plurals name="clipboard_files_clipped" formatted="false" msgid="855459017537058539">
- <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="clipboard_files_cannot_paste" msgid="2878324825602325706">"選択したファイルをこの場所に貼り付けることはできません。"</string>
- <string name="menu_rename" msgid="7678802479104285353">"名前を変更"</string>
- <string name="rename_error" msgid="4203041674883412606">"ドキュメントの名前を変更できませんでした"</string>
- <string name="menu_eject_root" msgid="2768224615494227325">"取り外し"</string>
- <string name="notification_copy_files_converted_title" msgid="3153573223054275181">"一部のファイルが変換されました"</string>
- <string name="open_external_dialog_request" msgid="5789329484285817629">"「<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="6635562535713428688">"「<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="8899108702926347720">"<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="4295278542972859268">"今後表示しない"</string>
- <string name="allow" msgid="7225948811296386551">"許可"</string>
- <string name="deny" msgid="2081879885755434506">"拒否"</string>
- <plurals name="elements_selected" formatted="false" msgid="1376955402452875047">
- <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="3727204615215602228">
- <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="5312817725577537488">"「<xliff:g id="NAME">%1$s</xliff:g>」を削除しますか?"</string>
- <string name="delete_foldername_confirmation_message" msgid="5885501832257285329">"フォルダ「<xliff:g id="NAME">%1$s</xliff:g>」とそのコンテンツを削除しますか?"</string>
- <plurals name="delete_files_confirmation_message" formatted="false" msgid="8417505791395471802">
- <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="9185648028213507769">
- <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="5376214433530243459">
- <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>
-</resources>
diff --git a/packages/DocumentsUI/res/values-ka-rGE/strings.xml b/packages/DocumentsUI/res/values-ka-rGE/strings.xml
deleted file mode 100644
index ccb96a7..0000000
--- a/packages/DocumentsUI/res/values-ka-rGE/strings.xml
+++ /dev/null
@@ -1,144 +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="app_label" msgid="1551050262492398204">"ფაილები"</string>
- <string name="downloads_label" msgid="959113951084633612">"ჩამოტვირთვები"</string>
- <string name="title_open" msgid="4353228937663917801">"გახსნა აქედან:"</string>
- <string name="title_save" msgid="2433679664882857999">"შენახვა აქ:"</string>
- <string name="menu_create_dir" msgid="2547620241173881754">"ახალი საქაღალდე"</string>
- <string name="menu_grid" msgid="6878021334497835259">"ბადის ხედი"</string>
- <string name="menu_list" msgid="7279285939892417279">"სიის ხედი"</string>
- <string name="menu_sort" msgid="7677740407158414452">"სორტირება:"</string>
- <string name="menu_search" msgid="3816712084502856974">"ძიება"</string>
- <string name="menu_settings" msgid="8239065133341597825">"საცავის პარამეტრები"</string>
- <string name="menu_open" msgid="432922957274920903">"გახსნა"</string>
- <string name="menu_save" msgid="2394743337684426338">"შენახვა"</string>
- <string name="menu_share" msgid="3075149983979628146">"გაზიარება"</string>
- <string name="menu_delete" msgid="8138799623850614177">"წაშლა"</string>
- <string name="menu_select_all" msgid="8323579667348729928">"ყველას არჩევა"</string>
- <string name="menu_copy" msgid="3612326052677229148">"კოპირება…"</string>
- <string name="menu_move" msgid="1828090633118079817">"გადაადგილება..."</string>
- <string name="menu_new_window" msgid="1226032889278727538">"ახალი ფანჯარა"</string>
- <string name="menu_cut_to_clipboard" msgid="2467149185452488383">"ამოჭრა"</string>
- <string name="menu_copy_to_clipboard" msgid="489311381979634291">"კოპირება"</string>
- <string name="menu_paste_from_clipboard" msgid="2071583031180257091">"ჩასმა"</string>
- <string name="menu_advanced_show" msgid="4693652895715631401">"შიდა საცავის ჩვენება"</string>
- <string name="menu_advanced_hide" msgid="4218809952721972589">"შიდა მეხსიერების დამალვა"</string>
- <string name="menu_file_size_show" msgid="3240323619260823076">"ფაილის ზომის ჩვენება"</string>
- <string name="menu_file_size_hide" msgid="8881975928502581042">"ფაილის ზომის დამალვა"</string>
- <string name="button_select" msgid="527196987259139214">"არჩევა"</string>
- <string name="button_copy" msgid="8706475544635021302">"კოპირება"</string>
- <string name="button_move" msgid="2202666023104202232">"გადაადგილება"</string>
- <string name="button_dismiss" msgid="3714065566893946085">"დახურვა"</string>
- <string name="button_retry" msgid="4392027584153752797">"ისევ ცდა"</string>
- <string name="sort_name" msgid="9183560467917256779">"სახელით"</string>
- <string name="sort_date" msgid="586080032956151448">"ცვლილების თარიღით"</string>
- <string name="sort_size" msgid="3350681319735474741">"ზომით"</string>
- <string name="drawer_open" msgid="4545466532430226949">"ფესვების ჩვენება"</string>
- <string name="drawer_close" msgid="7602734368552123318">"ფესვების დამალვა"</string>
- <string name="save_error" msgid="6167009778003223664">"დოკუმენტის შენახვა ვერ მოხერხდა"</string>
- <string name="create_error" msgid="3735649141335444215">"საქაღალდის შექმნა ვერ მოხერხდა"</string>
- <string name="query_error" msgid="5999895349602476581">"კონტენტის ჩატვირთვა ამჟამად ვერ ხერხდება"</string>
- <string name="root_recent" msgid="4470053704320518133">"ბოლო"</string>
- <string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> თავისუფალია"</string>
- <string name="root_type_service" msgid="2178854894416775409">"მეხსიერების სერვისები"</string>
- <string name="root_type_shortcut" msgid="3318760609471618093">"მალსახმობები"</string>
- <string name="root_type_device" msgid="7121342474653483538">"მოწყობილობები"</string>
- <string name="root_type_apps" msgid="8838065367985945189">"მეტი აპები"</string>
- <string name="empty" msgid="7858882803708117596">"ერთეულები არ არის"</string>
- <string name="no_results" msgid="6622510343880730446">"„%1$s“-ში დამთხვევა ვერ მოიძებნა"</string>
- <string name="toast_no_application" msgid="4632640357724698144">"ფაილის გახსნა ვერ ხერხდება"</string>
- <string name="toast_failed_delete" msgid="2180678019407244069">"ზოგიერთი დოკუმენტის წაშლა ვერ ხერხდება"</string>
- <string name="share_via" msgid="8966594246261344259">"გაზიარება:"</string>
- <string name="copy_notification_title" msgid="6374299806748219777">"მიმდ. ფაილების კოპირება"</string>
- <string name="move_notification_title" msgid="6193835179777284805">"ფაილების გადაადგილება"</string>
- <string name="delete_notification_title" msgid="3329403967712437496">"ფაილების წაშლა…"</string>
- <string name="copy_remaining" msgid="6283790937387975095">"დარჩა <xliff:g id="DURATION">%s</xliff:g>"</string>
- <plurals name="copy_begin" formatted="false" msgid="9071199452634086365">
- <item quantity="other">მიმდინარეობს <xliff:g id="COUNT_1">%1$d</xliff:g> ფაილის კოპირება.</item>
- <item quantity="one">მიმდინარეობს <xliff:g id="COUNT_0">%1$d</xliff:g> ფაილის კოპირება.</item>
- </plurals>
- <plurals name="move_begin" formatted="false" msgid="8430330882138871643">
- <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="5054338566802559411">
- <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="7905788502491742328">"დაბრუნება"</string>
- <string name="copy_preparing" msgid="3896202461003039386">"მომზადება კოპირებისთვის…"</string>
- <string name="move_preparing" msgid="2772219441375531410">"გადაადგილება მზადდება..."</string>
- <string name="delete_preparing" msgid="5655813182533491992">"მზადდება წასაშლელად…"</string>
- <string name="delete_progress" msgid="5399405983046157222">"<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="7160447124922897689">
- <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="2710901971014783012">
- <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="7228393157786591199">
- <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="6268189413228855582">"შეეხეთ დეტალების სანახავად"</string>
- <string name="close" msgid="3043722427445528732">"დახურვა"</string>
- <string name="copy_failure_alert_content" msgid="4563147454522476183">"შემდეგი ფაილები არ დაკოპირდა: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="move_failure_alert_content" msgid="2635075788682922861">"შემდეგი ფაილები არ გადაადგილდა: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="delete_failure_alert_content" msgid="892393767207938353">"შემდეგი ფაილები არ წაიშალა: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="copy_converted_warning_content" msgid="5753861488218674361">"შემდეგი ფაილები გარდაქმნილია სხვა ფორმატში: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <plurals name="clipboard_files_clipped" formatted="false" msgid="855459017537058539">
- <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="clipboard_files_cannot_paste" msgid="2878324825602325706">"ამ მდებარეობაში შერჩეული ფაილების ჩასმა შეუძლებელია."</string>
- <string name="menu_rename" msgid="7678802479104285353">"გადარქმევა"</string>
- <string name="rename_error" msgid="4203041674883412606">"დოკუმენტის გადარქმევა ვერ მოხერხდა"</string>
- <string name="menu_eject_root" msgid="2768224615494227325">"ამოღება"</string>
- <string name="notification_copy_files_converted_title" msgid="3153573223054275181">"ზოგიერთი ფაილი გარდაქმნილია"</string>
- <string name="open_external_dialog_request" msgid="5789329484285817629">"გსურთ, <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="6635562535713428688">"გსურთ, <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="8899108702926347720">"გსურთ, <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="4295278542972859268">"აღარ მკითხოთ"</string>
- <string name="allow" msgid="7225948811296386551">"უფლების მიცემა"</string>
- <string name="deny" msgid="2081879885755434506">"აკრძალვა"</string>
- <plurals name="elements_selected" formatted="false" msgid="1376955402452875047">
- <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="3727204615215602228">
- <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="5312817725577537488">"გსურთ, წაშალოთ „<xliff:g id="NAME">%1$s</xliff:g>“?"</string>
- <string name="delete_foldername_confirmation_message" msgid="5885501832257285329">"გსურთ, წაშალოთ საქაღალდე „<xliff:g id="NAME">%1$s</xliff:g>“ და მისი შიგთავსი?"</string>
- <plurals name="delete_files_confirmation_message" formatted="false" msgid="8417505791395471802">
- <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="9185648028213507769">
- <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="5376214433530243459">
- <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>
-</resources>
diff --git a/packages/DocumentsUI/res/values-kk-rKZ/strings.xml b/packages/DocumentsUI/res/values-kk-rKZ/strings.xml
deleted file mode 100644
index 2925361..0000000
--- a/packages/DocumentsUI/res/values-kk-rKZ/strings.xml
+++ /dev/null
@@ -1,144 +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="app_label" msgid="1551050262492398204">"Файлдар"</string>
- <string name="downloads_label" msgid="959113951084633612">"Жүктеулер"</string>
- <string name="title_open" msgid="4353228937663917801">"Мынадан ашу:"</string>
- <string name="title_save" msgid="2433679664882857999">"Сақталатын орны"</string>
- <string name="menu_create_dir" msgid="2547620241173881754">"Жаңа қалта"</string>
- <string name="menu_grid" msgid="6878021334497835259">"Торлы көрініс"</string>
- <string name="menu_list" msgid="7279285939892417279">"Тізім көрінісі"</string>
- <string name="menu_sort" msgid="7677740407158414452">"Белгіге қарай сұрыптау"</string>
- <string name="menu_search" msgid="3816712084502856974">"Іздеу"</string>
- <string name="menu_settings" msgid="8239065133341597825">"Жад параметрлері"</string>
- <string name="menu_open" msgid="432922957274920903">"Ашу"</string>
- <string name="menu_save" msgid="2394743337684426338">"Сақтау"</string>
- <string name="menu_share" msgid="3075149983979628146">"Бөлісу"</string>
- <string name="menu_delete" msgid="8138799623850614177">"Жою"</string>
- <string name="menu_select_all" msgid="8323579667348729928">"Барлығын таңдау"</string>
- <string name="menu_copy" msgid="3612326052677229148">"Көшіру орны…"</string>
- <string name="menu_move" msgid="1828090633118079817">"Орнын ауыстыру…"</string>
- <string name="menu_new_window" msgid="1226032889278727538">"Жаңа терезе"</string>
- <string name="menu_cut_to_clipboard" msgid="2467149185452488383">"Қиып алу"</string>
- <string name="menu_copy_to_clipboard" msgid="489311381979634291">"Көшіру"</string>
- <string name="menu_paste_from_clipboard" msgid="2071583031180257091">"Қою"</string>
- <string name="menu_advanced_show" msgid="4693652895715631401">"Ішкі жадты көрсету"</string>
- <string name="menu_advanced_hide" msgid="4218809952721972589">"Ішкі жадты жасыру"</string>
- <string name="menu_file_size_show" msgid="3240323619260823076">"Файл өлшемін көрсету"</string>
- <string name="menu_file_size_hide" msgid="8881975928502581042">"Файл өлшемін жасыру"</string>
- <string name="button_select" msgid="527196987259139214">"Таңдау"</string>
- <string name="button_copy" msgid="8706475544635021302">"Көшіру"</string>
- <string name="button_move" msgid="2202666023104202232">"Жылжыту"</string>
- <string name="button_dismiss" msgid="3714065566893946085">"Өшіру"</string>
- <string name="button_retry" msgid="4392027584153752797">"Әрекетті қайталау"</string>
- <string name="sort_name" msgid="9183560467917256779">"Атауы бойынша"</string>
- <string name="sort_date" msgid="586080032956151448">"Өзгертілген мерзімі бойынша"</string>
- <string name="sort_size" msgid="3350681319735474741">"Өлшемі бойынша"</string>
- <string name="drawer_open" msgid="4545466532430226949">"Тамырын көрсету"</string>
- <string name="drawer_close" msgid="7602734368552123318">"Тамырын жасыру"</string>
- <string name="save_error" msgid="6167009778003223664">"Құжатты сақтау орындалмады"</string>
- <string name="create_error" msgid="3735649141335444215">"Қалта жасақтау іске аспады"</string>
- <string name="query_error" msgid="5999895349602476581">"Қазір мазмұнды жүктеу мүмкін емес"</string>
- <string name="root_recent" msgid="4470053704320518133">"Жуықта қолданылған"</string>
- <string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> бос"</string>
- <string name="root_type_service" msgid="2178854894416775409">"Жад қызметтері"</string>
- <string name="root_type_shortcut" msgid="3318760609471618093">"Төте пернелер"</string>
- <string name="root_type_device" msgid="7121342474653483538">"Құрылғылар"</string>
- <string name="root_type_apps" msgid="8838065367985945189">"Басқа қолданбалар"</string>
- <string name="empty" msgid="7858882803708117596">"Бос"</string>
- <string name="no_results" msgid="6622510343880730446">"%1$s ішінде сәйкестіктер жоқ"</string>
- <string name="toast_no_application" msgid="4632640357724698144">"Файлды ашу мүмкін емес"</string>
- <string name="toast_failed_delete" msgid="2180678019407244069">"Кейбір құжаттарды жою мүмкін болмады"</string>
- <string name="share_via" msgid="8966594246261344259">"Бөлісу"</string>
- <string name="copy_notification_title" msgid="6374299806748219777">"Файлдарды көшіру"</string>
- <string name="move_notification_title" msgid="6193835179777284805">"Файлдар тасымалдануда"</string>
- <string name="delete_notification_title" msgid="3329403967712437496">"Файлдар жойылуда"</string>
- <string name="copy_remaining" msgid="6283790937387975095">"<xliff:g id="DURATION">%s</xliff:g> қалды"</string>
- <plurals name="copy_begin" formatted="false" msgid="9071199452634086365">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> файлды көшіру.</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> файлды көшіру.</item>
- </plurals>
- <plurals name="move_begin" formatted="false" msgid="8430330882138871643">
- <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="5054338566802559411">
- <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="7905788502491742328">"Кері қайтару"</string>
- <string name="copy_preparing" msgid="3896202461003039386">"Көшіруге дайындау…"</string>
- <string name="move_preparing" msgid="2772219441375531410">"Тасымалдауға дайындалуда..."</string>
- <string name="delete_preparing" msgid="5655813182533491992">"Жоюға дайындалуда…"</string>
- <string name="delete_progress" msgid="5399405983046157222">"<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="7160447124922897689">
- <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="2710901971014783012">
- <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="7228393157786591199">
- <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="6268189413228855582">"Мәліметтерді көру үшін түртіңіз"</string>
- <string name="close" msgid="3043722427445528732">"Жабу"</string>
- <string name="copy_failure_alert_content" msgid="4563147454522476183">"Мына файлдар көшірілген жоқ: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="move_failure_alert_content" msgid="2635075788682922861">"Мына файлдар жылжытылған жоқ: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="delete_failure_alert_content" msgid="892393767207938353">"Келесі файлдар жойылмады: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="copy_converted_warning_content" msgid="5753861488218674361">"Мына файлдар басқа пішімге түрлендірілді: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <plurals name="clipboard_files_clipped" formatted="false" msgid="855459017537058539">
- <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="clipboard_files_cannot_paste" msgid="2878324825602325706">"Таңдалған файлдарды бұл орынға қою мүмкін емес."</string>
- <string name="menu_rename" msgid="7678802479104285353">"Атын өзгерту"</string>
- <string name="rename_error" msgid="4203041674883412606">"Құжат қайта аталмады"</string>
- <string name="menu_eject_root" msgid="2768224615494227325">"Шығару"</string>
- <string name="notification_copy_files_converted_title" msgid="3153573223054275181">"Кейбір файлдар түрлендірілді"</string>
- <string name="open_external_dialog_request" msgid="5789329484285817629">"<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="6635562535713428688">"<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="8899108702926347720">"<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="4295278542972859268">"Қайта сұралмасын"</string>
- <string name="allow" msgid="7225948811296386551">"Рұқсат беру"</string>
- <string name="deny" msgid="2081879885755434506">"Бас тарту"</string>
- <plurals name="elements_selected" formatted="false" msgid="1376955402452875047">
- <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="3727204615215602228">
- <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="5312817725577537488">"\"<xliff:g id="NAME">%1$s</xliff:g>\" жою керек пе?"</string>
- <string name="delete_foldername_confirmation_message" msgid="5885501832257285329">"\"<xliff:g id="NAME">%1$s</xliff:g>\" қалтасын және оның мазмұнын жою керек пе?"</string>
- <plurals name="delete_files_confirmation_message" formatted="false" msgid="8417505791395471802">
- <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="9185648028213507769">
- <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="5376214433530243459">
- <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>
-</resources>
diff --git a/packages/DocumentsUI/res/values-km-rKH/strings.xml b/packages/DocumentsUI/res/values-km-rKH/strings.xml
deleted file mode 100644
index 808a63e..0000000
--- a/packages/DocumentsUI/res/values-km-rKH/strings.xml
+++ /dev/null
@@ -1,144 +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="app_label" msgid="1551050262492398204">"ឯកសារ"</string>
- <string name="downloads_label" msgid="959113951084633612">"ទាញយក"</string>
- <string name="title_open" msgid="4353228937663917801">"បើកពី"</string>
- <string name="title_save" msgid="2433679664882857999">"រក្សាទុកទៅ"</string>
- <string name="menu_create_dir" msgid="2547620241173881754">"ថតថ្មី"</string>
- <string name="menu_grid" msgid="6878021334497835259">"ទិដ្ឋភាពក្រឡា"</string>
- <string name="menu_list" msgid="7279285939892417279">"ទិដ្ឋភាពបញ្ជី"</string>
- <string name="menu_sort" msgid="7677740407158414452">"តម្រៀបតាម"</string>
- <string name="menu_search" msgid="3816712084502856974">"ស្វែងរក"</string>
- <string name="menu_settings" msgid="8239065133341597825">"កំណត់ការផ្ទុក"</string>
- <string name="menu_open" msgid="432922957274920903">"បើក"</string>
- <string name="menu_save" msgid="2394743337684426338">"រក្សាទុក"</string>
- <string name="menu_share" msgid="3075149983979628146">"ចែករំលែក"</string>
- <string name="menu_delete" msgid="8138799623850614177">"លុប"</string>
- <string name="menu_select_all" msgid="8323579667348729928">"ជ្រើសរើសទាំងអស់"</string>
- <string name="menu_copy" msgid="3612326052677229148">"ថតចម្លងទៅ…"</string>
- <string name="menu_move" msgid="1828090633118079817">"ផ្លាស់ទីទៅ៖"</string>
- <string name="menu_new_window" msgid="1226032889278727538">"បង្អួចថ្មី"</string>
- <string name="menu_cut_to_clipboard" msgid="2467149185452488383">"កាត់"</string>
- <string name="menu_copy_to_clipboard" msgid="489311381979634291">"ចម្លង"</string>
- <string name="menu_paste_from_clipboard" msgid="2071583031180257091">"បិទភ្ជាប់"</string>
- <string name="menu_advanced_show" msgid="4693652895715631401">"បង្ហាញឧបករណ៍ផ្ទុកខាងក្នុង"</string>
- <string name="menu_advanced_hide" msgid="4218809952721972589">"លាក់ឧបករណ៍ផ្ទុកខាងក្នុង"</string>
- <string name="menu_file_size_show" msgid="3240323619260823076">"បង្ហាញទំហំឯកសារ"</string>
- <string name="menu_file_size_hide" msgid="8881975928502581042">"លាក់ទំហំឯកសារ"</string>
- <string name="button_select" msgid="527196987259139214">"ជ្រើស"</string>
- <string name="button_copy" msgid="8706475544635021302">"ចម្លង"</string>
- <string name="button_move" msgid="2202666023104202232">"ផ្លាស់ទី"</string>
- <string name="button_dismiss" msgid="3714065566893946085">"បដិសេធ"</string>
- <string name="button_retry" msgid="4392027584153752797">"ព្យាយាមម្ដងទៀត"</string>
- <string name="sort_name" msgid="9183560467917256779">"តាមឈ្មោះ"</string>
- <string name="sort_date" msgid="586080032956151448">"តាមកាលបរិច្ឆេទបានកែប្រែ"</string>
- <string name="sort_size" msgid="3350681319735474741">"តាមទំហំ"</string>
- <string name="drawer_open" msgid="4545466532430226949">"បង្ហាញ roots"</string>
- <string name="drawer_close" msgid="7602734368552123318">"លាក់ roots"</string>
- <string name="save_error" msgid="6167009778003223664">"បានបរាជ័យក្នុងការរក្សាទុកឯកសារ"</string>
- <string name="create_error" msgid="3735649141335444215">"បានបរាជ័យក្នុងការបង្កើតថត"</string>
- <string name="query_error" msgid="5999895349602476581">"មិនអាចដំណើរការមាតិកាបានទេនៅពេលនេះ"</string>
- <string name="root_recent" msgid="4470053704320518133">"ថ្មីៗ"</string>
- <string name="root_available_bytes" msgid="8568452858617033281">"ទំនេរ <xliff:g id="SIZE">%1$s</xliff:g>"</string>
- <string name="root_type_service" msgid="2178854894416775409">"សេវាកម្មផ្ដល់ឧបករណ៍ផ្ទុក"</string>
- <string name="root_type_shortcut" msgid="3318760609471618093">"ផ្លូវកាត់"</string>
- <string name="root_type_device" msgid="7121342474653483538">"ឧបករណ៍"</string>
- <string name="root_type_apps" msgid="8838065367985945189">"កម្មវិធីច្រើនទៀត"</string>
- <string name="empty" msgid="7858882803708117596">"គ្មានធាតុ"</string>
- <string name="no_results" msgid="6622510343880730446">"មិនមានការប្រកួតនៅក្នុង %1$s ទេ"</string>
- <string name="toast_no_application" msgid="4632640357724698144">"មិនអាចបើកឯកសារបានទេ"</string>
- <string name="toast_failed_delete" msgid="2180678019407244069">"មិនអាចលុបឯកសារមួយចំនួន"</string>
- <string name="share_via" msgid="8966594246261344259">"ចែករំលែកតាម"</string>
- <string name="copy_notification_title" msgid="6374299806748219777">"កំពុងថតចម្លងឯកសារ"</string>
- <string name="move_notification_title" msgid="6193835179777284805">"ផ្លាស់ទីឯកសារ"</string>
- <string name="delete_notification_title" msgid="3329403967712437496">"កំពុងលុបឯកសារ"</string>
- <string name="copy_remaining" msgid="6283790937387975095">"នៅសល់ <xliff:g id="DURATION">%s</xliff:g>"</string>
- <plurals name="copy_begin" formatted="false" msgid="9071199452634086365">
- <item quantity="other">កំពុងថតចម្លងឯកសារចំនួន <xliff:g id="COUNT_1">%1$d</xliff:g> ។</item>
- <item quantity="one">កំពុងថតចម្លងឯកសារចំនួន <xliff:g id="COUNT_0">%1$d</xliff:g> ។</item>
- </plurals>
- <plurals name="move_begin" formatted="false" msgid="8430330882138871643">
- <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="5054338566802559411">
- <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="7905788502491742328">"មិនធ្វើវិញ"</string>
- <string name="copy_preparing" msgid="3896202461003039386">"កំពុងរៀបចំចម្លង…"</string>
- <string name="move_preparing" msgid="2772219441375531410">"កំពុងរៀបចំផ្លាស់ទី…"</string>
- <string name="delete_preparing" msgid="5655813182533491992">"កំពុងរៀបចំលុប…"</string>
- <string name="delete_progress" msgid="5399405983046157222">"<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="7160447124922897689">
- <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="2710901971014783012">
- <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="7228393157786591199">
- <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="6268189413228855582">"ប៉ះដើម្បីមើលព័ត៌មានលម្អិត"</string>
- <string name="close" msgid="3043722427445528732">"បិទ"</string>
- <string name="copy_failure_alert_content" msgid="4563147454522476183">"ឯកសារទាំងនេះមិនត្រូវបានថតចម្លងទេ៖ <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="move_failure_alert_content" msgid="2635075788682922861">"ឯកសារទាំងនេះមិនត្រូវបានផ្លាស់ទីទេ៖ <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="delete_failure_alert_content" msgid="892393767207938353">"ឯកសារទាំងនេះមិនត្រូវបានលុបទេ៖ <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="copy_converted_warning_content" msgid="5753861488218674361">"ឯកសារទាំងនេះត្រូវបានបម្លែងទៅជាទម្រង់ផ្សេង៖ <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <plurals name="clipboard_files_clipped" formatted="false" msgid="855459017537058539">
- <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="clipboard_files_cannot_paste" msgid="2878324825602325706">"មិនអាចបិទភ្ជាប់ឯកសារដែលបានជ្រើសនៅក្នុងទីតាំងនេះបានទេ។"</string>
- <string name="menu_rename" msgid="7678802479104285353">"ប្ដូរឈ្មោះ"</string>
- <string name="rename_error" msgid="4203041674883412606">"បានបរាជ័យក្នុងការប្តូរឈ្មោះឯកសារ"</string>
- <string name="menu_eject_root" msgid="2768224615494227325">"ដកចេញ"</string>
- <string name="notification_copy_files_converted_title" msgid="3153573223054275181">"ឯកសារមួយចំនួនត្រូវបានបម្លែង"</string>
- <string name="open_external_dialog_request" msgid="5789329484285817629">"ផ្តល់សិទ្ធិឲ្យ <xliff:g id="APPNAME"><b>^1</b></xliff:g> ចូលដំណើរការថត <xliff:g id="DIRECTORY"><i>^2</i></xliff:g> នៅលើ <xliff:g id="STORAGE"><i>^3</i></xliff:g>?"</string>
- <string name="open_external_dialog_request_primary_volume" msgid="6635562535713428688">"ផ្តល់សិទ្ធិឲ្យ <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="8899108702926347720">"ផ្តល់សិទ្ធិអនុញ្ញាតដល់ <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="4295278542972859268">"កុំសួរទៀត"</string>
- <string name="allow" msgid="7225948811296386551">"អនុញ្ញាត"</string>
- <string name="deny" msgid="2081879885755434506">"បដិសេធ"</string>
- <plurals name="elements_selected" formatted="false" msgid="1376955402452875047">
- <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="3727204615215602228">
- <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="5312817725577537488">"លុប \"<xliff:g id="NAME">%1$s</xliff:g>\" ឬ?"</string>
- <string name="delete_foldername_confirmation_message" msgid="5885501832257285329">"លុបថតឯកសារ \"<xliff:g id="NAME">%1$s</xliff:g>\" និងមាតិការបស់វាឬ?"</string>
- <plurals name="delete_files_confirmation_message" formatted="false" msgid="8417505791395471802">
- <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="9185648028213507769">
- <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="5376214433530243459">
- <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>
-</resources>
diff --git a/packages/DocumentsUI/res/values-kn-rIN/strings.xml b/packages/DocumentsUI/res/values-kn-rIN/strings.xml
deleted file mode 100644
index 9e83f2a..0000000
--- a/packages/DocumentsUI/res/values-kn-rIN/strings.xml
+++ /dev/null
@@ -1,144 +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="app_label" msgid="1551050262492398204">"ಫೈಲ್ಗಳು"</string>
- <string name="downloads_label" msgid="959113951084633612">"ಡೌನ್ಲೋಡ್ಗಳು"</string>
- <string name="title_open" msgid="4353228937663917801">"ಇದರ ಮೂಲಕ ತೆರೆಯಿರಿ"</string>
- <string name="title_save" msgid="2433679664882857999">"ಇವುಗಳಲ್ಲಿ ಉಳಿಸಿ"</string>
- <string name="menu_create_dir" msgid="2547620241173881754">"ಹೊಸ ಫೋಲ್ಡರ್"</string>
- <string name="menu_grid" msgid="6878021334497835259">"ಗ್ರಿಡ್ ವೀಕ್ಷಣೆ"</string>
- <string name="menu_list" msgid="7279285939892417279">"ಪಟ್ಟಿ ವೀಕ್ಷಣೆ"</string>
- <string name="menu_sort" msgid="7677740407158414452">"ಈ ಪ್ರಕಾರ ವಿಂಗಡಿಸು"</string>
- <string name="menu_search" msgid="3816712084502856974">"ಹುಡುಕು"</string>
- <string name="menu_settings" msgid="8239065133341597825">"ಸಂಗ್ರಹಣೆ ಸೆಟ್ಟಿಂಗ್ಗಳು"</string>
- <string name="menu_open" msgid="432922957274920903">"ತೆರೆ"</string>
- <string name="menu_save" msgid="2394743337684426338">"ಉಳಿಸು"</string>
- <string name="menu_share" msgid="3075149983979628146">"ಹಂಚು"</string>
- <string name="menu_delete" msgid="8138799623850614177">"ಅಳಿಸು"</string>
- <string name="menu_select_all" msgid="8323579667348729928">"ಎಲ್ಲವನ್ನೂ ಆಯ್ಕೆಮಾಡಿ"</string>
- <string name="menu_copy" msgid="3612326052677229148">"ಇದಕ್ಕೆ ನಕಲಿಸಿ…"</string>
- <string name="menu_move" msgid="1828090633118079817">"ಇದಕ್ಕೆ ಸರಿಸು…"</string>
- <string name="menu_new_window" msgid="1226032889278727538">"ಹೊಸ ವಿಂಡೋ"</string>
- <string name="menu_cut_to_clipboard" msgid="2467149185452488383">"ಕತ್ತರಿಸು"</string>
- <string name="menu_copy_to_clipboard" msgid="489311381979634291">"ನಕಲಿಸು"</string>
- <string name="menu_paste_from_clipboard" msgid="2071583031180257091">"ಅಂಟಿಸು"</string>
- <string name="menu_advanced_show" msgid="4693652895715631401">"ಆಂತರಿಕ ಸಂಗ್ರಹಣೆಯನ್ನು ತೋರಿಸು"</string>
- <string name="menu_advanced_hide" msgid="4218809952721972589">"ಆಂತರಿಕ ಸಂಗ್ರಹಣೆಯನ್ನು ಮರೆಮಾಡಿ"</string>
- <string name="menu_file_size_show" msgid="3240323619260823076">"ಫೈಲ್ ಗಾತ್ರವನ್ನು ತೋರಿಸು"</string>
- <string name="menu_file_size_hide" msgid="8881975928502581042">"ಫೈಲ್ ಗಾತ್ರವನ್ನು ಮರೆಮಾಡಿ"</string>
- <string name="button_select" msgid="527196987259139214">"ಆಯ್ಕೆಮಾಡು"</string>
- <string name="button_copy" msgid="8706475544635021302">"ನಕಲಿಸು"</string>
- <string name="button_move" msgid="2202666023104202232">"ಸರಿಸು"</string>
- <string name="button_dismiss" msgid="3714065566893946085">"ವಜಾಗೊಳಿಸಿ"</string>
- <string name="button_retry" msgid="4392027584153752797">"ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ"</string>
- <string name="sort_name" msgid="9183560467917256779">"ಹೆಸರಿನ ಪ್ರಕಾರ"</string>
- <string name="sort_date" msgid="586080032956151448">"ಮಾರ್ಪಡಿಸಿರುವ ದಿನಾಂಕದ ಪ್ರಕಾರ"</string>
- <string name="sort_size" msgid="3350681319735474741">"ಗಾತ್ರದ ಪ್ರಕಾರ"</string>
- <string name="drawer_open" msgid="4545466532430226949">"ರೂಟ್ಗಳನ್ನು ತೋರಿಸು"</string>
- <string name="drawer_close" msgid="7602734368552123318">"ರೂಟ್ಗಳನ್ನು ಮರೆಮಾಡು"</string>
- <string name="save_error" msgid="6167009778003223664">"ಡಾಕ್ಯುಮೆಂಟ್ ಉಳಿಸಲು ವಿಫಲವಾಗಿದೆ"</string>
- <string name="create_error" msgid="3735649141335444215">"ಫೋಲ್ಡರ್ ರಚಿಸಲು ವಿಫಲವಾಗಿದೆ"</string>
- <string name="query_error" msgid="5999895349602476581">"ಈ ಕ್ಷಣದಲ್ಲಿ ವಿಷಯವನ್ನು ಲೋಡ್ ಮಾಡಲು ಸಾಧ್ಯವಿಲ್ಲ"</string>
- <string name="root_recent" msgid="4470053704320518133">"ಇತ್ತೀಚಿನದು"</string>
- <string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> ಮುಕ್ತವಾಗಿದೆ"</string>
- <string name="root_type_service" msgid="2178854894416775409">"ಸಂಗ್ರಹಣೆ ಸೇವೆಗಳು"</string>
- <string name="root_type_shortcut" msgid="3318760609471618093">"ಶಾರ್ಟ್ಕಟ್ಗಳು"</string>
- <string name="root_type_device" msgid="7121342474653483538">"ಸಾಧನಗಳು"</string>
- <string name="root_type_apps" msgid="8838065367985945189">"ಇನ್ನಷ್ಟು ಅಪ್ಲಿಕೇಶನ್ಗಳು"</string>
- <string name="empty" msgid="7858882803708117596">"ಯಾವುದೇ ಐಟಂಗಳಿಲ್ಲ"</string>
- <string name="no_results" msgid="6622510343880730446">"%1$s ರಲ್ಲಿ ಯಾವುದೇ ಹೊಂದಾಣಿಕೆಗಳಿಲ್ಲ"</string>
- <string name="toast_no_application" msgid="4632640357724698144">"ಫೈಲ್ ತೆರೆಯಲು ಸಾಧ್ಯವಾಗುತ್ತಿಲ್ಲ"</string>
- <string name="toast_failed_delete" msgid="2180678019407244069">"ಕೆಲವು ಡಾಕ್ಯುಮೆಂಟ್ಗಳನ್ನು ಅಳಿಸಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ"</string>
- <string name="share_via" msgid="8966594246261344259">"ಈ ಮೂಲಕ ಹಂಚಿಕೊಳ್ಳಿ"</string>
- <string name="copy_notification_title" msgid="6374299806748219777">"ಫೈಲ್ಗಳನ್ನು ನಕಲಿಸಲಾಗುತ್ತಿದೆ"</string>
- <string name="move_notification_title" msgid="6193835179777284805">"ಫೈಲ್ಗಳನ್ನು ಸರಿಸಲಾಗುತ್ತಿದೆ"</string>
- <string name="delete_notification_title" msgid="3329403967712437496">"ಫೈಲ್ ಅಳಿಸಲಾಗುತ್ತಿದೆ"</string>
- <string name="copy_remaining" msgid="6283790937387975095">"<xliff:g id="DURATION">%s</xliff:g> ಉಳಿದಿದೆ"</string>
- <plurals name="copy_begin" formatted="false" msgid="9071199452634086365">
- <item quantity="one"> <xliff:g id="COUNT_1">%1$d</xliff:g> ಫೈಲ್ಗಳನ್ನು ನಕಲಿಸಲಾಗುತ್ತಿದೆ.</item>
- <item quantity="other"> <xliff:g id="COUNT_1">%1$d</xliff:g> ಫೈಲ್ಗಳನ್ನು ನಕಲಿಸಲಾಗುತ್ತಿದೆ.</item>
- </plurals>
- <plurals name="move_begin" formatted="false" msgid="8430330882138871643">
- <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="deleting" formatted="false" msgid="5054338566802559411">
- <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="7905788502491742328">"ರದ್ದುಗೊಳಿಸಿ"</string>
- <string name="copy_preparing" msgid="3896202461003039386">"ನಕಲಿಸಲು ಸಿದ್ಧಪಡಿಸಲಾಗುತ್ತಿದೆ..."</string>
- <string name="move_preparing" msgid="2772219441375531410">"ಸರಿಸಲು ಸಿದ್ಧಪಡಿಸಲಾಗುತ್ತಿದೆ…"</string>
- <string name="delete_preparing" msgid="5655813182533491992">"ಅಳಿಸಲು ಸಿದ್ಧಪಡಿಸಲಾಗುತ್ತಿದೆ…"</string>
- <string name="delete_progress" msgid="5399405983046157222">"<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="7160447124922897689">
- <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="move_error_notification_title" formatted="false" msgid="2710901971014783012">
- <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_error_notification_title" formatted="false" msgid="7228393157786591199">
- <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="6268189413228855582">"ವಿವರಗಳನ್ನು ವೀಕ್ಷಿಸಲು ಟ್ಯಾಪ್ ಮಾಡಿ"</string>
- <string name="close" msgid="3043722427445528732">"ಮುಚ್ಚು"</string>
- <string name="copy_failure_alert_content" msgid="4563147454522476183">"ಈ ಫೈಲ್ಗಳನ್ನು ನಕಲಿಸಲಾಗಿಲ್ಲ: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="move_failure_alert_content" msgid="2635075788682922861">"ಈ ಫೈಲ್ಗಳನ್ನು ಸರಿಸಲಾಗಿಲ್ಲ: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="delete_failure_alert_content" msgid="892393767207938353">"ಈ ಫೈಲ್ಗಳನ್ನು ಅಳಿಸಲಾಗಿಲ್ಲ: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="copy_converted_warning_content" msgid="5753861488218674361">"ಈ ಫೈಲ್ಗಳನ್ನು ಮತ್ತೊಂದು ಫಾರ್ಮೆಟ್ಗೆ ಪರಿವರ್ತಿಸಲಾಗಿತ್ತು: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <plurals name="clipboard_files_clipped" formatted="false" msgid="855459017537058539">
- <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="clipboard_files_cannot_paste" msgid="2878324825602325706">"ಈ ಸ್ಥಳದಲ್ಲಿ ಆಯ್ಕೆಮಾಡಿದ ಫೈಲ್ಗಳನ್ನು ಅಂಟಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ."</string>
- <string name="menu_rename" msgid="7678802479104285353">"ಮರುಹೆಸರಿಸು"</string>
- <string name="rename_error" msgid="4203041674883412606">"ಡಾಕ್ಯುಮೆಂಟ್ ಮರುಹೆಸರಿಸಲು ವಿಫಲವಾಗಿದೆ"</string>
- <string name="menu_eject_root" msgid="2768224615494227325">"ಎಜೆಕ್ಟ್"</string>
- <string name="notification_copy_files_converted_title" msgid="3153573223054275181">"ಕೆಲವು ಫೈಲ್ಗಳನ್ನು ಪರಿವರ್ತಿಸಲಾಗಿದೆ"</string>
- <string name="open_external_dialog_request" msgid="5789329484285817629">"<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="6635562535713428688">"<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="8899108702926347720">"<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="4295278542972859268">"ಮತ್ತೆ ಕೇಳಬೇಡಿ"</string>
- <string name="allow" msgid="7225948811296386551">"ಅನುಮತಿಸು"</string>
- <string name="deny" msgid="2081879885755434506">"ನಿರಾಕರಿಸು"</string>
- <plurals name="elements_selected" formatted="false" msgid="1376955402452875047">
- <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="3727204615215602228">
- <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="5312817725577537488">"\"<xliff:g id="NAME">%1$s</xliff:g>\" ಅಳಿಸುವುದೇ?"</string>
- <string name="delete_foldername_confirmation_message" msgid="5885501832257285329">"\"<xliff:g id="NAME">%1$s</xliff:g>\" ಫೋಲ್ಡರ್ ಮತ್ತು ಅದರ ವಿಷಯಗಳನ್ನು ಅಳಿಸುವುದೇ?"</string>
- <plurals name="delete_files_confirmation_message" formatted="false" msgid="8417505791395471802">
- <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="9185648028213507769">
- <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="5376214433530243459">
- <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>
-</resources>
diff --git a/packages/DocumentsUI/res/values-ko/strings.xml b/packages/DocumentsUI/res/values-ko/strings.xml
deleted file mode 100644
index c990d9f..0000000
--- a/packages/DocumentsUI/res/values-ko/strings.xml
+++ /dev/null
@@ -1,144 +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="app_label" msgid="1551050262492398204">"파일"</string>
- <string name="downloads_label" msgid="959113951084633612">"다운로드"</string>
- <string name="title_open" msgid="4353228937663917801">"열기:"</string>
- <string name="title_save" msgid="2433679664882857999">"저장 위치:"</string>
- <string name="menu_create_dir" msgid="2547620241173881754">"새 폴더"</string>
- <string name="menu_grid" msgid="6878021334497835259">"바둑판식 보기"</string>
- <string name="menu_list" msgid="7279285939892417279">"목록 보기"</string>
- <string name="menu_sort" msgid="7677740407158414452">"정렬 기준"</string>
- <string name="menu_search" msgid="3816712084502856974">"검색"</string>
- <string name="menu_settings" msgid="8239065133341597825">"저장소 설정"</string>
- <string name="menu_open" msgid="432922957274920903">"열기"</string>
- <string name="menu_save" msgid="2394743337684426338">"저장"</string>
- <string name="menu_share" msgid="3075149983979628146">"공유"</string>
- <string name="menu_delete" msgid="8138799623850614177">"삭제"</string>
- <string name="menu_select_all" msgid="8323579667348729928">"모두 선택"</string>
- <string name="menu_copy" msgid="3612326052677229148">"복사…"</string>
- <string name="menu_move" msgid="1828090633118079817">"이동…"</string>
- <string name="menu_new_window" msgid="1226032889278727538">"새 창"</string>
- <string name="menu_cut_to_clipboard" msgid="2467149185452488383">"잘라내기"</string>
- <string name="menu_copy_to_clipboard" msgid="489311381979634291">"복사"</string>
- <string name="menu_paste_from_clipboard" msgid="2071583031180257091">"붙여넣기"</string>
- <string name="menu_advanced_show" msgid="4693652895715631401">"내부 저장소 표시"</string>
- <string name="menu_advanced_hide" msgid="4218809952721972589">"내부 저장소 숨기기"</string>
- <string name="menu_file_size_show" msgid="3240323619260823076">"파일 크기 표시"</string>
- <string name="menu_file_size_hide" msgid="8881975928502581042">"파일 크기 숨기기"</string>
- <string name="button_select" msgid="527196987259139214">"선택"</string>
- <string name="button_copy" msgid="8706475544635021302">"복사"</string>
- <string name="button_move" msgid="2202666023104202232">"이동"</string>
- <string name="button_dismiss" msgid="3714065566893946085">"닫기"</string>
- <string name="button_retry" msgid="4392027584153752797">"다시 시도"</string>
- <string name="sort_name" msgid="9183560467917256779">"이름순"</string>
- <string name="sort_date" msgid="586080032956151448">"수정된 날짜순"</string>
- <string name="sort_size" msgid="3350681319735474741">"크기순"</string>
- <string name="drawer_open" msgid="4545466532430226949">"루트 표시"</string>
- <string name="drawer_close" msgid="7602734368552123318">"루트 숨기기"</string>
- <string name="save_error" msgid="6167009778003223664">"문서 저장 실패"</string>
- <string name="create_error" msgid="3735649141335444215">"폴더를 만들지 못함"</string>
- <string name="query_error" msgid="5999895349602476581">"현재 콘텐츠를 로드할 수 없습니다."</string>
- <string name="root_recent" msgid="4470053704320518133">"최근"</string>
- <string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> 남음"</string>
- <string name="root_type_service" msgid="2178854894416775409">"저장용량 서비스"</string>
- <string name="root_type_shortcut" msgid="3318760609471618093">"바로가기"</string>
- <string name="root_type_device" msgid="7121342474653483538">"기기"</string>
- <string name="root_type_apps" msgid="8838065367985945189">"앱 더보기"</string>
- <string name="empty" msgid="7858882803708117596">"항목 없음"</string>
- <string name="no_results" msgid="6622510343880730446">"%1$s에 일치하는 항목이 없습니다."</string>
- <string name="toast_no_application" msgid="4632640357724698144">"파일을 열 수 없습니다."</string>
- <string name="toast_failed_delete" msgid="2180678019407244069">"일부 문서를 삭제할 수 없음"</string>
- <string name="share_via" msgid="8966594246261344259">"공유 방법"</string>
- <string name="copy_notification_title" msgid="6374299806748219777">"파일 복사 중"</string>
- <string name="move_notification_title" msgid="6193835179777284805">"파일 이동"</string>
- <string name="delete_notification_title" msgid="3329403967712437496">"파일 삭제"</string>
- <string name="copy_remaining" msgid="6283790937387975095">"<xliff:g id="DURATION">%s</xliff:g> 남음"</string>
- <plurals name="copy_begin" formatted="false" msgid="9071199452634086365">
- <item quantity="other">파일 <xliff:g id="COUNT_1">%1$d</xliff:g>개를 복사합니다.</item>
- <item quantity="one">파일 <xliff:g id="COUNT_0">%1$d</xliff:g>개를 복사합니다.</item>
- </plurals>
- <plurals name="move_begin" formatted="false" msgid="8430330882138871643">
- <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="5054338566802559411">
- <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="7905788502491742328">"실행취소"</string>
- <string name="copy_preparing" msgid="3896202461003039386">"사본 준비 중…"</string>
- <string name="move_preparing" msgid="2772219441375531410">"이동 준비 중…"</string>
- <string name="delete_preparing" msgid="5655813182533491992">"삭제 준비 중..."</string>
- <string name="delete_progress" msgid="5399405983046157222">"<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="7160447124922897689">
- <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="2710901971014783012">
- <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="7228393157786591199">
- <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="6268189413228855582">"세부정보를 보려면 탭하세요."</string>
- <string name="close" msgid="3043722427445528732">"닫기"</string>
- <string name="copy_failure_alert_content" msgid="4563147454522476183">"다음 파일이 복사되지 않았습니다. <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="move_failure_alert_content" msgid="2635075788682922861">"다음 파일이 이동되지 않았습니다. <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="delete_failure_alert_content" msgid="892393767207938353">"다음 파일이 삭제되지 않았습니다. <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="copy_converted_warning_content" msgid="5753861488218674361">"파일이 다음과 같이 다른 형식으로 변환되었습니다. <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <plurals name="clipboard_files_clipped" formatted="false" msgid="855459017537058539">
- <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="clipboard_files_cannot_paste" msgid="2878324825602325706">"선택한 파일을 이 위치에 붙여넣을 수 없습니다."</string>
- <string name="menu_rename" msgid="7678802479104285353">"이름 바꾸기"</string>
- <string name="rename_error" msgid="4203041674883412606">"문서 이름을 변경하지 못했습니다."</string>
- <string name="menu_eject_root" msgid="2768224615494227325">"꺼내기"</string>
- <string name="notification_copy_files_converted_title" msgid="3153573223054275181">"일부 파일이 변환되었습니다."</string>
- <string name="open_external_dialog_request" msgid="5789329484285817629">"<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="6635562535713428688">"<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="8899108702926347720">"<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="4295278542972859268">"다시 묻지 않음"</string>
- <string name="allow" msgid="7225948811296386551">"허용"</string>
- <string name="deny" msgid="2081879885755434506">"거부"</string>
- <plurals name="elements_selected" formatted="false" msgid="1376955402452875047">
- <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="3727204615215602228">
- <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="5312817725577537488">"<xliff:g id="NAME">%1$s</xliff:g>을(를) 삭제하시겠습니까?"</string>
- <string name="delete_foldername_confirmation_message" msgid="5885501832257285329">"\'<xliff:g id="NAME">%1$s</xliff:g>\' 폴더와 폴더에 포함된 콘텐츠를 삭제하시겠습니까?"</string>
- <plurals name="delete_files_confirmation_message" formatted="false" msgid="8417505791395471802">
- <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="9185648028213507769">
- <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="5376214433530243459">
- <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>
-</resources>
diff --git a/packages/DocumentsUI/res/values-ky-rKG/strings.xml b/packages/DocumentsUI/res/values-ky-rKG/strings.xml
deleted file mode 100644
index 5c1d71a..0000000
--- a/packages/DocumentsUI/res/values-ky-rKG/strings.xml
+++ /dev/null
@@ -1,144 +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="app_label" msgid="1551050262492398204">"Файлдар"</string>
- <string name="downloads_label" msgid="959113951084633612">"Жүктөлүп алынгандар"</string>
- <string name="title_open" msgid="4353228937663917801">"Кийинкиден ачуу:"</string>
- <string name="title_save" msgid="2433679664882857999">"Кийинкиге сактоо:"</string>
- <string name="menu_create_dir" msgid="2547620241173881754">"Жаңы куржун"</string>
- <string name="menu_grid" msgid="6878021334497835259">"Тор көрүнүшү"</string>
- <string name="menu_list" msgid="7279285939892417279">"Тизмек көрүнүшү"</string>
- <string name="menu_sort" msgid="7677740407158414452">"Ылгоо"</string>
- <string name="menu_search" msgid="3816712084502856974">"Издөө"</string>
- <string name="menu_settings" msgid="8239065133341597825">"Сактагычтын жөндөөлөрү"</string>
- <string name="menu_open" msgid="432922957274920903">"Ачуу"</string>
- <string name="menu_save" msgid="2394743337684426338">"Сактоо"</string>
- <string name="menu_share" msgid="3075149983979628146">"Бөлүшүү"</string>
- <string name="menu_delete" msgid="8138799623850614177">"Жок кылуу"</string>
- <string name="menu_select_all" msgid="8323579667348729928">"Бардыгын тандоо"</string>
- <string name="menu_copy" msgid="3612326052677229148">"Төмөнкүгө көчүрүү…"</string>
- <string name="menu_move" msgid="1828090633118079817">"Төмөнкүгө жылдыруу..."</string>
- <string name="menu_new_window" msgid="1226032889278727538">"Жаңы терезе"</string>
- <string name="menu_cut_to_clipboard" msgid="2467149185452488383">"Кесүү"</string>
- <string name="menu_copy_to_clipboard" msgid="489311381979634291">"Көчүрүү"</string>
- <string name="menu_paste_from_clipboard" msgid="2071583031180257091">"Чаптоо"</string>
- <string name="menu_advanced_show" msgid="4693652895715631401">"Ички сактагычты көрсөтүү"</string>
- <string name="menu_advanced_hide" msgid="4218809952721972589">"Ички эстутумду жашыруу"</string>
- <string name="menu_file_size_show" msgid="3240323619260823076">"Файл өлчөмүн көрсөтүү"</string>
- <string name="menu_file_size_hide" msgid="8881975928502581042">"Файл өлчөмүн жашыруу"</string>
- <string name="button_select" msgid="527196987259139214">"Тандоо"</string>
- <string name="button_copy" msgid="8706475544635021302">"Көчүрүү"</string>
- <string name="button_move" msgid="2202666023104202232">"Жылдыруу"</string>
- <string name="button_dismiss" msgid="3714065566893946085">"Этибарга албоо"</string>
- <string name="button_retry" msgid="4392027584153752797">"Дагы аракет кылыңыз"</string>
- <string name="sort_name" msgid="9183560467917256779">"Аты боюнча"</string>
- <string name="sort_date" msgid="586080032956151448">"Өзгөртүлгөн күнү боюнча"</string>
- <string name="sort_size" msgid="3350681319735474741">"Өлчөмү боюнча"</string>
- <string name="drawer_open" msgid="4545466532430226949">"Папкаларды көрсөтүү"</string>
- <string name="drawer_close" msgid="7602734368552123318">"Папкаларды жашыруу"</string>
- <string name="save_error" msgid="6167009778003223664">"Документтерди сактоо кыйрады"</string>
- <string name="create_error" msgid="3735649141335444215">"Папка түзүү кыйрады"</string>
- <string name="query_error" msgid="5999895349602476581">"Учурда мазмун жүктөлбөй жатат"</string>
- <string name="root_recent" msgid="4470053704320518133">"Акыркы"</string>
- <string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> бош"</string>
- <string name="root_type_service" msgid="2178854894416775409">"Сактагыч кызматтар"</string>
- <string name="root_type_shortcut" msgid="3318760609471618093">"Тез чакырмалар"</string>
- <string name="root_type_device" msgid="7121342474653483538">"Түзмөктөр"</string>
- <string name="root_type_apps" msgid="8838065367985945189">"Көбүрөөк колдонмолор"</string>
- <string name="empty" msgid="7858882803708117596">"Эч нерсе жок"</string>
- <string name="no_results" msgid="6622510343880730446">"%1$s ичинде дал келүүлөр жок"</string>
- <string name="toast_no_application" msgid="4632640357724698144">"Файл ачылбай жатат"</string>
- <string name="toast_failed_delete" msgid="2180678019407244069">"Кээ бир документтерди өчүрүү кыйрады"</string>
- <string name="share_via" msgid="8966594246261344259">"Кийинки аркылуу бөлүшүү:"</string>
- <string name="copy_notification_title" msgid="6374299806748219777">"Файлдар көчүрүлүүдө"</string>
- <string name="move_notification_title" msgid="6193835179777284805">"Файлдар жылдырылууда…"</string>
- <string name="delete_notification_title" msgid="3329403967712437496">"Файлдар жок кылынууда"</string>
- <string name="copy_remaining" msgid="6283790937387975095">"<xliff:g id="DURATION">%s</xliff:g> калды"</string>
- <plurals name="copy_begin" formatted="false" msgid="9071199452634086365">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> файл көчүрүлүүдө.</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> файл көчүрүлүүдө.</item>
- </plurals>
- <plurals name="move_begin" formatted="false" msgid="8430330882138871643">
- <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="5054338566802559411">
- <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="7905788502491742328">"Артка кайтаруу"</string>
- <string name="copy_preparing" msgid="3896202461003039386">"Көчүрүүгө даярдалууда…"</string>
- <string name="move_preparing" msgid="2772219441375531410">"Жылдырууга даярдалууда…"</string>
- <string name="delete_preparing" msgid="5655813182533491992">"Жок кылууга даярдалууда…"</string>
- <string name="delete_progress" msgid="5399405983046157222">"<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="7160447124922897689">
- <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="2710901971014783012">
- <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="7228393157786591199">
- <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="6268189413228855582">"Чоо-жайын көрүү үчүн таптаңыз"</string>
- <string name="close" msgid="3043722427445528732">"Жабуу"</string>
- <string name="copy_failure_alert_content" msgid="4563147454522476183">"Төмөнкү файлдар көчүрүлгөн жок: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="move_failure_alert_content" msgid="2635075788682922861">"Төмөнкү файлдар жылдырылган жок: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="delete_failure_alert_content" msgid="892393767207938353">"Төмөнкү файлдар өчүрүлгөн жок: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="copy_converted_warning_content" msgid="5753861488218674361">"Бул файлдар башка форматка айландырылды: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <plurals name="clipboard_files_clipped" formatted="false" msgid="855459017537058539">
- <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="clipboard_files_cannot_paste" msgid="2878324825602325706">"Тандалган файлдарды бул жерге чаптоого мүмкүн эмес."</string>
- <string name="menu_rename" msgid="7678802479104285353">"Аталышын өзгөртүү"</string>
- <string name="rename_error" msgid="4203041674883412606">"Документтин аталышы өзгөртүлбөй калды"</string>
- <string name="menu_eject_root" msgid="2768224615494227325">"Чыгаруу"</string>
- <string name="notification_copy_files_converted_title" msgid="3153573223054275181">"Айрым файлдардын форматы өзгөртүлдү"</string>
- <string name="open_external_dialog_request" msgid="5789329484285817629">"<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="6635562535713428688">"<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="8899108702926347720">"<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="4295278542972859268">"Экинчи суралбасын"</string>
- <string name="allow" msgid="7225948811296386551">"Уруксат берүү"</string>
- <string name="deny" msgid="2081879885755434506">"Жок"</string>
- <plurals name="elements_selected" formatted="false" msgid="1376955402452875047">
- <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="3727204615215602228">
- <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="5312817725577537488">"\"<xliff:g id="NAME">%1$s</xliff:g>\" жок кылынсынбы?"</string>
- <string name="delete_foldername_confirmation_message" msgid="5885501832257285329">"\"<xliff:g id="NAME">%1$s</xliff:g>\" куржуну мазмуну менен жок кылынсынбы?"</string>
- <plurals name="delete_files_confirmation_message" formatted="false" msgid="8417505791395471802">
- <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="9185648028213507769">
- <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="5376214433530243459">
- <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>
-</resources>
diff --git a/packages/DocumentsUI/res/values-lo-rLA/strings.xml b/packages/DocumentsUI/res/values-lo-rLA/strings.xml
deleted file mode 100644
index cb1bad3..0000000
--- a/packages/DocumentsUI/res/values-lo-rLA/strings.xml
+++ /dev/null
@@ -1,144 +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="app_label" msgid="1551050262492398204">"ໄຟລ໌"</string>
- <string name="downloads_label" msgid="959113951084633612">"ການດາວໂຫລດ"</string>
- <string name="title_open" msgid="4353228937663917801">"ເປີດຈາກ"</string>
- <string name="title_save" msgid="2433679664882857999">"ບັນທຶກໄປທີ່"</string>
- <string name="menu_create_dir" msgid="2547620241173881754">"ໂຟລເດີໃໝ່"</string>
- <string name="menu_grid" msgid="6878021334497835259">"ມຸມມອງແບບຊ່ອງ"</string>
- <string name="menu_list" msgid="7279285939892417279">"ມຸມມອງແບບລາຍຊື່"</string>
- <string name="menu_sort" msgid="7677740407158414452">"ຮຽງລຳດັບຕາມ"</string>
- <string name="menu_search" msgid="3816712084502856974">"ຊອກຫາ"</string>
- <string name="menu_settings" msgid="8239065133341597825">"ການຕັ້ງຄ່າບ່ອນເກັບຂໍ້ມູນ"</string>
- <string name="menu_open" msgid="432922957274920903">"ເປີດ"</string>
- <string name="menu_save" msgid="2394743337684426338">"ບັນທຶກ"</string>
- <string name="menu_share" msgid="3075149983979628146">"ແບ່ງປັນ"</string>
- <string name="menu_delete" msgid="8138799623850614177">"ລຶບ"</string>
- <string name="menu_select_all" msgid="8323579667348729928">"ເລືອກທັງຫມົດ"</string>
- <string name="menu_copy" msgid="3612326052677229148">"ສຳເນົາໄປໃສ່..."</string>
- <string name="menu_move" msgid="1828090633118079817">"ຍ້າຍໄປໃສ່..."</string>
- <string name="menu_new_window" msgid="1226032889278727538">"ໜ້າຈໍໃໝ່"</string>
- <string name="menu_cut_to_clipboard" msgid="2467149185452488383">"ຕັດ"</string>
- <string name="menu_copy_to_clipboard" msgid="489311381979634291">"ສຳເນົາ"</string>
- <string name="menu_paste_from_clipboard" msgid="2071583031180257091">"ວາງໃສ່"</string>
- <string name="menu_advanced_show" msgid="4693652895715631401">"ສະແດງໂຕເກັບຂໍ້ມູນພາຍໃນ"</string>
- <string name="menu_advanced_hide" msgid="4218809952721972589">"ເຊື່ອງໂຕເກັບຂໍ້ມູນພາຍໃນ"</string>
- <string name="menu_file_size_show" msgid="3240323619260823076">"ສະແດງຂະໜາດໄຟລ໌"</string>
- <string name="menu_file_size_hide" msgid="8881975928502581042">"ເຊື່ອງຂະຫນາດໄຟລ໌"</string>
- <string name="button_select" msgid="527196987259139214">"ເລືອກ"</string>
- <string name="button_copy" msgid="8706475544635021302">"ສຳເນົາ"</string>
- <string name="button_move" msgid="2202666023104202232">"ຍ້າຍ"</string>
- <string name="button_dismiss" msgid="3714065566893946085">"ປິດໄວ້"</string>
- <string name="button_retry" msgid="4392027584153752797">"ລອງໃໝ່ອີກ"</string>
- <string name="sort_name" msgid="9183560467917256779">"ຕາມຊື່"</string>
- <string name="sort_date" msgid="586080032956151448">"ຕາມວັນທີທີ່ແກ້ໄຂ"</string>
- <string name="sort_size" msgid="3350681319735474741">"ຕາມຂະໜາດ"</string>
- <string name="drawer_open" msgid="4545466532430226949">"ສະແດງ roots"</string>
- <string name="drawer_close" msgid="7602734368552123318">"ເຊື່ອງ roots"</string>
- <string name="save_error" msgid="6167009778003223664">"ການບັນທຶກເອກະສານລົ້ມເຫລວ"</string>
- <string name="create_error" msgid="3735649141335444215">"ການສ້າງໂຟນເດີລົ້ມເຫຼວ"</string>
- <string name="query_error" msgid="5999895349602476581">"ບໍ່ສາມາດໂຫຼດເນື້ອຫາໄດ້ໃນຂະນະນີ້"</string>
- <string name="root_recent" msgid="4470053704320518133">"ຫຼ້າສຸດ"</string>
- <string name="root_available_bytes" msgid="8568452858617033281">"ຟຣີ <xliff:g id="SIZE">%1$s</xliff:g>"</string>
- <string name="root_type_service" msgid="2178854894416775409">"ບໍລິການບ່ອນຈັດເກັບຂໍ້ມູນ"</string>
- <string name="root_type_shortcut" msgid="3318760609471618093">"ທາງລັດ"</string>
- <string name="root_type_device" msgid="7121342474653483538">"ອຸປະກອນ"</string>
- <string name="root_type_apps" msgid="8838065367985945189">"ແອັບຯອື່ນໆ"</string>
- <string name="empty" msgid="7858882803708117596">"ບໍ່ມີລາຍການ"</string>
- <string name="no_results" msgid="6622510343880730446">"ບໍ່ພົບສິ່ງກົງກັນໃນ %1$s"</string>
- <string name="toast_no_application" msgid="4632640357724698144">"ບໍ່ສາມາດເປີດໄຟລ໌ໄດ້"</string>
- <string name="toast_failed_delete" msgid="2180678019407244069">"ບໍ່ສາມາດລຶບບາງເອກະສານໄດ້"</string>
- <string name="share_via" msgid="8966594246261344259">"ແບ່ງປັນຜ່ານ"</string>
- <string name="copy_notification_title" msgid="6374299806748219777">"ກຳລັງອັດສຳເນົາໄຟລ໌"</string>
- <string name="move_notification_title" msgid="6193835179777284805">"ກຳລັງຍ້າຍໄຟລ໌"</string>
- <string name="delete_notification_title" msgid="3329403967712437496">"ກຳລັງລຶບໄຟລ໌"</string>
- <string name="copy_remaining" msgid="6283790937387975095">"<xliff:g id="DURATION">%s</xliff:g> ຍັງເຫຼືອຢູ່"</string>
- <plurals name="copy_begin" formatted="false" msgid="9071199452634086365">
- <item quantity="other">ກຳລັງອັດສຳເນົາ <xliff:g id="COUNT_1">%1$d</xliff:g> ໄຟລ໌.</item>
- <item quantity="one">ກຳລັງອັດສຳເນົາ <xliff:g id="COUNT_0">%1$d</xliff:g> ໄຟລ໌.</item>
- </plurals>
- <plurals name="move_begin" formatted="false" msgid="8430330882138871643">
- <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="5054338566802559411">
- <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="7905788502491742328">"ບໍ່ເຮັດ"</string>
- <string name="copy_preparing" msgid="3896202461003039386">"ກຳລັງກຽມອັດສຳເນົາ…"</string>
- <string name="move_preparing" msgid="2772219441375531410">"ກຳລັງກະກຽມຍ້າຍ…"</string>
- <string name="delete_preparing" msgid="5655813182533491992">"ກຳລັງກະກຽມລຶບ…"</string>
- <string name="delete_progress" msgid="5399405983046157222">"<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="7160447124922897689">
- <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="2710901971014783012">
- <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="7228393157786591199">
- <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="6268189413228855582">"ແຕະເພື່ອເບິ່ງລາຍລະອຽດ"</string>
- <string name="close" msgid="3043722427445528732">"ປິດ"</string>
- <string name="copy_failure_alert_content" msgid="4563147454522476183">"ໄຟລ໌ເຫຼົ່ານີ້ບໍ່ໄດ້ຖືກສຳເນົາ: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="move_failure_alert_content" msgid="2635075788682922861">"ໄຟລ໌ເຫຼົ່ານີ້ບໍ່ໄດ້ຖືກຍ້າຍ: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="delete_failure_alert_content" msgid="892393767207938353">"ໄຟລ໌ເຫຼົ່ານີ້ບໍ່ໄດ້ຖືກລຶບເທື່ອ: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="copy_converted_warning_content" msgid="5753861488218674361">"ໄຟລ໌ເຫຼົ່ານີ້ໄດ້ຖືກປ່ຽນເປັນຮູບແບບອື່ນແລ້ວ: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <plurals name="clipboard_files_clipped" formatted="false" msgid="855459017537058539">
- <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="clipboard_files_cannot_paste" msgid="2878324825602325706">"ບໍ່ສາມາດແປະໄຟລ໌ເລືອກໄວ້ຢູ່ໃນທີ່ຕັ້ງນີ້ໄດ້."</string>
- <string name="menu_rename" msgid="7678802479104285353">"ປ່ຽນຊື່"</string>
- <string name="rename_error" msgid="4203041674883412606">"ປ່ຽນຊື່ເອກະສານບໍ່ສຳເລັດ"</string>
- <string name="menu_eject_root" msgid="2768224615494227325">"ຖອດອອກ"</string>
- <string name="notification_copy_files_converted_title" msgid="3153573223054275181">"ປ່ຽນແປງບາງໄຟລ໌ແລ້ວ"</string>
- <string name="open_external_dialog_request" msgid="5789329484285817629">"ອະນຸຍາດສິດເຂົ້າເຖິງໃຫ້ <xliff:g id="APPNAME"><b>^1</b></xliff:g> ເພື່ອເຂົ້າໄດເຣກທໍຣີ <xliff:g id="DIRECTORY"><i>^2</i></xliff:g> ຢູ່ <xliff:g id="STORAGE"><i>^3</i></xliff:g> ບໍ?"</string>
- <string name="open_external_dialog_request_primary_volume" msgid="6635562535713428688">"ອະນຸມັດ <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="8899108702926347720">"ອະນຸມັດໃຫ້ <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="4295278542972859268">"ບໍ່ຕ້ອງຖາມຄືນ"</string>
- <string name="allow" msgid="7225948811296386551">"ອະນຸຍາດ"</string>
- <string name="deny" msgid="2081879885755434506">"ປະຕິເສດ"</string>
- <plurals name="elements_selected" formatted="false" msgid="1376955402452875047">
- <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="3727204615215602228">
- <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="5312817725577537488">"ລຶບ \"<xliff:g id="NAME">%1$s</xliff:g>\" ອອກບໍ?"</string>
- <string name="delete_foldername_confirmation_message" msgid="5885501832257285329">"ລຶບໂຟນເດີ \"<xliff:g id="NAME">%1$s</xliff:g>\" ແລະ ເນື້ອຫາທັງໝົດຂອງມັນອອກບໍ?"</string>
- <plurals name="delete_files_confirmation_message" formatted="false" msgid="8417505791395471802">
- <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="9185648028213507769">
- <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="5376214433530243459">
- <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>
-</resources>
diff --git a/packages/DocumentsUI/res/values-lt/strings.xml b/packages/DocumentsUI/res/values-lt/strings.xml
deleted file mode 100644
index 5e5dbfa..0000000
--- a/packages/DocumentsUI/res/values-lt/strings.xml
+++ /dev/null
@@ -1,168 +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="app_label" msgid="1551050262492398204">"Failai"</string>
- <string name="downloads_label" msgid="959113951084633612">"Atsisiuntimai"</string>
- <string name="title_open" msgid="4353228937663917801">"Atidaryti iš"</string>
- <string name="title_save" msgid="2433679664882857999">"Išsaugoti į"</string>
- <string name="menu_create_dir" msgid="2547620241173881754">"Naujas aplankas"</string>
- <string name="menu_grid" msgid="6878021334497835259">"Tinklelio rodinys"</string>
- <string name="menu_list" msgid="7279285939892417279">"Sąrašo rodinys"</string>
- <string name="menu_sort" msgid="7677740407158414452">"Rūšiuoti pagal"</string>
- <string name="menu_search" msgid="3816712084502856974">"Ieškoti"</string>
- <string name="menu_settings" msgid="8239065133341597825">"Saugyklos nustatymai"</string>
- <string name="menu_open" msgid="432922957274920903">"Atidaryti"</string>
- <string name="menu_save" msgid="2394743337684426338">"Išsaugoti"</string>
- <string name="menu_share" msgid="3075149983979628146">"Bendrinti"</string>
- <string name="menu_delete" msgid="8138799623850614177">"Ištrinti"</string>
- <string name="menu_select_all" msgid="8323579667348729928">"Pasirinkti viską"</string>
- <string name="menu_copy" msgid="3612326052677229148">"Kopijuoti į..."</string>
- <string name="menu_move" msgid="1828090633118079817">"Perkelti į…"</string>
- <string name="menu_new_window" msgid="1226032889278727538">"Naujas langas"</string>
- <string name="menu_cut_to_clipboard" msgid="2467149185452488383">"Iškirpti"</string>
- <string name="menu_copy_to_clipboard" msgid="489311381979634291">"Kopijuoti"</string>
- <string name="menu_paste_from_clipboard" msgid="2071583031180257091">"Įklijuoti"</string>
- <string name="menu_advanced_show" msgid="4693652895715631401">"Rodyti vidinę atmintį"</string>
- <string name="menu_advanced_hide" msgid="4218809952721972589">"Slėpti vidinę atmintį"</string>
- <string name="menu_file_size_show" msgid="3240323619260823076">"Rodyti failo dydį"</string>
- <string name="menu_file_size_hide" msgid="8881975928502581042">"Slėpti failo dydį"</string>
- <string name="button_select" msgid="527196987259139214">"Pasirinkti"</string>
- <string name="button_copy" msgid="8706475544635021302">"Kopijuoti"</string>
- <string name="button_move" msgid="2202666023104202232">"Perkelti"</string>
- <string name="button_dismiss" msgid="3714065566893946085">"Atsisakyti"</string>
- <string name="button_retry" msgid="4392027584153752797">"Bandyti dar kartą"</string>
- <string name="sort_name" msgid="9183560467917256779">"Pagal pavadinimą"</string>
- <string name="sort_date" msgid="586080032956151448">"Pagal keitimo datą"</string>
- <string name="sort_size" msgid="3350681319735474741">"Pagal dydį"</string>
- <string name="drawer_open" msgid="4545466532430226949">"Rodyti šaknis"</string>
- <string name="drawer_close" msgid="7602734368552123318">"Slėpti šaknis"</string>
- <string name="save_error" msgid="6167009778003223664">"Nepavyko išsaugoti dokumento"</string>
- <string name="create_error" msgid="3735649141335444215">"Nepavyko sukurti aplanko"</string>
- <string name="query_error" msgid="5999895349602476581">"Šiuo metu nepavyksta įkelti turinio"</string>
- <string name="root_recent" msgid="4470053704320518133">"Naujausi"</string>
- <string name="root_available_bytes" msgid="8568452858617033281">"Laisvos vietos: <xliff:g id="SIZE">%1$s</xliff:g>"</string>
- <string name="root_type_service" msgid="2178854894416775409">"Saugyklos paslaugos"</string>
- <string name="root_type_shortcut" msgid="3318760609471618093">"Spartieji klavišai"</string>
- <string name="root_type_device" msgid="7121342474653483538">"Įrenginiai"</string>
- <string name="root_type_apps" msgid="8838065367985945189">"Daugiau programų"</string>
- <string name="empty" msgid="7858882803708117596">"Nėra elementų"</string>
- <string name="no_results" msgid="6622510343880730446">"Nėra jokių atitikčių pagal %1$s"</string>
- <string name="toast_no_application" msgid="4632640357724698144">"Nepavyksta atidaryti failo"</string>
- <string name="toast_failed_delete" msgid="2180678019407244069">"Nepavyko ištrinti kai kurių dokumentų"</string>
- <string name="share_via" msgid="8966594246261344259">"Bendrinti naudojant"</string>
- <string name="copy_notification_title" msgid="6374299806748219777">"Kopijuojami failai"</string>
- <string name="move_notification_title" msgid="6193835179777284805">"Perkeliami failai"</string>
- <string name="delete_notification_title" msgid="3329403967712437496">"Failų ištrynimas"</string>
- <string name="copy_remaining" msgid="6283790937387975095">"Liko: <xliff:g id="DURATION">%s</xliff:g>"</string>
- <plurals name="copy_begin" formatted="false" msgid="9071199452634086365">
- <item quantity="one">Kopijuojamas <xliff:g id="COUNT_1">%1$d</xliff:g> failas.</item>
- <item quantity="few">Kopijuojami <xliff:g id="COUNT_1">%1$d</xliff:g> failai.</item>
- <item quantity="many">Kopijuojama <xliff:g id="COUNT_1">%1$d</xliff:g> failo.</item>
- <item quantity="other">Kopijuojama <xliff:g id="COUNT_1">%1$d</xliff:g> failų.</item>
- </plurals>
- <plurals name="move_begin" formatted="false" msgid="8430330882138871643">
- <item quantity="one">Perkeliamas <xliff:g id="COUNT_1">%1$d</xliff:g> failas.</item>
- <item quantity="few">Perkeliami <xliff:g id="COUNT_1">%1$d</xliff:g> failai.</item>
- <item quantity="many">Perkeliama <xliff:g id="COUNT_1">%1$d</xliff:g> failo.</item>
- <item quantity="other">Perkeliama <xliff:g id="COUNT_1">%1$d</xliff:g> failų.</item>
- </plurals>
- <plurals name="deleting" formatted="false" msgid="5054338566802559411">
- <item quantity="one">Trinamas <xliff:g id="COUNT_1">%1$d</xliff:g> failas.</item>
- <item quantity="few">Trinami <xliff:g id="COUNT_1">%1$d</xliff:g> failai.</item>
- <item quantity="many">Trinama <xliff:g id="COUNT_1">%1$d</xliff:g> failo.</item>
- <item quantity="other">Trinama <xliff:g id="COUNT_1">%1$d</xliff:g> failų.</item>
- </plurals>
- <string name="undo" msgid="7905788502491742328">"Anuliuoti"</string>
- <string name="copy_preparing" msgid="3896202461003039386">"Ruošiamasi kopijuoti…"</string>
- <string name="move_preparing" msgid="2772219441375531410">"Ruošiamasi perkelti…"</string>
- <string name="delete_preparing" msgid="5655813182533491992">"Ruošiama ištrinti…"</string>
- <string name="delete_progress" msgid="5399405983046157222">"<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="7160447124922897689">
- <item quantity="one">Nepavyko nukopijuoti <xliff:g id="COUNT_1">%1$d</xliff:g> failo</item>
- <item quantity="few">Nepavyko nukopijuoti <xliff:g id="COUNT_1">%1$d</xliff:g> failų</item>
- <item quantity="many">Nepavyko nukopijuoti <xliff:g id="COUNT_1">%1$d</xliff:g> failo</item>
- <item quantity="other">Nepavyko nukopijuoti <xliff:g id="COUNT_1">%1$d</xliff:g> failų</item>
- </plurals>
- <plurals name="move_error_notification_title" formatted="false" msgid="2710901971014783012">
- <item quantity="one">Nepavyko perkelti <xliff:g id="COUNT_1">%1$d</xliff:g> failo</item>
- <item quantity="few">Nepavyko perkelti <xliff:g id="COUNT_1">%1$d</xliff:g> failų</item>
- <item quantity="many">Nepavyko perkelti <xliff:g id="COUNT_1">%1$d</xliff:g> failo</item>
- <item quantity="other">Nepavyko perkelti <xliff:g id="COUNT_1">%1$d</xliff:g> failų</item>
- </plurals>
- <plurals name="delete_error_notification_title" formatted="false" msgid="7228393157786591199">
- <item quantity="one">Nepavyko ištrinti <xliff:g id="COUNT_1">%1$d</xliff:g> failo</item>
- <item quantity="few">Nepavyko ištrinti <xliff:g id="COUNT_1">%1$d</xliff:g> failų</item>
- <item quantity="many">Nepavyko ištrinti <xliff:g id="COUNT_1">%1$d</xliff:g> failo</item>
- <item quantity="other">Nepavyko ištrinti <xliff:g id="COUNT_1">%1$d</xliff:g> failų</item>
- </plurals>
- <string name="notification_touch_for_details" msgid="6268189413228855582">"Palieskite, kad peržiūrėtumėte informaciją"</string>
- <string name="close" msgid="3043722427445528732">"Uždaryti"</string>
- <string name="copy_failure_alert_content" msgid="4563147454522476183">"Šie failai nebuvo nukopijuoti: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="move_failure_alert_content" msgid="2635075788682922861">"Šie failai nebuvo perkelti: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="delete_failure_alert_content" msgid="892393767207938353">"Šie failai nebuvo ištrinti: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="copy_converted_warning_content" msgid="5753861488218674361">"Šie failai konvertuoti į kitą formatą: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <plurals name="clipboard_files_clipped" formatted="false" msgid="855459017537058539">
- <item quantity="one">Nukopijuotas <xliff:g id="COUNT_1">%1$d</xliff:g> failas į iškarpinę.</item>
- <item quantity="few">Nukopijuoti <xliff:g id="COUNT_1">%1$d</xliff:g> failai į iškarpinę.</item>
- <item quantity="many">Nukopijuota <xliff:g id="COUNT_1">%1$d</xliff:g> failo į iškarpinę.</item>
- <item quantity="other">Nukopijuota <xliff:g id="COUNT_1">%1$d</xliff:g> failų į iškarpinę.</item>
- </plurals>
- <string name="clipboard_files_cannot_paste" msgid="2878324825602325706">"Nepavyko įklijuoti pasirinktų failų šioje vietoje."</string>
- <string name="menu_rename" msgid="7678802479104285353">"Pervardyti"</string>
- <string name="rename_error" msgid="4203041674883412606">"Nepavyko pervardyti dokumento"</string>
- <string name="menu_eject_root" msgid="2768224615494227325">"Pašalinti"</string>
- <string name="notification_copy_files_converted_title" msgid="3153573223054275181">"Kai kurie failai buvo konvertuoti"</string>
- <string name="open_external_dialog_request" msgid="5789329484285817629">"Suteikti „<xliff:g id="APPNAME"><b>^1</b></xliff:g>“ prieigą prie katalogo „<xliff:g id="DIRECTORY"><i>^2</i></xliff:g>“ <xliff:g id="STORAGE"><i>^3</i></xliff:g>?"</string>
- <string name="open_external_dialog_request_primary_volume" msgid="6635562535713428688">"Suteikti „<xliff:g id="APPNAME"><b>^1</b></xliff:g>“ prieigą prie katalogo „<xliff:g id="DIRECTORY"><i>^2</i></xliff:g>“?"</string>
- <string name="open_external_dialog_root_request" msgid="8899108702926347720">"Suteikti programai „<xliff:g id="APPNAME"><b>^1</b></xliff:g>“ prieigą prie duomenų, įskaitant nuotraukas ir vaizdo įrašus, <xliff:g id="STORAGE"><i>^2</i></xliff:g>?"</string>
- <string name="never_ask_again" msgid="4295278542972859268">"Daugiau neklausti"</string>
- <string name="allow" msgid="7225948811296386551">"Leisti"</string>
- <string name="deny" msgid="2081879885755434506">"Atmesti"</string>
- <plurals name="elements_selected" formatted="false" msgid="1376955402452875047">
- <item quantity="one">Pasirinktas <xliff:g id="COUNT_1">%1$d</xliff:g> elementas</item>
- <item quantity="few">Pasirinkti <xliff:g id="COUNT_1">%1$d</xliff:g> elementai</item>
- <item quantity="many">Pasirinkta <xliff:g id="COUNT_1">%1$d</xliff:g> elemento</item>
- <item quantity="other">Pasirinkta <xliff:g id="COUNT_1">%1$d</xliff:g> elementų</item>
- </plurals>
- <plurals name="elements_dragged" formatted="false" msgid="3727204615215602228">
- <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> elementas</item>
- <item quantity="few"><xliff:g id="COUNT_1">%1$d</xliff:g> elementai</item>
- <item quantity="many"><xliff:g id="COUNT_1">%1$d</xliff:g> elemento</item>
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> elementų</item>
- </plurals>
- <string name="delete_filename_confirmation_message" msgid="5312817725577537488">"Ištrinti „<xliff:g id="NAME">%1$s</xliff:g>“?"</string>
- <string name="delete_foldername_confirmation_message" msgid="5885501832257285329">"Ištrinti aplanką „<xliff:g id="NAME">%1$s</xliff:g>“ ir jo turinį?"</string>
- <plurals name="delete_files_confirmation_message" formatted="false" msgid="8417505791395471802">
- <item quantity="one">Ištrinti <xliff:g id="COUNT_1">%1$d</xliff:g> failą?</item>
- <item quantity="few">Ištrinti <xliff:g id="COUNT_1">%1$d</xliff:g> failus?</item>
- <item quantity="many">Ištrinti <xliff:g id="COUNT_1">%1$d</xliff:g> failo?</item>
- <item quantity="other">Ištrinti <xliff:g id="COUNT_1">%1$d</xliff:g> failų?</item>
- </plurals>
- <plurals name="delete_folders_confirmation_message" formatted="false" msgid="9185648028213507769">
- <item quantity="one">Ištrinti <xliff:g id="COUNT_1">%1$d</xliff:g> aplanką ir jų turinį?</item>
- <item quantity="few">Ištrinti <xliff:g id="COUNT_1">%1$d</xliff:g> aplankus ir jų turinį?</item>
- <item quantity="many">Ištrinti <xliff:g id="COUNT_1">%1$d</xliff:g> aplanko ir jų turinį?</item>
- <item quantity="other">Ištrinti <xliff:g id="COUNT_1">%1$d</xliff:g> aplankų ir jų turinį?</item>
- </plurals>
- <plurals name="delete_items_confirmation_message" formatted="false" msgid="5376214433530243459">
- <item quantity="one">Ištrinti <xliff:g id="COUNT_1">%1$d</xliff:g> elementą?</item>
- <item quantity="few">Ištrinti <xliff:g id="COUNT_1">%1$d</xliff:g> elementus?</item>
- <item quantity="many">Ištrinti <xliff:g id="COUNT_1">%1$d</xliff:g> elemento?</item>
- <item quantity="other">Ištrinti <xliff:g id="COUNT_1">%1$d</xliff:g> elementų?</item>
- </plurals>
-</resources>
diff --git a/packages/DocumentsUI/res/values-lv/strings.xml b/packages/DocumentsUI/res/values-lv/strings.xml
deleted file mode 100644
index 56a9deb..0000000
--- a/packages/DocumentsUI/res/values-lv/strings.xml
+++ /dev/null
@@ -1,156 +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="app_label" msgid="1551050262492398204">"Faili"</string>
- <string name="downloads_label" msgid="959113951084633612">"Lejupielādes"</string>
- <string name="title_open" msgid="4353228937663917801">"Atvēršana no:"</string>
- <string name="title_save" msgid="2433679664882857999">"Saglabāšana:"</string>
- <string name="menu_create_dir" msgid="2547620241173881754">"Jauna mape"</string>
- <string name="menu_grid" msgid="6878021334497835259">"Režģis"</string>
- <string name="menu_list" msgid="7279285939892417279">"Saraksts"</string>
- <string name="menu_sort" msgid="7677740407158414452">"Kārtot pēc"</string>
- <string name="menu_search" msgid="3816712084502856974">"Meklēt"</string>
- <string name="menu_settings" msgid="8239065133341597825">"Atmiņas iestatījumi"</string>
- <string name="menu_open" msgid="432922957274920903">"Atvērt"</string>
- <string name="menu_save" msgid="2394743337684426338">"Saglabāt"</string>
- <string name="menu_share" msgid="3075149983979628146">"Kopīgot"</string>
- <string name="menu_delete" msgid="8138799623850614177">"Dzēst"</string>
- <string name="menu_select_all" msgid="8323579667348729928">"Atlasīt visus"</string>
- <string name="menu_copy" msgid="3612326052677229148">"Kopēt…"</string>
- <string name="menu_move" msgid="1828090633118079817">"Pārvietot uz…"</string>
- <string name="menu_new_window" msgid="1226032889278727538">"Jauns logs"</string>
- <string name="menu_cut_to_clipboard" msgid="2467149185452488383">"Izgriezt"</string>
- <string name="menu_copy_to_clipboard" msgid="489311381979634291">"Kopēt"</string>
- <string name="menu_paste_from_clipboard" msgid="2071583031180257091">"Ielīmēt"</string>
- <string name="menu_advanced_show" msgid="4693652895715631401">"Rādīt iekšējo atmiņu"</string>
- <string name="menu_advanced_hide" msgid="4218809952721972589">"Paslēpt iekšējo atmiņu"</string>
- <string name="menu_file_size_show" msgid="3240323619260823076">"Rādīt failu lielumu"</string>
- <string name="menu_file_size_hide" msgid="8881975928502581042">"Paslēpt failu lielumu"</string>
- <string name="button_select" msgid="527196987259139214">"Atlasīt"</string>
- <string name="button_copy" msgid="8706475544635021302">"Kopēt"</string>
- <string name="button_move" msgid="2202666023104202232">"Pārvietot"</string>
- <string name="button_dismiss" msgid="3714065566893946085">"Noraidīt"</string>
- <string name="button_retry" msgid="4392027584153752797">"Mēģināt vēlreiz"</string>
- <string name="sort_name" msgid="9183560467917256779">"Pēc nosaukuma"</string>
- <string name="sort_date" msgid="586080032956151448">"Pēc pārveidošanas datuma"</string>
- <string name="sort_size" msgid="3350681319735474741">"Pēc lieluma"</string>
- <string name="drawer_open" msgid="4545466532430226949">"Rādīt saknes"</string>
- <string name="drawer_close" msgid="7602734368552123318">"Slēpt saknes"</string>
- <string name="save_error" msgid="6167009778003223664">"Neizdevās saglabāt dokumentu."</string>
- <string name="create_error" msgid="3735649141335444215">"Neizdevās izveidot mapi."</string>
- <string name="query_error" msgid="5999895349602476581">"Pašlaik nevar ielādēt saturu."</string>
- <string name="root_recent" msgid="4470053704320518133">"Pēdējie"</string>
- <string name="root_available_bytes" msgid="8568452858617033281">"Brīva vieta: <xliff:g id="SIZE">%1$s</xliff:g>"</string>
- <string name="root_type_service" msgid="2178854894416775409">"Glabāšanas pakalpojumi"</string>
- <string name="root_type_shortcut" msgid="3318760609471618093">"Saīsnes"</string>
- <string name="root_type_device" msgid="7121342474653483538">"Ierīces"</string>
- <string name="root_type_apps" msgid="8838065367985945189">"Vairāk lietotņu"</string>
- <string name="empty" msgid="7858882803708117596">"Nav vienumu"</string>
- <string name="no_results" msgid="6622510343880730446">"Failā %1$s nav atbilstību"</string>
- <string name="toast_no_application" msgid="4632640357724698144">"Nevar atvērt failu."</string>
- <string name="toast_failed_delete" msgid="2180678019407244069">"Nevar dzēst dažus dokumentus."</string>
- <string name="share_via" msgid="8966594246261344259">"Kopīgot, izmantojot"</string>
- <string name="copy_notification_title" msgid="6374299806748219777">"Notiek failu kopēšana"</string>
- <string name="move_notification_title" msgid="6193835179777284805">"Failu pārvietošana"</string>
- <string name="delete_notification_title" msgid="3329403967712437496">"Notiek failu dzēšana"</string>
- <string name="copy_remaining" msgid="6283790937387975095">"Atlikušais laiks: <xliff:g id="DURATION">%s</xliff:g>"</string>
- <plurals name="copy_begin" formatted="false" msgid="9071199452634086365">
- <item quantity="zero">Notiek <xliff:g id="COUNT_1">%1$d</xliff:g> failu kopēšana.</item>
- <item quantity="one">Notiek <xliff:g id="COUNT_1">%1$d</xliff:g> faila kopēšana.</item>
- <item quantity="other">Notiek <xliff:g id="COUNT_1">%1$d</xliff:g> failu kopēšana.</item>
- </plurals>
- <plurals name="move_begin" formatted="false" msgid="8430330882138871643">
- <item quantity="zero">Notiek <xliff:g id="COUNT_1">%1$d</xliff:g> failu pārvietošana.</item>
- <item quantity="one">Notiek <xliff:g id="COUNT_1">%1$d</xliff:g> faila pārvietošana.</item>
- <item quantity="other">Notiek <xliff:g id="COUNT_1">%1$d</xliff:g> failu pārvietošana.</item>
- </plurals>
- <plurals name="deleting" formatted="false" msgid="5054338566802559411">
- <item quantity="zero">Notiek <xliff:g id="COUNT_1">%1$d</xliff:g> failu dzēšana.</item>
- <item quantity="one">Notiek <xliff:g id="COUNT_1">%1$d</xliff:g> faila dzēšana.</item>
- <item quantity="other">Notiek <xliff:g id="COUNT_1">%1$d</xliff:g> failu dzēšana.</item>
- </plurals>
- <string name="undo" msgid="7905788502491742328">"Atsaukt"</string>
- <string name="copy_preparing" msgid="3896202461003039386">"Gatavošanās kopēšanai…"</string>
- <string name="move_preparing" msgid="2772219441375531410">"Sagatavošana pārvietošanai…"</string>
- <string name="delete_preparing" msgid="5655813182533491992">"Notiek gatavošanās dzēšanai…"</string>
- <string name="delete_progress" msgid="5399405983046157222">"<xliff:g id="COUNT_0">%1$d</xliff:g> no <xliff:g id="TOTALCOUNT">%2$d</xliff:g>"</string>
- <plurals name="copy_error_notification_title" formatted="false" msgid="7160447124922897689">
- <item quantity="zero">Nevarēja nokopēt <xliff:g id="COUNT_1">%1$d</xliff:g> failus</item>
- <item quantity="one">Nevarēja nokopēt <xliff:g id="COUNT_1">%1$d</xliff:g> failu</item>
- <item quantity="other">Nevarēja nokopēt <xliff:g id="COUNT_1">%1$d</xliff:g> failus</item>
- </plurals>
- <plurals name="move_error_notification_title" formatted="false" msgid="2710901971014783012">
- <item quantity="zero">Nevarēja pārvietot <xliff:g id="COUNT_1">%1$d</xliff:g> failus</item>
- <item quantity="one">Nevarēja pārvietot <xliff:g id="COUNT_1">%1$d</xliff:g> failu</item>
- <item quantity="other">Nevarēja pārvietot <xliff:g id="COUNT_1">%1$d</xliff:g> failus</item>
- </plurals>
- <plurals name="delete_error_notification_title" formatted="false" msgid="7228393157786591199">
- <item quantity="zero">Nevarēja izdzēst <xliff:g id="COUNT_1">%1$d</xliff:g> failus</item>
- <item quantity="one">Nevarēja izdzēst <xliff:g id="COUNT_1">%1$d</xliff:g> failu</item>
- <item quantity="other">Nevarēja izdzēst <xliff:g id="COUNT_1">%1$d</xliff:g> failus</item>
- </plurals>
- <string name="notification_touch_for_details" msgid="6268189413228855582">"Pieskarieties, lai skatītu informāciju"</string>
- <string name="close" msgid="3043722427445528732">"Aizvērt"</string>
- <string name="copy_failure_alert_content" msgid="4563147454522476183">"Netika nokopēti šādi faili: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="move_failure_alert_content" msgid="2635075788682922861">"Netika pārvietoti šādi faili: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="delete_failure_alert_content" msgid="892393767207938353">"Netika izdzēsti šādi faili: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="copy_converted_warning_content" msgid="5753861488218674361">"Šie faili tika pārveidoti citā formātā: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <plurals name="clipboard_files_clipped" formatted="false" msgid="855459017537058539">
- <item quantity="zero"><xliff:g id="COUNT_1">%1$d</xliff:g> faili tika kopēti starpliktuvē.</item>
- <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> fails tika kopēts starpliktuvē.</item>
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> faili tika kopēti starpliktuvē.</item>
- </plurals>
- <string name="clipboard_files_cannot_paste" msgid="2878324825602325706">"Atlasītos failus šeit nevar ielīmēt."</string>
- <string name="menu_rename" msgid="7678802479104285353">"Pārdēvēt"</string>
- <string name="rename_error" msgid="4203041674883412606">"Neizdevās pārdēvēt dokumentu"</string>
- <string name="menu_eject_root" msgid="2768224615494227325">"Noņemt"</string>
- <string name="notification_copy_files_converted_title" msgid="3153573223054275181">"Daži faili tika pārveidoti."</string>
- <string name="open_external_dialog_request" msgid="5789329484285817629">"Vai atļaut lietotnei <xliff:g id="APPNAME"><b>^1</b></xliff:g> piekļūt direktorijam <xliff:g id="DIRECTORY"><i>^2</i></xliff:g> šajā krātuvē: <xliff:g id="STORAGE"><i>^3</i></xliff:g>?"</string>
- <string name="open_external_dialog_request_primary_volume" msgid="6635562535713428688">"Vai piešķirt lietotnei <xliff:g id="APPNAME"><b>^1</b></xliff:g> piekļuvi direktorijam <xliff:g id="DIRECTORY"><i>^2</i></xliff:g>?"</string>
- <string name="open_external_dialog_root_request" msgid="8899108702926347720">"Vai atļaut lietotnei <xliff:g id="APPNAME"><b>^1</b></xliff:g> piekļūt jūsu datiem, tostarp fotoattēliem un videoklipiem, šajā krātuvē: <xliff:g id="STORAGE"><i>^2</i></xliff:g>?"</string>
- <string name="never_ask_again" msgid="4295278542972859268">"Turpmāk vairs nejautāt"</string>
- <string name="allow" msgid="7225948811296386551">"Atļaut"</string>
- <string name="deny" msgid="2081879885755434506">"Noraidīt"</string>
- <plurals name="elements_selected" formatted="false" msgid="1376955402452875047">
- <item quantity="zero"><xliff:g id="COUNT_1">%1$d</xliff:g> atlasīti</item>
- <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> atlasīts</item>
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> atlasīti</item>
- </plurals>
- <plurals name="elements_dragged" formatted="false" msgid="3727204615215602228">
- <item quantity="zero"><xliff:g id="COUNT_1">%1$d</xliff:g> vienumu</item>
- <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> vienums</item>
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> vienumi</item>
- </plurals>
- <string name="delete_filename_confirmation_message" msgid="5312817725577537488">"Vai izdzēst failu “<xliff:g id="NAME">%1$s</xliff:g>”?"</string>
- <string name="delete_foldername_confirmation_message" msgid="5885501832257285329">"Vai izdzēst mapi “<xliff:g id="NAME">%1$s</xliff:g>” un tās saturu?"</string>
- <plurals name="delete_files_confirmation_message" formatted="false" msgid="8417505791395471802">
- <item quantity="zero">Vai izdzēst <xliff:g id="COUNT_1">%1$d</xliff:g> failus?</item>
- <item quantity="one">Vai izdzēst <xliff:g id="COUNT_1">%1$d</xliff:g> failu?</item>
- <item quantity="other">Vai izdzēst <xliff:g id="COUNT_1">%1$d</xliff:g> failus?</item>
- </plurals>
- <plurals name="delete_folders_confirmation_message" formatted="false" msgid="9185648028213507769">
- <item quantity="zero">Vai izdzēst <xliff:g id="COUNT_1">%1$d</xliff:g> mapes un to saturu?</item>
- <item quantity="one">Vai izdzēst <xliff:g id="COUNT_1">%1$d</xliff:g> mapi un to saturu?</item>
- <item quantity="other">Vai izdzēst <xliff:g id="COUNT_1">%1$d</xliff:g> mapes un to saturu?</item>
- </plurals>
- <plurals name="delete_items_confirmation_message" formatted="false" msgid="5376214433530243459">
- <item quantity="zero">Vai izdzēst <xliff:g id="COUNT_1">%1$d</xliff:g> vienumus?</item>
- <item quantity="one">Vai izdzēst <xliff:g id="COUNT_1">%1$d</xliff:g> vienumu?</item>
- <item quantity="other">Vai izdzēst <xliff:g id="COUNT_1">%1$d</xliff:g> vienumus?</item>
- </plurals>
-</resources>
diff --git a/packages/DocumentsUI/res/values-mk-rMK/strings.xml b/packages/DocumentsUI/res/values-mk-rMK/strings.xml
deleted file mode 100644
index 58bfc99..0000000
--- a/packages/DocumentsUI/res/values-mk-rMK/strings.xml
+++ /dev/null
@@ -1,144 +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="app_label" msgid="1551050262492398204">"Датотеки"</string>
- <string name="downloads_label" msgid="959113951084633612">"Преземања"</string>
- <string name="title_open" msgid="4353228937663917801">"Отвори од"</string>
- <string name="title_save" msgid="2433679664882857999">"Зачувај во"</string>
- <string name="menu_create_dir" msgid="2547620241173881754">"Нова папка"</string>
- <string name="menu_grid" msgid="6878021334497835259">"Приказ на мрежа"</string>
- <string name="menu_list" msgid="7279285939892417279">"Приказ на список"</string>
- <string name="menu_sort" msgid="7677740407158414452">"Подреди по"</string>
- <string name="menu_search" msgid="3816712084502856974">"Пребарај"</string>
- <string name="menu_settings" msgid="8239065133341597825">"Поставки на меморија"</string>
- <string name="menu_open" msgid="432922957274920903">"Отвори"</string>
- <string name="menu_save" msgid="2394743337684426338">"Зачувај"</string>
- <string name="menu_share" msgid="3075149983979628146">"Сподели"</string>
- <string name="menu_delete" msgid="8138799623850614177">"Избриши"</string>
- <string name="menu_select_all" msgid="8323579667348729928">"Избери ги сите"</string>
- <string name="menu_copy" msgid="3612326052677229148">"Копирај во…"</string>
- <string name="menu_move" msgid="1828090633118079817">"Премести во..."</string>
- <string name="menu_new_window" msgid="1226032889278727538">"Нов прозорец"</string>
- <string name="menu_cut_to_clipboard" msgid="2467149185452488383">"Исечи"</string>
- <string name="menu_copy_to_clipboard" msgid="489311381979634291">"Копирај"</string>
- <string name="menu_paste_from_clipboard" msgid="2071583031180257091">"Залепи"</string>
- <string name="menu_advanced_show" msgid="4693652895715631401">"Прикажи внатрешна мемор."</string>
- <string name="menu_advanced_hide" msgid="4218809952721972589">"Скриј внатрешна меморија"</string>
- <string name="menu_file_size_show" msgid="3240323619260823076">"Прикажи ја големината"</string>
- <string name="menu_file_size_hide" msgid="8881975928502581042">"Сокриј ја големината"</string>
- <string name="button_select" msgid="527196987259139214">"Избери"</string>
- <string name="button_copy" msgid="8706475544635021302">"Копирај"</string>
- <string name="button_move" msgid="2202666023104202232">"Премести"</string>
- <string name="button_dismiss" msgid="3714065566893946085">"Отфрли"</string>
- <string name="button_retry" msgid="4392027584153752797">"Обиди се пак"</string>
- <string name="sort_name" msgid="9183560467917256779">"По име"</string>
- <string name="sort_date" msgid="586080032956151448">"Изменети по датум"</string>
- <string name="sort_size" msgid="3350681319735474741">"По големина"</string>
- <string name="drawer_open" msgid="4545466532430226949">"Прикажи корени"</string>
- <string name="drawer_close" msgid="7602734368552123318">"Сокриј корени"</string>
- <string name="save_error" msgid="6167009778003223664">"Документот не успеа да се зачува"</string>
- <string name="create_error" msgid="3735649141335444215">"Не успеа да се создаде папка"</string>
- <string name="query_error" msgid="5999895349602476581">"Во моментов не може да се вчита содржина."</string>
- <string name="root_recent" msgid="4470053704320518133">"Последни"</string>
- <string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> слободен простор"</string>
- <string name="root_type_service" msgid="2178854894416775409">"Услуги на складирање"</string>
- <string name="root_type_shortcut" msgid="3318760609471618093">"Кратенки"</string>
- <string name="root_type_device" msgid="7121342474653483538">"Уреди"</string>
- <string name="root_type_apps" msgid="8838065367985945189">"Повеќе апликации"</string>
- <string name="empty" msgid="7858882803708117596">"Нема ставки"</string>
- <string name="no_results" msgid="6622510343880730446">"Нема совпаѓања во %1$s"</string>
- <string name="toast_no_application" msgid="4632640357724698144">"Датотеката не може да се отвори"</string>
- <string name="toast_failed_delete" msgid="2180678019407244069">"Некои документи не може да се избришат"</string>
- <string name="share_via" msgid="8966594246261344259">"Сподели преку"</string>
- <string name="copy_notification_title" msgid="6374299806748219777">"Се копираат датотеки"</string>
- <string name="move_notification_title" msgid="6193835179777284805">"Датотеките се преместуваат"</string>
- <string name="delete_notification_title" msgid="3329403967712437496">"Се бришат датотеките"</string>
- <string name="copy_remaining" msgid="6283790937387975095">"Уште <xliff:g id="DURATION">%s</xliff:g>"</string>
- <plurals name="copy_begin" formatted="false" msgid="9071199452634086365">
- <item quantity="one">Се копира <xliff:g id="COUNT_1">%1$d</xliff:g> датотека.</item>
- <item quantity="other">Се копираат <xliff:g id="COUNT_1">%1$d</xliff:g> датотеки.</item>
- </plurals>
- <plurals name="move_begin" formatted="false" msgid="8430330882138871643">
- <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="deleting" formatted="false" msgid="5054338566802559411">
- <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="7905788502491742328">"Врати"</string>
- <string name="copy_preparing" msgid="3896202461003039386">"Се подготвува за копирање…"</string>
- <string name="move_preparing" msgid="2772219441375531410">"Се подготвува за преместување…"</string>
- <string name="delete_preparing" msgid="5655813182533491992">"Се подготвува за бришење…"</string>
- <string name="delete_progress" msgid="5399405983046157222">"<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="7160447124922897689">
- <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="move_error_notification_title" formatted="false" msgid="2710901971014783012">
- <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_error_notification_title" formatted="false" msgid="7228393157786591199">
- <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="6268189413228855582">"Допрете за да ги погледнете деталите"</string>
- <string name="close" msgid="3043722427445528732">"Затвори"</string>
- <string name="copy_failure_alert_content" msgid="4563147454522476183">"Датотекиве не се ископирани: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="move_failure_alert_content" msgid="2635075788682922861">"Датотекиве не се преместени: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="delete_failure_alert_content" msgid="892393767207938353">"Датотекиве не се избришани: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="copy_converted_warning_content" msgid="5753861488218674361">"Овие датотеки беа конвертирани во друг формат: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <plurals name="clipboard_files_clipped" formatted="false" msgid="855459017537058539">
- <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="clipboard_files_cannot_paste" msgid="2878324825602325706">"Не може да ги залепи избраните датотеки на локацијава."</string>
- <string name="menu_rename" msgid="7678802479104285353">"Преименувај"</string>
- <string name="rename_error" msgid="4203041674883412606">"Не успеа да се преименува документот"</string>
- <string name="menu_eject_root" msgid="2768224615494227325">"Извади"</string>
- <string name="notification_copy_files_converted_title" msgid="3153573223054275181">"Некои датотеки беа конвертирани"</string>
- <string name="open_external_dialog_request" msgid="5789329484285817629">"Овозможете пристап на <xliff:g id="APPNAME"><b>^1</b></xliff:g> до директориумот <xliff:g id="DIRECTORY"><i>^2</i></xliff:g> на <xliff:g id="STORAGE"><i>^3</i></xliff:g>?"</string>
- <string name="open_external_dialog_request_primary_volume" msgid="6635562535713428688">"Овозможете пристап на <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="8899108702926347720">"Да се овозможи пристап на <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="4295278542972859268">"Не прашувај повторно"</string>
- <string name="allow" msgid="7225948811296386551">"Дозволи"</string>
- <string name="deny" msgid="2081879885755434506">"Одбиј"</string>
- <plurals name="elements_selected" formatted="false" msgid="1376955402452875047">
- <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="3727204615215602228">
- <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="5312817725577537488">"Да се избрише „<xliff:g id="NAME">%1$s</xliff:g>“?"</string>
- <string name="delete_foldername_confirmation_message" msgid="5885501832257285329">"Да се избрише папката „<xliff:g id="NAME">%1$s</xliff:g>“ и нејзините содржини?"</string>
- <plurals name="delete_files_confirmation_message" formatted="false" msgid="8417505791395471802">
- <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="9185648028213507769">
- <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="5376214433530243459">
- <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>
-</resources>
diff --git a/packages/DocumentsUI/res/values-ml-rIN/strings.xml b/packages/DocumentsUI/res/values-ml-rIN/strings.xml
deleted file mode 100644
index 54d32a5..0000000
--- a/packages/DocumentsUI/res/values-ml-rIN/strings.xml
+++ /dev/null
@@ -1,144 +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="app_label" msgid="1551050262492398204">"ഫയലുകൾ"</string>
- <string name="downloads_label" msgid="959113951084633612">"ഡൗണ്ലോഡുകൾ"</string>
- <string name="title_open" msgid="4353228937663917801">"ഇതിൽ നിന്നും തുറക്കുക"</string>
- <string name="title_save" msgid="2433679664882857999">"ഇതില് സംരക്ഷിക്കുക"</string>
- <string name="menu_create_dir" msgid="2547620241173881754">"പുതിയ ഫോൾഡർ"</string>
- <string name="menu_grid" msgid="6878021334497835259">"ഗ്രിഡ് കാഴ്ച"</string>
- <string name="menu_list" msgid="7279285939892417279">"ലിസ്റ്റ് കാഴ്ച"</string>
- <string name="menu_sort" msgid="7677740407158414452">"ഇപ്രകാരം അടുക്കുക"</string>
- <string name="menu_search" msgid="3816712084502856974">"തിരയൽ"</string>
- <string name="menu_settings" msgid="8239065133341597825">"സ്റ്റോറേജ് ക്രമീകരണം"</string>
- <string name="menu_open" msgid="432922957274920903">"തുറക്കുക"</string>
- <string name="menu_save" msgid="2394743337684426338">"സംരക്ഷിക്കുക"</string>
- <string name="menu_share" msgid="3075149983979628146">"പങ്കിടുക"</string>
- <string name="menu_delete" msgid="8138799623850614177">"ഇല്ലാതാക്കുക"</string>
- <string name="menu_select_all" msgid="8323579667348729928">"എല്ലാം തിരഞ്ഞെടുക്കുക"</string>
- <string name="menu_copy" msgid="3612326052677229148">"ഇതിൽ പകർത്തുക…"</string>
- <string name="menu_move" msgid="1828090633118079817">"ഇതിലേക്ക് നീക്കുക..."</string>
- <string name="menu_new_window" msgid="1226032889278727538">"പുതിയ വിന്ഡോ"</string>
- <string name="menu_cut_to_clipboard" msgid="2467149185452488383">"മുറിക്കുക"</string>
- <string name="menu_copy_to_clipboard" msgid="489311381979634291">"പകര്ത്തുക"</string>
- <string name="menu_paste_from_clipboard" msgid="2071583031180257091">"ഒട്ടിക്കുക"</string>
- <string name="menu_advanced_show" msgid="4693652895715631401">"ആന്തരിക സ്റ്റോറേജ് കാണിക്കുക"</string>
- <string name="menu_advanced_hide" msgid="4218809952721972589">"ആന്തരിക സ്റ്റോറേജ് മറയ്ക്കുക"</string>
- <string name="menu_file_size_show" msgid="3240323619260823076">"ഫയൽ വലുപ്പം കാണിക്കുക"</string>
- <string name="menu_file_size_hide" msgid="8881975928502581042">"ഫയൽ വലുപ്പം മറയ്ക്കുക"</string>
- <string name="button_select" msgid="527196987259139214">"തിരഞ്ഞെടുക്കുക"</string>
- <string name="button_copy" msgid="8706475544635021302">"പകര്ത്തുക"</string>
- <string name="button_move" msgid="2202666023104202232">"നീക്കുക"</string>
- <string name="button_dismiss" msgid="3714065566893946085">"ഡിസ്മിസ് ചെയ്യുക"</string>
- <string name="button_retry" msgid="4392027584153752797">"വീണ്ടും ശ്രമിക്കുക"</string>
- <string name="sort_name" msgid="9183560467917256779">"പേര് പ്രകാരം"</string>
- <string name="sort_date" msgid="586080032956151448">"പരിഷ്ക്കരിച്ച തീയതി പ്രകാരം"</string>
- <string name="sort_size" msgid="3350681319735474741">"വലുപ്പം പ്രകാരം"</string>
- <string name="drawer_open" msgid="4545466532430226949">"റൂട്ടുകൾ ദൃശ്യമാക്കുക"</string>
- <string name="drawer_close" msgid="7602734368552123318">"റൂട്ടുകൾ മറയ്ക്കുക"</string>
- <string name="save_error" msgid="6167009778003223664">"പ്രമാണം സംരക്ഷിക്കുന്നതിൽ പരാജയപ്പെട്ടു"</string>
- <string name="create_error" msgid="3735649141335444215">"ഫോൾഡർ സൃഷ്ടിക്കുന്നതിൽ പരാജയപ്പെട്ടു"</string>
- <string name="query_error" msgid="5999895349602476581">"ഇപ്പോൾ ഉള്ളടക്കം ലോഡുചെയ്യാൻ കഴിയില്ല"</string>
- <string name="root_recent" msgid="4470053704320518133">"അടുത്തിടെയുള്ളവ"</string>
- <string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> ലഭ്യമാണ്"</string>
- <string name="root_type_service" msgid="2178854894416775409">"സംഭരണ സേവനങ്ങൾ"</string>
- <string name="root_type_shortcut" msgid="3318760609471618093">"കുറുക്കുവഴികൾ"</string>
- <string name="root_type_device" msgid="7121342474653483538">"ഉപകരണങ്ങൾ"</string>
- <string name="root_type_apps" msgid="8838065367985945189">"കൂടുതൽ അപ്ലിക്കേഷനുകൾ"</string>
- <string name="empty" msgid="7858882803708117596">"ഇനങ്ങളൊന്നുമില്ല"</string>
- <string name="no_results" msgid="6622510343880730446">"%1$s എന്നതിൽ പൊരുത്തങ്ങളില്ല"</string>
- <string name="toast_no_application" msgid="4632640357724698144">"ഫയൽ തുറക്കാൻ കഴിയില്ല"</string>
- <string name="toast_failed_delete" msgid="2180678019407244069">"ചില പ്രമാണങ്ങൾ ഇല്ലാതാക്കാനായില്ല"</string>
- <string name="share_via" msgid="8966594246261344259">"ഇതുവഴി പങ്കിടുക"</string>
- <string name="copy_notification_title" msgid="6374299806748219777">"ഫയലുകൾ പകർത്തുന്നു"</string>
- <string name="move_notification_title" msgid="6193835179777284805">"ഫയലുകൾ നീക്കുന്നു"</string>
- <string name="delete_notification_title" msgid="3329403967712437496">"ഫയലുകൾ ഇല്ലാതാക്കുന്നു"</string>
- <string name="copy_remaining" msgid="6283790937387975095">"<xliff:g id="DURATION">%s</xliff:g> ശേഷിക്കുന്നു"</string>
- <plurals name="copy_begin" formatted="false" msgid="9071199452634086365">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> ഫയലുകൾ പകർത്തുന്നു.</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> ഫയൽ പകർത്തുന്നു.</item>
- </plurals>
- <plurals name="move_begin" formatted="false" msgid="8430330882138871643">
- <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="5054338566802559411">
- <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="7905788502491742328">"പഴയപടിയാക്കുക"</string>
- <string name="copy_preparing" msgid="3896202461003039386">"പകർപ്പിനായി തയ്യാറെടുക്കുന്നു…"</string>
- <string name="move_preparing" msgid="2772219441375531410">"നീക്കാനൊരുങ്ങുന്നു…"</string>
- <string name="delete_preparing" msgid="5655813182533491992">"ഇല്ലാതാക്കാൻ തയ്യാറെടുക്കുന്നു..."</string>
- <string name="delete_progress" msgid="5399405983046157222">"<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="7160447124922897689">
- <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="2710901971014783012">
- <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="7228393157786591199">
- <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="6268189413228855582">"വിശദാംശങ്ങൾ കാണുന്നതിന് ടാപ്പുചെയ്യുക"</string>
- <string name="close" msgid="3043722427445528732">"അടയ്ക്കുക"</string>
- <string name="copy_failure_alert_content" msgid="4563147454522476183">"ഈ ഫയലുകൾ പകർത്തിയില്ല: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="move_failure_alert_content" msgid="2635075788682922861">"ഈ ഫയലുകൾ നീക്കിയില്ല: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="delete_failure_alert_content" msgid="892393767207938353">"ഈ ഫയലുകൾ ഇല്ലാതാക്കിയില്ല: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="copy_converted_warning_content" msgid="5753861488218674361">"ഈ ഫയലുകൾ മറ്റൊരു ഫോർമാറ്റിലേക്ക് പരിവർത്തനം ചെയ്യപ്പെട്ടു: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <plurals name="clipboard_files_clipped" formatted="false" msgid="855459017537058539">
- <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="clipboard_files_cannot_paste" msgid="2878324825602325706">"തിരഞ്ഞെടുത്ത ഫയലുകൾ ഈ ലൊക്കേഷനിൽ ഒട്ടിക്കാനാകുന്നില്ല."</string>
- <string name="menu_rename" msgid="7678802479104285353">"പേരുമാറ്റുക"</string>
- <string name="rename_error" msgid="4203041674883412606">"ഡോക്യുമെന്റിന്റെ പേരുമാറ്റുന്നത് പരാജയപ്പെട്ടു"</string>
- <string name="menu_eject_root" msgid="2768224615494227325">"ഒഴിവാക്കുക"</string>
- <string name="notification_copy_files_converted_title" msgid="3153573223054275181">"ചില ഫയലുകൾ പരിവർത്തനം ചെയ്യപ്പെട്ടു"</string>
- <string name="open_external_dialog_request" msgid="5789329484285817629">"<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="6635562535713428688">"<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="8899108702926347720">"<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="4295278542972859268">"വീണ്ടും ആവശ്യപ്പെടരുത്"</string>
- <string name="allow" msgid="7225948811296386551">"അനുവദിക്കുക"</string>
- <string name="deny" msgid="2081879885755434506">"നിരസിക്കുക"</string>
- <plurals name="elements_selected" formatted="false" msgid="1376955402452875047">
- <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="3727204615215602228">
- <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="5312817725577537488">"\"<xliff:g id="NAME">%1$s</xliff:g>\" ഇല്ലാതാക്കണോ?"</string>
- <string name="delete_foldername_confirmation_message" msgid="5885501832257285329">"\"<xliff:g id="NAME">%1$s</xliff:g>\" എന്ന ഫോൾഡറും അതിലെ ഉള്ളടങ്ങളും ഇല്ലാതാക്കണോ?"</string>
- <plurals name="delete_files_confirmation_message" formatted="false" msgid="8417505791395471802">
- <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="9185648028213507769">
- <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="5376214433530243459">
- <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>
-</resources>
diff --git a/packages/DocumentsUI/res/values-mn-rMN/strings.xml b/packages/DocumentsUI/res/values-mn-rMN/strings.xml
deleted file mode 100644
index 7b7f6c9..0000000
--- a/packages/DocumentsUI/res/values-mn-rMN/strings.xml
+++ /dev/null
@@ -1,144 +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="app_label" msgid="1551050262492398204">"Файл"</string>
- <string name="downloads_label" msgid="959113951084633612">"Таталт"</string>
- <string name="title_open" msgid="4353228937663917801">"Нээх"</string>
- <string name="title_save" msgid="2433679664882857999">"Хадгалах"</string>
- <string name="menu_create_dir" msgid="2547620241173881754">"Шинэ фолдер"</string>
- <string name="menu_grid" msgid="6878021334497835259">"Эгнүүлж харах"</string>
- <string name="menu_list" msgid="7279285939892417279">"Жагсааж харах"</string>
- <string name="menu_sort" msgid="7677740407158414452">"Эрэмбэлэх"</string>
- <string name="menu_search" msgid="3816712084502856974">"Хайх"</string>
- <string name="menu_settings" msgid="8239065133341597825">"Хадгалах сангийн тохиргоо"</string>
- <string name="menu_open" msgid="432922957274920903">"Нээх"</string>
- <string name="menu_save" msgid="2394743337684426338">"Хадгалах"</string>
- <string name="menu_share" msgid="3075149983979628146">"Хуваалцах"</string>
- <string name="menu_delete" msgid="8138799623850614177">"Устгах"</string>
- <string name="menu_select_all" msgid="8323579667348729928">"Бүгдийг сонгох"</string>
- <string name="menu_copy" msgid="3612326052677229148">"...руу хуулах"</string>
- <string name="menu_move" msgid="1828090633118079817">"Байршуулах газар"</string>
- <string name="menu_new_window" msgid="1226032889278727538">"Шинэ цонх"</string>
- <string name="menu_cut_to_clipboard" msgid="2467149185452488383">"Таслах"</string>
- <string name="menu_copy_to_clipboard" msgid="489311381979634291">"Хуулах"</string>
- <string name="menu_paste_from_clipboard" msgid="2071583031180257091">"Буулгах"</string>
- <string name="menu_advanced_show" msgid="4693652895715631401">"Дотоод санг харуулах"</string>
- <string name="menu_advanced_hide" msgid="4218809952721972589">"Дотоод санг нуух"</string>
- <string name="menu_file_size_show" msgid="3240323619260823076">"Файлын хэмжээг харуулах"</string>
- <string name="menu_file_size_hide" msgid="8881975928502581042">"Файлын хэмжээг нуух"</string>
- <string name="button_select" msgid="527196987259139214">"Сонгох"</string>
- <string name="button_copy" msgid="8706475544635021302">"Хуулах"</string>
- <string name="button_move" msgid="2202666023104202232">"Зөөх"</string>
- <string name="button_dismiss" msgid="3714065566893946085">"Алгасах"</string>
- <string name="button_retry" msgid="4392027584153752797">"Дахин оролдоно уу"</string>
- <string name="sort_name" msgid="9183560467917256779">"Нэрээр"</string>
- <string name="sort_date" msgid="586080032956151448">"Өөрчлөгдсөн огноогоор"</string>
- <string name="sort_size" msgid="3350681319735474741">"Хэмжээгээр"</string>
- <string name="drawer_open" msgid="4545466532430226949">"Язгуурыг харуулах"</string>
- <string name="drawer_close" msgid="7602734368552123318">"Язгуурыг нууцлах"</string>
- <string name="save_error" msgid="6167009778003223664">"Документыг хадгалж чадсангүй"</string>
- <string name="create_error" msgid="3735649141335444215">"Фолдер үүсгэж чадсангүй"</string>
- <string name="query_error" msgid="5999895349602476581">"Одоогоор агуулгыг ачааллах боломжгүй байна"</string>
- <string name="root_recent" msgid="4470053704320518133">"Саяхны"</string>
- <string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> чөлөөтэй"</string>
- <string name="root_type_service" msgid="2178854894416775409">"Сангийн үйлчилгээ"</string>
- <string name="root_type_shortcut" msgid="3318760609471618093">"Товчлол"</string>
- <string name="root_type_device" msgid="7121342474653483538">"Төхөөрөмжүүд"</string>
- <string name="root_type_apps" msgid="8838065367985945189">"Өөр апп-ууд"</string>
- <string name="empty" msgid="7858882803708117596">"Хоосон"</string>
- <string name="no_results" msgid="6622510343880730446">"%1$s-д тохирох зүйл байхгүй байна"</string>
- <string name="toast_no_application" msgid="4632640357724698144">"Файлыг нээх боломжгүй байна"</string>
- <string name="toast_failed_delete" msgid="2180678019407244069">"Зарим документуудыг устгах боломжгүй"</string>
- <string name="share_via" msgid="8966594246261344259">"Дараахаар дамжуулан хуваалцах"</string>
- <string name="copy_notification_title" msgid="6374299806748219777">"Файлуудыг хуулж байна"</string>
- <string name="move_notification_title" msgid="6193835179777284805">"Файлыг зөөвөрлөж байна"</string>
- <string name="delete_notification_title" msgid="3329403967712437496">"Эдгээр файлыг устгаж байна"</string>
- <string name="copy_remaining" msgid="6283790937387975095">"<xliff:g id="DURATION">%s</xliff:g> үлдсэн"</string>
- <plurals name="copy_begin" formatted="false" msgid="9071199452634086365">
- <item quantity="other"> <xliff:g id="COUNT_1">%1$d</xliff:g> файлуудыг хуулж байна.</item>
- <item quantity="one"> <xliff:g id="COUNT_0">%1$d</xliff:g> файл хуулж байна.</item>
- </plurals>
- <plurals name="move_begin" formatted="false" msgid="8430330882138871643">
- <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="5054338566802559411">
- <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="7905788502491742328">"Буцаах"</string>
- <string name="copy_preparing" msgid="3896202461003039386">"Хуулбарлахад бэлтгэж байна..."</string>
- <string name="move_preparing" msgid="2772219441375531410">"Зөөвөрлөхөд бэлтгэж байна..."</string>
- <string name="delete_preparing" msgid="5655813182533491992">"Устгах гэж байна..."</string>
- <string name="delete_progress" msgid="5399405983046157222">"<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="7160447124922897689">
- <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="2710901971014783012">
- <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="7228393157786591199">
- <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="6268189413228855582">"Дэлгэрэнгүй мэдээллийг үзэхийн тулд дарна уу"</string>
- <string name="close" msgid="3043722427445528732">"Хаах"</string>
- <string name="copy_failure_alert_content" msgid="4563147454522476183">"Эдгээр файлыг хуулж чадсангүй: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="move_failure_alert_content" msgid="2635075788682922861">"Эдгээр файлыг зөөж чадсангүй: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="delete_failure_alert_content" msgid="892393767207938353">"Эдгээр файл устсангүй: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="copy_converted_warning_content" msgid="5753861488218674361">"Эдгээр файлыг өөр хэлбэршилтэд хөрвүүлсэн байна: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <plurals name="clipboard_files_clipped" formatted="false" msgid="855459017537058539">
- <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="clipboard_files_cannot_paste" msgid="2878324825602325706">"Энэ байршилд сонгосон файлыг байршуулах боломжгүй байна."</string>
- <string name="menu_rename" msgid="7678802479104285353">"Нэр өөрчлөх"</string>
- <string name="rename_error" msgid="4203041674883412606">"Баримт бичгийн нэрийн өөрчилж чадсангүй"</string>
- <string name="menu_eject_root" msgid="2768224615494227325">"Салгах"</string>
- <string name="notification_copy_files_converted_title" msgid="3153573223054275181">"Зарим файлыг хөрвүүлсэн"</string>
- <string name="open_external_dialog_request" msgid="5789329484285817629">"<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="6635562535713428688">"<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="8899108702926347720">"<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="4295278542972859268">"Дахин бүү асуу"</string>
- <string name="allow" msgid="7225948811296386551">"Зөвшөөрөх"</string>
- <string name="deny" msgid="2081879885755434506">"Татгалзах"</string>
- <plurals name="elements_selected" formatted="false" msgid="1376955402452875047">
- <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="3727204615215602228">
- <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="5312817725577537488">"\"<xliff:g id="NAME">%1$s</xliff:g>\"-г устгах уу?"</string>
- <string name="delete_foldername_confirmation_message" msgid="5885501832257285329">"\"<xliff:g id="NAME">%1$s</xliff:g>\" фолдер болон үүний агуулгыг устгах уу?"</string>
- <plurals name="delete_files_confirmation_message" formatted="false" msgid="8417505791395471802">
- <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="9185648028213507769">
- <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="5376214433530243459">
- <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>
-</resources>
diff --git a/packages/DocumentsUI/res/values-mr-rIN/strings.xml b/packages/DocumentsUI/res/values-mr-rIN/strings.xml
deleted file mode 100644
index a501a72..0000000
--- a/packages/DocumentsUI/res/values-mr-rIN/strings.xml
+++ /dev/null
@@ -1,144 +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="app_label" msgid="1551050262492398204">"फायली"</string>
- <string name="downloads_label" msgid="959113951084633612">"डाउनलोड"</string>
- <string name="title_open" msgid="4353228937663917801">"वरून उघडा"</string>
- <string name="title_save" msgid="2433679664882857999">"येथे जतन करा"</string>
- <string name="menu_create_dir" msgid="2547620241173881754">"नवीन फोल्डर"</string>
- <string name="menu_grid" msgid="6878021334497835259">"ग्रिड दृश्य"</string>
- <string name="menu_list" msgid="7279285939892417279">"सूची"</string>
- <string name="menu_sort" msgid="7677740407158414452">"नुसार क्रमवारी लावा"</string>
- <string name="menu_search" msgid="3816712084502856974">"शोध"</string>
- <string name="menu_settings" msgid="8239065133341597825">"संचयन सेटिंग्ज"</string>
- <string name="menu_open" msgid="432922957274920903">"उघडा"</string>
- <string name="menu_save" msgid="2394743337684426338">"जतन करा"</string>
- <string name="menu_share" msgid="3075149983979628146">"सामायिक करा"</string>
- <string name="menu_delete" msgid="8138799623850614177">"हटवा"</string>
- <string name="menu_select_all" msgid="8323579667348729928">"सर्व निवडा"</string>
- <string name="menu_copy" msgid="3612326052677229148">"यावर कॉपी करा…"</string>
- <string name="menu_move" msgid="1828090633118079817">"यावर हलवा…"</string>
- <string name="menu_new_window" msgid="1226032889278727538">"नवीन विंडो"</string>
- <string name="menu_cut_to_clipboard" msgid="2467149185452488383">"कट करा"</string>
- <string name="menu_copy_to_clipboard" msgid="489311381979634291">"कॉपी करा"</string>
- <string name="menu_paste_from_clipboard" msgid="2071583031180257091">"पेस्ट करा"</string>
- <string name="menu_advanced_show" msgid="4693652895715631401">"अंतर्गत संचयन दर्शवा"</string>
- <string name="menu_advanced_hide" msgid="4218809952721972589">"अंतर्गत संचयन लपवा"</string>
- <string name="menu_file_size_show" msgid="3240323619260823076">"फाईल आकार दर्शवा"</string>
- <string name="menu_file_size_hide" msgid="8881975928502581042">"फाईल आकार लपवा"</string>
- <string name="button_select" msgid="527196987259139214">"निवडा"</string>
- <string name="button_copy" msgid="8706475544635021302">"कॉपी करा"</string>
- <string name="button_move" msgid="2202666023104202232">"हलवा"</string>
- <string name="button_dismiss" msgid="3714065566893946085">"डिसमिस करा"</string>
- <string name="button_retry" msgid="4392027584153752797">"पुन्हा प्रयत्न करा"</string>
- <string name="sort_name" msgid="9183560467917256779">"नावानुसार"</string>
- <string name="sort_date" msgid="586080032956151448">"सुधारित केलेल्या तारखेनुसार"</string>
- <string name="sort_size" msgid="3350681319735474741">"आकारानुसार"</string>
- <string name="drawer_open" msgid="4545466532430226949">"रूट दर्शवा"</string>
- <string name="drawer_close" msgid="7602734368552123318">"रूट लपवा"</string>
- <string name="save_error" msgid="6167009778003223664">"दस्तऐवज जतन करणे अयशस्वी झाले"</string>
- <string name="create_error" msgid="3735649141335444215">"फोल्डर तयार करण्यात अयशस्वी"</string>
- <string name="query_error" msgid="5999895349602476581">"याक्षणी सामग्री लोड करू शकत नाही"</string>
- <string name="root_recent" msgid="4470053704320518133">"अलीकडील"</string>
- <string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> विनामूल्य"</string>
- <string name="root_type_service" msgid="2178854894416775409">"संचयन सेवा"</string>
- <string name="root_type_shortcut" msgid="3318760609471618093">"शॉर्टकट"</string>
- <string name="root_type_device" msgid="7121342474653483538">"डिव्हाइसेस"</string>
- <string name="root_type_apps" msgid="8838065367985945189">"अधिक अॅप्स"</string>
- <string name="empty" msgid="7858882803708117596">"कोणतेही आयटम नाहीत"</string>
- <string name="no_results" msgid="6622510343880730446">"%1$s मध्ये कोणत्याही जुळण्या नाहीत"</string>
- <string name="toast_no_application" msgid="4632640357724698144">"फाईल उघडू शकत नाही"</string>
- <string name="toast_failed_delete" msgid="2180678019407244069">"काही दस्तऐवज हटविण्यात अक्षम"</string>
- <string name="share_via" msgid="8966594246261344259">"द्वारे सामायिक करा"</string>
- <string name="copy_notification_title" msgid="6374299806748219777">"फायली कॉपी करीत आहे"</string>
- <string name="move_notification_title" msgid="6193835179777284805">"फायली हलविणे"</string>
- <string name="delete_notification_title" msgid="3329403967712437496">"फायली हटवित आहे"</string>
- <string name="copy_remaining" msgid="6283790937387975095">"<xliff:g id="DURATION">%s</xliff:g> शिल्लक"</string>
- <plurals name="copy_begin" formatted="false" msgid="9071199452634086365">
- <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> फाईल कॉपी करीत आहे.</item>
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> फायली कॉपी करीत आहे.</item>
- </plurals>
- <plurals name="move_begin" formatted="false" msgid="8430330882138871643">
- <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="deleting" formatted="false" msgid="5054338566802559411">
- <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="7905788502491742328">"पूर्ववत करा"</string>
- <string name="copy_preparing" msgid="3896202461003039386">"कॉपी करण्यासाठी तयार करीत आहे…"</string>
- <string name="move_preparing" msgid="2772219441375531410">"हलविण्यास तयार होत आहे…"</string>
- <string name="delete_preparing" msgid="5655813182533491992">"हटविण्यासाठी तयार करीत आहे..."</string>
- <string name="delete_progress" msgid="5399405983046157222">"<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="7160447124922897689">
- <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="move_error_notification_title" formatted="false" msgid="2710901971014783012">
- <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_error_notification_title" formatted="false" msgid="7228393157786591199">
- <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="6268189413228855582">"तपशील पाहण्यासाठी टॅप करा"</string>
- <string name="close" msgid="3043722427445528732">"बंद करा"</string>
- <string name="copy_failure_alert_content" msgid="4563147454522476183">"या फायलींची कॉपी झाली नाही: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="move_failure_alert_content" msgid="2635075788682922861">"या फायली हलविल्या नाहीत: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="delete_failure_alert_content" msgid="892393767207938353">"या फायली हटविल्या नाहीत: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="copy_converted_warning_content" msgid="5753861488218674361">"या फायली दुसऱ्या स्वरूपनात रूपांतरित केल्या होत्या: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <plurals name="clipboard_files_clipped" formatted="false" msgid="855459017537058539">
- <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="clipboard_files_cannot_paste" msgid="2878324825602325706">"या स्थानामध्ये निवडलेल्या फायली पेस्ट करू शकत नाही."</string>
- <string name="menu_rename" msgid="7678802479104285353">"पुनर्नामित करा"</string>
- <string name="rename_error" msgid="4203041674883412606">"दस्तऐवज पुनर्नामित करण्यात अयशस्वी झाले"</string>
- <string name="menu_eject_root" msgid="2768224615494227325">"बाहेर काढा"</string>
- <string name="notification_copy_files_converted_title" msgid="3153573223054275181">"काही फायली रूपांतरित केल्या होत्या"</string>
- <string name="open_external_dialog_request" msgid="5789329484285817629">"<xliff:g id="STORAGE"><i>^3</i></xliff:g> वर <xliff:g id="APPNAME"><b>^1</b></xliff:g> ला <xliff:g id="DIRECTORY"><i>^2</i></xliff:g> निर्देशिकेवर प्रवेशाची मंजूरी द्यायची?"</string>
- <string name="open_external_dialog_request_primary_volume" msgid="6635562535713428688">"<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="8899108702926347720">"<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="4295278542972859268">"पुन्हा विचारू नका"</string>
- <string name="allow" msgid="7225948811296386551">"अनुमती द्या"</string>
- <string name="deny" msgid="2081879885755434506">"नकार द्या"</string>
- <plurals name="elements_selected" formatted="false" msgid="1376955402452875047">
- <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="3727204615215602228">
- <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="5312817725577537488">"\"<xliff:g id="NAME">%1$s</xliff:g>\" हटवायची?"</string>
- <string name="delete_foldername_confirmation_message" msgid="5885501832257285329">"\"<xliff:g id="NAME">%1$s</xliff:g>\" फोल्डर आणि त्यामधील सामग्री हटवायची?"</string>
- <plurals name="delete_files_confirmation_message" formatted="false" msgid="8417505791395471802">
- <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="9185648028213507769">
- <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="5376214433530243459">
- <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>
-</resources>
diff --git a/packages/DocumentsUI/res/values-ms-rMY/strings.xml b/packages/DocumentsUI/res/values-ms-rMY/strings.xml
deleted file mode 100644
index 139d021..0000000
--- a/packages/DocumentsUI/res/values-ms-rMY/strings.xml
+++ /dev/null
@@ -1,144 +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="app_label" msgid="1551050262492398204">"Fail"</string>
- <string name="downloads_label" msgid="959113951084633612">"Muat turun"</string>
- <string name="title_open" msgid="4353228937663917801">"Buka dari"</string>
- <string name="title_save" msgid="2433679664882857999">"Simpan ke"</string>
- <string name="menu_create_dir" msgid="2547620241173881754">"Folder baharu"</string>
- <string name="menu_grid" msgid="6878021334497835259">"Paparan grid"</string>
- <string name="menu_list" msgid="7279285939892417279">"Paparan senarai"</string>
- <string name="menu_sort" msgid="7677740407158414452">"Isih mengikut"</string>
- <string name="menu_search" msgid="3816712084502856974">"Cari"</string>
- <string name="menu_settings" msgid="8239065133341597825">"Tetapan storan"</string>
- <string name="menu_open" msgid="432922957274920903">"Buka"</string>
- <string name="menu_save" msgid="2394743337684426338">"Simpan"</string>
- <string name="menu_share" msgid="3075149983979628146">"Kongsi"</string>
- <string name="menu_delete" msgid="8138799623850614177">"Padam"</string>
- <string name="menu_select_all" msgid="8323579667348729928">"Pilih semua"</string>
- <string name="menu_copy" msgid="3612326052677229148">"Salin ke..."</string>
- <string name="menu_move" msgid="1828090633118079817">"Alihkan ke…"</string>
- <string name="menu_new_window" msgid="1226032889278727538">"Tetingkap baharu"</string>
- <string name="menu_cut_to_clipboard" msgid="2467149185452488383">"Potong"</string>
- <string name="menu_copy_to_clipboard" msgid="489311381979634291">"Salin"</string>
- <string name="menu_paste_from_clipboard" msgid="2071583031180257091">"Tampal"</string>
- <string name="menu_advanced_show" msgid="4693652895715631401">"Papar storan dalaman"</string>
- <string name="menu_advanced_hide" msgid="4218809952721972589">"Sembunyikan storan dlmn"</string>
- <string name="menu_file_size_show" msgid="3240323619260823076">"Papar saiz fail"</string>
- <string name="menu_file_size_hide" msgid="8881975928502581042">"Sembunyikan saiz fail"</string>
- <string name="button_select" msgid="527196987259139214">"Pilih"</string>
- <string name="button_copy" msgid="8706475544635021302">"Salin"</string>
- <string name="button_move" msgid="2202666023104202232">"Alihkan"</string>
- <string name="button_dismiss" msgid="3714065566893946085">"Tolak"</string>
- <string name="button_retry" msgid="4392027584153752797">"Cuba Lagi"</string>
- <string name="sort_name" msgid="9183560467917256779">"Mengikut nama"</string>
- <string name="sort_date" msgid="586080032956151448">"Mengikut tarikh diubah"</string>
- <string name="sort_size" msgid="3350681319735474741">"Mengikut saiz"</string>
- <string name="drawer_open" msgid="4545466532430226949">"Tunjukkan akar"</string>
- <string name="drawer_close" msgid="7602734368552123318">"Sembunyikan akar"</string>
- <string name="save_error" msgid="6167009778003223664">"Gagal menyimpan dokumen"</string>
- <string name="create_error" msgid="3735649141335444215">"Gagal membuat folder"</string>
- <string name="query_error" msgid="5999895349602476581">"Tidak dapat memuatkan kandungan pada masa ini"</string>
- <string name="root_recent" msgid="4470053704320518133">"Terbaharu"</string>
- <string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> kosong"</string>
- <string name="root_type_service" msgid="2178854894416775409">"Perkhidmatan storan"</string>
- <string name="root_type_shortcut" msgid="3318760609471618093">"Pintasan"</string>
- <string name="root_type_device" msgid="7121342474653483538">"Peranti"</string>
- <string name="root_type_apps" msgid="8838065367985945189">"Lebih banyak apl"</string>
- <string name="empty" msgid="7858882803708117596">"Tiada item"</string>
- <string name="no_results" msgid="6622510343880730446">"Tiada padanan dalam %1$s"</string>
- <string name="toast_no_application" msgid="4632640357724698144">"Tidak dapat membuka fail"</string>
- <string name="toast_failed_delete" msgid="2180678019407244069">"Tidak dapat memadam beberapa dokumen"</string>
- <string name="share_via" msgid="8966594246261344259">"Kongsi melalui"</string>
- <string name="copy_notification_title" msgid="6374299806748219777">"Menyalin fail"</string>
- <string name="move_notification_title" msgid="6193835179777284805">"Mengalihkan fail"</string>
- <string name="delete_notification_title" msgid="3329403967712437496">"Memadamkan fail"</string>
- <string name="copy_remaining" msgid="6283790937387975095">"<xliff:g id="DURATION">%s</xliff:g> lagi"</string>
- <plurals name="copy_begin" formatted="false" msgid="9071199452634086365">
- <item quantity="other">Menyalin <xliff:g id="COUNT_1">%1$d</xliff:g> fail.</item>
- <item quantity="one">Menyalin <xliff:g id="COUNT_0">%1$d</xliff:g> fail.</item>
- </plurals>
- <plurals name="move_begin" formatted="false" msgid="8430330882138871643">
- <item quantity="other">Mengalihkan <xliff:g id="COUNT_1">%1$d</xliff:g> fail.</item>
- <item quantity="one">Mengalihkan <xliff:g id="COUNT_0">%1$d</xliff:g> fail.</item>
- </plurals>
- <plurals name="deleting" formatted="false" msgid="5054338566802559411">
- <item quantity="other">Memadam <xliff:g id="COUNT_1">%1$d</xliff:g> fail.</item>
- <item quantity="one">Memadam <xliff:g id="COUNT_0">%1$d</xliff:g> fail.</item>
- </plurals>
- <string name="undo" msgid="7905788502491742328">"Buat asal"</string>
- <string name="copy_preparing" msgid="3896202461003039386">"Bersedia untuk salin..."</string>
- <string name="move_preparing" msgid="2772219441375531410">"Bersedia untuk mengalih…"</string>
- <string name="delete_preparing" msgid="5655813182533491992">"Bersedia untuk memadam…"</string>
- <string name="delete_progress" msgid="5399405983046157222">"<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="7160447124922897689">
- <item quantity="other">Tidak dapat menyalin <xliff:g id="COUNT_1">%1$d</xliff:g> fail</item>
- <item quantity="one">Tidak dapat menyalin <xliff:g id="COUNT_0">%1$d</xliff:g> fail</item>
- </plurals>
- <plurals name="move_error_notification_title" formatted="false" msgid="2710901971014783012">
- <item quantity="other">Tidak dapat mengalihkan <xliff:g id="COUNT_1">%1$d</xliff:g> fail</item>
- <item quantity="one">Tidak dapat mengalihkan <xliff:g id="COUNT_0">%1$d</xliff:g> fail</item>
- </plurals>
- <plurals name="delete_error_notification_title" formatted="false" msgid="7228393157786591199">
- <item quantity="other">Tidak dapat memadamkan <xliff:g id="COUNT_1">%1$d</xliff:g> fail</item>
- <item quantity="one">Tidak dapat memadamkan <xliff:g id="COUNT_0">%1$d</xliff:g> fail</item>
- </plurals>
- <string name="notification_touch_for_details" msgid="6268189413228855582">"Ketik untuk melihat butiran"</string>
- <string name="close" msgid="3043722427445528732">"Tutup"</string>
- <string name="copy_failure_alert_content" msgid="4563147454522476183">"Fail ini tidak disalin: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="move_failure_alert_content" msgid="2635075788682922861">"Fail ini tidak dialihkan: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="delete_failure_alert_content" msgid="892393767207938353">"Fail ini tidak dipadamkan: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="copy_converted_warning_content" msgid="5753861488218674361">"Fail ini telah ditukarkan kepada format lain: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <plurals name="clipboard_files_clipped" formatted="false" msgid="855459017537058539">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> fail disalin ke papan keratan.</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> fail disalin ke papan keratan.</item>
- </plurals>
- <string name="clipboard_files_cannot_paste" msgid="2878324825602325706">"Tidak boleh menampalkan fail yang dipilih dalam lokasi ini."</string>
- <string name="menu_rename" msgid="7678802479104285353">"Namakan semula"</string>
- <string name="rename_error" msgid="4203041674883412606">"Gagal menamakan semula dokumen"</string>
- <string name="menu_eject_root" msgid="2768224615494227325">"Keluarkan"</string>
- <string name="notification_copy_files_converted_title" msgid="3153573223054275181">"Sesetengah fail telah ditukarkan"</string>
- <string name="open_external_dialog_request" msgid="5789329484285817629">"Beri <xliff:g id="APPNAME"><b>^1</b></xliff:g> akses kepada direktori <xliff:g id="DIRECTORY"><i>^2</i></xliff:g> di <xliff:g id="STORAGE"><i>^3</i></xliff:g>?"</string>
- <string name="open_external_dialog_request_primary_volume" msgid="6635562535713428688">"Beri <xliff:g id="APPNAME"><b>^1</b></xliff:g> akses kepada direktori <xliff:g id="DIRECTORY"><i>^2</i></xliff:g>?"</string>
- <string name="open_external_dialog_root_request" msgid="8899108702926347720">"Beri <xliff:g id="APPNAME"><b>^1</b></xliff:g> akses kepada data anda, termasuk foto dan video pada <xliff:g id="STORAGE"><i>^2</i></xliff:g>?"</string>
- <string name="never_ask_again" msgid="4295278542972859268">"Jangan tanya lagi"</string>
- <string name="allow" msgid="7225948811296386551">"Benarkan"</string>
- <string name="deny" msgid="2081879885755434506">"Nafi"</string>
- <plurals name="elements_selected" formatted="false" msgid="1376955402452875047">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> dipilih</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> dipilih</item>
- </plurals>
- <plurals name="elements_dragged" formatted="false" msgid="3727204615215602228">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> item</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> item</item>
- </plurals>
- <string name="delete_filename_confirmation_message" msgid="5312817725577537488">"Padamkan \"<xliff:g id="NAME">%1$s</xliff:g>\"?"</string>
- <string name="delete_foldername_confirmation_message" msgid="5885501832257285329">"Padamkan folder \"<xliff:g id="NAME">%1$s</xliff:g>\" dan kandungannya?"</string>
- <plurals name="delete_files_confirmation_message" formatted="false" msgid="8417505791395471802">
- <item quantity="other">Padamkan <xliff:g id="COUNT_1">%1$d</xliff:g> fail?</item>
- <item quantity="one">Padamkan <xliff:g id="COUNT_0">%1$d</xliff:g> fail?</item>
- </plurals>
- <plurals name="delete_folders_confirmation_message" formatted="false" msgid="9185648028213507769">
- <item quantity="other">Padamkan <xliff:g id="COUNT_1">%1$d</xliff:g> folder dan kandungannya?</item>
- <item quantity="one">Padamkan <xliff:g id="COUNT_0">%1$d</xliff:g> folder dan kandungannya?</item>
- </plurals>
- <plurals name="delete_items_confirmation_message" formatted="false" msgid="5376214433530243459">
- <item quantity="other">Padamkan <xliff:g id="COUNT_1">%1$d</xliff:g> item?</item>
- <item quantity="one">Padamkan <xliff:g id="COUNT_0">%1$d</xliff:g> item?</item>
- </plurals>
-</resources>
diff --git a/packages/DocumentsUI/res/values-my-rMM/strings.xml b/packages/DocumentsUI/res/values-my-rMM/strings.xml
deleted file mode 100644
index 366c484..0000000
--- a/packages/DocumentsUI/res/values-my-rMM/strings.xml
+++ /dev/null
@@ -1,144 +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="app_label" msgid="1551050262492398204">"ဖိုင်များ"</string>
- <string name="downloads_label" msgid="959113951084633612">"ဒေါင်းလုဒ်များ"</string>
- <string name="title_open" msgid="4353228937663917801">"မှ ဖွင့်ပါ"</string>
- <string name="title_save" msgid="2433679664882857999">"သို့ သိမ်းပါ"</string>
- <string name="menu_create_dir" msgid="2547620241173881754">"ဖိုလ်ဒါ အသစ်"</string>
- <string name="menu_grid" msgid="6878021334497835259">"ဖယားကွက်မြင်ကွင်း"</string>
- <string name="menu_list" msgid="7279285939892417279">"အစဉ်လိုက်မြင်ကွင်း"</string>
- <string name="menu_sort" msgid="7677740407158414452">"အစဉ်အလိုက် စီခြင်း"</string>
- <string name="menu_search" msgid="3816712084502856974">"ရှာဖွေရန်"</string>
- <string name="menu_settings" msgid="8239065133341597825">"သိုလှောင်မှု ဆက်တင်များ"</string>
- <string name="menu_open" msgid="432922957274920903">"ဖွင့်ရန်"</string>
- <string name="menu_save" msgid="2394743337684426338">"သိမ်းရန်"</string>
- <string name="menu_share" msgid="3075149983979628146">"မျှဝေခြင်း"</string>
- <string name="menu_delete" msgid="8138799623850614177">"ဖျက်ရန်"</string>
- <string name="menu_select_all" msgid="8323579667348729928">"အားလုံးကို ရွေးရန်"</string>
- <string name="menu_copy" msgid="3612326052677229148">"…သို့ကူးယူရန်"</string>
- <string name="menu_move" msgid="1828090633118079817">"...သို့ ရွှေ့ရန်"</string>
- <string name="menu_new_window" msgid="1226032889278727538">"ဝင်းဒိုးသစ်"</string>
- <string name="menu_cut_to_clipboard" msgid="2467149185452488383">"ဖြတ်ယူရန်"</string>
- <string name="menu_copy_to_clipboard" msgid="489311381979634291">"ကူးယူရန်"</string>
- <string name="menu_paste_from_clipboard" msgid="2071583031180257091">"ကပ်ရန်"</string>
- <string name="menu_advanced_show" msgid="4693652895715631401">"စက်ရှိစတိုရုံ ပြပါ"</string>
- <string name="menu_advanced_hide" msgid="4218809952721972589">"စက်ရှိစတိုရုံ ဖျောက်ထားပါ"</string>
- <string name="menu_file_size_show" msgid="3240323619260823076">"ဖိုင်အရွယ်အစား ပြပါ"</string>
- <string name="menu_file_size_hide" msgid="8881975928502581042">"ဖိုင်အရွယ်အစား ဝှက်ပါ"</string>
- <string name="button_select" msgid="527196987259139214">"ရွေးရန်"</string>
- <string name="button_copy" msgid="8706475544635021302">"ကူးယူရန်"</string>
- <string name="button_move" msgid="2202666023104202232">"ရွေ့မည်"</string>
- <string name="button_dismiss" msgid="3714065566893946085">"ပယ်ရန်"</string>
- <string name="button_retry" msgid="4392027584153752797">"ထပ် စမ်းကြည့်ပါ"</string>
- <string name="sort_name" msgid="9183560467917256779">"အမည်ဖြင့်"</string>
- <string name="sort_date" msgid="586080032956151448">"ပြင်ဆင်မှု ရက်စွဲဖြင့်"</string>
- <string name="sort_size" msgid="3350681319735474741">"အရွယ်အစားဖြင့်"</string>
- <string name="drawer_open" msgid="4545466532430226949">"ဖိုဒါကို ဖွင့်လိုက်ပါ"</string>
- <string name="drawer_close" msgid="7602734368552123318">"ဖိုဒါကို ပိတ်လိုက်ပါ"</string>
- <string name="save_error" msgid="6167009778003223664">"စာရွက်စာတန်း သိမ်းဆည်းမှု မအောင်မြင်ပါ"</string>
- <string name="create_error" msgid="3735649141335444215">"အကန့်အသစ် ဖန်တီးခြင်း မအောင်မြင်ပါ"</string>
- <string name="query_error" msgid="5999895349602476581">"အကြောင်းအရာများကို လောလောဆယ်တွင် တင်၍မရသေးပါ"</string>
- <string name="root_recent" msgid="4470053704320518133">"လတ်တလော"</string>
- <string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> အသုံးချနိုင်ပါသည်"</string>
- <string name="root_type_service" msgid="2178854894416775409">"သိုလှောင်ရန်ဆားဗစ်များ"</string>
- <string name="root_type_shortcut" msgid="3318760609471618093">"အတိုကောက်များ"</string>
- <string name="root_type_device" msgid="7121342474653483538">"စက်ပစ္စည်းများ"</string>
- <string name="root_type_apps" msgid="8838065367985945189">"နောက်ထပ်အပလီကေးရှင်းများ"</string>
- <string name="empty" msgid="7858882803708117596">"ဘာမှ မရှိပါ"</string>
- <string name="no_results" msgid="6622510343880730446">"%1$s တွင်ကိုက်ညီမှုမရှိပါ"</string>
- <string name="toast_no_application" msgid="4632640357724698144">"ဖိုင်ကိုဖွင့်၍မရပါ"</string>
- <string name="toast_failed_delete" msgid="2180678019407244069">"တချို့ စာရွက်စာတန်းများ မဖျက်စီးနိုင်ပါ"</string>
- <string name="share_via" msgid="8966594246261344259">"မှ ဝေမျှပါ"</string>
- <string name="copy_notification_title" msgid="6374299806748219777">"ဖိုင်များကူယူနေသည်"</string>
- <string name="move_notification_title" msgid="6193835179777284805">"ဖိုင်များ ရွှေ့နေသည်"</string>
- <string name="delete_notification_title" msgid="3329403967712437496">"ဖိုင်များကို ဖျက်နေသည်"</string>
- <string name="copy_remaining" msgid="6283790937387975095">"<xliff:g id="DURATION">%s</xliff:g> ကျန်ရှိသည်"</string>
- <plurals name="copy_begin" formatted="false" msgid="9071199452634086365">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> ဖိုင်များကို ကူးယူနေသည်။</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> ဖိုင် ကူးယူနေသည်။</item>
- </plurals>
- <plurals name="move_begin" formatted="false" msgid="8430330882138871643">
- <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="5054338566802559411">
- <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="7905788502491742328">"ပြန်ဖျက်ရန်"</string>
- <string name="copy_preparing" msgid="3896202461003039386">"မိတ္တူကူးရန်ပြင်ဆင်နေ..."</string>
- <string name="move_preparing" msgid="2772219441375531410">"ရွှေ့ရန် ပြင်ဆင်နေသည်…"</string>
- <string name="delete_preparing" msgid="5655813182533491992">"ဖျက်ရန်အတွက် ပြင်ဆင်နေသည်..."</string>
- <string name="delete_progress" msgid="5399405983046157222">"<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="7160447124922897689">
- <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="2710901971014783012">
- <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="7228393157786591199">
- <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="6268189413228855582">"အသေးစိတ်ကြည့်ရန် တို့ပါ"</string>
- <string name="close" msgid="3043722427445528732">"ပိတ်ပါ"</string>
- <string name="copy_failure_alert_content" msgid="4563147454522476183">"ဤဖိုင်များကို မကူးယူခဲ့ပါ − <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="move_failure_alert_content" msgid="2635075788682922861">"ဤဖိုင်များကို မရွှေ့ခဲ့ပါ − <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="delete_failure_alert_content" msgid="892393767207938353">"ဤဖိုင်များကို ဖျက်၍မရခဲ့ပါ − <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="copy_converted_warning_content" msgid="5753861488218674361">"ဤဖိုင်များကို အခြားပုံစံစနစ်တစ်ခုသို့ ပြောင်းလဲခဲ့သည် − <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <plurals name="clipboard_files_clipped" formatted="false" msgid="855459017537058539">
- <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="clipboard_files_cannot_paste" msgid="2878324825602325706">"ဤနေရာတွင် ရွေးချယ်ထားသည့် ဖိုင်များကို ကူးထည့်၍မရပါ။"</string>
- <string name="menu_rename" msgid="7678802479104285353">"အမည်ပြောင်းရန်"</string>
- <string name="rename_error" msgid="4203041674883412606">"စာရွက်စာတမ်းကို အမည်ပြောင်းခြင်း မအောင်မြင်ပါ"</string>
- <string name="menu_eject_root" msgid="2768224615494227325">"ထုတ်မည်"</string>
- <string name="notification_copy_files_converted_title" msgid="3153573223054275181">"အချို့ဖိုင်များကို ပြောင်းလဲထားသည်"</string>
- <string name="open_external_dialog_request" msgid="5789329484285817629">"<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="6635562535713428688">"<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="8899108702926347720">"<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="4295278542972859268">"နောက်ထပ်မမေးပါနှင့်"</string>
- <string name="allow" msgid="7225948811296386551">"ခွင့်ပြုသည်"</string>
- <string name="deny" msgid="2081879885755434506">"ငြင်းပယ်သည်"</string>
- <plurals name="elements_selected" formatted="false" msgid="1376955402452875047">
- <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="3727204615215602228">
- <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="5312817725577537488">"\"<xliff:g id="NAME">%1$s</xliff:g>\" ကိုဖျက်မလား။"</string>
- <string name="delete_foldername_confirmation_message" msgid="5885501832257285329">"\"<xliff:g id="NAME">%1$s</xliff:g>\" ဖိုင်တွဲနှင့် ၎င်းတွင်ပါဝင်သည့် အကြောင်းအရာများကို ဖျက်မလား။"</string>
- <plurals name="delete_files_confirmation_message" formatted="false" msgid="8417505791395471802">
- <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="9185648028213507769">
- <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="5376214433530243459">
- <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>
-</resources>
diff --git a/packages/DocumentsUI/res/values-nb/strings.xml b/packages/DocumentsUI/res/values-nb/strings.xml
deleted file mode 100644
index e7b057b..0000000
--- a/packages/DocumentsUI/res/values-nb/strings.xml
+++ /dev/null
@@ -1,144 +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="app_label" msgid="1551050262492398204">"Filer"</string>
- <string name="downloads_label" msgid="959113951084633612">"Nedlastinger"</string>
- <string name="title_open" msgid="4353228937663917801">"Åpne fra"</string>
- <string name="title_save" msgid="2433679664882857999">"Lagre i"</string>
- <string name="menu_create_dir" msgid="2547620241173881754">"Ny mappe"</string>
- <string name="menu_grid" msgid="6878021334497835259">"Rutenettvisning"</string>
- <string name="menu_list" msgid="7279285939892417279">"Listevisning"</string>
- <string name="menu_sort" msgid="7677740407158414452">"Sortér etter"</string>
- <string name="menu_search" msgid="3816712084502856974">"Søk"</string>
- <string name="menu_settings" msgid="8239065133341597825">"Lagringsinnstillinger"</string>
- <string name="menu_open" msgid="432922957274920903">"Åpne"</string>
- <string name="menu_save" msgid="2394743337684426338">"Lagre"</string>
- <string name="menu_share" msgid="3075149983979628146">"Del"</string>
- <string name="menu_delete" msgid="8138799623850614177">"Slett"</string>
- <string name="menu_select_all" msgid="8323579667348729928">"Markér alt"</string>
- <string name="menu_copy" msgid="3612326052677229148">"Kopiér til …"</string>
- <string name="menu_move" msgid="1828090633118079817">"Flytt til"</string>
- <string name="menu_new_window" msgid="1226032889278727538">"Nytt vindu"</string>
- <string name="menu_cut_to_clipboard" msgid="2467149185452488383">"Klipp ut"</string>
- <string name="menu_copy_to_clipboard" msgid="489311381979634291">"Kopiér"</string>
- <string name="menu_paste_from_clipboard" msgid="2071583031180257091">"Lim inn"</string>
- <string name="menu_advanced_show" msgid="4693652895715631401">"Vis den interne lagringen"</string>
- <string name="menu_advanced_hide" msgid="4218809952721972589">"Skjul den interne lagringen"</string>
- <string name="menu_file_size_show" msgid="3240323619260823076">"Vis filstørrelsen"</string>
- <string name="menu_file_size_hide" msgid="8881975928502581042">"Skjul filstørrelsen"</string>
- <string name="button_select" msgid="527196987259139214">"Velg"</string>
- <string name="button_copy" msgid="8706475544635021302">"Kopiér"</string>
- <string name="button_move" msgid="2202666023104202232">"Flytt"</string>
- <string name="button_dismiss" msgid="3714065566893946085">"Avvis"</string>
- <string name="button_retry" msgid="4392027584153752797">"Prøv på nytt"</string>
- <string name="sort_name" msgid="9183560467917256779">"Etter navn"</string>
- <string name="sort_date" msgid="586080032956151448">"Etter endringsdato"</string>
- <string name="sort_size" msgid="3350681319735474741">"Etter størrelse"</string>
- <string name="drawer_open" msgid="4545466532430226949">"Vis røtter"</string>
- <string name="drawer_close" msgid="7602734368552123318">"Skjul røtter"</string>
- <string name="save_error" msgid="6167009778003223664">"Kunne ikke lagre dokumentet"</string>
- <string name="create_error" msgid="3735649141335444215">"Kunne ikke opprette mappen"</string>
- <string name="query_error" msgid="5999895349602476581">"Kan ikke laste inn innholdet for øyeblikket"</string>
- <string name="root_recent" msgid="4470053704320518133">"Siste"</string>
- <string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> ledig"</string>
- <string name="root_type_service" msgid="2178854894416775409">"Lagringstjenester"</string>
- <string name="root_type_shortcut" msgid="3318760609471618093">"Snarveier"</string>
- <string name="root_type_device" msgid="7121342474653483538">"Enheter"</string>
- <string name="root_type_apps" msgid="8838065367985945189">"Flere apper"</string>
- <string name="empty" msgid="7858882803708117596">"Ingen elementer"</string>
- <string name="no_results" msgid="6622510343880730446">"Ingen treff i %1$s"</string>
- <string name="toast_no_application" msgid="4632640357724698144">"Kan ikke åpne filen"</string>
- <string name="toast_failed_delete" msgid="2180678019407244069">"Enkelte dokumenter kunne ikke slettes"</string>
- <string name="share_via" msgid="8966594246261344259">"Del via"</string>
- <string name="copy_notification_title" msgid="6374299806748219777">"Kopierer filer"</string>
- <string name="move_notification_title" msgid="6193835179777284805">"Flytter filer"</string>
- <string name="delete_notification_title" msgid="3329403967712437496">"Sletter filene"</string>
- <string name="copy_remaining" msgid="6283790937387975095">"<xliff:g id="DURATION">%s</xliff:g> gjenstår"</string>
- <plurals name="copy_begin" formatted="false" msgid="9071199452634086365">
- <item quantity="other">Kopierer <xliff:g id="COUNT_1">%1$d</xliff:g> filer.</item>
- <item quantity="one">Kopierer <xliff:g id="COUNT_0">%1$d</xliff:g> fil.</item>
- </plurals>
- <plurals name="move_begin" formatted="false" msgid="8430330882138871643">
- <item quantity="other">Flytter <xliff:g id="COUNT_1">%1$d</xliff:g> filer.</item>
- <item quantity="one">Flytter <xliff:g id="COUNT_0">%1$d</xliff:g> fil.</item>
- </plurals>
- <plurals name="deleting" formatted="false" msgid="5054338566802559411">
- <item quantity="other">Sletter <xliff:g id="COUNT_1">%1$d</xliff:g> filer.</item>
- <item quantity="one">Sletter <xliff:g id="COUNT_0">%1$d</xliff:g> fil.</item>
- </plurals>
- <string name="undo" msgid="7905788502491742328">"Angre"</string>
- <string name="copy_preparing" msgid="3896202461003039386">"Forbereder kopiering …"</string>
- <string name="move_preparing" msgid="2772219441375531410">"Forbereder flytting …"</string>
- <string name="delete_preparing" msgid="5655813182533491992">"Gjøres klar for sletting …"</string>
- <string name="delete_progress" msgid="5399405983046157222">"<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="7160447124922897689">
- <item quantity="other">Kunne ikke kopiere <xliff:g id="COUNT_1">%1$d</xliff:g> filer</item>
- <item quantity="one">Kunne ikke kopiere <xliff:g id="COUNT_0">%1$d</xliff:g> fil</item>
- </plurals>
- <plurals name="move_error_notification_title" formatted="false" msgid="2710901971014783012">
- <item quantity="other">Kunne ikke flytte <xliff:g id="COUNT_1">%1$d</xliff:g> filer</item>
- <item quantity="one">Kunne ikke flytte <xliff:g id="COUNT_0">%1$d</xliff:g> fil</item>
- </plurals>
- <plurals name="delete_error_notification_title" formatted="false" msgid="7228393157786591199">
- <item quantity="other">Kunne ikke slette <xliff:g id="COUNT_1">%1$d</xliff:g> filer</item>
- <item quantity="one">Kunne ikke slette <xliff:g id="COUNT_0">%1$d</xliff:g> fil</item>
- </plurals>
- <string name="notification_touch_for_details" msgid="6268189413228855582">"Trykk for å se detaljer"</string>
- <string name="close" msgid="3043722427445528732">"Lukk"</string>
- <string name="copy_failure_alert_content" msgid="4563147454522476183">"Disse filene er ikke kopiert: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="move_failure_alert_content" msgid="2635075788682922861">"Disse filene er ikke flyttet: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="delete_failure_alert_content" msgid="892393767207938353">"Disse filene ble ikke slettet: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="copy_converted_warning_content" msgid="5753861488218674361">"Disse filene er konvertert til et annet format: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <plurals name="clipboard_files_clipped" formatted="false" msgid="855459017537058539">
- <item quantity="other">Kopierte <xliff:g id="COUNT_1">%1$d</xliff:g> filer til utklippstavlen.</item>
- <item quantity="one">Kopierte <xliff:g id="COUNT_0">%1$d</xliff:g> fil til utklippstavlen.</item>
- </plurals>
- <string name="clipboard_files_cannot_paste" msgid="2878324825602325706">"Kan ikke lime inn de valgte filene her."</string>
- <string name="menu_rename" msgid="7678802479104285353">"Gi nytt navn"</string>
- <string name="rename_error" msgid="4203041674883412606">"Kunne ikke gi dokumentet nytt navn"</string>
- <string name="menu_eject_root" msgid="2768224615494227325">"Løs ut"</string>
- <string name="notification_copy_files_converted_title" msgid="3153573223054275181">"Noen filer er konvertert"</string>
- <string name="open_external_dialog_request" msgid="5789329484285817629">"Vil du gi <xliff:g id="APPNAME"><b>^1</b></xliff:g> tilgang til <xliff:g id="DIRECTORY"><i>^2</i></xliff:g>-katalogen på <xliff:g id="STORAGE"><i>^3</i></xliff:g>?"</string>
- <string name="open_external_dialog_request_primary_volume" msgid="6635562535713428688">"Vil du gi <xliff:g id="APPNAME"><b>^1</b></xliff:g> tilgang til <xliff:g id="DIRECTORY"><i>^2</i></xliff:g>-katalogen?"</string>
- <string name="open_external_dialog_root_request" msgid="8899108702926347720">"Vil du gi <xliff:g id="APPNAME"><b>^1</b></xliff:g> tilgang til dataene dine – inkludert bilder og videoer – på <xliff:g id="STORAGE"><i>^2</i></xliff:g>?"</string>
- <string name="never_ask_again" msgid="4295278542972859268">"Ikke spør igjen"</string>
- <string name="allow" msgid="7225948811296386551">"Tillat"</string>
- <string name="deny" msgid="2081879885755434506">"Avslå"</string>
- <plurals name="elements_selected" formatted="false" msgid="1376955402452875047">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> er valgt</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> er valgt</item>
- </plurals>
- <plurals name="elements_dragged" formatted="false" msgid="3727204615215602228">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> varer</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> vare</item>
- </plurals>
- <string name="delete_filename_confirmation_message" msgid="5312817725577537488">"Vil du slette «<xliff:g id="NAME">%1$s</xliff:g>»?"</string>
- <string name="delete_foldername_confirmation_message" msgid="5885501832257285329">"Vil du slette «<xliff:g id="NAME">%1$s</xliff:g>»-mappen og innholdet i den?"</string>
- <plurals name="delete_files_confirmation_message" formatted="false" msgid="8417505791395471802">
- <item quantity="other">Vil du slette <xliff:g id="COUNT_1">%1$d</xliff:g> filer?</item>
- <item quantity="one">Vil du slette <xliff:g id="COUNT_0">%1$d</xliff:g> fil?</item>
- </plurals>
- <plurals name="delete_folders_confirmation_message" formatted="false" msgid="9185648028213507769">
- <item quantity="other">Vil du slette <xliff:g id="COUNT_1">%1$d</xliff:g> mapper og innholdet i dem?</item>
- <item quantity="one">Vil du slette <xliff:g id="COUNT_0">%1$d</xliff:g> mappe og innholdet i den?</item>
- </plurals>
- <plurals name="delete_items_confirmation_message" formatted="false" msgid="5376214433530243459">
- <item quantity="other">Vil du slette <xliff:g id="COUNT_1">%1$d</xliff:g> elementer?</item>
- <item quantity="one">Vil du slette <xliff:g id="COUNT_0">%1$d</xliff:g> element?</item>
- </plurals>
-</resources>
diff --git a/packages/DocumentsUI/res/values-ne-rNP/strings.xml b/packages/DocumentsUI/res/values-ne-rNP/strings.xml
deleted file mode 100644
index 62fbc1a..0000000
--- a/packages/DocumentsUI/res/values-ne-rNP/strings.xml
+++ /dev/null
@@ -1,144 +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="app_label" msgid="1551050262492398204">"फाइलहरू"</string>
- <string name="downloads_label" msgid="959113951084633612">"डाउनलोडहरू"</string>
- <string name="title_open" msgid="4353228937663917801">"यसबाट खोल्नुहोस्"</string>
- <string name="title_save" msgid="2433679664882857999">"यसमा सुरक्षित गर्नुहोस्"</string>
- <string name="menu_create_dir" msgid="2547620241173881754">"नयाँ फोल्डर"</string>
- <string name="menu_grid" msgid="6878021334497835259">"ग्रिड दृश्य"</string>
- <string name="menu_list" msgid="7279285939892417279">"सूची दृश्य"</string>
- <string name="menu_sort" msgid="7677740407158414452">"यसद्वारा क्रमवद्घ गर्नुहोस्"</string>
- <string name="menu_search" msgid="3816712084502856974">"खोज्नुहोस्"</string>
- <string name="menu_settings" msgid="8239065133341597825">"भण्डारण सेटिङहरू"</string>
- <string name="menu_open" msgid="432922957274920903">"खोल्नुहोस्"</string>
- <string name="menu_save" msgid="2394743337684426338">"सुरक्षित गर्नुहोस्"</string>
- <string name="menu_share" msgid="3075149983979628146">"साझेदारी गर्नुहोस्"</string>
- <string name="menu_delete" msgid="8138799623850614177">"मेटाउनुहोस्"</string>
- <string name="menu_select_all" msgid="8323579667348729928">"सबै चयन गर्नुहोस्"</string>
- <string name="menu_copy" msgid="3612326052677229148">"यसमा प्रतिलिपि गर्नुहोस् ..."</string>
- <string name="menu_move" msgid="1828090633118079817">"…मा सार्नुहोस्"</string>
- <string name="menu_new_window" msgid="1226032889278727538">"नयाँ विन्डो"</string>
- <string name="menu_cut_to_clipboard" msgid="2467149185452488383">"काट्नुहोस्"</string>
- <string name="menu_copy_to_clipboard" msgid="489311381979634291">"प्रतिलिपि बनाउनुहोस्"</string>
- <string name="menu_paste_from_clipboard" msgid="2071583031180257091">"टाँस्नुहोस्"</string>
- <string name="menu_advanced_show" msgid="4693652895715631401">"आन्तरिक भण्डारण देखाउनुहोस्"</string>
- <string name="menu_advanced_hide" msgid="4218809952721972589">"आन्तरिक भण्डारण लुकाउनुहोस्"</string>
- <string name="menu_file_size_show" msgid="3240323619260823076">"फाइल आकार देखाउनुहोस्"</string>
- <string name="menu_file_size_hide" msgid="8881975928502581042">"फाइल आकार लुकाउनुहोस्"</string>
- <string name="button_select" msgid="527196987259139214">"चयन गर्नुहोस्"</string>
- <string name="button_copy" msgid="8706475544635021302">"प्रतिलिपि बनाउनुहोस्"</string>
- <string name="button_move" msgid="2202666023104202232">"सार्नुहोस्"</string>
- <string name="button_dismiss" msgid="3714065566893946085">"खारेज गर्नुहोस्"</string>
- <string name="button_retry" msgid="4392027584153752797">"पुन: प्रयास गर्नुहोस्"</string>
- <string name="sort_name" msgid="9183560467917256779">"नाम अनुसार"</string>
- <string name="sort_date" msgid="586080032956151448">"परिमार्जित मिति अनुसार"</string>
- <string name="sort_size" msgid="3350681319735474741">"आकार अनुसार"</string>
- <string name="drawer_open" msgid="4545466532430226949">"मूलहरू देखाउनुहोस्"</string>
- <string name="drawer_close" msgid="7602734368552123318">"मूलहरू लुकाउनुहोस्"</string>
- <string name="save_error" msgid="6167009778003223664">"कागजात सुरक्षित गर्न विफल भयो"</string>
- <string name="create_error" msgid="3735649141335444215">"फोल्डर सिर्जना गर्न असफल भयो"</string>
- <string name="query_error" msgid="5999895349602476581">"अहिले सामग्री लोड गर्न सक्दैन"</string>
- <string name="root_recent" msgid="4470053704320518133">"हालैको"</string>
- <string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> खाली"</string>
- <string name="root_type_service" msgid="2178854894416775409">"भण्डारण सेवाहरू"</string>
- <string name="root_type_shortcut" msgid="3318760609471618093">"सर्टकटहरू"</string>
- <string name="root_type_device" msgid="7121342474653483538">"उपकरणहरू"</string>
- <string name="root_type_apps" msgid="8838065367985945189">"थप अनुप्रयोगहरू"</string>
- <string name="empty" msgid="7858882803708117596">"कुनै वस्तु छैन।"</string>
- <string name="no_results" msgid="6622510343880730446">"%1$s मा कुनै पनि मेल खानेहरू छैन"</string>
- <string name="toast_no_application" msgid="4632640357724698144">"फाइल खोल्न सक्दैन"</string>
- <string name="toast_failed_delete" msgid="2180678019407244069">"केही कागजातहरू मेट्न असमर्थ छ"</string>
- <string name="share_via" msgid="8966594246261344259">"माध्यमबाट साझेदारी गर्नुहोस्"</string>
- <string name="copy_notification_title" msgid="6374299806748219777">"फाइलहरू प्रतिलिपि गर्दै:"</string>
- <string name="move_notification_title" msgid="6193835179777284805">"फाइलहरू सार्दै"</string>
- <string name="delete_notification_title" msgid="3329403967712437496">"फाइलहरूलाई मेट्दै"</string>
- <string name="copy_remaining" msgid="6283790937387975095">"<xliff:g id="DURATION">%s</xliff:g>बाँकी"</string>
- <plurals name="copy_begin" formatted="false" msgid="9071199452634086365">
- <item quantity="other"> <xliff:g id="COUNT_1">%1$d</xliff:g>फाइलहरू प्रतिलिप गर्दै।</item>
- <item quantity="one"> <xliff:g id="COUNT_0">%1$d</xliff:g> फाइल प्रतिलिपि गर्दै।</item>
- </plurals>
- <plurals name="move_begin" formatted="false" msgid="8430330882138871643">
- <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="5054338566802559411">
- <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="7905788502491742328">"अनडू गर्नुहोस्"</string>
- <string name="copy_preparing" msgid="3896202461003039386">"प्रतिलिपिको लागि तयारी गर्दै ..."</string>
- <string name="move_preparing" msgid="2772219441375531410">"सार्नको लागि तयारी गर्दै ..."</string>
- <string name="delete_preparing" msgid="5655813182533491992">"मेटाउन तयारी गर्दै..."</string>
- <string name="delete_progress" msgid="5399405983046157222">"<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="7160447124922897689">
- <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="2710901971014783012">
- <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="7228393157786591199">
- <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="6268189413228855582">"विवरणहरू हेर्न ट्याप गर्नुहोस्"</string>
- <string name="close" msgid="3043722427445528732">"बन्द गर्नुहोस्"</string>
- <string name="copy_failure_alert_content" msgid="4563147454522476183">"यी फाइलहरू प्रतिलिपि गरिएको थिएनः <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="move_failure_alert_content" msgid="2635075788682922861">"यी फाइलहरू सारिएको थिएन: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="delete_failure_alert_content" msgid="892393767207938353">"यी फाइलहरूलाई मेटाइएको थिएन: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="copy_converted_warning_content" msgid="5753861488218674361">"यी फाइलहरू अर्को ढाँचामा परिणत गरिएका थिए: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <plurals name="clipboard_files_clipped" formatted="false" msgid="855459017537058539">
- <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="clipboard_files_cannot_paste" msgid="2878324825602325706">"यो स्थानमा चयन गरिएका फाइलहरू टाँस्न सकिँदैन।"</string>
- <string name="menu_rename" msgid="7678802479104285353">"पुन: नामाकरण गर्नुहोस्"</string>
- <string name="rename_error" msgid="4203041674883412606">"कागजात पुन: नामाकरण गर्न असफल भयो"</string>
- <string name="menu_eject_root" msgid="2768224615494227325">"निकाल्नुहोस्"</string>
- <string name="notification_copy_files_converted_title" msgid="3153573223054275181">"केही फाइलहरू परिवर्तन गरिएका थिए"</string>
- <string name="open_external_dialog_request" msgid="5789329484285817629">"<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="6635562535713428688">"<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="8899108702926347720">"<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="4295278542972859268">"फेरि नसोध्नुहोस्"</string>
- <string name="allow" msgid="7225948811296386551">"अनुमति दिनुहोस्"</string>
- <string name="deny" msgid="2081879885755434506">"अस्वीकार गर्नुहोस्"</string>
- <plurals name="elements_selected" formatted="false" msgid="1376955402452875047">
- <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="3727204615215602228">
- <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="5312817725577537488">"\"<xliff:g id="NAME">%1$s</xliff:g>\" लाई मेट्ने हो?"</string>
- <string name="delete_foldername_confirmation_message" msgid="5885501832257285329">"फोल्डर \"<xliff:g id="NAME">%1$s</xliff:g>\" र यसका सामग्रीहरूलाई मेट्ने हो?"</string>
- <plurals name="delete_files_confirmation_message" formatted="false" msgid="8417505791395471802">
- <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="9185648028213507769">
- <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="5376214433530243459">
- <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>
-</resources>
diff --git a/packages/DocumentsUI/res/values-nl/strings.xml b/packages/DocumentsUI/res/values-nl/strings.xml
deleted file mode 100644
index 446e4b0..0000000
--- a/packages/DocumentsUI/res/values-nl/strings.xml
+++ /dev/null
@@ -1,144 +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="app_label" msgid="1551050262492398204">"Bestanden"</string>
- <string name="downloads_label" msgid="959113951084633612">"Downloads"</string>
- <string name="title_open" msgid="4353228937663917801">"Openen vanuit"</string>
- <string name="title_save" msgid="2433679664882857999">"Opslaan in"</string>
- <string name="menu_create_dir" msgid="2547620241173881754">"Nieuwe map"</string>
- <string name="menu_grid" msgid="6878021334497835259">"Rasterweergave"</string>
- <string name="menu_list" msgid="7279285939892417279">"Lijstweergave"</string>
- <string name="menu_sort" msgid="7677740407158414452">"Sorteren op"</string>
- <string name="menu_search" msgid="3816712084502856974">"Zoeken"</string>
- <string name="menu_settings" msgid="8239065133341597825">"Instellingen voor opslag"</string>
- <string name="menu_open" msgid="432922957274920903">"Openen"</string>
- <string name="menu_save" msgid="2394743337684426338">"Opslaan"</string>
- <string name="menu_share" msgid="3075149983979628146">"Delen"</string>
- <string name="menu_delete" msgid="8138799623850614177">"Verwijderen"</string>
- <string name="menu_select_all" msgid="8323579667348729928">"Alles selecteren"</string>
- <string name="menu_copy" msgid="3612326052677229148">"Kopiëren naar…"</string>
- <string name="menu_move" msgid="1828090633118079817">"Verplaatsen naar…"</string>
- <string name="menu_new_window" msgid="1226032889278727538">"Nieuw venster"</string>
- <string name="menu_cut_to_clipboard" msgid="2467149185452488383">"Knippen"</string>
- <string name="menu_copy_to_clipboard" msgid="489311381979634291">"Kopiëren"</string>
- <string name="menu_paste_from_clipboard" msgid="2071583031180257091">"Plakken"</string>
- <string name="menu_advanced_show" msgid="4693652895715631401">"Interne opslag weergeven"</string>
- <string name="menu_advanced_hide" msgid="4218809952721972589">"Interne opslag verbergen"</string>
- <string name="menu_file_size_show" msgid="3240323619260823076">"Bestandsgrootte weergeven"</string>
- <string name="menu_file_size_hide" msgid="8881975928502581042">"Bestandsgrootte verbergen"</string>
- <string name="button_select" msgid="527196987259139214">"Selecteren"</string>
- <string name="button_copy" msgid="8706475544635021302">"Kopiëren"</string>
- <string name="button_move" msgid="2202666023104202232">"Verplaatsen"</string>
- <string name="button_dismiss" msgid="3714065566893946085">"Sluiten"</string>
- <string name="button_retry" msgid="4392027584153752797">"Opnieuw proberen"</string>
- <string name="sort_name" msgid="9183560467917256779">"Op naam"</string>
- <string name="sort_date" msgid="586080032956151448">"Op aanpassingsdatum"</string>
- <string name="sort_size" msgid="3350681319735474741">"Op grootte"</string>
- <string name="drawer_open" msgid="4545466532430226949">"Roots weergeven"</string>
- <string name="drawer_close" msgid="7602734368552123318">"Roots verbergen"</string>
- <string name="save_error" msgid="6167009778003223664">"Kan document niet opslaan"</string>
- <string name="create_error" msgid="3735649141335444215">"Kan map niet maken"</string>
- <string name="query_error" msgid="5999895349602476581">"Kan content momenteel niet laden"</string>
- <string name="root_recent" msgid="4470053704320518133">"Recent"</string>
- <string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> vrij"</string>
- <string name="root_type_service" msgid="2178854894416775409">"Opslagservices"</string>
- <string name="root_type_shortcut" msgid="3318760609471618093">"Sneltoetsen"</string>
- <string name="root_type_device" msgid="7121342474653483538">"Apparaten"</string>
- <string name="root_type_apps" msgid="8838065367985945189">"Meer apps"</string>
- <string name="empty" msgid="7858882803708117596">"Geen items"</string>
- <string name="no_results" msgid="6622510343880730446">"Geen overeenkomsten in %1$s"</string>
- <string name="toast_no_application" msgid="4632640357724698144">"Kan bestand niet openen"</string>
- <string name="toast_failed_delete" msgid="2180678019407244069">"Kan bepaalde documenten niet verwijderen"</string>
- <string name="share_via" msgid="8966594246261344259">"Delen via"</string>
- <string name="copy_notification_title" msgid="6374299806748219777">"Bestanden kopiëren"</string>
- <string name="move_notification_title" msgid="6193835179777284805">"Bestanden verplaatsen"</string>
- <string name="delete_notification_title" msgid="3329403967712437496">"Bestanden verwijderen"</string>
- <string name="copy_remaining" msgid="6283790937387975095">"<xliff:g id="DURATION">%s</xliff:g> resterend"</string>
- <plurals name="copy_begin" formatted="false" msgid="9071199452634086365">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> bestanden kopiëren.</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> bestand kopiëren.</item>
- </plurals>
- <plurals name="move_begin" formatted="false" msgid="8430330882138871643">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> bestanden verplaatsen.</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> bestand verplaatsen.</item>
- </plurals>
- <plurals name="deleting" formatted="false" msgid="5054338566802559411">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> bestanden verwijderen.</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> bestand verwijderen.</item>
- </plurals>
- <string name="undo" msgid="7905788502491742328">"Ongedaan maken"</string>
- <string name="copy_preparing" msgid="3896202461003039386">"Kopiëren voorbereiden…"</string>
- <string name="move_preparing" msgid="2772219441375531410">"Verplaatsen voorbereiden…"</string>
- <string name="delete_preparing" msgid="5655813182533491992">"Verwijderen voorbereiden…"</string>
- <string name="delete_progress" msgid="5399405983046157222">"<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="7160447124922897689">
- <item quantity="other">Kan <xliff:g id="COUNT_1">%1$d</xliff:g> bestanden niet kopiëren</item>
- <item quantity="one">Kan <xliff:g id="COUNT_0">%1$d</xliff:g> bestand niet kopiëren</item>
- </plurals>
- <plurals name="move_error_notification_title" formatted="false" msgid="2710901971014783012">
- <item quantity="other">Kan <xliff:g id="COUNT_1">%1$d</xliff:g> bestanden niet verplaatsen</item>
- <item quantity="one">Kan <xliff:g id="COUNT_0">%1$d</xliff:g> bestand niet verplaatsen</item>
- </plurals>
- <plurals name="delete_error_notification_title" formatted="false" msgid="7228393157786591199">
- <item quantity="other">Kan <xliff:g id="COUNT_1">%1$d</xliff:g> bestanden niet verwijderen</item>
- <item quantity="one">Kan <xliff:g id="COUNT_0">%1$d</xliff:g> bestand niet verwijderen</item>
- </plurals>
- <string name="notification_touch_for_details" msgid="6268189413228855582">"Tik om details te bekijken"</string>
- <string name="close" msgid="3043722427445528732">"Sluiten"</string>
- <string name="copy_failure_alert_content" msgid="4563147454522476183">"Deze bestanden zijn niet gekopieerd: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="move_failure_alert_content" msgid="2635075788682922861">"Deze bestanden zijn niet verplaatst: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="delete_failure_alert_content" msgid="892393767207938353">"Deze bestanden zijn niet verwijderd: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="copy_converted_warning_content" msgid="5753861488218674361">"Deze bestanden zijn geconverteerd vanuit een andere indeling: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <plurals name="clipboard_files_clipped" formatted="false" msgid="855459017537058539">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> bestanden gekopieerd naar klembord.</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> bestand gekopieerd naar klembord.</item>
- </plurals>
- <string name="clipboard_files_cannot_paste" msgid="2878324825602325706">"Kan de geselecteerde bestanden niet plakken op deze locatie."</string>
- <string name="menu_rename" msgid="7678802479104285353">"Naam wijzigen"</string>
- <string name="rename_error" msgid="4203041674883412606">"Kan naam van document niet wijzigen"</string>
- <string name="menu_eject_root" msgid="2768224615494227325">"Uitwerpen"</string>
- <string name="notification_copy_files_converted_title" msgid="3153573223054275181">"Sommige bestanden zijn geconverteerd"</string>
- <string name="open_external_dialog_request" msgid="5789329484285817629">"<xliff:g id="APPNAME"><b>^1</b></xliff:g> toegang verlenen tot de map <xliff:g id="DIRECTORY"><i>^2</i></xliff:g> op <xliff:g id="STORAGE"><i>^3</i></xliff:g>?"</string>
- <string name="open_external_dialog_request_primary_volume" msgid="6635562535713428688">"<xliff:g id="APPNAME"><b>^1</b></xliff:g> toegang verlenen tot de map <xliff:g id="DIRECTORY"><i>^2</i></xliff:g>?"</string>
- <string name="open_external_dialog_root_request" msgid="8899108702926347720">"<xliff:g id="APPNAME"><b>^1</b></xliff:g> toegang verlenen tot je gegevens, waaronder foto\'s en video\'s, op <xliff:g id="STORAGE"><i>^2</i></xliff:g>?"</string>
- <string name="never_ask_again" msgid="4295278542972859268">"Niet meer vragen"</string>
- <string name="allow" msgid="7225948811296386551">"Toestaan"</string>
- <string name="deny" msgid="2081879885755434506">"Weigeren"</string>
- <plurals name="elements_selected" formatted="false" msgid="1376955402452875047">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> geselecteerd</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> geselecteerd</item>
- </plurals>
- <plurals name="elements_dragged" formatted="false" msgid="3727204615215602228">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> items</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> item</item>
- </plurals>
- <string name="delete_filename_confirmation_message" msgid="5312817725577537488">"<xliff:g id="NAME">%1$s</xliff:g> verwijderen?"</string>
- <string name="delete_foldername_confirmation_message" msgid="5885501832257285329">"Map <xliff:g id="NAME">%1$s</xliff:g> en de bijbehorende inhoud verwijderen?"</string>
- <plurals name="delete_files_confirmation_message" formatted="false" msgid="8417505791395471802">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> bestanden verwijderen?</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> bestand verwijderen?</item>
- </plurals>
- <plurals name="delete_folders_confirmation_message" formatted="false" msgid="9185648028213507769">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> mappen en de bijbehorende inhoud verwijderen?</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> map en de bijbehorende inhoud verwijderen?</item>
- </plurals>
- <plurals name="delete_items_confirmation_message" formatted="false" msgid="5376214433530243459">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> items verwijderen?</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> item verwijderen?</item>
- </plurals>
-</resources>
diff --git a/packages/DocumentsUI/res/values-pa-rIN/strings.xml b/packages/DocumentsUI/res/values-pa-rIN/strings.xml
deleted file mode 100644
index db1bf33..0000000
--- a/packages/DocumentsUI/res/values-pa-rIN/strings.xml
+++ /dev/null
@@ -1,144 +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="app_label" msgid="1551050262492398204">"ਫ਼ਾਈਲਾਂ"</string>
- <string name="downloads_label" msgid="959113951084633612">"ਡਾਊਨਲੋਡ"</string>
- <string name="title_open" msgid="4353228937663917801">"ਤੋਂ ਖੋਲ੍ਹੋ"</string>
- <string name="title_save" msgid="2433679664882857999">"ਇਸ ਵਿੱਚ ਰੱਖਿਅਤ ਕਰੋ"</string>
- <string name="menu_create_dir" msgid="2547620241173881754">"ਨਵਾਂ ਫੋਲਡਰ"</string>
- <string name="menu_grid" msgid="6878021334497835259">"ਗ੍ਰਿਡ ਵਿਊ"</string>
- <string name="menu_list" msgid="7279285939892417279">"ਸੂਚੀ ਦ੍ਰਿਸ਼"</string>
- <string name="menu_sort" msgid="7677740407158414452">"ਇਸ ਮੁਤਾਬਕ ਛਾਂਟੋ"</string>
- <string name="menu_search" msgid="3816712084502856974">"ਖੋਜੋ"</string>
- <string name="menu_settings" msgid="8239065133341597825">"ਸਟੋਰੇਜ ਸੈਟਿੰਗਾਂ"</string>
- <string name="menu_open" msgid="432922957274920903">"ਖੋਲ੍ਹੋ"</string>
- <string name="menu_save" msgid="2394743337684426338">"ਰੱਖਿਅਤ ਕਰੋ"</string>
- <string name="menu_share" msgid="3075149983979628146">"ਸਾਂਝਾ ਕਰੋ"</string>
- <string name="menu_delete" msgid="8138799623850614177">"ਮਿਟਾਓ"</string>
- <string name="menu_select_all" msgid="8323579667348729928">"ਸਭ ਚੁਣੋ"</string>
- <string name="menu_copy" msgid="3612326052677229148">"ਇਸ ਵਿੱਚ ਕਾਪੀ ਕਰੋ…"</string>
- <string name="menu_move" msgid="1828090633118079817">"ਏਥੇ ਤਬਾਦਲਾ ਕਰੋ..."</string>
- <string name="menu_new_window" msgid="1226032889278727538">"ਨਵੀਂ ਵਿੰਡੋ"</string>
- <string name="menu_cut_to_clipboard" msgid="2467149185452488383">"ਕੱਟੋ"</string>
- <string name="menu_copy_to_clipboard" msgid="489311381979634291">"ਕਾਪੀ ਕਰੋ"</string>
- <string name="menu_paste_from_clipboard" msgid="2071583031180257091">"ਪੇਸਟ ਕਰੋ"</string>
- <string name="menu_advanced_show" msgid="4693652895715631401">"ਅੰਦਰੂਨੀ ਸਟੋਰੇਜ ਦਿਖਾਓ"</string>
- <string name="menu_advanced_hide" msgid="4218809952721972589">"ਅੰਦਰੂਨੀ ਸਟੋਰੇਜ ਲੁਕਾਓ"</string>
- <string name="menu_file_size_show" msgid="3240323619260823076">"ਫਾਈਲ ਆਕਾਰ ਦਿਖਾਓ"</string>
- <string name="menu_file_size_hide" msgid="8881975928502581042">"ਫਾਈਲ ਆਕਾਰ ਲੁਕਾਓ"</string>
- <string name="button_select" msgid="527196987259139214">"ਚੁਣੋ"</string>
- <string name="button_copy" msgid="8706475544635021302">"ਕਾਪੀ ਕਰੋ"</string>
- <string name="button_move" msgid="2202666023104202232">"ਮੂਵ ਕਰੋ"</string>
- <string name="button_dismiss" msgid="3714065566893946085">"ਖਾਰਜ ਕਰੋ"</string>
- <string name="button_retry" msgid="4392027584153752797">"ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ"</string>
- <string name="sort_name" msgid="9183560467917256779">"ਨਾਮ ਮੁਤਾਬਕ"</string>
- <string name="sort_date" msgid="586080032956151448">"ਸੋਧੇ ਜਾਣ ਦੀ ਤਾਰੀਖ਼ ਮੁਤਾਬਕ"</string>
- <string name="sort_size" msgid="3350681319735474741">"ਆਕਾਰ ਮੁਤਾਬਕ"</string>
- <string name="drawer_open" msgid="4545466532430226949">"ਰੂਟਸ ਦਿਖਾਓ"</string>
- <string name="drawer_close" msgid="7602734368552123318">"ਰੂਟਸ ਲੁਕਾਓ"</string>
- <string name="save_error" msgid="6167009778003223664">"ਦਸਾਤਵੇਜ਼ ਸੁਰੱਖਿਅਤ ਕਰਨ ਵਿੱਚ ਅਸਫਲ"</string>
- <string name="create_error" msgid="3735649141335444215">"ਫੋਲਡਰ ਬਣਾਉਣ ਲਈ ਅਸਫਲ"</string>
- <string name="query_error" msgid="5999895349602476581">"ਇਸ ਵੇਲੇ ਸਮੱਗਰੀ ਨੂੰ ਲੋਡ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਦਾ"</string>
- <string name="root_recent" msgid="4470053704320518133">"ਹਾਲੀਆ"</string>
- <string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> ਖਾਲੀ"</string>
- <string name="root_type_service" msgid="2178854894416775409">"ਸਟੋਰੇਜ ਸੇਵਾਵਾਂ"</string>
- <string name="root_type_shortcut" msgid="3318760609471618093">"ਸ਼ੌਰਟਕਟਸ"</string>
- <string name="root_type_device" msgid="7121342474653483538">"ਡਿਵਾਈਸਾਂ"</string>
- <string name="root_type_apps" msgid="8838065367985945189">"ਹੋਰ ਐਪਸ"</string>
- <string name="empty" msgid="7858882803708117596">"ਕੋਈ ਆਈਟਮਾਂ ਨਹੀਂ"</string>
- <string name="no_results" msgid="6622510343880730446">"%1$s ਵਿੱਚ ਕੋਈ ਮੇਲ ਨਹੀਂ"</string>
- <string name="toast_no_application" msgid="4632640357724698144">"ਫ਼ਾਈਲ ਨੂੰ ਖੋਲ੍ਹਿਆ ਨਹੀਂ ਜਾ ਸਕਦਾ"</string>
- <string name="toast_failed_delete" msgid="2180678019407244069">"ਕੁਝ ਦਸਤਾਵੇਜ਼ ਮਿਟਾਉਣ ਵਿੱਚ ਅਸਮਰੱਥ"</string>
- <string name="share_via" msgid="8966594246261344259">"ਇਸ ਰਾਹੀਂ ਸਾਂਝਾ ਕਰੋ"</string>
- <string name="copy_notification_title" msgid="6374299806748219777">"ਫਾਈਲਾਂ ਕਾਪੀ ਕਰ ਰਿਹਾ ਹੈ"</string>
- <string name="move_notification_title" msgid="6193835179777284805">"ਫ਼ਾਈਲਾਂ ਨੂੰ ਮੂਵ ਕਰ ਰਿਹਾ ਹੈ"</string>
- <string name="delete_notification_title" msgid="3329403967712437496">"ਫ਼ਾਈਲਾਂ ਨੂੰ ਮਿਟਾਇਆ ਜਾ ਰਿਹਾ ਹੈ"</string>
- <string name="copy_remaining" msgid="6283790937387975095">"<xliff:g id="DURATION">%s</xliff:g> ਬਾਕੀ"</string>
- <plurals name="copy_begin" formatted="false" msgid="9071199452634086365">
- <item quantity="one"> <xliff:g id="COUNT_1">%1$d</xliff:g> ਫਾਈਲਾਂ ਕਾਪੀ ਕਰ ਰਿਹਾ ਹੈ।</item>
- <item quantity="other"> <xliff:g id="COUNT_1">%1$d</xliff:g> ਫਾਈਲਾਂ ਕਾਪੀ ਕਰ ਰਿਹਾ ਹੈ।</item>
- </plurals>
- <plurals name="move_begin" formatted="false" msgid="8430330882138871643">
- <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="deleting" formatted="false" msgid="5054338566802559411">
- <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="7905788502491742328">"ਅਣਕੀਤਾ ਕਰੋ"</string>
- <string name="copy_preparing" msgid="3896202461003039386">"ਕਾਪੀ ਲਈ ਤਿਆਰ ਕਰ ਰਿਹਾ ਹੈ…"</string>
- <string name="move_preparing" msgid="2772219441375531410">"ਮੂਵ ਲਈ ਤਿਆਰ ਕਰ ਰਿਹਾ ਹੈ..."</string>
- <string name="delete_preparing" msgid="5655813182533491992">"ਮਿਟਾਉਣ ਦੀ ਤਿਆਰੀ ਹੋ ਰਹੀ ਹੈ…"</string>
- <string name="delete_progress" msgid="5399405983046157222">"<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="7160447124922897689">
- <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="move_error_notification_title" formatted="false" msgid="2710901971014783012">
- <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_error_notification_title" formatted="false" msgid="7228393157786591199">
- <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="6268189413228855582">"ਵੇਰਵਿਆਂ ਨੂੰ ਵੇਖਣ ਲਈ ਟੈਪ ਕਰੋ"</string>
- <string name="close" msgid="3043722427445528732">"ਬੰਦ ਕਰੋ"</string>
- <string name="copy_failure_alert_content" msgid="4563147454522476183">"ਇਹ ਫ਼ਾਈਲਾਂ ਕਾਪੀ ਨਹੀਂ ਹੋਈਆਂ ਸਨ: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="move_failure_alert_content" msgid="2635075788682922861">"ਇਹ ਫ਼ਾਈਲਾਂ ਤਬਦੀਲ ਨਹੀਂ ਹੋਈਆਂ ਸਨ: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="delete_failure_alert_content" msgid="892393767207938353">"ਇਹਨਾਂ ਫ਼ਾਈਲਾਂ ਨੂੰ ਮਿਟਾਇਆ ਨਹੀਂ ਗਿਆ ਸੀ: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="copy_converted_warning_content" msgid="5753861488218674361">"ਇਹ ਫ਼ਾਈਲਾਂ ਕਿਸੇ ਹੋਰ ਫੌਰਮੈਟ ਵਿੱਚ ਤਬਦੀਲ ਕੀਤੀਆਂ ਗਈਆਂ ਸਨ: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <plurals name="clipboard_files_clipped" formatted="false" msgid="855459017537058539">
- <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="clipboard_files_cannot_paste" msgid="2878324825602325706">"ਇਸ ਸਥਾਨ ਵਿੱਚ ਚੁਣੀਆਂ ਗਈਆਂ ਫ਼ਾਈਲਾਂ ਨੂੰ ਪੇਸਟ ਨਹੀਂ ਕਰ ਸਕਦਾ ਹੈ।"</string>
- <string name="menu_rename" msgid="7678802479104285353">"ਮੁੜ-ਨਾਮਕਰਨ ਕਰੋ"</string>
- <string name="rename_error" msgid="4203041674883412606">"ਦਸਤਾਵੇਜ਼ ਦਾ ਮੁੜ-ਨਾਮਕਰਨ ਕਰਨਾ ਅਸਫਲ ਰਿਹਾ"</string>
- <string name="menu_eject_root" msgid="2768224615494227325">"ਬਾਹਰ ਕੱਢੋ"</string>
- <string name="notification_copy_files_converted_title" msgid="3153573223054275181">"ਕੁਝ ਫ਼ਾਈਲਾਂ ਤਬਦੀਲ ਕੀਤੀਆਂ ਗਈਆਂ ਸਨ"</string>
- <string name="open_external_dialog_request" msgid="5789329484285817629">"ਕੀ <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="6635562535713428688">"ਕੀ <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="8899108702926347720">"ਕੀ <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="4295278542972859268">"ਦੁਬਾਰਾ ਨਾ ਪੁੱਛੋ"</string>
- <string name="allow" msgid="7225948811296386551">"ਆਗਿਆ ਦਿਓ"</string>
- <string name="deny" msgid="2081879885755434506">"ਅਸਵੀਕਾਰ ਕਰੋ"</string>
- <plurals name="elements_selected" formatted="false" msgid="1376955402452875047">
- <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="3727204615215602228">
- <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="5312817725577537488">"ਕੀ \"<xliff:g id="NAME">%1$s</xliff:g>\" ਨੂੰ ਮਿਟਾਉਣਾ ਹੈ?"</string>
- <string name="delete_foldername_confirmation_message" msgid="5885501832257285329">"ਫੋਲਡਰ \"<xliff:g id="NAME">%1$s</xliff:g>\" ਅਤੇ ਉਸ ਦੀਆਂ ਸਮੱਗਰੀਆਂ ਨੂੰ ਮਿਟਾਉਣਾ ਹੈ?"</string>
- <plurals name="delete_files_confirmation_message" formatted="false" msgid="8417505791395471802">
- <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="9185648028213507769">
- <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="5376214433530243459">
- <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>
-</resources>
diff --git a/packages/DocumentsUI/res/values-pl/strings.xml b/packages/DocumentsUI/res/values-pl/strings.xml
deleted file mode 100644
index 835cbd3..0000000
--- a/packages/DocumentsUI/res/values-pl/strings.xml
+++ /dev/null
@@ -1,168 +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="app_label" msgid="1551050262492398204">"Pliki"</string>
- <string name="downloads_label" msgid="959113951084633612">"Pobrane"</string>
- <string name="title_open" msgid="4353228937663917801">"Otwórz z"</string>
- <string name="title_save" msgid="2433679664882857999">"Zapisz w"</string>
- <string name="menu_create_dir" msgid="2547620241173881754">"Nowy folder"</string>
- <string name="menu_grid" msgid="6878021334497835259">"Widok siatki"</string>
- <string name="menu_list" msgid="7279285939892417279">"Widok listy"</string>
- <string name="menu_sort" msgid="7677740407158414452">"Sortuj według"</string>
- <string name="menu_search" msgid="3816712084502856974">"Szukaj"</string>
- <string name="menu_settings" msgid="8239065133341597825">"Ustawienia pamięci"</string>
- <string name="menu_open" msgid="432922957274920903">"Otwórz"</string>
- <string name="menu_save" msgid="2394743337684426338">"Zapisz"</string>
- <string name="menu_share" msgid="3075149983979628146">"Udostępnij"</string>
- <string name="menu_delete" msgid="8138799623850614177">"Usuń"</string>
- <string name="menu_select_all" msgid="8323579667348729928">"Zaznacz wszystko"</string>
- <string name="menu_copy" msgid="3612326052677229148">"Kopiuj do…"</string>
- <string name="menu_move" msgid="1828090633118079817">"Przenieś do…"</string>
- <string name="menu_new_window" msgid="1226032889278727538">"Nowe okno"</string>
- <string name="menu_cut_to_clipboard" msgid="2467149185452488383">"Wytnij"</string>
- <string name="menu_copy_to_clipboard" msgid="489311381979634291">"Kopiuj"</string>
- <string name="menu_paste_from_clipboard" msgid="2071583031180257091">"Wklej"</string>
- <string name="menu_advanced_show" msgid="4693652895715631401">"Pokaż pamięć wewnętrzną"</string>
- <string name="menu_advanced_hide" msgid="4218809952721972589">"Ukryj pamięć wewnętrzną"</string>
- <string name="menu_file_size_show" msgid="3240323619260823076">"Pokaż rozmiar pliku"</string>
- <string name="menu_file_size_hide" msgid="8881975928502581042">"Ukryj rozmiar pliku"</string>
- <string name="button_select" msgid="527196987259139214">"Wybierz"</string>
- <string name="button_copy" msgid="8706475544635021302">"Kopiuj"</string>
- <string name="button_move" msgid="2202666023104202232">"Przenieś"</string>
- <string name="button_dismiss" msgid="3714065566893946085">"Zamknij"</string>
- <string name="button_retry" msgid="4392027584153752797">"Spróbuj ponownie"</string>
- <string name="sort_name" msgid="9183560467917256779">"Według nazwy"</string>
- <string name="sort_date" msgid="586080032956151448">"Według daty edycji"</string>
- <string name="sort_size" msgid="3350681319735474741">"Według rozmiaru"</string>
- <string name="drawer_open" msgid="4545466532430226949">"Pokaż elementy główne"</string>
- <string name="drawer_close" msgid="7602734368552123318">"Ukryj elementy główne"</string>
- <string name="save_error" msgid="6167009778003223664">"Nie udało się zapisać dokumentu"</string>
- <string name="create_error" msgid="3735649141335444215">"Nie udało się utworzyć folderu"</string>
- <string name="query_error" msgid="5999895349602476581">"Teraz nie można załadować zawartości"</string>
- <string name="root_recent" msgid="4470053704320518133">"Ostatnie"</string>
- <string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> wolne"</string>
- <string name="root_type_service" msgid="2178854894416775409">"Usługi pamięci masowej"</string>
- <string name="root_type_shortcut" msgid="3318760609471618093">"Skróty"</string>
- <string name="root_type_device" msgid="7121342474653483538">"Urządzenia"</string>
- <string name="root_type_apps" msgid="8838065367985945189">"Więcej aplikacji"</string>
- <string name="empty" msgid="7858882803708117596">"Brak elementów"</string>
- <string name="no_results" msgid="6622510343880730446">"Brak wyników w %1$s"</string>
- <string name="toast_no_application" msgid="4632640357724698144">"Nie można otworzyć pliku"</string>
- <string name="toast_failed_delete" msgid="2180678019407244069">"Nie można usunąć niektórych dokumentów"</string>
- <string name="share_via" msgid="8966594246261344259">"Udostępnij przez:"</string>
- <string name="copy_notification_title" msgid="6374299806748219777">"Kopiowanie plików"</string>
- <string name="move_notification_title" msgid="6193835179777284805">"Przenoszenie plików"</string>
- <string name="delete_notification_title" msgid="3329403967712437496">"Usuwam pliki"</string>
- <string name="copy_remaining" msgid="6283790937387975095">"Pozostało: <xliff:g id="DURATION">%s</xliff:g>"</string>
- <plurals name="copy_begin" formatted="false" msgid="9071199452634086365">
- <item quantity="few">Kopiowanie <xliff:g id="COUNT_1">%1$d</xliff:g> plików.</item>
- <item quantity="many">Kopiowanie <xliff:g id="COUNT_1">%1$d</xliff:g> plików.</item>
- <item quantity="other">Kopiowanie <xliff:g id="COUNT_1">%1$d</xliff:g> pliku.</item>
- <item quantity="one">Kopiowanie <xliff:g id="COUNT_0">%1$d</xliff:g> pliku.</item>
- </plurals>
- <plurals name="move_begin" formatted="false" msgid="8430330882138871643">
- <item quantity="few">Przenoszę <xliff:g id="COUNT_1">%1$d</xliff:g> pliki.</item>
- <item quantity="many">Przenoszę <xliff:g id="COUNT_1">%1$d</xliff:g> plików.</item>
- <item quantity="other">Przenoszę <xliff:g id="COUNT_1">%1$d</xliff:g> pliku.</item>
- <item quantity="one">Przenoszę <xliff:g id="COUNT_0">%1$d</xliff:g> plik.</item>
- </plurals>
- <plurals name="deleting" formatted="false" msgid="5054338566802559411">
- <item quantity="few">Usuwam <xliff:g id="COUNT_1">%1$d</xliff:g> pliki.</item>
- <item quantity="many">Usuwam <xliff:g id="COUNT_1">%1$d</xliff:g> plików.</item>
- <item quantity="other">Usuwam <xliff:g id="COUNT_1">%1$d</xliff:g> pliku.</item>
- <item quantity="one">Usuwam <xliff:g id="COUNT_0">%1$d</xliff:g> plik.</item>
- </plurals>
- <string name="undo" msgid="7905788502491742328">"Cofnij"</string>
- <string name="copy_preparing" msgid="3896202461003039386">"Przygotowuję do kopiowania…"</string>
- <string name="move_preparing" msgid="2772219441375531410">"Przygotowuję przenoszenie…"</string>
- <string name="delete_preparing" msgid="5655813182533491992">"Przygotowuję do usunięcia…"</string>
- <string name="delete_progress" msgid="5399405983046157222">"<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="7160447124922897689">
- <item quantity="few">Nie udało się skopiować <xliff:g id="COUNT_1">%1$d</xliff:g> plików</item>
- <item quantity="many">Nie udało się skopiować <xliff:g id="COUNT_1">%1$d</xliff:g> plików</item>
- <item quantity="other">Nie udało się skopiować <xliff:g id="COUNT_1">%1$d</xliff:g> pliku</item>
- <item quantity="one">Nie udało się skopiować <xliff:g id="COUNT_0">%1$d</xliff:g> pliku</item>
- </plurals>
- <plurals name="move_error_notification_title" formatted="false" msgid="2710901971014783012">
- <item quantity="few">Nie udało się przenieść <xliff:g id="COUNT_1">%1$d</xliff:g> plików</item>
- <item quantity="many">Nie udało się przenieść <xliff:g id="COUNT_1">%1$d</xliff:g> plików</item>
- <item quantity="other">Nie udało się przenieść <xliff:g id="COUNT_1">%1$d</xliff:g> pliku</item>
- <item quantity="one">Nie udało się przenieść <xliff:g id="COUNT_0">%1$d</xliff:g> pliku</item>
- </plurals>
- <plurals name="delete_error_notification_title" formatted="false" msgid="7228393157786591199">
- <item quantity="few">Nie udało się usunąć <xliff:g id="COUNT_1">%1$d</xliff:g> plików</item>
- <item quantity="many">Nie udało się usunąć <xliff:g id="COUNT_1">%1$d</xliff:g> plików</item>
- <item quantity="other">Nie udało się usunąć <xliff:g id="COUNT_1">%1$d</xliff:g> pliku</item>
- <item quantity="one">Nie udało się usunąć <xliff:g id="COUNT_0">%1$d</xliff:g> pliku</item>
- </plurals>
- <string name="notification_touch_for_details" msgid="6268189413228855582">"Kliknij, by zobaczyć szczegóły"</string>
- <string name="close" msgid="3043722427445528732">"Zamknij"</string>
- <string name="copy_failure_alert_content" msgid="4563147454522476183">"Te pliki nie zostały skopiowane: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="move_failure_alert_content" msgid="2635075788682922861">"Te pliki nie zostały przeniesione: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="delete_failure_alert_content" msgid="892393767207938353">"Te pliki nie zostały usunięte: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="copy_converted_warning_content" msgid="5753861488218674361">"Te pliki zostały przekonwertowane na inny format: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <plurals name="clipboard_files_clipped" formatted="false" msgid="855459017537058539">
- <item quantity="few">Skopiowano <xliff:g id="COUNT_1">%1$d</xliff:g> pliki do schowka.</item>
- <item quantity="many">Skopiowano <xliff:g id="COUNT_1">%1$d</xliff:g> plików do schowka.</item>
- <item quantity="other">Skopiowano <xliff:g id="COUNT_1">%1$d</xliff:g> pliku do schowka.</item>
- <item quantity="one">Skopiowano <xliff:g id="COUNT_0">%1$d</xliff:g> plik do schowka.</item>
- </plurals>
- <string name="clipboard_files_cannot_paste" msgid="2878324825602325706">"Nie można wkleić wybranych plików w tej lokalizacji."</string>
- <string name="menu_rename" msgid="7678802479104285353">"Zmień nazwę"</string>
- <string name="rename_error" msgid="4203041674883412606">"Nie udało się zmienić nazwy dokumentu"</string>
- <string name="menu_eject_root" msgid="2768224615494227325">"Odłącz"</string>
- <string name="notification_copy_files_converted_title" msgid="3153573223054275181">"Niektóre pliki zostały przekonwertowane"</string>
- <string name="open_external_dialog_request" msgid="5789329484285817629">"Zezwolić aplikacji <xliff:g id="APPNAME"><b>^1</b></xliff:g> na dostęp do katalogu <xliff:g id="DIRECTORY"><i>^2</i></xliff:g> w pamięci masowej <xliff:g id="STORAGE"><i>^3</i></xliff:g>?"</string>
- <string name="open_external_dialog_request_primary_volume" msgid="6635562535713428688">"Przyznać aplikacji <xliff:g id="APPNAME"><b>^1</b></xliff:g> dostęp do katalogu <xliff:g id="DIRECTORY"><i>^2</i></xliff:g>?"</string>
- <string name="open_external_dialog_root_request" msgid="8899108702926347720">"Zezwolić aplikacji <xliff:g id="APPNAME"><b>^1</b></xliff:g> na dostęp do Twoich danych, w tym zdjęć i filmów, zapisanych w pamięci <xliff:g id="STORAGE"><i>^2</i></xliff:g>?"</string>
- <string name="never_ask_again" msgid="4295278542972859268">"Nie pytaj ponownie"</string>
- <string name="allow" msgid="7225948811296386551">"Zezwól"</string>
- <string name="deny" msgid="2081879885755434506">"Odmów"</string>
- <plurals name="elements_selected" formatted="false" msgid="1376955402452875047">
- <item quantity="few">Wybrano <xliff:g id="COUNT_1">%1$d</xliff:g></item>
- <item quantity="many">Wybrano <xliff:g id="COUNT_1">%1$d</xliff:g></item>
- <item quantity="other">Wybrano <xliff:g id="COUNT_1">%1$d</xliff:g></item>
- <item quantity="one">Wybrano <xliff:g id="COUNT_0">%1$d</xliff:g></item>
- </plurals>
- <plurals name="elements_dragged" formatted="false" msgid="3727204615215602228">
- <item quantity="few"><xliff:g id="COUNT_1">%1$d</xliff:g> elementy</item>
- <item quantity="many"><xliff:g id="COUNT_1">%1$d</xliff:g> elementów</item>
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> elementu</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> element</item>
- </plurals>
- <string name="delete_filename_confirmation_message" msgid="5312817725577537488">"Usunąć „<xliff:g id="NAME">%1$s</xliff:g>”?"</string>
- <string name="delete_foldername_confirmation_message" msgid="5885501832257285329">"Usunąć folder „<xliff:g id="NAME">%1$s</xliff:g>” i jego zawartość?"</string>
- <plurals name="delete_files_confirmation_message" formatted="false" msgid="8417505791395471802">
- <item quantity="few">Usunąć <xliff:g id="COUNT_1">%1$d</xliff:g> pliki?</item>
- <item quantity="many">Usunąć <xliff:g id="COUNT_1">%1$d</xliff:g> plików?</item>
- <item quantity="other">Usunąć <xliff:g id="COUNT_1">%1$d</xliff:g> pliku?</item>
- <item quantity="one">Usunąć <xliff:g id="COUNT_0">%1$d</xliff:g> plik?</item>
- </plurals>
- <plurals name="delete_folders_confirmation_message" formatted="false" msgid="9185648028213507769">
- <item quantity="few">Usunąć <xliff:g id="COUNT_1">%1$d</xliff:g> foldery wraz z zawartością?</item>
- <item quantity="many">Usunąć <xliff:g id="COUNT_1">%1$d</xliff:g> folderów wraz z zawartością?</item>
- <item quantity="other">Usunąć <xliff:g id="COUNT_1">%1$d</xliff:g> folderu wraz z zawartością?</item>
- <item quantity="one">Usunąć <xliff:g id="COUNT_0">%1$d</xliff:g> folder wraz z zawartością?</item>
- </plurals>
- <plurals name="delete_items_confirmation_message" formatted="false" msgid="5376214433530243459">
- <item quantity="few">Usunąć <xliff:g id="COUNT_1">%1$d</xliff:g> elementy?</item>
- <item quantity="many">Usunąć <xliff:g id="COUNT_1">%1$d</xliff:g> elementów?</item>
- <item quantity="other">Usunąć <xliff:g id="COUNT_1">%1$d</xliff:g> elementu?</item>
- <item quantity="one">Usunąć <xliff:g id="COUNT_0">%1$d</xliff:g> element?</item>
- </plurals>
-</resources>
diff --git a/packages/DocumentsUI/res/values-pt-rBR/strings.xml b/packages/DocumentsUI/res/values-pt-rBR/strings.xml
deleted file mode 100644
index 2134499..0000000
--- a/packages/DocumentsUI/res/values-pt-rBR/strings.xml
+++ /dev/null
@@ -1,144 +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="app_label" msgid="1551050262492398204">"Arquivos"</string>
- <string name="downloads_label" msgid="959113951084633612">"Downloads"</string>
- <string name="title_open" msgid="4353228937663917801">"Abrir de"</string>
- <string name="title_save" msgid="2433679664882857999">"Salvar em"</string>
- <string name="menu_create_dir" msgid="2547620241173881754">"Nova pasta"</string>
- <string name="menu_grid" msgid="6878021334497835259">"Visualização em grade"</string>
- <string name="menu_list" msgid="7279285939892417279">"Visualização em lista"</string>
- <string name="menu_sort" msgid="7677740407158414452">"Classificar por"</string>
- <string name="menu_search" msgid="3816712084502856974">"Pesquisar"</string>
- <string name="menu_settings" msgid="8239065133341597825">"Configurações de armazenamento"</string>
- <string name="menu_open" msgid="432922957274920903">"Abrir"</string>
- <string name="menu_save" msgid="2394743337684426338">"Salvar"</string>
- <string name="menu_share" msgid="3075149983979628146">"Compartilhar"</string>
- <string name="menu_delete" msgid="8138799623850614177">"Excluir"</string>
- <string name="menu_select_all" msgid="8323579667348729928">"Selecionar tudo"</string>
- <string name="menu_copy" msgid="3612326052677229148">"Copiar para..."</string>
- <string name="menu_move" msgid="1828090633118079817">"Mover para..."</string>
- <string name="menu_new_window" msgid="1226032889278727538">"Nova janela"</string>
- <string name="menu_cut_to_clipboard" msgid="2467149185452488383">"Cortar"</string>
- <string name="menu_copy_to_clipboard" msgid="489311381979634291">"Copiar"</string>
- <string name="menu_paste_from_clipboard" msgid="2071583031180257091">"Colar"</string>
- <string name="menu_advanced_show" msgid="4693652895715631401">"Mostrar armaz. interno"</string>
- <string name="menu_advanced_hide" msgid="4218809952721972589">"Ocultar armaz. interno"</string>
- <string name="menu_file_size_show" msgid="3240323619260823076">"Mostrar tam. do arquivo"</string>
- <string name="menu_file_size_hide" msgid="8881975928502581042">"Ocultar tam. do arquivo"</string>
- <string name="button_select" msgid="527196987259139214">"Selecionar"</string>
- <string name="button_copy" msgid="8706475544635021302">"Copiar"</string>
- <string name="button_move" msgid="2202666023104202232">"Mover"</string>
- <string name="button_dismiss" msgid="3714065566893946085">"Dispensar"</string>
- <string name="button_retry" msgid="4392027584153752797">"Tentar novamente"</string>
- <string name="sort_name" msgid="9183560467917256779">"Por nome"</string>
- <string name="sort_date" msgid="586080032956151448">"Por data de modificação"</string>
- <string name="sort_size" msgid="3350681319735474741">"Por tamanho"</string>
- <string name="drawer_open" msgid="4545466532430226949">"Mostrar raízes"</string>
- <string name="drawer_close" msgid="7602734368552123318">"Ocultar raízes"</string>
- <string name="save_error" msgid="6167009778003223664">"Falha ao salvar o documento"</string>
- <string name="create_error" msgid="3735649141335444215">"Falha ao criar a pasta"</string>
- <string name="query_error" msgid="5999895349602476581">"Não é possível carregar o conteúdo no momento"</string>
- <string name="root_recent" msgid="4470053704320518133">"Recentes"</string>
- <string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> livres"</string>
- <string name="root_type_service" msgid="2178854894416775409">"Serviços de armazenamento"</string>
- <string name="root_type_shortcut" msgid="3318760609471618093">"Atalhos"</string>
- <string name="root_type_device" msgid="7121342474653483538">"Dispositivos"</string>
- <string name="root_type_apps" msgid="8838065367985945189">"Mais apps"</string>
- <string name="empty" msgid="7858882803708117596">"Nenhum item"</string>
- <string name="no_results" msgid="6622510343880730446">"Nenhum resultado em %1$s"</string>
- <string name="toast_no_application" msgid="4632640357724698144">"Não é possível abrir o arquivo"</string>
- <string name="toast_failed_delete" msgid="2180678019407244069">"Não foi possível excluir alguns documentos"</string>
- <string name="share_via" msgid="8966594246261344259">"Compartilhar via"</string>
- <string name="copy_notification_title" msgid="6374299806748219777">"Copiando arquivos"</string>
- <string name="move_notification_title" msgid="6193835179777284805">"Movendo arquivos"</string>
- <string name="delete_notification_title" msgid="3329403967712437496">"Excluindo arquivos"</string>
- <string name="copy_remaining" msgid="6283790937387975095">"<xliff:g id="DURATION">%s</xliff:g> restantes"</string>
- <plurals name="copy_begin" formatted="false" msgid="9071199452634086365">
- <item quantity="one">Copiando <xliff:g id="COUNT_1">%1$d</xliff:g> arquivos.</item>
- <item quantity="other">Copiando <xliff:g id="COUNT_1">%1$d</xliff:g> arquivos.</item>
- </plurals>
- <plurals name="move_begin" formatted="false" msgid="8430330882138871643">
- <item quantity="one">Movendo <xliff:g id="COUNT_1">%1$d</xliff:g> arquivos.</item>
- <item quantity="other">Movendo <xliff:g id="COUNT_1">%1$d</xliff:g> arquivos.</item>
- </plurals>
- <plurals name="deleting" formatted="false" msgid="5054338566802559411">
- <item quantity="one">Excluindo <xliff:g id="COUNT_1">%1$d</xliff:g> arquivos.</item>
- <item quantity="other">Excluindo <xliff:g id="COUNT_1">%1$d</xliff:g> arquivos.</item>
- </plurals>
- <string name="undo" msgid="7905788502491742328">"Desfazer"</string>
- <string name="copy_preparing" msgid="3896202461003039386">"Preparando para copiar..."</string>
- <string name="move_preparing" msgid="2772219441375531410">"Preparando para mover..."</string>
- <string name="delete_preparing" msgid="5655813182533491992">"Preparando-se para excluir..."</string>
- <string name="delete_progress" msgid="5399405983046157222">"<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="7160447124922897689">
- <item quantity="one">Não foi possível copiar <xliff:g id="COUNT_1">%1$d</xliff:g> arquivos</item>
- <item quantity="other">Não foi possível copiar <xliff:g id="COUNT_1">%1$d</xliff:g> arquivos</item>
- </plurals>
- <plurals name="move_error_notification_title" formatted="false" msgid="2710901971014783012">
- <item quantity="one">Não foi possível mover <xliff:g id="COUNT_1">%1$d</xliff:g> arquivos</item>
- <item quantity="other">Não foi possível mover <xliff:g id="COUNT_1">%1$d</xliff:g> arquivos</item>
- </plurals>
- <plurals name="delete_error_notification_title" formatted="false" msgid="7228393157786591199">
- <item quantity="one">Não foi possível excluir <xliff:g id="COUNT_1">%1$d</xliff:g> arquivos</item>
- <item quantity="other">Não foi possível excluir <xliff:g id="COUNT_1">%1$d</xliff:g> arquivos</item>
- </plurals>
- <string name="notification_touch_for_details" msgid="6268189413228855582">"Tocar para ver detalhes"</string>
- <string name="close" msgid="3043722427445528732">"Fechar"</string>
- <string name="copy_failure_alert_content" msgid="4563147454522476183">"Estes arquivos não foram copiados: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="move_failure_alert_content" msgid="2635075788682922861">"Estes arquivos não foram movidos: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="delete_failure_alert_content" msgid="892393767207938353">"Estes arquivos não foram excluídos: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="copy_converted_warning_content" msgid="5753861488218674361">"Esses arquivos foram convertidos em outro formato: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <plurals name="clipboard_files_clipped" formatted="false" msgid="855459017537058539">
- <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> arquivos copiados para a área de transferência.</item>
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> arquivos copiados para a área de transferência.</item>
- </plurals>
- <string name="clipboard_files_cannot_paste" msgid="2878324825602325706">"Não é possível colar os arquivos selecionados neste local."</string>
- <string name="menu_rename" msgid="7678802479104285353">"Renomear"</string>
- <string name="rename_error" msgid="4203041674883412606">"Falha ao renomear documento"</string>
- <string name="menu_eject_root" msgid="2768224615494227325">"Ejetar"</string>
- <string name="notification_copy_files_converted_title" msgid="3153573223054275181">"Alguns arquivos foram convertidos"</string>
- <string name="open_external_dialog_request" msgid="5789329484285817629">"Conceder ao <xliff:g id="APPNAME"><b>^1</b></xliff:g> acesso ao diretório <xliff:g id="DIRECTORY"><i>^2</i></xliff:g> no <xliff:g id="STORAGE"><i>^3</i></xliff:g>?"</string>
- <string name="open_external_dialog_request_primary_volume" msgid="6635562535713428688">"Conceder acesso ao diretório <xliff:g id="DIRECTORY"><i>^2</i></xliff:g> para <xliff:g id="APPNAME"><b>^1</b></xliff:g>?"</string>
- <string name="open_external_dialog_root_request" msgid="8899108702926347720">"Conceder a <xliff:g id="APPNAME"><b>^1</b></xliff:g> acesso aos seus dados, incluindo fotos e vídeos, no/na <xliff:g id="STORAGE"><i>^2</i></xliff:g>?"</string>
- <string name="never_ask_again" msgid="4295278542972859268">"Não perguntar novamente"</string>
- <string name="allow" msgid="7225948811296386551">"Permitir"</string>
- <string name="deny" msgid="2081879885755434506">"Negar"</string>
- <plurals name="elements_selected" formatted="false" msgid="1376955402452875047">
- <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> selecionado</item>
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> selecionados</item>
- </plurals>
- <plurals name="elements_dragged" formatted="false" msgid="3727204615215602228">
- <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> itens</item>
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> itens</item>
- </plurals>
- <string name="delete_filename_confirmation_message" msgid="5312817725577537488">"Excluir \" <xliff:g id="NAME">%1$s</xliff:g>\"?"</string>
- <string name="delete_foldername_confirmation_message" msgid="5885501832257285329">"Excluir pasta \"<xliff:g id="NAME">%1$s</xliff:g>\" e o respectivo conteúdo?"</string>
- <plurals name="delete_files_confirmation_message" formatted="false" msgid="8417505791395471802">
- <item quantity="one">Excluir <xliff:g id="COUNT_1">%1$d</xliff:g> arquivos?</item>
- <item quantity="other">Excluir <xliff:g id="COUNT_1">%1$d</xliff:g> arquivos?</item>
- </plurals>
- <plurals name="delete_folders_confirmation_message" formatted="false" msgid="9185648028213507769">
- <item quantity="one">Excluir <xliff:g id="COUNT_1">%1$d</xliff:g> pastas e o respectivo conteúdo?</item>
- <item quantity="other">Excluir <xliff:g id="COUNT_1">%1$d</xliff:g> pastas e o respectivo conteúdo?</item>
- </plurals>
- <plurals name="delete_items_confirmation_message" formatted="false" msgid="5376214433530243459">
- <item quantity="one">Excluir <xliff:g id="COUNT_1">%1$d</xliff:g> itens?</item>
- <item quantity="other">Excluir <xliff:g id="COUNT_1">%1$d</xliff:g> itens?</item>
- </plurals>
-</resources>
diff --git a/packages/DocumentsUI/res/values-pt-rPT/strings.xml b/packages/DocumentsUI/res/values-pt-rPT/strings.xml
deleted file mode 100644
index f8b54a4..0000000
--- a/packages/DocumentsUI/res/values-pt-rPT/strings.xml
+++ /dev/null
@@ -1,144 +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="app_label" msgid="1551050262492398204">"Ficheiros"</string>
- <string name="downloads_label" msgid="959113951084633612">"Transferências"</string>
- <string name="title_open" msgid="4353228937663917801">"Abrir de"</string>
- <string name="title_save" msgid="2433679664882857999">"Guardar em"</string>
- <string name="menu_create_dir" msgid="2547620241173881754">"Nova pasta"</string>
- <string name="menu_grid" msgid="6878021334497835259">"Vista de grelha"</string>
- <string name="menu_list" msgid="7279285939892417279">"Vista de lista"</string>
- <string name="menu_sort" msgid="7677740407158414452">"Ordenar por"</string>
- <string name="menu_search" msgid="3816712084502856974">"Pesquisar"</string>
- <string name="menu_settings" msgid="8239065133341597825">"Defin. de armazenamento"</string>
- <string name="menu_open" msgid="432922957274920903">"Abrir"</string>
- <string name="menu_save" msgid="2394743337684426338">"Guardar"</string>
- <string name="menu_share" msgid="3075149983979628146">"Partilhar"</string>
- <string name="menu_delete" msgid="8138799623850614177">"Eliminar"</string>
- <string name="menu_select_all" msgid="8323579667348729928">"Selecionar tudo"</string>
- <string name="menu_copy" msgid="3612326052677229148">"Copiar para…"</string>
- <string name="menu_move" msgid="1828090633118079817">"Mover para..."</string>
- <string name="menu_new_window" msgid="1226032889278727538">"Nova janela"</string>
- <string name="menu_cut_to_clipboard" msgid="2467149185452488383">"Cortar"</string>
- <string name="menu_copy_to_clipboard" msgid="489311381979634291">"Copiar"</string>
- <string name="menu_paste_from_clipboard" msgid="2071583031180257091">"Colar"</string>
- <string name="menu_advanced_show" msgid="4693652895715631401">"Mostrar mem. armaz. int."</string>
- <string name="menu_advanced_hide" msgid="4218809952721972589">"Ocultar mem. armaz. int."</string>
- <string name="menu_file_size_show" msgid="3240323619260823076">"Mostrar tam. de fich."</string>
- <string name="menu_file_size_hide" msgid="8881975928502581042">"Ocultar tam. de fich."</string>
- <string name="button_select" msgid="527196987259139214">"Selecionar"</string>
- <string name="button_copy" msgid="8706475544635021302">"Copiar"</string>
- <string name="button_move" msgid="2202666023104202232">"Mover"</string>
- <string name="button_dismiss" msgid="3714065566893946085">"Ignorar"</string>
- <string name="button_retry" msgid="4392027584153752797">"Tentar novamente"</string>
- <string name="sort_name" msgid="9183560467917256779">"Por nome"</string>
- <string name="sort_date" msgid="586080032956151448">"Por data de modificação"</string>
- <string name="sort_size" msgid="3350681319735474741">"Por tamanho"</string>
- <string name="drawer_open" msgid="4545466532430226949">"Mostrar raízes"</string>
- <string name="drawer_close" msgid="7602734368552123318">"Ocultar raízes"</string>
- <string name="save_error" msgid="6167009778003223664">"Falha ao guardar o documento"</string>
- <string name="create_error" msgid="3735649141335444215">"Falha ao criar a pasta"</string>
- <string name="query_error" msgid="5999895349602476581">"Não é possível carregar o conteúdo neste momento"</string>
- <string name="root_recent" msgid="4470053704320518133">"Recentes"</string>
- <string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> espaço livre"</string>
- <string name="root_type_service" msgid="2178854894416775409">"Serv. de armazenamento"</string>
- <string name="root_type_shortcut" msgid="3318760609471618093">"Atalhos"</string>
- <string name="root_type_device" msgid="7121342474653483538">"Dispositivos"</string>
- <string name="root_type_apps" msgid="8838065367985945189">"Mais aplicações"</string>
- <string name="empty" msgid="7858882803708117596">"Sem itens"</string>
- <string name="no_results" msgid="6622510343880730446">"Sem correspondências para %1$s"</string>
- <string name="toast_no_application" msgid="4632640357724698144">"Não é possível abrir o ficheiro"</string>
- <string name="toast_failed_delete" msgid="2180678019407244069">"Não é possível eliminar alguns documentos"</string>
- <string name="share_via" msgid="8966594246261344259">"Partilhar através de"</string>
- <string name="copy_notification_title" msgid="6374299806748219777">"A copiar ficheiros"</string>
- <string name="move_notification_title" msgid="6193835179777284805">"A mover ficheiros"</string>
- <string name="delete_notification_title" msgid="3329403967712437496">"Eliminar ficheiros"</string>
- <string name="copy_remaining" msgid="6283790937387975095">"Faltam <xliff:g id="DURATION">%s</xliff:g>"</string>
- <plurals name="copy_begin" formatted="false" msgid="9071199452634086365">
- <item quantity="other">A copiar <xliff:g id="COUNT_1">%1$d</xliff:g> ficheiros.</item>
- <item quantity="one">A copiar <xliff:g id="COUNT_0">%1$d</xliff:g> ficheiro.</item>
- </plurals>
- <plurals name="move_begin" formatted="false" msgid="8430330882138871643">
- <item quantity="other">A mover <xliff:g id="COUNT_1">%1$d</xliff:g> ficheiros.</item>
- <item quantity="one">A mover <xliff:g id="COUNT_0">%1$d</xliff:g> ficheiro.</item>
- </plurals>
- <plurals name="deleting" formatted="false" msgid="5054338566802559411">
- <item quantity="other">A eliminar <xliff:g id="COUNT_1">%1$d</xliff:g> ficheiros.</item>
- <item quantity="one">A eliminar <xliff:g id="COUNT_0">%1$d</xliff:g> ficheiro.</item>
- </plurals>
- <string name="undo" msgid="7905788502491742328">"Anular"</string>
- <string name="copy_preparing" msgid="3896202461003039386">"A preparar para copiar…"</string>
- <string name="move_preparing" msgid="2772219441375531410">"A preparar para mover…"</string>
- <string name="delete_preparing" msgid="5655813182533491992">"A preparar para eliminar…"</string>
- <string name="delete_progress" msgid="5399405983046157222">"<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="7160447124922897689">
- <item quantity="other">Não foi possível copiar <xliff:g id="COUNT_1">%1$d</xliff:g> ficheiros</item>
- <item quantity="one">Não foi possível copiar <xliff:g id="COUNT_0">%1$d</xliff:g> ficheiro</item>
- </plurals>
- <plurals name="move_error_notification_title" formatted="false" msgid="2710901971014783012">
- <item quantity="other">Não foi possível mover <xliff:g id="COUNT_1">%1$d</xliff:g> ficheiros</item>
- <item quantity="one">Não foi possível mover <xliff:g id="COUNT_0">%1$d</xliff:g> ficheiro</item>
- </plurals>
- <plurals name="delete_error_notification_title" formatted="false" msgid="7228393157786591199">
- <item quantity="other">Não foi possível eliminar <xliff:g id="COUNT_1">%1$d</xliff:g> ficheiros</item>
- <item quantity="one">Não foi possível eliminar <xliff:g id="COUNT_0">%1$d</xliff:g> ficheiro</item>
- </plurals>
- <string name="notification_touch_for_details" msgid="6268189413228855582">"Toque para ver detalhes"</string>
- <string name="close" msgid="3043722427445528732">"Fechar"</string>
- <string name="copy_failure_alert_content" msgid="4563147454522476183">"Os seguintes ficheiros não foram copiados: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="move_failure_alert_content" msgid="2635075788682922861">"Os seguintes ficheiros não foram movidos: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="delete_failure_alert_content" msgid="892393767207938353">"Estes ficheiros não foram eliminados: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="copy_converted_warning_content" msgid="5753861488218674361">"Estes ficheiros foram convertidos para outro formato: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <plurals name="clipboard_files_clipped" formatted="false" msgid="855459017537058539">
- <item quantity="other">Copiou <xliff:g id="COUNT_1">%1$d</xliff:g> ficheiros para a área de transferência.</item>
- <item quantity="one">Copiou <xliff:g id="COUNT_0">%1$d</xliff:g> ficheiro para a área de transferência.</item>
- </plurals>
- <string name="clipboard_files_cannot_paste" msgid="2878324825602325706">"Não é possível colar os ficheiros selecionados nesta localização."</string>
- <string name="menu_rename" msgid="7678802479104285353">"Mudar o nome"</string>
- <string name="rename_error" msgid="4203041674883412606">"Falha ao mudar o nome do documento"</string>
- <string name="menu_eject_root" msgid="2768224615494227325">"Ejetar"</string>
- <string name="notification_copy_files_converted_title" msgid="3153573223054275181">"Alguns ficheiros foram convertidos"</string>
- <string name="open_external_dialog_request" msgid="5789329484285817629">"Pretende conceder a <xliff:g id="APPNAME"><b>^1</b></xliff:g> acesso ao diretório <xliff:g id="DIRECTORY"><i>^2</i></xliff:g> no(a) <xliff:g id="STORAGE"><i>^3</i></xliff:g>?"</string>
- <string name="open_external_dialog_request_primary_volume" msgid="6635562535713428688">"Pretende conceder a <xliff:g id="APPNAME"><b>^1</b></xliff:g> acesso ao diretório <xliff:g id="DIRECTORY"><i>^2</i></xliff:g>?"</string>
- <string name="open_external_dialog_root_request" msgid="8899108702926347720">"Pretende conceder a <xliff:g id="APPNAME"><b>^1</b></xliff:g> acesso aos seus dados, incluindo fotos e vídeos, no(a) <xliff:g id="STORAGE"><i>^2</i></xliff:g>?"</string>
- <string name="never_ask_again" msgid="4295278542972859268">"Não perguntar novamente"</string>
- <string name="allow" msgid="7225948811296386551">"Permitir"</string>
- <string name="deny" msgid="2081879885755434506">"Recusar"</string>
- <plurals name="elements_selected" formatted="false" msgid="1376955402452875047">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> selecionados</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> selecionado</item>
- </plurals>
- <plurals name="elements_dragged" formatted="false" msgid="3727204615215602228">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> itens</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> item</item>
- </plurals>
- <string name="delete_filename_confirmation_message" msgid="5312817725577537488">"Pretende eliminar \"<xliff:g id="NAME">%1$s</xliff:g>\"?"</string>
- <string name="delete_foldername_confirmation_message" msgid="5885501832257285329">"Pretende eliminar a pasta \"<xliff:g id="NAME">%1$s</xliff:g>\" e os respetivos conteúdos?"</string>
- <plurals name="delete_files_confirmation_message" formatted="false" msgid="8417505791395471802">
- <item quantity="other">Pretende eliminar <xliff:g id="COUNT_1">%1$d</xliff:g> ficheiros?</item>
- <item quantity="one">Pretende eliminar <xliff:g id="COUNT_0">%1$d</xliff:g> ficheiro?</item>
- </plurals>
- <plurals name="delete_folders_confirmation_message" formatted="false" msgid="9185648028213507769">
- <item quantity="other">Pretende eliminar <xliff:g id="COUNT_1">%1$d</xliff:g> pastas e os respetivos conteúdos?</item>
- <item quantity="one">Pretende eliminar <xliff:g id="COUNT_0">%1$d</xliff:g> pasta e os respetivos conteúdos?</item>
- </plurals>
- <plurals name="delete_items_confirmation_message" formatted="false" msgid="5376214433530243459">
- <item quantity="other">Pretende eliminar <xliff:g id="COUNT_1">%1$d</xliff:g> itens?</item>
- <item quantity="one">Pretende eliminar <xliff:g id="COUNT_0">%1$d</xliff:g> item?</item>
- </plurals>
-</resources>
diff --git a/packages/DocumentsUI/res/values-pt/strings.xml b/packages/DocumentsUI/res/values-pt/strings.xml
deleted file mode 100644
index 2134499..0000000
--- a/packages/DocumentsUI/res/values-pt/strings.xml
+++ /dev/null
@@ -1,144 +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="app_label" msgid="1551050262492398204">"Arquivos"</string>
- <string name="downloads_label" msgid="959113951084633612">"Downloads"</string>
- <string name="title_open" msgid="4353228937663917801">"Abrir de"</string>
- <string name="title_save" msgid="2433679664882857999">"Salvar em"</string>
- <string name="menu_create_dir" msgid="2547620241173881754">"Nova pasta"</string>
- <string name="menu_grid" msgid="6878021334497835259">"Visualização em grade"</string>
- <string name="menu_list" msgid="7279285939892417279">"Visualização em lista"</string>
- <string name="menu_sort" msgid="7677740407158414452">"Classificar por"</string>
- <string name="menu_search" msgid="3816712084502856974">"Pesquisar"</string>
- <string name="menu_settings" msgid="8239065133341597825">"Configurações de armazenamento"</string>
- <string name="menu_open" msgid="432922957274920903">"Abrir"</string>
- <string name="menu_save" msgid="2394743337684426338">"Salvar"</string>
- <string name="menu_share" msgid="3075149983979628146">"Compartilhar"</string>
- <string name="menu_delete" msgid="8138799623850614177">"Excluir"</string>
- <string name="menu_select_all" msgid="8323579667348729928">"Selecionar tudo"</string>
- <string name="menu_copy" msgid="3612326052677229148">"Copiar para..."</string>
- <string name="menu_move" msgid="1828090633118079817">"Mover para..."</string>
- <string name="menu_new_window" msgid="1226032889278727538">"Nova janela"</string>
- <string name="menu_cut_to_clipboard" msgid="2467149185452488383">"Cortar"</string>
- <string name="menu_copy_to_clipboard" msgid="489311381979634291">"Copiar"</string>
- <string name="menu_paste_from_clipboard" msgid="2071583031180257091">"Colar"</string>
- <string name="menu_advanced_show" msgid="4693652895715631401">"Mostrar armaz. interno"</string>
- <string name="menu_advanced_hide" msgid="4218809952721972589">"Ocultar armaz. interno"</string>
- <string name="menu_file_size_show" msgid="3240323619260823076">"Mostrar tam. do arquivo"</string>
- <string name="menu_file_size_hide" msgid="8881975928502581042">"Ocultar tam. do arquivo"</string>
- <string name="button_select" msgid="527196987259139214">"Selecionar"</string>
- <string name="button_copy" msgid="8706475544635021302">"Copiar"</string>
- <string name="button_move" msgid="2202666023104202232">"Mover"</string>
- <string name="button_dismiss" msgid="3714065566893946085">"Dispensar"</string>
- <string name="button_retry" msgid="4392027584153752797">"Tentar novamente"</string>
- <string name="sort_name" msgid="9183560467917256779">"Por nome"</string>
- <string name="sort_date" msgid="586080032956151448">"Por data de modificação"</string>
- <string name="sort_size" msgid="3350681319735474741">"Por tamanho"</string>
- <string name="drawer_open" msgid="4545466532430226949">"Mostrar raízes"</string>
- <string name="drawer_close" msgid="7602734368552123318">"Ocultar raízes"</string>
- <string name="save_error" msgid="6167009778003223664">"Falha ao salvar o documento"</string>
- <string name="create_error" msgid="3735649141335444215">"Falha ao criar a pasta"</string>
- <string name="query_error" msgid="5999895349602476581">"Não é possível carregar o conteúdo no momento"</string>
- <string name="root_recent" msgid="4470053704320518133">"Recentes"</string>
- <string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> livres"</string>
- <string name="root_type_service" msgid="2178854894416775409">"Serviços de armazenamento"</string>
- <string name="root_type_shortcut" msgid="3318760609471618093">"Atalhos"</string>
- <string name="root_type_device" msgid="7121342474653483538">"Dispositivos"</string>
- <string name="root_type_apps" msgid="8838065367985945189">"Mais apps"</string>
- <string name="empty" msgid="7858882803708117596">"Nenhum item"</string>
- <string name="no_results" msgid="6622510343880730446">"Nenhum resultado em %1$s"</string>
- <string name="toast_no_application" msgid="4632640357724698144">"Não é possível abrir o arquivo"</string>
- <string name="toast_failed_delete" msgid="2180678019407244069">"Não foi possível excluir alguns documentos"</string>
- <string name="share_via" msgid="8966594246261344259">"Compartilhar via"</string>
- <string name="copy_notification_title" msgid="6374299806748219777">"Copiando arquivos"</string>
- <string name="move_notification_title" msgid="6193835179777284805">"Movendo arquivos"</string>
- <string name="delete_notification_title" msgid="3329403967712437496">"Excluindo arquivos"</string>
- <string name="copy_remaining" msgid="6283790937387975095">"<xliff:g id="DURATION">%s</xliff:g> restantes"</string>
- <plurals name="copy_begin" formatted="false" msgid="9071199452634086365">
- <item quantity="one">Copiando <xliff:g id="COUNT_1">%1$d</xliff:g> arquivos.</item>
- <item quantity="other">Copiando <xliff:g id="COUNT_1">%1$d</xliff:g> arquivos.</item>
- </plurals>
- <plurals name="move_begin" formatted="false" msgid="8430330882138871643">
- <item quantity="one">Movendo <xliff:g id="COUNT_1">%1$d</xliff:g> arquivos.</item>
- <item quantity="other">Movendo <xliff:g id="COUNT_1">%1$d</xliff:g> arquivos.</item>
- </plurals>
- <plurals name="deleting" formatted="false" msgid="5054338566802559411">
- <item quantity="one">Excluindo <xliff:g id="COUNT_1">%1$d</xliff:g> arquivos.</item>
- <item quantity="other">Excluindo <xliff:g id="COUNT_1">%1$d</xliff:g> arquivos.</item>
- </plurals>
- <string name="undo" msgid="7905788502491742328">"Desfazer"</string>
- <string name="copy_preparing" msgid="3896202461003039386">"Preparando para copiar..."</string>
- <string name="move_preparing" msgid="2772219441375531410">"Preparando para mover..."</string>
- <string name="delete_preparing" msgid="5655813182533491992">"Preparando-se para excluir..."</string>
- <string name="delete_progress" msgid="5399405983046157222">"<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="7160447124922897689">
- <item quantity="one">Não foi possível copiar <xliff:g id="COUNT_1">%1$d</xliff:g> arquivos</item>
- <item quantity="other">Não foi possível copiar <xliff:g id="COUNT_1">%1$d</xliff:g> arquivos</item>
- </plurals>
- <plurals name="move_error_notification_title" formatted="false" msgid="2710901971014783012">
- <item quantity="one">Não foi possível mover <xliff:g id="COUNT_1">%1$d</xliff:g> arquivos</item>
- <item quantity="other">Não foi possível mover <xliff:g id="COUNT_1">%1$d</xliff:g> arquivos</item>
- </plurals>
- <plurals name="delete_error_notification_title" formatted="false" msgid="7228393157786591199">
- <item quantity="one">Não foi possível excluir <xliff:g id="COUNT_1">%1$d</xliff:g> arquivos</item>
- <item quantity="other">Não foi possível excluir <xliff:g id="COUNT_1">%1$d</xliff:g> arquivos</item>
- </plurals>
- <string name="notification_touch_for_details" msgid="6268189413228855582">"Tocar para ver detalhes"</string>
- <string name="close" msgid="3043722427445528732">"Fechar"</string>
- <string name="copy_failure_alert_content" msgid="4563147454522476183">"Estes arquivos não foram copiados: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="move_failure_alert_content" msgid="2635075788682922861">"Estes arquivos não foram movidos: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="delete_failure_alert_content" msgid="892393767207938353">"Estes arquivos não foram excluídos: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="copy_converted_warning_content" msgid="5753861488218674361">"Esses arquivos foram convertidos em outro formato: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <plurals name="clipboard_files_clipped" formatted="false" msgid="855459017537058539">
- <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> arquivos copiados para a área de transferência.</item>
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> arquivos copiados para a área de transferência.</item>
- </plurals>
- <string name="clipboard_files_cannot_paste" msgid="2878324825602325706">"Não é possível colar os arquivos selecionados neste local."</string>
- <string name="menu_rename" msgid="7678802479104285353">"Renomear"</string>
- <string name="rename_error" msgid="4203041674883412606">"Falha ao renomear documento"</string>
- <string name="menu_eject_root" msgid="2768224615494227325">"Ejetar"</string>
- <string name="notification_copy_files_converted_title" msgid="3153573223054275181">"Alguns arquivos foram convertidos"</string>
- <string name="open_external_dialog_request" msgid="5789329484285817629">"Conceder ao <xliff:g id="APPNAME"><b>^1</b></xliff:g> acesso ao diretório <xliff:g id="DIRECTORY"><i>^2</i></xliff:g> no <xliff:g id="STORAGE"><i>^3</i></xliff:g>?"</string>
- <string name="open_external_dialog_request_primary_volume" msgid="6635562535713428688">"Conceder acesso ao diretório <xliff:g id="DIRECTORY"><i>^2</i></xliff:g> para <xliff:g id="APPNAME"><b>^1</b></xliff:g>?"</string>
- <string name="open_external_dialog_root_request" msgid="8899108702926347720">"Conceder a <xliff:g id="APPNAME"><b>^1</b></xliff:g> acesso aos seus dados, incluindo fotos e vídeos, no/na <xliff:g id="STORAGE"><i>^2</i></xliff:g>?"</string>
- <string name="never_ask_again" msgid="4295278542972859268">"Não perguntar novamente"</string>
- <string name="allow" msgid="7225948811296386551">"Permitir"</string>
- <string name="deny" msgid="2081879885755434506">"Negar"</string>
- <plurals name="elements_selected" formatted="false" msgid="1376955402452875047">
- <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> selecionado</item>
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> selecionados</item>
- </plurals>
- <plurals name="elements_dragged" formatted="false" msgid="3727204615215602228">
- <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> itens</item>
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> itens</item>
- </plurals>
- <string name="delete_filename_confirmation_message" msgid="5312817725577537488">"Excluir \" <xliff:g id="NAME">%1$s</xliff:g>\"?"</string>
- <string name="delete_foldername_confirmation_message" msgid="5885501832257285329">"Excluir pasta \"<xliff:g id="NAME">%1$s</xliff:g>\" e o respectivo conteúdo?"</string>
- <plurals name="delete_files_confirmation_message" formatted="false" msgid="8417505791395471802">
- <item quantity="one">Excluir <xliff:g id="COUNT_1">%1$d</xliff:g> arquivos?</item>
- <item quantity="other">Excluir <xliff:g id="COUNT_1">%1$d</xliff:g> arquivos?</item>
- </plurals>
- <plurals name="delete_folders_confirmation_message" formatted="false" msgid="9185648028213507769">
- <item quantity="one">Excluir <xliff:g id="COUNT_1">%1$d</xliff:g> pastas e o respectivo conteúdo?</item>
- <item quantity="other">Excluir <xliff:g id="COUNT_1">%1$d</xliff:g> pastas e o respectivo conteúdo?</item>
- </plurals>
- <plurals name="delete_items_confirmation_message" formatted="false" msgid="5376214433530243459">
- <item quantity="one">Excluir <xliff:g id="COUNT_1">%1$d</xliff:g> itens?</item>
- <item quantity="other">Excluir <xliff:g id="COUNT_1">%1$d</xliff:g> itens?</item>
- </plurals>
-</resources>
diff --git a/packages/DocumentsUI/res/values-ro/strings.xml b/packages/DocumentsUI/res/values-ro/strings.xml
deleted file mode 100644
index a10a1db..0000000
--- a/packages/DocumentsUI/res/values-ro/strings.xml
+++ /dev/null
@@ -1,156 +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="app_label" msgid="1551050262492398204">"Fișiere"</string>
- <string name="downloads_label" msgid="959113951084633612">"Descărcări"</string>
- <string name="title_open" msgid="4353228937663917801">"Deschideți din"</string>
- <string name="title_save" msgid="2433679664882857999">"Salvați în"</string>
- <string name="menu_create_dir" msgid="2547620241173881754">"Dosar nou"</string>
- <string name="menu_grid" msgid="6878021334497835259">"Afișare tip grilă"</string>
- <string name="menu_list" msgid="7279285939892417279">"Afișare tip listă"</string>
- <string name="menu_sort" msgid="7677740407158414452">"Sortați după"</string>
- <string name="menu_search" msgid="3816712084502856974">"Căutați"</string>
- <string name="menu_settings" msgid="8239065133341597825">"Setări de stocare"</string>
- <string name="menu_open" msgid="432922957274920903">"Deschideți"</string>
- <string name="menu_save" msgid="2394743337684426338">"Salvați"</string>
- <string name="menu_share" msgid="3075149983979628146">"Distribuiți"</string>
- <string name="menu_delete" msgid="8138799623850614177">"Ștergeți"</string>
- <string name="menu_select_all" msgid="8323579667348729928">"Selectați tot"</string>
- <string name="menu_copy" msgid="3612326052677229148">"Copiați în…"</string>
- <string name="menu_move" msgid="1828090633118079817">"Mutați în…"</string>
- <string name="menu_new_window" msgid="1226032889278727538">"Fereastră nouă"</string>
- <string name="menu_cut_to_clipboard" msgid="2467149185452488383">"Decupați"</string>
- <string name="menu_copy_to_clipboard" msgid="489311381979634291">"Copiați"</string>
- <string name="menu_paste_from_clipboard" msgid="2071583031180257091">"Inserați"</string>
- <string name="menu_advanced_show" msgid="4693652895715631401">"Afișați stocarea internă"</string>
- <string name="menu_advanced_hide" msgid="4218809952721972589">"Ascundeți stocarea internă"</string>
- <string name="menu_file_size_show" msgid="3240323619260823076">"Afișați dimensiunea"</string>
- <string name="menu_file_size_hide" msgid="8881975928502581042">"Ascundeți dimensiunea"</string>
- <string name="button_select" msgid="527196987259139214">"Selectați"</string>
- <string name="button_copy" msgid="8706475544635021302">"Copiați"</string>
- <string name="button_move" msgid="2202666023104202232">"Mutați"</string>
- <string name="button_dismiss" msgid="3714065566893946085">"Închideți"</string>
- <string name="button_retry" msgid="4392027584153752797">"Încercați din nou"</string>
- <string name="sort_name" msgid="9183560467917256779">"După nume"</string>
- <string name="sort_date" msgid="586080032956151448">"După data modificării"</string>
- <string name="sort_size" msgid="3350681319735474741">"După dimensiune"</string>
- <string name="drawer_open" msgid="4545466532430226949">"Afișați directoarele rădăcină"</string>
- <string name="drawer_close" msgid="7602734368552123318">"Ascundeți directoarele rădăcină"</string>
- <string name="save_error" msgid="6167009778003223664">"Salvarea documentului nu a reușit"</string>
- <string name="create_error" msgid="3735649141335444215">"Eroare la crearea dosarului"</string>
- <string name="query_error" msgid="5999895349602476581">"Momentan, conținutul nu poate fi încărcat"</string>
- <string name="root_recent" msgid="4470053704320518133">"Recente"</string>
- <string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> spațiu liber"</string>
- <string name="root_type_service" msgid="2178854894416775409">"Servicii de stocare"</string>
- <string name="root_type_shortcut" msgid="3318760609471618093">"Comenzi rapide"</string>
- <string name="root_type_device" msgid="7121342474653483538">"Dispozitive"</string>
- <string name="root_type_apps" msgid="8838065367985945189">"Alte aplicații"</string>
- <string name="empty" msgid="7858882803708117596">"Niciun element"</string>
- <string name="no_results" msgid="6622510343880730446">"Niciun rezultat în %1$s"</string>
- <string name="toast_no_application" msgid="4632640357724698144">"Fișierul nu poate fi deschis"</string>
- <string name="toast_failed_delete" msgid="2180678019407244069">"Unele documente nu au putut fi șterse"</string>
- <string name="share_via" msgid="8966594246261344259">"Trimiteți prin"</string>
- <string name="copy_notification_title" msgid="6374299806748219777">"Se copiază fișierele"</string>
- <string name="move_notification_title" msgid="6193835179777284805">"Se mută fișierele"</string>
- <string name="delete_notification_title" msgid="3329403967712437496">"Se șterg fișierele"</string>
- <string name="copy_remaining" msgid="6283790937387975095">"Timp rămas: <xliff:g id="DURATION">%s</xliff:g>"</string>
- <plurals name="copy_begin" formatted="false" msgid="9071199452634086365">
- <item quantity="few">Se copiază <xliff:g id="COUNT_1">%1$d</xliff:g> fișiere.</item>
- <item quantity="other">Se copiază <xliff:g id="COUNT_1">%1$d</xliff:g> de fișiere.</item>
- <item quantity="one">Se copiază <xliff:g id="COUNT_0">%1$d</xliff:g> fișier.</item>
- </plurals>
- <plurals name="move_begin" formatted="false" msgid="8430330882138871643">
- <item quantity="few">Se mută <xliff:g id="COUNT_1">%1$d</xliff:g> fișiere.</item>
- <item quantity="other">Se mută <xliff:g id="COUNT_1">%1$d</xliff:g> de fișiere.</item>
- <item quantity="one">Se mută <xliff:g id="COUNT_0">%1$d</xliff:g> fișier.</item>
- </plurals>
- <plurals name="deleting" formatted="false" msgid="5054338566802559411">
- <item quantity="few">Se șterg <xliff:g id="COUNT_1">%1$d</xliff:g> fișiere.</item>
- <item quantity="other">Se șterg <xliff:g id="COUNT_1">%1$d</xliff:g> de fișiere.</item>
- <item quantity="one">Se șterge <xliff:g id="COUNT_0">%1$d</xliff:g> fișier.</item>
- </plurals>
- <string name="undo" msgid="7905788502491742328">"Anulați"</string>
- <string name="copy_preparing" msgid="3896202461003039386">"Se pregătește copierea..."</string>
- <string name="move_preparing" msgid="2772219441375531410">"Se pregătește mutarea…"</string>
- <string name="delete_preparing" msgid="5655813182533491992">"Se pregătește ștergerea…"</string>
- <string name="delete_progress" msgid="5399405983046157222">"<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="7160447124922897689">
- <item quantity="few">Nu s-au putut copia <xliff:g id="COUNT_1">%1$d</xliff:g> fișiere</item>
- <item quantity="other">Nu s-au putut copia <xliff:g id="COUNT_1">%1$d</xliff:g> de fișiere</item>
- <item quantity="one">Nu s-a putut copia <xliff:g id="COUNT_0">%1$d</xliff:g> fișier</item>
- </plurals>
- <plurals name="move_error_notification_title" formatted="false" msgid="2710901971014783012">
- <item quantity="few">Nu s-au putut muta <xliff:g id="COUNT_1">%1$d</xliff:g> fișiere</item>
- <item quantity="other">Nu s-au putut muta <xliff:g id="COUNT_1">%1$d</xliff:g> de fișiere</item>
- <item quantity="one">Nu s-a putut muta <xliff:g id="COUNT_0">%1$d</xliff:g> fișier</item>
- </plurals>
- <plurals name="delete_error_notification_title" formatted="false" msgid="7228393157786591199">
- <item quantity="few">Nu s-au putut șterge <xliff:g id="COUNT_1">%1$d</xliff:g> fișiere</item>
- <item quantity="other">Nu s-au putut șterge <xliff:g id="COUNT_1">%1$d</xliff:g> de fișiere</item>
- <item quantity="one">Nu s-a putut șterge <xliff:g id="COUNT_0">%1$d</xliff:g> fișier</item>
- </plurals>
- <string name="notification_touch_for_details" msgid="6268189413228855582">"Atingeți pentru a vedea detaliile"</string>
- <string name="close" msgid="3043722427445528732">"Închideți"</string>
- <string name="copy_failure_alert_content" msgid="4563147454522476183">"Aceste fișiere nu au fost copiate: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="move_failure_alert_content" msgid="2635075788682922861">"Aceste fișiere nu au fost mutate: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="delete_failure_alert_content" msgid="892393767207938353">"Aceste fișiere nu au fost șterse: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="copy_converted_warning_content" msgid="5753861488218674361">"Aceste fișiere au fost convertite în alt format: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <plurals name="clipboard_files_clipped" formatted="false" msgid="855459017537058539">
- <item quantity="few">Au fost copiate <xliff:g id="COUNT_1">%1$d</xliff:g> fișiere în clipboard.</item>
- <item quantity="other">Au fost copiate <xliff:g id="COUNT_1">%1$d</xliff:g> de fișiere în clipboard.</item>
- <item quantity="one">A fost copiat <xliff:g id="COUNT_0">%1$d</xliff:g> fișier în clipboard.</item>
- </plurals>
- <string name="clipboard_files_cannot_paste" msgid="2878324825602325706">"Fișierele selectate nu au putut fi inserate în această locație."</string>
- <string name="menu_rename" msgid="7678802479104285353">"Redenumiți"</string>
- <string name="rename_error" msgid="4203041674883412606">"Documentul nu a putut fi redenumit"</string>
- <string name="menu_eject_root" msgid="2768224615494227325">"Scoateți"</string>
- <string name="notification_copy_files_converted_title" msgid="3153573223054275181">"Unele fișiere au fost convertite"</string>
- <string name="open_external_dialog_request" msgid="5789329484285817629">"Permiteți aplicației <xliff:g id="APPNAME"><b>^1</b></xliff:g> accesul la directorul <xliff:g id="DIRECTORY"><i>^2</i></xliff:g> de pe <xliff:g id="STORAGE"><i>^3</i></xliff:g>?"</string>
- <string name="open_external_dialog_request_primary_volume" msgid="6635562535713428688">"Permiteți aplicației <xliff:g id="APPNAME"><b>^1</b></xliff:g> să acceseze directorul <xliff:g id="DIRECTORY"><i>^2</i></xliff:g>?"</string>
- <string name="open_external_dialog_root_request" msgid="8899108702926347720">"Permiteți aplicației <xliff:g id="APPNAME"><b>^1</b></xliff:g> să vă acceseze datele, inclusiv fotografiile și videoclipurile, de pe <xliff:g id="STORAGE"><i>^2</i></xliff:g>?"</string>
- <string name="never_ask_again" msgid="4295278542972859268">"Nu mai întreba"</string>
- <string name="allow" msgid="7225948811296386551">"Permiteți"</string>
- <string name="deny" msgid="2081879885755434506">"Refuzați"</string>
- <plurals name="elements_selected" formatted="false" msgid="1376955402452875047">
- <item quantity="few"><xliff:g id="COUNT_1">%1$d</xliff:g> selectate</item>
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> selectate</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> selectat</item>
- </plurals>
- <plurals name="elements_dragged" formatted="false" msgid="3727204615215602228">
- <item quantity="few"><xliff:g id="COUNT_1">%1$d</xliff:g> elemente</item>
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> de elemente</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> element</item>
- </plurals>
- <string name="delete_filename_confirmation_message" msgid="5312817725577537488">"Ștergeți „<xliff:g id="NAME">%1$s</xliff:g>”?"</string>
- <string name="delete_foldername_confirmation_message" msgid="5885501832257285329">"Ștergeți dosarul „<xliff:g id="NAME">%1$s</xliff:g>” și conținutul acestuia?"</string>
- <plurals name="delete_files_confirmation_message" formatted="false" msgid="8417505791395471802">
- <item quantity="few">Ștergeți <xliff:g id="COUNT_1">%1$d</xliff:g> fișiere?</item>
- <item quantity="other">Ștergeți <xliff:g id="COUNT_1">%1$d</xliff:g> de fișiere?</item>
- <item quantity="one">Ștergeți <xliff:g id="COUNT_0">%1$d</xliff:g> fișier?</item>
- </plurals>
- <plurals name="delete_folders_confirmation_message" formatted="false" msgid="9185648028213507769">
- <item quantity="few">Ștergeți <xliff:g id="COUNT_1">%1$d</xliff:g> dosare și conținutul acestora?</item>
- <item quantity="other">Ștergeți <xliff:g id="COUNT_1">%1$d</xliff:g> de dosare și conținutul acestora?</item>
- <item quantity="one">Ștergeți <xliff:g id="COUNT_0">%1$d</xliff:g> dosar și conținutul acestuia?</item>
- </plurals>
- <plurals name="delete_items_confirmation_message" formatted="false" msgid="5376214433530243459">
- <item quantity="few">Ștergeți <xliff:g id="COUNT_1">%1$d</xliff:g> elemente?</item>
- <item quantity="other">Ștergeți <xliff:g id="COUNT_1">%1$d</xliff:g> de elemente?</item>
- <item quantity="one">Ștergeți <xliff:g id="COUNT_0">%1$d</xliff:g> element?</item>
- </plurals>
-</resources>
diff --git a/packages/DocumentsUI/res/values-ru/strings.xml b/packages/DocumentsUI/res/values-ru/strings.xml
deleted file mode 100644
index d4a3365..0000000
--- a/packages/DocumentsUI/res/values-ru/strings.xml
+++ /dev/null
@@ -1,168 +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="app_label" msgid="1551050262492398204">"Файлы"</string>
- <string name="downloads_label" msgid="959113951084633612">"Загрузки"</string>
- <string name="title_open" msgid="4353228937663917801">"Открыть"</string>
- <string name="title_save" msgid="2433679664882857999">"Сохранить"</string>
- <string name="menu_create_dir" msgid="2547620241173881754">"Создать папку"</string>
- <string name="menu_grid" msgid="6878021334497835259">"Сетка"</string>
- <string name="menu_list" msgid="7279285939892417279">"Список"</string>
- <string name="menu_sort" msgid="7677740407158414452">"Сортировать"</string>
- <string name="menu_search" msgid="3816712084502856974">"Поиск"</string>
- <string name="menu_settings" msgid="8239065133341597825">"Память"</string>
- <string name="menu_open" msgid="432922957274920903">"Открыть"</string>
- <string name="menu_save" msgid="2394743337684426338">"Сохранить"</string>
- <string name="menu_share" msgid="3075149983979628146">"Поделиться"</string>
- <string name="menu_delete" msgid="8138799623850614177">"Удалить"</string>
- <string name="menu_select_all" msgid="8323579667348729928">"Выбрать все"</string>
- <string name="menu_copy" msgid="3612326052677229148">"Копировать в…"</string>
- <string name="menu_move" msgid="1828090633118079817">"Переместить в…"</string>
- <string name="menu_new_window" msgid="1226032889278727538">"Новое окно"</string>
- <string name="menu_cut_to_clipboard" msgid="2467149185452488383">"Вырезать"</string>
- <string name="menu_copy_to_clipboard" msgid="489311381979634291">"Копировать"</string>
- <string name="menu_paste_from_clipboard" msgid="2071583031180257091">"Вставить"</string>
- <string name="menu_advanced_show" msgid="4693652895715631401">"Внутренняя память"</string>
- <string name="menu_advanced_hide" msgid="4218809952721972589">"Скрыть внутреннюю память"</string>
- <string name="menu_file_size_show" msgid="3240323619260823076">"Показать размер файлов"</string>
- <string name="menu_file_size_hide" msgid="8881975928502581042">"Скрыть размер файлов"</string>
- <string name="button_select" msgid="527196987259139214">"Выбрать"</string>
- <string name="button_copy" msgid="8706475544635021302">"Копировать"</string>
- <string name="button_move" msgid="2202666023104202232">"Переместить"</string>
- <string name="button_dismiss" msgid="3714065566893946085">"Скрыть"</string>
- <string name="button_retry" msgid="4392027584153752797">"Повторить"</string>
- <string name="sort_name" msgid="9183560467917256779">"По названию"</string>
- <string name="sort_date" msgid="586080032956151448">"По дате изменения"</string>
- <string name="sort_size" msgid="3350681319735474741">"По размеру"</string>
- <string name="drawer_open" msgid="4545466532430226949">"Показать"</string>
- <string name="drawer_close" msgid="7602734368552123318">"Скрыть"</string>
- <string name="save_error" msgid="6167009778003223664">"Не удалось сохранить документ"</string>
- <string name="create_error" msgid="3735649141335444215">"Не удалось создать папку"</string>
- <string name="query_error" msgid="5999895349602476581">"Не удалось загрузить контент"</string>
- <string name="root_recent" msgid="4470053704320518133">"Недавние"</string>
- <string name="root_available_bytes" msgid="8568452858617033281">"Свободно <xliff:g id="SIZE">%1$s</xliff:g>"</string>
- <string name="root_type_service" msgid="2178854894416775409">"Службы хранения"</string>
- <string name="root_type_shortcut" msgid="3318760609471618093">"Ярлыки"</string>
- <string name="root_type_device" msgid="7121342474653483538">"Устройства"</string>
- <string name="root_type_apps" msgid="8838065367985945189">"Другие приложения"</string>
- <string name="empty" msgid="7858882803708117596">"Ничего нет"</string>
- <string name="no_results" msgid="6622510343880730446">"В \"%1$s\" ничего не найдено"</string>
- <string name="toast_no_application" msgid="4632640357724698144">"Не удалось открыть файл"</string>
- <string name="toast_failed_delete" msgid="2180678019407244069">"Не удалось удалить некоторые документы"</string>
- <string name="share_via" msgid="8966594246261344259">"Поделиться"</string>
- <string name="copy_notification_title" msgid="6374299806748219777">"Копирование файлов"</string>
- <string name="move_notification_title" msgid="6193835179777284805">"Перемещение файлов"</string>
- <string name="delete_notification_title" msgid="3329403967712437496">"Удаление файлов…"</string>
- <string name="copy_remaining" msgid="6283790937387975095">"Осталось <xliff:g id="DURATION">%s</xliff:g>"</string>
- <plurals name="copy_begin" formatted="false" msgid="9071199452634086365">
- <item quantity="one">Копируется <xliff:g id="COUNT_1">%1$d</xliff:g> файл...</item>
- <item quantity="few">Копируется <xliff:g id="COUNT_1">%1$d</xliff:g> файла...</item>
- <item quantity="many">Копируется <xliff:g id="COUNT_1">%1$d</xliff:g> файлов...</item>
- <item quantity="other">Копируется <xliff:g id="COUNT_1">%1$d</xliff:g> файла...</item>
- </plurals>
- <plurals name="move_begin" formatted="false" msgid="8430330882138871643">
- <item quantity="one">Перемещение <xliff:g id="COUNT_1">%1$d</xliff:g> файла...</item>
- <item quantity="few">Перемещение <xliff:g id="COUNT_1">%1$d</xliff:g> файлов...</item>
- <item quantity="many">Перемещение <xliff:g id="COUNT_1">%1$d</xliff:g> файлов...</item>
- <item quantity="other">Перемещение <xliff:g id="COUNT_1">%1$d</xliff:g> файла...</item>
- </plurals>
- <plurals name="deleting" formatted="false" msgid="5054338566802559411">
- <item quantity="one">Удаление <xliff:g id="COUNT_1">%1$d</xliff:g> файла…</item>
- <item quantity="few">Удаление <xliff:g id="COUNT_1">%1$d</xliff:g> файлов…</item>
- <item quantity="many">Удаление <xliff:g id="COUNT_1">%1$d</xliff:g> файлов…</item>
- <item quantity="other">Удаление <xliff:g id="COUNT_1">%1$d</xliff:g> файла…</item>
- </plurals>
- <string name="undo" msgid="7905788502491742328">"Отменить"</string>
- <string name="copy_preparing" msgid="3896202461003039386">"Подготовка к копированию…"</string>
- <string name="move_preparing" msgid="2772219441375531410">"Подготовка…"</string>
- <string name="delete_preparing" msgid="5655813182533491992">"Подготовка к удалению…"</string>
- <string name="delete_progress" msgid="5399405983046157222">"<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="7160447124922897689">
- <item quantity="one">Не удалось скопировать <xliff:g id="COUNT_1">%1$d</xliff:g> файл</item>
- <item quantity="few">Не удалось скопировать <xliff:g id="COUNT_1">%1$d</xliff:g> файла</item>
- <item quantity="many">Не удалось скопировать <xliff:g id="COUNT_1">%1$d</xliff:g> файлов</item>
- <item quantity="other">Не удалось скопировать <xliff:g id="COUNT_1">%1$d</xliff:g> файла</item>
- </plurals>
- <plurals name="move_error_notification_title" formatted="false" msgid="2710901971014783012">
- <item quantity="one">Не удалось переместить <xliff:g id="COUNT_1">%1$d</xliff:g> файл</item>
- <item quantity="few">Не удалось переместить <xliff:g id="COUNT_1">%1$d</xliff:g> файла</item>
- <item quantity="many">Не удалось переместить <xliff:g id="COUNT_1">%1$d</xliff:g> файлов</item>
- <item quantity="other">Не удалось переместить <xliff:g id="COUNT_1">%1$d</xliff:g> файла</item>
- </plurals>
- <plurals name="delete_error_notification_title" formatted="false" msgid="7228393157786591199">
- <item quantity="one">Не удалось удалить <xliff:g id="COUNT_1">%1$d</xliff:g> файл</item>
- <item quantity="few">Не удалось удалить <xliff:g id="COUNT_1">%1$d</xliff:g> файла</item>
- <item quantity="many">Не удалось удалить <xliff:g id="COUNT_1">%1$d</xliff:g> файлов</item>
- <item quantity="other">Не удалось удалить <xliff:g id="COUNT_1">%1$d</xliff:g> файла</item>
- </plurals>
- <string name="notification_touch_for_details" msgid="6268189413228855582">"Нажмите, чтобы узнать подробности."</string>
- <string name="close" msgid="3043722427445528732">"Закрыть"</string>
- <string name="copy_failure_alert_content" msgid="4563147454522476183">"Не удалось скопировать следующие файлы: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="move_failure_alert_content" msgid="2635075788682922861">"Не удалось переместить следующие файлы: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="delete_failure_alert_content" msgid="892393767207938353">"Следующие файлы не были удалены: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="copy_converted_warning_content" msgid="5753861488218674361">"Формат этих файлов изменен: <xliff:g id="LIST">%1$s</xliff:g>."</string>
- <plurals name="clipboard_files_clipped" formatted="false" msgid="855459017537058539">
- <item quantity="one">Скопирован <xliff:g id="COUNT_1">%1$d</xliff:g> файл</item>
- <item quantity="few">Скопировано <xliff:g id="COUNT_1">%1$d</xliff:g> файла</item>
- <item quantity="many">Скопировано <xliff:g id="COUNT_1">%1$d</xliff:g> файлов</item>
- <item quantity="other">Скопированы <xliff:g id="COUNT_1">%1$d</xliff:g> файла</item>
- </plurals>
- <string name="clipboard_files_cannot_paste" msgid="2878324825602325706">"Не удается вставить сюда выбранные файлы"</string>
- <string name="menu_rename" msgid="7678802479104285353">"Переименовать"</string>
- <string name="rename_error" msgid="4203041674883412606">"Не удалось переименовать документ"</string>
- <string name="menu_eject_root" msgid="2768224615494227325">"Извлечь"</string>
- <string name="notification_copy_files_converted_title" msgid="3153573223054275181">"Формат некоторых файлов изменен"</string>
- <string name="open_external_dialog_request" msgid="5789329484285817629">"Открыть приложению \"<xliff:g id="APPNAME"><b>^1</b></xliff:g>\" доступ к папке \"<xliff:g id="DIRECTORY"><i>^2</i></xliff:g>\" на устройстве \"<xliff:g id="STORAGE"><i>^3</i></xliff:g>\"?"</string>
- <string name="open_external_dialog_request_primary_volume" msgid="6635562535713428688">"Открыть приложению \"<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="8899108702926347720">"Открыть приложению \"<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="4295278542972859268">"Больше не спрашивать"</string>
- <string name="allow" msgid="7225948811296386551">"Разрешить"</string>
- <string name="deny" msgid="2081879885755434506">"Отклонить"</string>
- <plurals name="elements_selected" formatted="false" msgid="1376955402452875047">
- <item quantity="one">Выбрано: <xliff:g id="COUNT_1">%1$d</xliff:g></item>
- <item quantity="few">Выбрано: <xliff:g id="COUNT_1">%1$d</xliff:g></item>
- <item quantity="many">Выбрано: <xliff:g id="COUNT_1">%1$d</xliff:g></item>
- <item quantity="other">Выбрано: <xliff:g id="COUNT_1">%1$d</xliff:g></item>
- </plurals>
- <plurals name="elements_dragged" formatted="false" msgid="3727204615215602228">
- <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> объект</item>
- <item quantity="few"><xliff:g id="COUNT_1">%1$d</xliff:g> объекта</item>
- <item quantity="many"><xliff:g id="COUNT_1">%1$d</xliff:g> объектов</item>
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> объекта</item>
- </plurals>
- <string name="delete_filename_confirmation_message" msgid="5312817725577537488">"Удалить файл \"<xliff:g id="NAME">%1$s</xliff:g>\"?"</string>
- <string name="delete_foldername_confirmation_message" msgid="5885501832257285329">"Удалить папку \"<xliff:g id="NAME">%1$s</xliff:g>\" со всем содержимым?"</string>
- <plurals name="delete_files_confirmation_message" formatted="false" msgid="8417505791395471802">
- <item quantity="one">Удалить <xliff:g id="COUNT_1">%1$d</xliff:g> файл?</item>
- <item quantity="few">Удалить <xliff:g id="COUNT_1">%1$d</xliff:g> файла?</item>
- <item quantity="many">Удалить <xliff:g id="COUNT_1">%1$d</xliff:g> файлов?</item>
- <item quantity="other">Удалить <xliff:g id="COUNT_1">%1$d</xliff:g> файла?</item>
- </plurals>
- <plurals name="delete_folders_confirmation_message" formatted="false" msgid="9185648028213507769">
- <item quantity="one">Удалить <xliff:g id="COUNT_1">%1$d</xliff:g> папку со всем содержимым?</item>
- <item quantity="few">Удалить <xliff:g id="COUNT_1">%1$d</xliff:g> папки со всем содержимым?</item>
- <item quantity="many">Удалить <xliff:g id="COUNT_1">%1$d</xliff:g> папок со всем содержимым?</item>
- <item quantity="other">Удалить <xliff:g id="COUNT_1">%1$d</xliff:g> папки со всем содержимым?</item>
- </plurals>
- <plurals name="delete_items_confirmation_message" formatted="false" msgid="5376214433530243459">
- <item quantity="one">Удалить <xliff:g id="COUNT_1">%1$d</xliff:g> объект?</item>
- <item quantity="few">Удалить <xliff:g id="COUNT_1">%1$d</xliff:g> объекта?</item>
- <item quantity="many">Удалить <xliff:g id="COUNT_1">%1$d</xliff:g> объектов?</item>
- <item quantity="other">Удалить <xliff:g id="COUNT_1">%1$d</xliff:g> объекта?</item>
- </plurals>
-</resources>
diff --git a/packages/DocumentsUI/res/values-si-rLK/strings.xml b/packages/DocumentsUI/res/values-si-rLK/strings.xml
deleted file mode 100644
index 9fd9be8..0000000
--- a/packages/DocumentsUI/res/values-si-rLK/strings.xml
+++ /dev/null
@@ -1,144 +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="app_label" msgid="1551050262492398204">"ගොනු"</string>
- <string name="downloads_label" msgid="959113951084633612">"බාගැනීම්"</string>
- <string name="title_open" msgid="4353228937663917801">"විවෘත වන්නේ"</string>
- <string name="title_save" msgid="2433679664882857999">"සුරකින්නේ"</string>
- <string name="menu_create_dir" msgid="2547620241173881754">"නව ෆෝල්ඩරය"</string>
- <string name="menu_grid" msgid="6878021334497835259">"ජාල පෙනුම"</string>
- <string name="menu_list" msgid="7279285939892417279">"ලැයිස්තු පෙනුම"</string>
- <string name="menu_sort" msgid="7677740407158414452">"අනුපිළිවෙලට සකසා ඇත්තේ"</string>
- <string name="menu_search" msgid="3816712084502856974">"සෙවීම"</string>
- <string name="menu_settings" msgid="8239065133341597825">"ගබඩා සැකසීම්"</string>
- <string name="menu_open" msgid="432922957274920903">"විවෘත කරන්න"</string>
- <string name="menu_save" msgid="2394743337684426338">"සුරකින්න"</string>
- <string name="menu_share" msgid="3075149983979628146">"බෙදාගන්න"</string>
- <string name="menu_delete" msgid="8138799623850614177">"මකන්න"</string>
- <string name="menu_select_all" msgid="8323579667348729928">"සියල්ල තෝරන්න"</string>
- <string name="menu_copy" msgid="3612326052677229148">"වෙත පිටපත් කරන්න..."</string>
- <string name="menu_move" msgid="1828090633118079817">"වෙත ගෙනයන්න..."</string>
- <string name="menu_new_window" msgid="1226032889278727538">"නව කවුළුව"</string>
- <string name="menu_cut_to_clipboard" msgid="2467149185452488383">"කපන්න"</string>
- <string name="menu_copy_to_clipboard" msgid="489311381979634291">"පිටපත් කරන්න"</string>
- <string name="menu_paste_from_clipboard" msgid="2071583031180257091">"අලවන්න"</string>
- <string name="menu_advanced_show" msgid="4693652895715631401">"අභ්යන්තර ආචයනය පෙන්වන්න"</string>
- <string name="menu_advanced_hide" msgid="4218809952721972589">"අභ්යන්තර ආචයනය සඟවන්න"</string>
- <string name="menu_file_size_show" msgid="3240323619260823076">"ගොනු ප්රමණය පෙන්වන්න"</string>
- <string name="menu_file_size_hide" msgid="8881975928502581042">"ගොනු ප්රමණය සඟවන්න"</string>
- <string name="button_select" msgid="527196987259139214">"තෝරන්න"</string>
- <string name="button_copy" msgid="8706475544635021302">"පිටපත් කිරීම"</string>
- <string name="button_move" msgid="2202666023104202232">"ගෙන යන්න"</string>
- <string name="button_dismiss" msgid="3714065566893946085">"ඉවතලන්න"</string>
- <string name="button_retry" msgid="4392027584153752797">"නැවත උත්සාහ කරන්න"</string>
- <string name="sort_name" msgid="9183560467917256779">"නමින්"</string>
- <string name="sort_date" msgid="586080032956151448">"වෙනස් කරන ලද දිනයෙන්"</string>
- <string name="sort_size" msgid="3350681319735474741">"ප්රමාණය මගින්"</string>
- <string name="drawer_open" msgid="4545466532430226949">"මුල් පෙන්වන්න"</string>
- <string name="drawer_close" msgid="7602734368552123318">"මුල් සඟවන්න"</string>
- <string name="save_error" msgid="6167009778003223664">"ලේඛනය සුරැකීමට අපොහොසත් විය"</string>
- <string name="create_error" msgid="3735649141335444215">"ෆෝල්ඩරය සැදීම අසාර්ථක විය"</string>
- <string name="query_error" msgid="5999895349602476581">"මේ මොහොතේ අන්තර්ගතය පූරණය කිරීමට නොහැකිය"</string>
- <string name="root_recent" msgid="4470053704320518133">"මෑත"</string>
- <string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> ඉතිරියි"</string>
- <string name="root_type_service" msgid="2178854894416775409">"ආචයන සේවා"</string>
- <string name="root_type_shortcut" msgid="3318760609471618093">"කෙටිමං"</string>
- <string name="root_type_device" msgid="7121342474653483538">"උපාංග"</string>
- <string name="root_type_apps" msgid="8838065367985945189">"තවත් යෙදුම්"</string>
- <string name="empty" msgid="7858882803708117596">"අයිතම නැත"</string>
- <string name="no_results" msgid="6622510343880730446">"%1$s හි තරඟ නැත"</string>
- <string name="toast_no_application" msgid="4632640357724698144">"ගොනුව විවෘත කළ නොහැකිය"</string>
- <string name="toast_failed_delete" msgid="2180678019407244069">"සමහර ලේඛන මැකීමට නොහැකි විය"</string>
- <string name="share_via" msgid="8966594246261344259">"හරහා බෙදාගන්න"</string>
- <string name="copy_notification_title" msgid="6374299806748219777">"ගොනු පිටපත් කරමින්"</string>
- <string name="move_notification_title" msgid="6193835179777284805">"ගොනු ගෙන යාම"</string>
- <string name="delete_notification_title" msgid="3329403967712437496">"ගොනු මකමින්"</string>
- <string name="copy_remaining" msgid="6283790937387975095">"<xliff:g id="DURATION">%s</xliff:g> ඉතිරියි"</string>
- <plurals name="copy_begin" formatted="false" msgid="9071199452634086365">
- <item quantity="one">ගොනු <xliff:g id="COUNT_1">%1$d</xliff:g> ක් පිටපත් කරමින්.</item>
- <item quantity="other">ගොනු <xliff:g id="COUNT_1">%1$d</xliff:g> ක් පිටපත් කරමින්.</item>
- </plurals>
- <plurals name="move_begin" formatted="false" msgid="8430330882138871643">
- <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="deleting" formatted="false" msgid="5054338566802559411">
- <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="7905788502491742328">"අස් කරන්න"</string>
- <string name="copy_preparing" msgid="3896202461003039386">"පිටපතක් සඳහා සූදානම් කරමින්..."</string>
- <string name="move_preparing" msgid="2772219441375531410">"ගෙන යාම සඳහා පිළියෙළ කරමින් ..."</string>
- <string name="delete_preparing" msgid="5655813182533491992">"මැකීම සඳහා සූදානම් කරමින්..."</string>
- <string name="delete_progress" msgid="5399405983046157222">"<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="7160447124922897689">
- <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="move_error_notification_title" formatted="false" msgid="2710901971014783012">
- <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_error_notification_title" formatted="false" msgid="7228393157786591199">
- <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="6268189413228855582">"විස්තර බැලීමට තට්ටු කරන්න"</string>
- <string name="close" msgid="3043722427445528732">"වසන්න"</string>
- <string name="copy_failure_alert_content" msgid="4563147454522476183">"මෙම ගොනු පිටපත් නොකරන ලදී: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="move_failure_alert_content" msgid="2635075788682922861">"මෙම ගොනු ගෙන නොයන ලදී: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="delete_failure_alert_content" msgid="892393767207938353">"මෙම ගොනු නොමකන ලදී: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="copy_converted_warning_content" msgid="5753861488218674361">"මෙම ගොනු වෙනත් ආකෘතියකට පරිවර්තනය කරන ලදී: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <plurals name="clipboard_files_clipped" formatted="false" msgid="855459017537058539">
- <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="clipboard_files_cannot_paste" msgid="2878324825602325706">"මෙම ස්ථානය තුළ තෝරාගත් ගොනු ඇලවිය නොහැක."</string>
- <string name="menu_rename" msgid="7678802479104285353">"යළි නම් කරන්න"</string>
- <string name="rename_error" msgid="4203041674883412606">"ලේඛනය යළි නම් කිරීම අසාර්ථක විය"</string>
- <string name="menu_eject_root" msgid="2768224615494227325">"පිටතට ගන්න"</string>
- <string name="notification_copy_files_converted_title" msgid="3153573223054275181">"සමහර ගොනු පරිවර්තනය කරන ලදී"</string>
- <string name="open_external_dialog_request" msgid="5789329484285817629">"<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="6635562535713428688">"<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="8899108702926347720">"<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="4295278542972859268">"නැවත අසන්න එපා"</string>
- <string name="allow" msgid="7225948811296386551">"අවසර දෙන්න"</string>
- <string name="deny" msgid="2081879885755434506">"ප්රතික්ෂේප කරන්න"</string>
- <plurals name="elements_selected" formatted="false" msgid="1376955402452875047">
- <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="3727204615215602228">
- <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="5312817725577537488">"\"<xliff:g id="NAME">%1$s</xliff:g>\" මකන්නද?"</string>
- <string name="delete_foldername_confirmation_message" msgid="5885501832257285329">"\"<xliff:g id="NAME">%1$s</xliff:g>\" ෆෝල්ඩරය හා එහි අන්තර්ගත මකන්නද?"</string>
- <plurals name="delete_files_confirmation_message" formatted="false" msgid="8417505791395471802">
- <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="9185648028213507769">
- <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="5376214433530243459">
- <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>
-</resources>
diff --git a/packages/DocumentsUI/res/values-sk/strings.xml b/packages/DocumentsUI/res/values-sk/strings.xml
deleted file mode 100644
index 1336694..0000000
--- a/packages/DocumentsUI/res/values-sk/strings.xml
+++ /dev/null
@@ -1,168 +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="app_label" msgid="1551050262492398204">"Súbory"</string>
- <string name="downloads_label" msgid="959113951084633612">"Stiahnuté súbory"</string>
- <string name="title_open" msgid="4353228937663917801">"Otvoriť z"</string>
- <string name="title_save" msgid="2433679664882857999">"Uložiť do"</string>
- <string name="menu_create_dir" msgid="2547620241173881754">"Nový priečinok"</string>
- <string name="menu_grid" msgid="6878021334497835259">"Zobrazenie mriežky"</string>
- <string name="menu_list" msgid="7279285939892417279">"Zobrazenie zoznamu"</string>
- <string name="menu_sort" msgid="7677740407158414452">"Zoradiť podľa"</string>
- <string name="menu_search" msgid="3816712084502856974">"Hľadať"</string>
- <string name="menu_settings" msgid="8239065133341597825">"Nastavenia úložiska"</string>
- <string name="menu_open" msgid="432922957274920903">"Otvoriť"</string>
- <string name="menu_save" msgid="2394743337684426338">"Uložiť"</string>
- <string name="menu_share" msgid="3075149983979628146">"Zdieľať"</string>
- <string name="menu_delete" msgid="8138799623850614177">"Odstrániť"</string>
- <string name="menu_select_all" msgid="8323579667348729928">"Vybrať všetko"</string>
- <string name="menu_copy" msgid="3612326052677229148">"Kopírovať do…"</string>
- <string name="menu_move" msgid="1828090633118079817">"Presunúť do…"</string>
- <string name="menu_new_window" msgid="1226032889278727538">"Nové okno"</string>
- <string name="menu_cut_to_clipboard" msgid="2467149185452488383">"Vystrihnúť"</string>
- <string name="menu_copy_to_clipboard" msgid="489311381979634291">"Kopírovať"</string>
- <string name="menu_paste_from_clipboard" msgid="2071583031180257091">"Prilepiť"</string>
- <string name="menu_advanced_show" msgid="4693652895715631401">"Zobraziť interné úložisko"</string>
- <string name="menu_advanced_hide" msgid="4218809952721972589">"Skryť interné úložisko"</string>
- <string name="menu_file_size_show" msgid="3240323619260823076">"Zobraziť veľkosť súboru"</string>
- <string name="menu_file_size_hide" msgid="8881975928502581042">"Skryť veľkosť súboru"</string>
- <string name="button_select" msgid="527196987259139214">"Vybrať"</string>
- <string name="button_copy" msgid="8706475544635021302">"Kopírovať"</string>
- <string name="button_move" msgid="2202666023104202232">"Presunúť"</string>
- <string name="button_dismiss" msgid="3714065566893946085">"Odmietnuť"</string>
- <string name="button_retry" msgid="4392027584153752797">"Skúsiť znova"</string>
- <string name="sort_name" msgid="9183560467917256779">"Podľa názvu"</string>
- <string name="sort_date" msgid="586080032956151448">"Podľa dátumu zmeny"</string>
- <string name="sort_size" msgid="3350681319735474741">"Podľa veľkosti"</string>
- <string name="drawer_open" msgid="4545466532430226949">"Zobraziť korene"</string>
- <string name="drawer_close" msgid="7602734368552123318">"Skryť korene"</string>
- <string name="save_error" msgid="6167009778003223664">"Dokument sa nepodarilo uložiť"</string>
- <string name="create_error" msgid="3735649141335444215">"Priečinok sa nepodarilo vytvoriť"</string>
- <string name="query_error" msgid="5999895349602476581">"Obsah momentálne nie je možné načítať"</string>
- <string name="root_recent" msgid="4470053704320518133">"Nedávne"</string>
- <string name="root_available_bytes" msgid="8568452858617033281">"Voľné <xliff:g id="SIZE">%1$s</xliff:g>"</string>
- <string name="root_type_service" msgid="2178854894416775409">"Služby úložiska"</string>
- <string name="root_type_shortcut" msgid="3318760609471618093">"Skratky"</string>
- <string name="root_type_device" msgid="7121342474653483538">"Zariadenia"</string>
- <string name="root_type_apps" msgid="8838065367985945189">"Ďalšie aplikácie"</string>
- <string name="empty" msgid="7858882803708117596">"Žiadne položky"</string>
- <string name="no_results" msgid="6622510343880730446">"Žiadne zhody – %1$s"</string>
- <string name="toast_no_application" msgid="4632640357724698144">"Súbor nie je možné otvoriť"</string>
- <string name="toast_failed_delete" msgid="2180678019407244069">"Niektoré dokumenty sa nepodarilo odstrániť"</string>
- <string name="share_via" msgid="8966594246261344259">"Zdieľať"</string>
- <string name="copy_notification_title" msgid="6374299806748219777">"Kopírovanie súborov"</string>
- <string name="move_notification_title" msgid="6193835179777284805">"Presúvajú sa súbory"</string>
- <string name="delete_notification_title" msgid="3329403967712437496">"Odstraňujú sa súbory"</string>
- <string name="copy_remaining" msgid="6283790937387975095">"Zostáva: <xliff:g id="DURATION">%s</xliff:g>"</string>
- <plurals name="copy_begin" formatted="false" msgid="9071199452634086365">
- <item quantity="few">Kopírujú sa <xliff:g id="COUNT_1">%1$d</xliff:g> súbory.</item>
- <item quantity="many">Kopíruje sa <xliff:g id="COUNT_1">%1$d</xliff:g> súboru.</item>
- <item quantity="other">Kopíruje sa <xliff:g id="COUNT_1">%1$d</xliff:g> súborov.</item>
- <item quantity="one">Kopíruje sa <xliff:g id="COUNT_0">%1$d</xliff:g> súbor.</item>
- </plurals>
- <plurals name="move_begin" formatted="false" msgid="8430330882138871643">
- <item quantity="few">Presúvajú sa <xliff:g id="COUNT_1">%1$d</xliff:g> súbory.</item>
- <item quantity="many">Presúva sa <xliff:g id="COUNT_1">%1$d</xliff:g> súboru.</item>
- <item quantity="other">Presúva sa <xliff:g id="COUNT_1">%1$d</xliff:g> súborov.</item>
- <item quantity="one">Presúva sa <xliff:g id="COUNT_0">%1$d</xliff:g> súbor.</item>
- </plurals>
- <plurals name="deleting" formatted="false" msgid="5054338566802559411">
- <item quantity="few">Odstraňujú sa <xliff:g id="COUNT_1">%1$d</xliff:g> súbory.</item>
- <item quantity="many">Odstraňuje sa <xliff:g id="COUNT_1">%1$d</xliff:g> súboru.</item>
- <item quantity="other">Odstraňuje sa <xliff:g id="COUNT_1">%1$d</xliff:g> súborov.</item>
- <item quantity="one">Odstraňuje sa <xliff:g id="COUNT_0">%1$d</xliff:g> súbor.</item>
- </plurals>
- <string name="undo" msgid="7905788502491742328">"Späť"</string>
- <string name="copy_preparing" msgid="3896202461003039386">"Pripravuje sa na kopírovanie..."</string>
- <string name="move_preparing" msgid="2772219441375531410">"Prebieha príprava na presunutie…"</string>
- <string name="delete_preparing" msgid="5655813182533491992">"Príprava na odstránenie…"</string>
- <string name="delete_progress" msgid="5399405983046157222">"<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="7160447124922897689">
- <item quantity="few">Nepodarilo sa skopírovať <xliff:g id="COUNT_1">%1$d</xliff:g> súbory</item>
- <item quantity="many">Nepodarilo sa skopírovať <xliff:g id="COUNT_1">%1$d</xliff:g> súboru</item>
- <item quantity="other">Nepodarilo sa skopírovať <xliff:g id="COUNT_1">%1$d</xliff:g> súborov</item>
- <item quantity="one">Nepodarilo sa skopírovať <xliff:g id="COUNT_0">%1$d</xliff:g> súbor</item>
- </plurals>
- <plurals name="move_error_notification_title" formatted="false" msgid="2710901971014783012">
- <item quantity="few"><xliff:g id="COUNT_1">%1$d</xliff:g> súbory nie je možné presunúť</item>
- <item quantity="many"><xliff:g id="COUNT_1">%1$d</xliff:g> súboru nie je možné presunúť</item>
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> súborov nie je možné presunúť</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> súbor nie je možné presunúť</item>
- </plurals>
- <plurals name="delete_error_notification_title" formatted="false" msgid="7228393157786591199">
- <item quantity="few">Nepodarilo sa odstrániť <xliff:g id="COUNT_1">%1$d</xliff:g> súbory</item>
- <item quantity="many">Nepodarilo sa odstrániť <xliff:g id="COUNT_1">%1$d</xliff:g> súboru</item>
- <item quantity="other">Nepodarilo sa odstrániť <xliff:g id="COUNT_1">%1$d</xliff:g> súborov</item>
- <item quantity="one">Nepodarilo sa odstrániť <xliff:g id="COUNT_0">%1$d</xliff:g> súbor</item>
- </plurals>
- <string name="notification_touch_for_details" msgid="6268189413228855582">"Klepnutím zobrazíte podrobnosti"</string>
- <string name="close" msgid="3043722427445528732">"Zavrieť"</string>
- <string name="copy_failure_alert_content" msgid="4563147454522476183">"Tieto súbory neboli skopírované: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="move_failure_alert_content" msgid="2635075788682922861">"Tieto súbory neboli presunuté: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="delete_failure_alert_content" msgid="892393767207938353">"Tieto súbory neboli odstránené: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="copy_converted_warning_content" msgid="5753861488218674361">"Tieto súbory boli konvertované do iného formátu: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <plurals name="clipboard_files_clipped" formatted="false" msgid="855459017537058539">
- <item quantity="few">Do schránky boli skopírované <xliff:g id="COUNT_1">%1$d</xliff:g> súbory.</item>
- <item quantity="many">Do schránky bolo skopírovaného <xliff:g id="COUNT_1">%1$d</xliff:g> súboru.</item>
- <item quantity="other">Do schránky bolo skopírovaných <xliff:g id="COUNT_1">%1$d</xliff:g> súborov.</item>
- <item quantity="one">Do schránky bol skopírovaný <xliff:g id="COUNT_0">%1$d</xliff:g> súbor.</item>
- </plurals>
- <string name="clipboard_files_cannot_paste" msgid="2878324825602325706">"Do tohto umiestnenia nie je možné prilepiť vybrané súbory"</string>
- <string name="menu_rename" msgid="7678802479104285353">"Premenovať"</string>
- <string name="rename_error" msgid="4203041674883412606">"Premenovanie dokumentu zlyhalo"</string>
- <string name="menu_eject_root" msgid="2768224615494227325">"Odpojiť"</string>
- <string name="notification_copy_files_converted_title" msgid="3153573223054275181">"Niektoré súbory boli konvertované"</string>
- <string name="open_external_dialog_request" msgid="5789329484285817629">"Udeliť aplikácii <xliff:g id="APPNAME"><b>^1</b></xliff:g> prístup k adresáru <xliff:g id="DIRECTORY"><i>^2</i></xliff:g> v úložisku <xliff:g id="STORAGE"><i>^3</i></xliff:g>?"</string>
- <string name="open_external_dialog_request_primary_volume" msgid="6635562535713428688">"Udeliť aplikácii <xliff:g id="APPNAME"><b>^1</b></xliff:g> prístup k adresáru <xliff:g id="DIRECTORY"><i>^2</i></xliff:g>?"</string>
- <string name="open_external_dialog_root_request" msgid="8899108702926347720">"Chcete aplikácii <xliff:g id="APPNAME"><b>^1</b></xliff:g> udeliť prístup k dátam (vrátane fotiek a videí) v úložisku <xliff:g id="STORAGE"><i>^2</i></xliff:g>?"</string>
- <string name="never_ask_again" msgid="4295278542972859268">"Nabudúce sa nepýtať"</string>
- <string name="allow" msgid="7225948811296386551">"Povoliť"</string>
- <string name="deny" msgid="2081879885755434506">"Zamietnuť"</string>
- <plurals name="elements_selected" formatted="false" msgid="1376955402452875047">
- <item quantity="few">Vybraté: <xliff:g id="COUNT_1">%1$d</xliff:g></item>
- <item quantity="many">Vybraté: <xliff:g id="COUNT_1">%1$d</xliff:g></item>
- <item quantity="other">Vybraté: <xliff:g id="COUNT_1">%1$d</xliff:g></item>
- <item quantity="one">Vybraté: <xliff:g id="COUNT_0">%1$d</xliff:g></item>
- </plurals>
- <plurals name="elements_dragged" formatted="false" msgid="3727204615215602228">
- <item quantity="few"><xliff:g id="COUNT_1">%1$d</xliff:g> položky</item>
- <item quantity="many"><xliff:g id="COUNT_1">%1$d</xliff:g> položky</item>
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> položiek</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> položka</item>
- </plurals>
- <string name="delete_filename_confirmation_message" msgid="5312817725577537488">"Odstrániť <xliff:g id="NAME">%1$s</xliff:g>?"</string>
- <string name="delete_foldername_confirmation_message" msgid="5885501832257285329">"Odstrániť priečinok <xliff:g id="NAME">%1$s</xliff:g> a jeho obsah?"</string>
- <plurals name="delete_files_confirmation_message" formatted="false" msgid="8417505791395471802">
- <item quantity="few">Odstrániť <xliff:g id="COUNT_1">%1$d</xliff:g> súbory?</item>
- <item quantity="many">Odstrániť <xliff:g id="COUNT_1">%1$d</xliff:g> súboru?</item>
- <item quantity="other">Odstrániť <xliff:g id="COUNT_1">%1$d</xliff:g> súborov?</item>
- <item quantity="one">Odstrániť <xliff:g id="COUNT_0">%1$d</xliff:g> súbor?</item>
- </plurals>
- <plurals name="delete_folders_confirmation_message" formatted="false" msgid="9185648028213507769">
- <item quantity="few">Odstrániť <xliff:g id="COUNT_1">%1$d</xliff:g> priečinky a ich obsah?</item>
- <item quantity="many">Odstrániť <xliff:g id="COUNT_1">%1$d</xliff:g> priečinka a jeho obsah?</item>
- <item quantity="other">Odstrániť <xliff:g id="COUNT_1">%1$d</xliff:g> priečinkov a ich obsah?</item>
- <item quantity="one">Odstrániť <xliff:g id="COUNT_0">%1$d</xliff:g> priečinok a jeho obsah?</item>
- </plurals>
- <plurals name="delete_items_confirmation_message" formatted="false" msgid="5376214433530243459">
- <item quantity="few">Odstrániť <xliff:g id="COUNT_1">%1$d</xliff:g> položky?</item>
- <item quantity="many">Odstrániť <xliff:g id="COUNT_1">%1$d</xliff:g> položky?</item>
- <item quantity="other">Odstrániť <xliff:g id="COUNT_1">%1$d</xliff:g> položiek?</item>
- <item quantity="one">Odstrániť <xliff:g id="COUNT_0">%1$d</xliff:g> položku?</item>
- </plurals>
-</resources>
diff --git a/packages/DocumentsUI/res/values-sl/strings.xml b/packages/DocumentsUI/res/values-sl/strings.xml
deleted file mode 100644
index a6a5fa4..0000000
--- a/packages/DocumentsUI/res/values-sl/strings.xml
+++ /dev/null
@@ -1,168 +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="app_label" msgid="1551050262492398204">"Datoteke"</string>
- <string name="downloads_label" msgid="959113951084633612">"Prenosi"</string>
- <string name="title_open" msgid="4353228937663917801">"Odpri iz mape"</string>
- <string name="title_save" msgid="2433679664882857999">"Shrani v"</string>
- <string name="menu_create_dir" msgid="2547620241173881754">"Nova mapa"</string>
- <string name="menu_grid" msgid="6878021334497835259">"Mrežni pogled"</string>
- <string name="menu_list" msgid="7279285939892417279">"Pogled seznama"</string>
- <string name="menu_sort" msgid="7677740407158414452">"Razvrsti glede na"</string>
- <string name="menu_search" msgid="3816712084502856974">"Iskanje"</string>
- <string name="menu_settings" msgid="8239065133341597825">"Nastavitve shrambe"</string>
- <string name="menu_open" msgid="432922957274920903">"Odpri"</string>
- <string name="menu_save" msgid="2394743337684426338">"Shrani"</string>
- <string name="menu_share" msgid="3075149983979628146">"Skupna raba"</string>
- <string name="menu_delete" msgid="8138799623850614177">"Izbriši"</string>
- <string name="menu_select_all" msgid="8323579667348729928">"Izberi vse"</string>
- <string name="menu_copy" msgid="3612326052677229148">"Kopiraj v …"</string>
- <string name="menu_move" msgid="1828090633118079817">"Premakni v ..."</string>
- <string name="menu_new_window" msgid="1226032889278727538">"Novo okno"</string>
- <string name="menu_cut_to_clipboard" msgid="2467149185452488383">"Izreži"</string>
- <string name="menu_copy_to_clipboard" msgid="489311381979634291">"Kopiraj"</string>
- <string name="menu_paste_from_clipboard" msgid="2071583031180257091">"Prilepi"</string>
- <string name="menu_advanced_show" msgid="4693652895715631401">"Pokaži notranjo shrambo"</string>
- <string name="menu_advanced_hide" msgid="4218809952721972589">"Skrij notranjo shrambo"</string>
- <string name="menu_file_size_show" msgid="3240323619260823076">"Pokaži velikost datoteke"</string>
- <string name="menu_file_size_hide" msgid="8881975928502581042">"Skrij velikost datoteke"</string>
- <string name="button_select" msgid="527196987259139214">"Izberi"</string>
- <string name="button_copy" msgid="8706475544635021302">"Kopiraj"</string>
- <string name="button_move" msgid="2202666023104202232">"Premik"</string>
- <string name="button_dismiss" msgid="3714065566893946085">"Opusti"</string>
- <string name="button_retry" msgid="4392027584153752797">"Poskusite znova"</string>
- <string name="sort_name" msgid="9183560467917256779">"Po imenu"</string>
- <string name="sort_date" msgid="586080032956151448">"Po datumu spremembe"</string>
- <string name="sort_size" msgid="3350681319735474741">"Po velikosti"</string>
- <string name="drawer_open" msgid="4545466532430226949">"Pokaži korene"</string>
- <string name="drawer_close" msgid="7602734368552123318">"Skrij korene"</string>
- <string name="save_error" msgid="6167009778003223664">"Dokumenta ni bilo mogoče shraniti"</string>
- <string name="create_error" msgid="3735649141335444215">"Mape ni bilo mogoče ustvariti"</string>
- <string name="query_error" msgid="5999895349602476581">"Vsebine trenutno ni mogoče naložiti"</string>
- <string name="root_recent" msgid="4470053704320518133">"Nedavno"</string>
- <string name="root_available_bytes" msgid="8568452858617033281">"Prosto: <xliff:g id="SIZE">%1$s</xliff:g>"</string>
- <string name="root_type_service" msgid="2178854894416775409">"Storitve shrambe"</string>
- <string name="root_type_shortcut" msgid="3318760609471618093">"Bližnjice"</string>
- <string name="root_type_device" msgid="7121342474653483538">"Naprave"</string>
- <string name="root_type_apps" msgid="8838065367985945189">"Več aplikacij"</string>
- <string name="empty" msgid="7858882803708117596">"Ni elementov"</string>
- <string name="no_results" msgid="6622510343880730446">"Tukaj ni ujemanj: %1$s"</string>
- <string name="toast_no_application" msgid="4632640357724698144">"Datoteke ni mogoče odpreti"</string>
- <string name="toast_failed_delete" msgid="2180678019407244069">"Nekaterih dokumentov ni mogoče izbrisati"</string>
- <string name="share_via" msgid="8966594246261344259">"Deli z drugimi prek"</string>
- <string name="copy_notification_title" msgid="6374299806748219777">"Kopiranje datotek"</string>
- <string name="move_notification_title" msgid="6193835179777284805">"Premikanje datotek"</string>
- <string name="delete_notification_title" msgid="3329403967712437496">"Brisanje datotek"</string>
- <string name="copy_remaining" msgid="6283790937387975095">"Še <xliff:g id="DURATION">%s</xliff:g>"</string>
- <plurals name="copy_begin" formatted="false" msgid="9071199452634086365">
- <item quantity="one">Kopiranje <xliff:g id="COUNT_1">%1$d</xliff:g> datoteke.</item>
- <item quantity="two">Kopiranje <xliff:g id="COUNT_1">%1$d</xliff:g> datotek.</item>
- <item quantity="few">Kopiranje <xliff:g id="COUNT_1">%1$d</xliff:g> datotek.</item>
- <item quantity="other">Kopiranje <xliff:g id="COUNT_1">%1$d</xliff:g> datotek.</item>
- </plurals>
- <plurals name="move_begin" formatted="false" msgid="8430330882138871643">
- <item quantity="one">Premikanje <xliff:g id="COUNT_1">%1$d</xliff:g> datoteke.</item>
- <item quantity="two">Premikanje <xliff:g id="COUNT_1">%1$d</xliff:g> datotek.</item>
- <item quantity="few">Premikanje <xliff:g id="COUNT_1">%1$d</xliff:g> datotek.</item>
- <item quantity="other">Premikanje <xliff:g id="COUNT_1">%1$d</xliff:g> datotek.</item>
- </plurals>
- <plurals name="deleting" formatted="false" msgid="5054338566802559411">
- <item quantity="one">Izbris <xliff:g id="COUNT_1">%1$d</xliff:g> datoteke</item>
- <item quantity="two">Izbris <xliff:g id="COUNT_1">%1$d</xliff:g> datotek</item>
- <item quantity="few">Izbris <xliff:g id="COUNT_1">%1$d</xliff:g> datotek</item>
- <item quantity="other">Izbris <xliff:g id="COUNT_1">%1$d</xliff:g> datotek</item>
- </plurals>
- <string name="undo" msgid="7905788502491742328">"Razveljavi"</string>
- <string name="copy_preparing" msgid="3896202461003039386">"Pripravljanje na kopiranje …"</string>
- <string name="move_preparing" msgid="2772219441375531410">"Priprava na premikanje …"</string>
- <string name="delete_preparing" msgid="5655813182533491992">"Pripravljanje na izbris …"</string>
- <string name="delete_progress" msgid="5399405983046157222">"<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="7160447124922897689">
- <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> datoteke ni bilo mogoče kopirati</item>
- <item quantity="two"><xliff:g id="COUNT_1">%1$d</xliff:g> datotek ni bilo mogoče kopirati</item>
- <item quantity="few"><xliff:g id="COUNT_1">%1$d</xliff:g> datotek ni bilo mogoče kopirati</item>
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> datotek ni bilo mogoče kopirati</item>
- </plurals>
- <plurals name="move_error_notification_title" formatted="false" msgid="2710901971014783012">
- <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> datoteke ni bilo mogoče premakniti</item>
- <item quantity="two"><xliff:g id="COUNT_1">%1$d</xliff:g> datotek ni bilo mogoče premakniti</item>
- <item quantity="few"><xliff:g id="COUNT_1">%1$d</xliff:g> datotek ni bilo mogoče premakniti</item>
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> datotek ni bilo mogoče premakniti</item>
- </plurals>
- <plurals name="delete_error_notification_title" formatted="false" msgid="7228393157786591199">
- <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> datoteke ni bilo mogoče izbrisati</item>
- <item quantity="two"><xliff:g id="COUNT_1">%1$d</xliff:g> datotek ni bilo mogoče izbrisati</item>
- <item quantity="few"><xliff:g id="COUNT_1">%1$d</xliff:g> datotek ni bilo mogoče izbrisati</item>
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> datotek ni bilo mogoče izbrisati</item>
- </plurals>
- <string name="notification_touch_for_details" msgid="6268189413228855582">"Dotaknite se za prikaz podrobnosti"</string>
- <string name="close" msgid="3043722427445528732">"Zapri"</string>
- <string name="copy_failure_alert_content" msgid="4563147454522476183">"Te datoteke niso bile kopirane: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="move_failure_alert_content" msgid="2635075788682922861">"Te datoteke niso bile premaknjene: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="delete_failure_alert_content" msgid="892393767207938353">"Te datoteke niso bile izbrisane: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="copy_converted_warning_content" msgid="5753861488218674361">"Te datoteke so bile spremenjene v drugo obliko zapisa: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <plurals name="clipboard_files_clipped" formatted="false" msgid="855459017537058539">
- <item quantity="one">V odložišče je bila kopirana <xliff:g id="COUNT_1">%1$d</xliff:g> datoteka.</item>
- <item quantity="two">V odložišče sta bili kopirani <xliff:g id="COUNT_1">%1$d</xliff:g> datoteki.</item>
- <item quantity="few">V odložišče so bile kopirane <xliff:g id="COUNT_1">%1$d</xliff:g> datoteke.</item>
- <item quantity="other">V odložišče je bilo kopiranih <xliff:g id="COUNT_1">%1$d</xliff:g> datotek.</item>
- </plurals>
- <string name="clipboard_files_cannot_paste" msgid="2878324825602325706">"Izbranih datotek ni mogoče prilepiti sem."</string>
- <string name="menu_rename" msgid="7678802479104285353">"Preimenuj"</string>
- <string name="rename_error" msgid="4203041674883412606">"Dokumenta ni bilo mogoče preimenovati"</string>
- <string name="menu_eject_root" msgid="2768224615494227325">"Izvrzi"</string>
- <string name="notification_copy_files_converted_title" msgid="3153573223054275181">"Nekatere datoteke so bile pretvorjene"</string>
- <string name="open_external_dialog_request" msgid="5789329484285817629">"Želite aplikaciji <xliff:g id="APPNAME"><b>^1</b></xliff:g> dovoliti dostop do imenika <xliff:g id="DIRECTORY"><i>^2</i></xliff:g> v shrambi <xliff:g id="STORAGE"><i>^3</i></xliff:g>?"</string>
- <string name="open_external_dialog_request_primary_volume" msgid="6635562535713428688">"Želite aplikaciji <xliff:g id="APPNAME"><b>^1</b></xliff:g> dovoliti dostop do imenika <xliff:g id="DIRECTORY"><i>^2</i></xliff:g>?"</string>
- <string name="open_external_dialog_root_request" msgid="8899108702926347720">"Odobrite aplikaciji <xliff:g id="APPNAME"><b>^1</b></xliff:g> dostop do podatkov, vključno s fotografijami in videoposnetki, v shrambi <xliff:g id="STORAGE"><i>^2</i></xliff:g>?"</string>
- <string name="never_ask_again" msgid="4295278542972859268">"Ne sprašuj več"</string>
- <string name="allow" msgid="7225948811296386551">"Dovoli"</string>
- <string name="deny" msgid="2081879885755434506">"Zavrni"</string>
- <plurals name="elements_selected" formatted="false" msgid="1376955402452875047">
- <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> izbran</item>
- <item quantity="two"><xliff:g id="COUNT_1">%1$d</xliff:g> izbrana</item>
- <item quantity="few"><xliff:g id="COUNT_1">%1$d</xliff:g> izbrani</item>
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> izbranih</item>
- </plurals>
- <plurals name="elements_dragged" formatted="false" msgid="3727204615215602228">
- <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> element</item>
- <item quantity="two"><xliff:g id="COUNT_1">%1$d</xliff:g> elementa</item>
- <item quantity="few"><xliff:g id="COUNT_1">%1$d</xliff:g> elementi</item>
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> elementov</item>
- </plurals>
- <string name="delete_filename_confirmation_message" msgid="5312817725577537488">"Ali želite izbrisati »<xliff:g id="NAME">%1$s</xliff:g>«?"</string>
- <string name="delete_foldername_confirmation_message" msgid="5885501832257285329">"Ali želite izbrisati mapo »<xliff:g id="NAME">%1$s</xliff:g>« in njeno vsebino?"</string>
- <plurals name="delete_files_confirmation_message" formatted="false" msgid="8417505791395471802">
- <item quantity="one">Ali želite izbrisati <xliff:g id="COUNT_1">%1$d</xliff:g> datoteko?</item>
- <item quantity="two">Ali želite izbrisati <xliff:g id="COUNT_1">%1$d</xliff:g> datoteki?</item>
- <item quantity="few">Ali želite izbrisati <xliff:g id="COUNT_1">%1$d</xliff:g> datoteke?</item>
- <item quantity="other">Ali želite izbrisati <xliff:g id="COUNT_1">%1$d</xliff:g> datotek?</item>
- </plurals>
- <plurals name="delete_folders_confirmation_message" formatted="false" msgid="9185648028213507769">
- <item quantity="one">Ali želite izbrisati <xliff:g id="COUNT_1">%1$d</xliff:g> mapo in njihovo vsebino?</item>
- <item quantity="two">Ali želite izbrisati <xliff:g id="COUNT_1">%1$d</xliff:g> mapi in njihovo vsebino?</item>
- <item quantity="few">Ali želite izbrisati <xliff:g id="COUNT_1">%1$d</xliff:g> mape in njihovo vsebino?</item>
- <item quantity="other">Ali želite izbrisati <xliff:g id="COUNT_1">%1$d</xliff:g> map in njihovo vsebino?</item>
- </plurals>
- <plurals name="delete_items_confirmation_message" formatted="false" msgid="5376214433530243459">
- <item quantity="one">Ali želite izbrisati <xliff:g id="COUNT_1">%1$d</xliff:g> element?</item>
- <item quantity="two">Ali želite izbrisati <xliff:g id="COUNT_1">%1$d</xliff:g> elementa?</item>
- <item quantity="few">Ali želite izbrisati <xliff:g id="COUNT_1">%1$d</xliff:g> elemente?</item>
- <item quantity="other">Ali želite izbrisati <xliff:g id="COUNT_1">%1$d</xliff:g> elementov?</item>
- </plurals>
-</resources>
diff --git a/packages/DocumentsUI/res/values-sq-rAL/strings.xml b/packages/DocumentsUI/res/values-sq-rAL/strings.xml
deleted file mode 100644
index 0f041a3..0000000
--- a/packages/DocumentsUI/res/values-sq-rAL/strings.xml
+++ /dev/null
@@ -1,144 +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="app_label" msgid="1551050262492398204">"Skedarët"</string>
- <string name="downloads_label" msgid="959113951084633612">"Shkarkimet"</string>
- <string name="title_open" msgid="4353228937663917801">"Hap nga"</string>
- <string name="title_save" msgid="2433679664882857999">"Ruaje te"</string>
- <string name="menu_create_dir" msgid="2547620241173881754">"Dosje e re"</string>
- <string name="menu_grid" msgid="6878021334497835259">"Pamje rrjete"</string>
- <string name="menu_list" msgid="7279285939892417279">"Pamje liste"</string>
- <string name="menu_sort" msgid="7677740407158414452">"Rendit sipas"</string>
- <string name="menu_search" msgid="3816712084502856974">"Kërko"</string>
- <string name="menu_settings" msgid="8239065133341597825">"Cilësimet e hapësirës ruajtëse"</string>
- <string name="menu_open" msgid="432922957274920903">"Hap"</string>
- <string name="menu_save" msgid="2394743337684426338">"Ruaj"</string>
- <string name="menu_share" msgid="3075149983979628146">"Shpërnda"</string>
- <string name="menu_delete" msgid="8138799623850614177">"Fshi"</string>
- <string name="menu_select_all" msgid="8323579667348729928">"Zgjidhi të gjitha"</string>
- <string name="menu_copy" msgid="3612326052677229148">"Kopjo te..."</string>
- <string name="menu_move" msgid="1828090633118079817">"Zhvendos te..."</string>
- <string name="menu_new_window" msgid="1226032889278727538">"Dritare e re"</string>
- <string name="menu_cut_to_clipboard" msgid="2467149185452488383">"Prit"</string>
- <string name="menu_copy_to_clipboard" msgid="489311381979634291">"Kopjo"</string>
- <string name="menu_paste_from_clipboard" msgid="2071583031180257091">"Ngjit"</string>
- <string name="menu_advanced_show" msgid="4693652895715631401">"Trego hapësirën e brendshme ruajtëse"</string>
- <string name="menu_advanced_hide" msgid="4218809952721972589">"Fshih hapësirën ruajtëse të brendshme"</string>
- <string name="menu_file_size_show" msgid="3240323619260823076">"Shfaq madhësinë e skedarit"</string>
- <string name="menu_file_size_hide" msgid="8881975928502581042">"Fshih madhësinë e skedarit"</string>
- <string name="button_select" msgid="527196987259139214">"Zgjidh"</string>
- <string name="button_copy" msgid="8706475544635021302">"Kopjo"</string>
- <string name="button_move" msgid="2202666023104202232">"Zhvendos"</string>
- <string name="button_dismiss" msgid="3714065566893946085">"Largoje"</string>
- <string name="button_retry" msgid="4392027584153752797">"Provo sërish"</string>
- <string name="sort_name" msgid="9183560467917256779">"Sipas emrit"</string>
- <string name="sort_date" msgid="586080032956151448">"Sipas datës së modifikimit"</string>
- <string name="sort_size" msgid="3350681319735474741">"Sipas madhësisë"</string>
- <string name="drawer_open" msgid="4545466532430226949">"Trego rrënjët"</string>
- <string name="drawer_close" msgid="7602734368552123318">"Fshih rrënjët"</string>
- <string name="save_error" msgid="6167009778003223664">"Ruajtja e dokumentit dështoi"</string>
- <string name="create_error" msgid="3735649141335444215">"Krijimi i dosjes dështoi"</string>
- <string name="query_error" msgid="5999895349602476581">"Përmbajtja nuk mund të ngarkohet për momentin"</string>
- <string name="root_recent" msgid="4470053704320518133">"Të kohëve të fundit"</string>
- <string name="root_available_bytes" msgid="8568452858617033281">"Të lirë: <xliff:g id="SIZE">%1$s</xliff:g>"</string>
- <string name="root_type_service" msgid="2178854894416775409">"Shërbimet e hapësirës ruajtëse"</string>
- <string name="root_type_shortcut" msgid="3318760609471618093">"Shkurtore"</string>
- <string name="root_type_device" msgid="7121342474653483538">"Pajisjet"</string>
- <string name="root_type_apps" msgid="8838065367985945189">"Aplikacione të tjera"</string>
- <string name="empty" msgid="7858882803708117596">"Nuk ka artikuj"</string>
- <string name="no_results" msgid="6622510343880730446">"Nuk ka asnjë përputhje në %1$s"</string>
- <string name="toast_no_application" msgid="4632640357724698144">"Skedari nuk mund të hapet"</string>
- <string name="toast_failed_delete" msgid="2180678019407244069">"E pamundur të fshihen disa dokumente"</string>
- <string name="share_via" msgid="8966594246261344259">"Shpërnda publikisht përmes"</string>
- <string name="copy_notification_title" msgid="6374299806748219777">"Po kopjon skedarët"</string>
- <string name="move_notification_title" msgid="6193835179777284805">"Po zhvendos skedarët"</string>
- <string name="delete_notification_title" msgid="3329403967712437496">"Po fshin skedarët"</string>
- <string name="copy_remaining" msgid="6283790937387975095">"<xliff:g id="DURATION">%s</xliff:g> të mbetura"</string>
- <plurals name="copy_begin" formatted="false" msgid="9071199452634086365">
- <item quantity="other">Po kopjon <xliff:g id="COUNT_1">%1$d</xliff:g> skedarë.</item>
- <item quantity="one">Po kopjon <xliff:g id="COUNT_0">%1$d</xliff:g> skedar.</item>
- </plurals>
- <plurals name="move_begin" formatted="false" msgid="8430330882138871643">
- <item quantity="other">Po zhvendos <xliff:g id="COUNT_1">%1$d</xliff:g> skedarë.</item>
- <item quantity="one">Po zhvendos <xliff:g id="COUNT_0">%1$d</xliff:g> skedar.</item>
- </plurals>
- <plurals name="deleting" formatted="false" msgid="5054338566802559411">
- <item quantity="other">Po fshin <xliff:g id="COUNT_1">%1$d</xliff:g> skedarë.</item>
- <item quantity="one">Po fshin <xliff:g id="COUNT_0">%1$d</xliff:g> skedar.</item>
- </plurals>
- <string name="undo" msgid="7905788502491742328">"Zhbëj"</string>
- <string name="copy_preparing" msgid="3896202461003039386">"Po përgatitet për kopjimin…"</string>
- <string name="move_preparing" msgid="2772219441375531410">"Po përgatitet për zhvendosjen…"</string>
- <string name="delete_preparing" msgid="5655813182533491992">"Po përgatitet për fshirje…"</string>
- <string name="delete_progress" msgid="5399405983046157222">"<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="7160447124922897689">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> skedarë nuk mund të kopjoheshin</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> skedar nuk mund të kopjohej</item>
- </plurals>
- <plurals name="move_error_notification_title" formatted="false" msgid="2710901971014783012">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> skedarë nuk mund të zhvendoseshin</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> skedar nuk mund të zhvendosej</item>
- </plurals>
- <plurals name="delete_error_notification_title" formatted="false" msgid="7228393157786591199">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> skedarë nuk mund të fshiheshin</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> skedar nuk mund të fshihej</item>
- </plurals>
- <string name="notification_touch_for_details" msgid="6268189413228855582">"Trokit për të parë detajet"</string>
- <string name="close" msgid="3043722427445528732">"Mbyll"</string>
- <string name="copy_failure_alert_content" msgid="4563147454522476183">"Këta skedarë nuk u kopjuan: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="move_failure_alert_content" msgid="2635075788682922861">"Këta skedarë nuk u zhvendosën: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="delete_failure_alert_content" msgid="892393767207938353">"Këta skedarë nuk u fshinë: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="copy_converted_warning_content" msgid="5753861488218674361">"Këta skedarë janë konvertuar në format tjetër: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <plurals name="clipboard_files_clipped" formatted="false" msgid="855459017537058539">
- <item quantity="other">U kopjuan <xliff:g id="COUNT_1">%1$d</xliff:g> skedarë në kujtesën e fragmenteve.</item>
- <item quantity="one">U kopjua <xliff:g id="COUNT_0">%1$d</xliff:g> skedar në kujtesën e fragmenteve.</item>
- </plurals>
- <string name="clipboard_files_cannot_paste" msgid="2878324825602325706">"Skedarët e zgjedhur nuk mund të ngjiten në këtë vendndodhje."</string>
- <string name="menu_rename" msgid="7678802479104285353">"Riemërto"</string>
- <string name="rename_error" msgid="4203041674883412606">"Riemërtimi i dokumentit dështoi"</string>
- <string name="menu_eject_root" msgid="2768224615494227325">"Nxirr"</string>
- <string name="notification_copy_files_converted_title" msgid="3153573223054275181">"Disa skedarë u konvertuan"</string>
- <string name="open_external_dialog_request" msgid="5789329484285817629">"Jepi aplikacionit <xliff:g id="APPNAME"><b>^1</b></xliff:g> qasje te direktoria <xliff:g id="DIRECTORY"><i>^2</i></xliff:g> në <xliff:g id="STORAGE"><i>^3</i></xliff:g>?"</string>
- <string name="open_external_dialog_request_primary_volume" msgid="6635562535713428688">"T\'i jepet aplikacionit <xliff:g id="APPNAME"><b>^1</b></xliff:g> qasje te direktoria <xliff:g id="DIRECTORY"><i>^2</i></xliff:g>?"</string>
- <string name="open_external_dialog_root_request" msgid="8899108702926347720">"T\'i jepet aplikacionit <xliff:g id="APPNAME"><b>^1</b></xliff:g> qasje te të dhënat, duke përfshirë fotografitë dhe videot, në <xliff:g id="STORAGE"><i>^2</i></xliff:g>?"</string>
- <string name="never_ask_again" msgid="4295278542972859268">"Mos pyet përsëri"</string>
- <string name="allow" msgid="7225948811296386551">"Lejo"</string>
- <string name="deny" msgid="2081879885755434506">"Moho"</string>
- <plurals name="elements_selected" formatted="false" msgid="1376955402452875047">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> të zgjedhur</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> i zgjedhur</item>
- </plurals>
- <plurals name="elements_dragged" formatted="false" msgid="3727204615215602228">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> artikuj</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> artikull</item>
- </plurals>
- <string name="delete_filename_confirmation_message" msgid="5312817725577537488">"Të fshihet \"<xliff:g id="NAME">%1$s</xliff:g>\"?"</string>
- <string name="delete_foldername_confirmation_message" msgid="5885501832257285329">"Të fshihet dosja \"<xliff:g id="NAME">%1$s</xliff:g>\" dhe përmbajtja e saj?"</string>
- <plurals name="delete_files_confirmation_message" formatted="false" msgid="8417505791395471802">
- <item quantity="other">Të fshihen <xliff:g id="COUNT_1">%1$d</xliff:g> skedarë?</item>
- <item quantity="one">Të fshihet <xliff:g id="COUNT_0">%1$d</xliff:g> skedar?</item>
- </plurals>
- <plurals name="delete_folders_confirmation_message" formatted="false" msgid="9185648028213507769">
- <item quantity="other">Të fshihen <xliff:g id="COUNT_1">%1$d</xliff:g> dosje dhe përmbajtjet e saj?</item>
- <item quantity="one">Të fshihet <xliff:g id="COUNT_0">%1$d</xliff:g> dosje dhe përmbajtjet e saj?</item>
- </plurals>
- <plurals name="delete_items_confirmation_message" formatted="false" msgid="5376214433530243459">
- <item quantity="other">Të fshihen <xliff:g id="COUNT_1">%1$d</xliff:g> artikuj?</item>
- <item quantity="one">Të fshihet <xliff:g id="COUNT_0">%1$d</xliff:g> artikull?</item>
- </plurals>
-</resources>
diff --git a/packages/DocumentsUI/res/values-sr/strings.xml b/packages/DocumentsUI/res/values-sr/strings.xml
deleted file mode 100644
index cd2e4df..0000000
--- a/packages/DocumentsUI/res/values-sr/strings.xml
+++ /dev/null
@@ -1,156 +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="app_label" msgid="1551050262492398204">"Датотеке"</string>
- <string name="downloads_label" msgid="959113951084633612">"Преузимања"</string>
- <string name="title_open" msgid="4353228937663917801">"Отвори са"</string>
- <string name="title_save" msgid="2433679664882857999">"Сачувај у"</string>
- <string name="menu_create_dir" msgid="2547620241173881754">"Нови директоријум"</string>
- <string name="menu_grid" msgid="6878021334497835259">"Приказ мреже"</string>
- <string name="menu_list" msgid="7279285939892417279">"Приказ листе"</string>
- <string name="menu_sort" msgid="7677740407158414452">"Сортирај према"</string>
- <string name="menu_search" msgid="3816712084502856974">"Претражи"</string>
- <string name="menu_settings" msgid="8239065133341597825">"Подешавања меморије"</string>
- <string name="menu_open" msgid="432922957274920903">"Отвори"</string>
- <string name="menu_save" msgid="2394743337684426338">"Сачувај"</string>
- <string name="menu_share" msgid="3075149983979628146">"Дели"</string>
- <string name="menu_delete" msgid="8138799623850614177">"Избриши"</string>
- <string name="menu_select_all" msgid="8323579667348729928">"Изабери све"</string>
- <string name="menu_copy" msgid="3612326052677229148">"Копирај на..."</string>
- <string name="menu_move" msgid="1828090633118079817">"Премести у..."</string>
- <string name="menu_new_window" msgid="1226032889278727538">"Нови прозор"</string>
- <string name="menu_cut_to_clipboard" msgid="2467149185452488383">"Исеци"</string>
- <string name="menu_copy_to_clipboard" msgid="489311381979634291">"Копирај"</string>
- <string name="menu_paste_from_clipboard" msgid="2071583031180257091">"Налепи"</string>
- <string name="menu_advanced_show" msgid="4693652895715631401">"Прикажи интерну меморију"</string>
- <string name="menu_advanced_hide" msgid="4218809952721972589">"Сакриј интерну меморију"</string>
- <string name="menu_file_size_show" msgid="3240323619260823076">"Прикажи величину датотеке"</string>
- <string name="menu_file_size_hide" msgid="8881975928502581042">"Сакриј величину датотеке"</string>
- <string name="button_select" msgid="527196987259139214">"Изабери"</string>
- <string name="button_copy" msgid="8706475544635021302">"Копирај"</string>
- <string name="button_move" msgid="2202666023104202232">"Премести"</string>
- <string name="button_dismiss" msgid="3714065566893946085">"Одбаци"</string>
- <string name="button_retry" msgid="4392027584153752797">"Покушај поново"</string>
- <string name="sort_name" msgid="9183560467917256779">"Према имену"</string>
- <string name="sort_date" msgid="586080032956151448">"Према датуму измене"</string>
- <string name="sort_size" msgid="3350681319735474741">"Према величини"</string>
- <string name="drawer_open" msgid="4545466532430226949">"Прикажи основне елементе"</string>
- <string name="drawer_close" msgid="7602734368552123318">"Сакриј основне елементе"</string>
- <string name="save_error" msgid="6167009778003223664">"Чување документа није успело"</string>
- <string name="create_error" msgid="3735649141335444215">"Директоријум није направљен"</string>
- <string name="query_error" msgid="5999895349602476581">"Учитавање садржаја тренутно није могуће"</string>
- <string name="root_recent" msgid="4470053704320518133">"Недавно"</string>
- <string name="root_available_bytes" msgid="8568452858617033281">"Слободно је <xliff:g id="SIZE">%1$s</xliff:g>"</string>
- <string name="root_type_service" msgid="2178854894416775409">"Услуге складиштења"</string>
- <string name="root_type_shortcut" msgid="3318760609471618093">"Пречице"</string>
- <string name="root_type_device" msgid="7121342474653483538">"Уређаји"</string>
- <string name="root_type_apps" msgid="8838065367985945189">"Још апликација"</string>
- <string name="empty" msgid="7858882803708117596">"Нема ставки"</string>
- <string name="no_results" msgid="6622510343880730446">"Нема подударања у %1$s"</string>
- <string name="toast_no_application" msgid="4632640357724698144">"Отварање датотеке није успело"</string>
- <string name="toast_failed_delete" msgid="2180678019407244069">"Није могуће избрисати неке документе"</string>
- <string name="share_via" msgid="8966594246261344259">"Делите преко"</string>
- <string name="copy_notification_title" msgid="6374299806748219777">"Копирање датотека"</string>
- <string name="move_notification_title" msgid="6193835179777284805">"Датотеке се премештају"</string>
- <string name="delete_notification_title" msgid="3329403967712437496">"Датотеке се бришу"</string>
- <string name="copy_remaining" msgid="6283790937387975095">"Још <xliff:g id="DURATION">%s</xliff:g>"</string>
- <plurals name="copy_begin" formatted="false" msgid="9071199452634086365">
- <item quantity="one">Копирање <xliff:g id="COUNT_1">%1$d</xliff:g> датотеке.</item>
- <item quantity="few">Копирање <xliff:g id="COUNT_1">%1$d</xliff:g> датотеке.</item>
- <item quantity="other">Копирање <xliff:g id="COUNT_1">%1$d</xliff:g> датотека.</item>
- </plurals>
- <plurals name="move_begin" formatted="false" msgid="8430330882138871643">
- <item quantity="one">Премешта се <xliff:g id="COUNT_1">%1$d</xliff:g> датотека.</item>
- <item quantity="few">Премештају се <xliff:g id="COUNT_1">%1$d</xliff:g> датотеке.</item>
- <item quantity="other">Премешта се <xliff:g id="COUNT_1">%1$d</xliff:g> датотека.</item>
- </plurals>
- <plurals name="deleting" formatted="false" msgid="5054338566802559411">
- <item quantity="one">Брише се <xliff:g id="COUNT_1">%1$d</xliff:g> датотека.</item>
- <item quantity="few">Бришу се <xliff:g id="COUNT_1">%1$d</xliff:g> датотеке.</item>
- <item quantity="other">Брише се <xliff:g id="COUNT_1">%1$d</xliff:g> датотека.</item>
- </plurals>
- <string name="undo" msgid="7905788502491742328">"Опозови"</string>
- <string name="copy_preparing" msgid="3896202461003039386">"Припрема се копирање…"</string>
- <string name="move_preparing" msgid="2772219441375531410">"Припрема се премештање..."</string>
- <string name="delete_preparing" msgid="5655813182533491992">"Припрема се брисање…"</string>
- <string name="delete_progress" msgid="5399405983046157222">"<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="7160447124922897689">
- <item quantity="one">Нисмо успели да копирамо <xliff:g id="COUNT_1">%1$d</xliff:g> датотеку</item>
- <item quantity="few">Нисмо успели да копирамо <xliff:g id="COUNT_1">%1$d</xliff:g> датотеке</item>
- <item quantity="other">Нисмо успели да копирамо <xliff:g id="COUNT_1">%1$d</xliff:g> датотека</item>
- </plurals>
- <plurals name="move_error_notification_title" formatted="false" msgid="2710901971014783012">
- <item quantity="one">Премештање <xliff:g id="COUNT_1">%1$d</xliff:g> датотеке није успело</item>
- <item quantity="few">Премештање <xliff:g id="COUNT_1">%1$d</xliff:g> датотеке није успело</item>
- <item quantity="other">Премештање <xliff:g id="COUNT_1">%1$d</xliff:g> датотека није успело</item>
- </plurals>
- <plurals name="delete_error_notification_title" formatted="false" msgid="7228393157786591199">
- <item quantity="one">Брисање <xliff:g id="COUNT_1">%1$d</xliff:g> датотеке није успело</item>
- <item quantity="few">Брисање <xliff:g id="COUNT_1">%1$d</xliff:g> датотеке није успело</item>
- <item quantity="other">Брисање <xliff:g id="COUNT_1">%1$d</xliff:g> датотека није успело</item>
- </plurals>
- <string name="notification_touch_for_details" msgid="6268189413228855582">"Додирните да бисте приказали детаље"</string>
- <string name="close" msgid="3043722427445528732">"Затвори"</string>
- <string name="copy_failure_alert_content" msgid="4563147454522476183">"Следеће датотеке нису копиране: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="move_failure_alert_content" msgid="2635075788682922861">"Следеће датотеке нису премештене: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="delete_failure_alert_content" msgid="892393767207938353">"Следеће датотеке нису избрисане: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="copy_converted_warning_content" msgid="5753861488218674361">"Ове датотеке су конвертоване у други формат: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <plurals name="clipboard_files_clipped" formatted="false" msgid="855459017537058539">
- <item quantity="one">Копирали сте <xliff:g id="COUNT_1">%1$d</xliff:g> датотеку у привремену меморију.</item>
- <item quantity="few">Копирали сте <xliff:g id="COUNT_1">%1$d</xliff:g> датотеке у привремену меморију.</item>
- <item quantity="other">Копирали сте <xliff:g id="COUNT_1">%1$d</xliff:g> датотека у привремену меморију.</item>
- </plurals>
- <string name="clipboard_files_cannot_paste" msgid="2878324825602325706">"Изабране датотеке не могу да се налепе на овој локацији."</string>
- <string name="menu_rename" msgid="7678802479104285353">"Преименуј"</string>
- <string name="rename_error" msgid="4203041674883412606">"Преименовање документа није успело"</string>
- <string name="menu_eject_root" msgid="2768224615494227325">"Избаци"</string>
- <string name="notification_copy_files_converted_title" msgid="3153573223054275181">"Неке датотеке су конвертоване"</string>
- <string name="open_external_dialog_request" msgid="5789329484285817629">"Желите ли да апликацији <xliff:g id="APPNAME"><b>^1</b></xliff:g> одобрите приступ директоријуму <xliff:g id="DIRECTORY"><i>^2</i></xliff:g> на меморијском простору <xliff:g id="STORAGE"><i>^3</i></xliff:g>?"</string>
- <string name="open_external_dialog_request_primary_volume" msgid="6635562535713428688">"Желите да дозволите да <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="8899108702926347720">"Желите да ли да дозволите да апликација <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="4295278542972859268">"Не питај поново"</string>
- <string name="allow" msgid="7225948811296386551">"Дозволи"</string>
- <string name="deny" msgid="2081879885755434506">"Одбиј"</string>
- <plurals name="elements_selected" formatted="false" msgid="1376955402452875047">
- <item quantity="one">Изабрана је <xliff:g id="COUNT_1">%1$d</xliff:g> ставка</item>
- <item quantity="few">Изабране су <xliff:g id="COUNT_1">%1$d</xliff:g> ставке</item>
- <item quantity="other">Изабрано је <xliff:g id="COUNT_1">%1$d</xliff:g> ставки</item>
- </plurals>
- <plurals name="elements_dragged" formatted="false" msgid="3727204615215602228">
- <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> ставка</item>
- <item quantity="few"><xliff:g id="COUNT_1">%1$d</xliff:g> ставке</item>
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> ставки</item>
- </plurals>
- <string name="delete_filename_confirmation_message" msgid="5312817725577537488">"Желите ли да избришете „<xliff:g id="NAME">%1$s</xliff:g>“?"</string>
- <string name="delete_foldername_confirmation_message" msgid="5885501832257285329">"Желите ли да избришете директоријум „<xliff:g id="NAME">%1$s</xliff:g>“ и његов садржај?"</string>
- <plurals name="delete_files_confirmation_message" formatted="false" msgid="8417505791395471802">
- <item quantity="one">Желите ли да избришете <xliff:g id="COUNT_1">%1$d</xliff:g> датотеку?</item>
- <item quantity="few">Желите ли да избришете <xliff:g id="COUNT_1">%1$d</xliff:g> датотеке?</item>
- <item quantity="other">Желите ли да избришете <xliff:g id="COUNT_1">%1$d</xliff:g> датотека?</item>
- </plurals>
- <plurals name="delete_folders_confirmation_message" formatted="false" msgid="9185648028213507769">
- <item quantity="one">Желите ли да избришете <xliff:g id="COUNT_1">%1$d</xliff:g> директоријум и њихов садржај?</item>
- <item quantity="few">Желите ли да избришете <xliff:g id="COUNT_1">%1$d</xliff:g> директоријума и њихов садржај?</item>
- <item quantity="other">Желите ли да избришете <xliff:g id="COUNT_1">%1$d</xliff:g> директоријума и њихов садржај?</item>
- </plurals>
- <plurals name="delete_items_confirmation_message" formatted="false" msgid="5376214433530243459">
- <item quantity="one">Желите ли да избришете <xliff:g id="COUNT_1">%1$d</xliff:g> ставку?</item>
- <item quantity="few">Желите ли да избришете <xliff:g id="COUNT_1">%1$d</xliff:g> ставке?</item>
- <item quantity="other">Желите ли да избришете <xliff:g id="COUNT_1">%1$d</xliff:g> ставки?</item>
- </plurals>
-</resources>
diff --git a/packages/DocumentsUI/res/values-sv/strings.xml b/packages/DocumentsUI/res/values-sv/strings.xml
deleted file mode 100644
index 4f23527..0000000
--- a/packages/DocumentsUI/res/values-sv/strings.xml
+++ /dev/null
@@ -1,144 +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="app_label" msgid="1551050262492398204">"Filer"</string>
- <string name="downloads_label" msgid="959113951084633612">"Nedladdningar"</string>
- <string name="title_open" msgid="4353228937663917801">"Öppna från"</string>
- <string name="title_save" msgid="2433679664882857999">"Spara till"</string>
- <string name="menu_create_dir" msgid="2547620241173881754">"Ny mapp"</string>
- <string name="menu_grid" msgid="6878021334497835259">"Rutnätsvy"</string>
- <string name="menu_list" msgid="7279285939892417279">"Listvy"</string>
- <string name="menu_sort" msgid="7677740407158414452">"Sortera efter"</string>
- <string name="menu_search" msgid="3816712084502856974">"Sök"</string>
- <string name="menu_settings" msgid="8239065133341597825">"Lagringsinställningar"</string>
- <string name="menu_open" msgid="432922957274920903">"Öppna"</string>
- <string name="menu_save" msgid="2394743337684426338">"Spara"</string>
- <string name="menu_share" msgid="3075149983979628146">"Dela"</string>
- <string name="menu_delete" msgid="8138799623850614177">"Ta bort"</string>
- <string name="menu_select_all" msgid="8323579667348729928">"Markera allt"</string>
- <string name="menu_copy" msgid="3612326052677229148">"Kopiera till …"</string>
- <string name="menu_move" msgid="1828090633118079817">"Flytta till ..."</string>
- <string name="menu_new_window" msgid="1226032889278727538">"Nytt fönster"</string>
- <string name="menu_cut_to_clipboard" msgid="2467149185452488383">"Klipp ut"</string>
- <string name="menu_copy_to_clipboard" msgid="489311381979634291">"Kopiera"</string>
- <string name="menu_paste_from_clipboard" msgid="2071583031180257091">"Klistra in"</string>
- <string name="menu_advanced_show" msgid="4693652895715631401">"Visa internminne"</string>
- <string name="menu_advanced_hide" msgid="4218809952721972589">"Dölj internminne"</string>
- <string name="menu_file_size_show" msgid="3240323619260823076">"Visa filstorlek"</string>
- <string name="menu_file_size_hide" msgid="8881975928502581042">"Dölj filstorlek"</string>
- <string name="button_select" msgid="527196987259139214">"Välj"</string>
- <string name="button_copy" msgid="8706475544635021302">"Kopiera"</string>
- <string name="button_move" msgid="2202666023104202232">"Flytta"</string>
- <string name="button_dismiss" msgid="3714065566893946085">"Ta bort permanent"</string>
- <string name="button_retry" msgid="4392027584153752797">"Försök igen"</string>
- <string name="sort_name" msgid="9183560467917256779">"Efter namn"</string>
- <string name="sort_date" msgid="586080032956151448">"Efter ändringsdatum"</string>
- <string name="sort_size" msgid="3350681319735474741">"Efter storlek"</string>
- <string name="drawer_open" msgid="4545466532430226949">"Visa rötter"</string>
- <string name="drawer_close" msgid="7602734368552123318">"Dölj rötter"</string>
- <string name="save_error" msgid="6167009778003223664">"Det gick inte att spara dokumentet"</string>
- <string name="create_error" msgid="3735649141335444215">"Det gick inte att skapa mappen"</string>
- <string name="query_error" msgid="5999895349602476581">"Det går inte att läsa in innehållet just nu"</string>
- <string name="root_recent" msgid="4470053704320518133">"Senaste"</string>
- <string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> ledigt"</string>
- <string name="root_type_service" msgid="2178854894416775409">"Lagringstjänster"</string>
- <string name="root_type_shortcut" msgid="3318760609471618093">"Genvägar"</string>
- <string name="root_type_device" msgid="7121342474653483538">"Enheter"</string>
- <string name="root_type_apps" msgid="8838065367985945189">"Fler appar"</string>
- <string name="empty" msgid="7858882803708117596">"Inga objekt"</string>
- <string name="no_results" msgid="6622510343880730446">"Det finns inga träffar i %1$s"</string>
- <string name="toast_no_application" msgid="4632640357724698144">"Det går inte att öppna filen"</string>
- <string name="toast_failed_delete" msgid="2180678019407244069">"Det gick inte att ta bort vissa dokument"</string>
- <string name="share_via" msgid="8966594246261344259">"Dela via"</string>
- <string name="copy_notification_title" msgid="6374299806748219777">"Kopierar filer"</string>
- <string name="move_notification_title" msgid="6193835179777284805">"Filer flyttas"</string>
- <string name="delete_notification_title" msgid="3329403967712437496">"Filerna tas bort"</string>
- <string name="copy_remaining" msgid="6283790937387975095">"<xliff:g id="DURATION">%s</xliff:g> återstår"</string>
- <plurals name="copy_begin" formatted="false" msgid="9071199452634086365">
- <item quantity="other">Kopierar <xliff:g id="COUNT_1">%1$d</xliff:g> filer.</item>
- <item quantity="one">Kopierar <xliff:g id="COUNT_0">%1$d</xliff:g> fil.</item>
- </plurals>
- <plurals name="move_begin" formatted="false" msgid="8430330882138871643">
- <item quantity="other">Flyttar <xliff:g id="COUNT_1">%1$d</xliff:g> filer.</item>
- <item quantity="one">Flyttar <xliff:g id="COUNT_0">%1$d</xliff:g> fil.</item>
- </plurals>
- <plurals name="deleting" formatted="false" msgid="5054338566802559411">
- <item quantity="other">Raderar <xliff:g id="COUNT_1">%1$d</xliff:g> filer.</item>
- <item quantity="one">Raderar <xliff:g id="COUNT_0">%1$d</xliff:g> fil.</item>
- </plurals>
- <string name="undo" msgid="7905788502491742328">"Ångra"</string>
- <string name="copy_preparing" msgid="3896202461003039386">"Kopieringen förbereds …"</string>
- <string name="move_preparing" msgid="2772219441375531410">"Förbereder för att flytta …"</string>
- <string name="delete_preparing" msgid="5655813182533491992">"Radering förbereds …"</string>
- <string name="delete_progress" msgid="5399405983046157222">"<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="7160447124922897689">
- <item quantity="other">Det gick inte att kopiera <xliff:g id="COUNT_1">%1$d</xliff:g> filer</item>
- <item quantity="one">Det gick inte att kopiera <xliff:g id="COUNT_0">%1$d</xliff:g> fil</item>
- </plurals>
- <plurals name="move_error_notification_title" formatted="false" msgid="2710901971014783012">
- <item quantity="other">Det gick inte att flytta <xliff:g id="COUNT_1">%1$d</xliff:g> filer</item>
- <item quantity="one">Det gick inte att flytta <xliff:g id="COUNT_0">%1$d</xliff:g> fil</item>
- </plurals>
- <plurals name="delete_error_notification_title" formatted="false" msgid="7228393157786591199">
- <item quantity="other">Det gick inte att radera <xliff:g id="COUNT_1">%1$d</xliff:g> filer</item>
- <item quantity="one">Det gick inte att radera <xliff:g id="COUNT_0">%1$d</xliff:g> fil</item>
- </plurals>
- <string name="notification_touch_for_details" msgid="6268189413228855582">"Tryck om du vill visa informationen"</string>
- <string name="close" msgid="3043722427445528732">"Stäng"</string>
- <string name="copy_failure_alert_content" msgid="4563147454522476183">"Följande filer kopierades inte: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="move_failure_alert_content" msgid="2635075788682922861">"Följande filer flyttades inte: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="delete_failure_alert_content" msgid="892393767207938353">"Följande filer raderades inte: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="copy_converted_warning_content" msgid="5753861488218674361">"Filerna konverterades till ett annat format: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <plurals name="clipboard_files_clipped" formatted="false" msgid="855459017537058539">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> filer har kopierats till Urklipp.</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> fil har kopierats till Urklipp.</item>
- </plurals>
- <string name="clipboard_files_cannot_paste" msgid="2878324825602325706">"Det går inte att klistra in den valda filen på den här platsen."</string>
- <string name="menu_rename" msgid="7678802479104285353">"Byt namn"</string>
- <string name="rename_error" msgid="4203041674883412606">"Det gick inte att byta namn på dokumentet"</string>
- <string name="menu_eject_root" msgid="2768224615494227325">"Mata ut"</string>
- <string name="notification_copy_files_converted_title" msgid="3153573223054275181">"Vissa filer konverterades"</string>
- <string name="open_external_dialog_request" msgid="5789329484285817629">"Vill du ge <xliff:g id="APPNAME"><b>^1</b></xliff:g> åtkomst till katalogen <xliff:g id="DIRECTORY"><i>^2</i></xliff:g> på <xliff:g id="STORAGE"><i>^3</i></xliff:g>?"</string>
- <string name="open_external_dialog_request_primary_volume" msgid="6635562535713428688">"Vill du ge <xliff:g id="APPNAME"><b>^1</b></xliff:g> åtkomst till katalogen <xliff:g id="DIRECTORY"><i>^2</i></xliff:g>?"</string>
- <string name="open_external_dialog_root_request" msgid="8899108702926347720">"Vill du ge <xliff:g id="APPNAME"><b>^1</b></xliff:g> åtkomst till din data (inklusive foton och videor) på <xliff:g id="STORAGE"><i>^2</i></xliff:g>?"</string>
- <string name="never_ask_again" msgid="4295278542972859268">"Fråga inte igen"</string>
- <string name="allow" msgid="7225948811296386551">"Tillåt"</string>
- <string name="deny" msgid="2081879885755434506">"Neka"</string>
- <plurals name="elements_selected" formatted="false" msgid="1376955402452875047">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> har valts</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> har valts</item>
- </plurals>
- <plurals name="elements_dragged" formatted="false" msgid="3727204615215602228">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> objekt</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> objekt</item>
- </plurals>
- <string name="delete_filename_confirmation_message" msgid="5312817725577537488">"Vill du radera <xliff:g id="NAME">%1$s</xliff:g>?"</string>
- <string name="delete_foldername_confirmation_message" msgid="5885501832257285329">"Vill du radera mappen <xliff:g id="NAME">%1$s</xliff:g> och dess innehåll?"</string>
- <plurals name="delete_files_confirmation_message" formatted="false" msgid="8417505791395471802">
- <item quantity="other">Vill du radera <xliff:g id="COUNT_1">%1$d</xliff:g> filer?</item>
- <item quantity="one">Vill du radera <xliff:g id="COUNT_0">%1$d</xliff:g> fil?</item>
- </plurals>
- <plurals name="delete_folders_confirmation_message" formatted="false" msgid="9185648028213507769">
- <item quantity="other">Vill du radera <xliff:g id="COUNT_1">%1$d</xliff:g> mappar och deras innehåll?</item>
- <item quantity="one">Vill du radera <xliff:g id="COUNT_0">%1$d</xliff:g> mapp och dess innehåll?</item>
- </plurals>
- <plurals name="delete_items_confirmation_message" formatted="false" msgid="5376214433530243459">
- <item quantity="other">Vill du radera <xliff:g id="COUNT_1">%1$d</xliff:g> objekt?</item>
- <item quantity="one">Vill du radera <xliff:g id="COUNT_0">%1$d</xliff:g> objekt?</item>
- </plurals>
-</resources>
diff --git a/packages/DocumentsUI/res/values-sw/strings.xml b/packages/DocumentsUI/res/values-sw/strings.xml
deleted file mode 100644
index ac63582..0000000
--- a/packages/DocumentsUI/res/values-sw/strings.xml
+++ /dev/null
@@ -1,144 +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="app_label" msgid="1551050262492398204">"Faili"</string>
- <string name="downloads_label" msgid="959113951084633612">"Vipakuliwa"</string>
- <string name="title_open" msgid="4353228937663917801">"Fungua kutoka"</string>
- <string name="title_save" msgid="2433679664882857999">"Hifadhi kwenye"</string>
- <string name="menu_create_dir" msgid="2547620241173881754">"Folda mpya"</string>
- <string name="menu_grid" msgid="6878021334497835259">"Mwonekano gridi"</string>
- <string name="menu_list" msgid="7279285939892417279">"Mwonekano orodha"</string>
- <string name="menu_sort" msgid="7677740407158414452">"Panga kwa"</string>
- <string name="menu_search" msgid="3816712084502856974">"Utafutaji"</string>
- <string name="menu_settings" msgid="8239065133341597825">"Mipangilio ya hifadhi"</string>
- <string name="menu_open" msgid="432922957274920903">"Fungua"</string>
- <string name="menu_save" msgid="2394743337684426338">"Hifadhi"</string>
- <string name="menu_share" msgid="3075149983979628146">"Shiriki"</string>
- <string name="menu_delete" msgid="8138799623850614177">"Futa"</string>
- <string name="menu_select_all" msgid="8323579667348729928">"Chagua zote"</string>
- <string name="menu_copy" msgid="3612326052677229148">"Nakili kwenda..."</string>
- <string name="menu_move" msgid="1828090633118079817">"Hamisha hadi..."</string>
- <string name="menu_new_window" msgid="1226032889278727538">"Dirisha jipya"</string>
- <string name="menu_cut_to_clipboard" msgid="2467149185452488383">"Kata"</string>
- <string name="menu_copy_to_clipboard" msgid="489311381979634291">"Nakili"</string>
- <string name="menu_paste_from_clipboard" msgid="2071583031180257091">"Bandika"</string>
- <string name="menu_advanced_show" msgid="4693652895715631401">"Onyesha hifadhi ya ndani"</string>
- <string name="menu_advanced_hide" msgid="4218809952721972589">"Ficha hifadhi ya ndani"</string>
- <string name="menu_file_size_show" msgid="3240323619260823076">"Onyesha ukubwa wa faili"</string>
- <string name="menu_file_size_hide" msgid="8881975928502581042">"Ficha ukubwa wa faili"</string>
- <string name="button_select" msgid="527196987259139214">"Teua"</string>
- <string name="button_copy" msgid="8706475544635021302">"Nakili"</string>
- <string name="button_move" msgid="2202666023104202232">"Hamisha"</string>
- <string name="button_dismiss" msgid="3714065566893946085">"Ondoa"</string>
- <string name="button_retry" msgid="4392027584153752797">"Jaribu Tena"</string>
- <string name="sort_name" msgid="9183560467917256779">"Kwa jina"</string>
- <string name="sort_date" msgid="586080032956151448">"Kwa tarehe viliporekebishwa"</string>
- <string name="sort_size" msgid="3350681319735474741">"Kwa ukubwa"</string>
- <string name="drawer_open" msgid="4545466532430226949">"Onyesha usuli"</string>
- <string name="drawer_close" msgid="7602734368552123318">"Ficha usuli"</string>
- <string name="save_error" msgid="6167009778003223664">"Imeshindwa kuhifadhi hati"</string>
- <string name="create_error" msgid="3735649141335444215">"Ilishindwa kuunda folda"</string>
- <string name="query_error" msgid="5999895349602476581">"Haiwezi kupakia maudhui kwa sasa"</string>
- <string name="root_recent" msgid="4470053704320518133">"Za hivi karibuni"</string>
- <string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> bila malipo"</string>
- <string name="root_type_service" msgid="2178854894416775409">"Huduma za hifadhi"</string>
- <string name="root_type_shortcut" msgid="3318760609471618093">"Njia za mkato"</string>
- <string name="root_type_device" msgid="7121342474653483538">"Vifaa"</string>
- <string name="root_type_apps" msgid="8838065367985945189">"Programu zaidi"</string>
- <string name="empty" msgid="7858882803708117596">"Hakuna chochote"</string>
- <string name="no_results" msgid="6622510343880730446">"Hakuna zinazolingana katika %1$s"</string>
- <string name="toast_no_application" msgid="4632640357724698144">"Haiwezi kufungua faili"</string>
- <string name="toast_failed_delete" msgid="2180678019407244069">"Imeshindwa kufuta baadhi ya hati"</string>
- <string name="share_via" msgid="8966594246261344259">"Shiriki kupitia"</string>
- <string name="copy_notification_title" msgid="6374299806748219777">"Inanakili faili"</string>
- <string name="move_notification_title" msgid="6193835179777284805">"Inahamisha faili"</string>
- <string name="delete_notification_title" msgid="3329403967712437496">"Inafuta faili"</string>
- <string name="copy_remaining" msgid="6283790937387975095">"Zimesalia <xliff:g id="DURATION">%s</xliff:g>"</string>
- <plurals name="copy_begin" formatted="false" msgid="9071199452634086365">
- <item quantity="other">Inanakili faili <xliff:g id="COUNT_1">%1$d</xliff:g>.</item>
- <item quantity="one">Inanakili faili <xliff:g id="COUNT_0">%1$d</xliff:g>.</item>
- </plurals>
- <plurals name="move_begin" formatted="false" msgid="8430330882138871643">
- <item quantity="other">Inahamisha faili <xliff:g id="COUNT_1">%1$d</xliff:g>.</item>
- <item quantity="one">Inahamisha faili <xliff:g id="COUNT_0">%1$d</xliff:g>.</item>
- </plurals>
- <plurals name="deleting" formatted="false" msgid="5054338566802559411">
- <item quantity="other">Inafuta faili <xliff:g id="COUNT_1">%1$d</xliff:g>.</item>
- <item quantity="one">Inafuta faili <xliff:g id="COUNT_0">%1$d</xliff:g>.</item>
- </plurals>
- <string name="undo" msgid="7905788502491742328">"Tendua"</string>
- <string name="copy_preparing" msgid="3896202461003039386">"Inaanda kunakili..."</string>
- <string name="move_preparing" msgid="2772219441375531410">"Inatayarisha kuhamisha..."</string>
- <string name="delete_preparing" msgid="5655813182533491992">"Inajitayarisha kufuta..."</string>
- <string name="delete_progress" msgid="5399405983046157222">"<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="7160447124922897689">
- <item quantity="other">Haikuweza kunakili faili <xliff:g id="COUNT_1">%1$d</xliff:g></item>
- <item quantity="one">Haikuweza kunakili faili <xliff:g id="COUNT_0">%1$d</xliff:g></item>
- </plurals>
- <plurals name="move_error_notification_title" formatted="false" msgid="2710901971014783012">
- <item quantity="other">Haikuweza kuhamisha faili <xliff:g id="COUNT_1">%1$d</xliff:g></item>
- <item quantity="one">Haikuweza kuhamisha faili <xliff:g id="COUNT_0">%1$d</xliff:g></item>
- </plurals>
- <plurals name="delete_error_notification_title" formatted="false" msgid="7228393157786591199">
- <item quantity="other">Haikuweza kufuta faili <xliff:g id="COUNT_1">%1$d</xliff:g></item>
- <item quantity="one">Haikuweza kufuta faili <xliff:g id="COUNT_0">%1$d</xliff:g></item>
- </plurals>
- <string name="notification_touch_for_details" msgid="6268189413228855582">"Gonga ili uangalie maelezo"</string>
- <string name="close" msgid="3043722427445528732">"Funga"</string>
- <string name="copy_failure_alert_content" msgid="4563147454522476183">"Haikunakili faili zifuatazo: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="move_failure_alert_content" msgid="2635075788682922861">"Haikuhamisha faili zifuatazo: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="delete_failure_alert_content" msgid="892393767207938353">"Imeshindwa kufuta faili zifuatazo: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="copy_converted_warning_content" msgid="5753861488218674361">"Faili hizi zimebadilishwa muundo. <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <plurals name="clipboard_files_clipped" formatted="false" msgid="855459017537058539">
- <item quantity="other">Alinakili faili <xliff:g id="COUNT_1">%1$d</xliff:g> kwenye ubao wa kunakili.</item>
- <item quantity="one">Alinakili faili <xliff:g id="COUNT_0">%1$d</xliff:g> kwenye ubao wa kunakili.</item>
- </plurals>
- <string name="clipboard_files_cannot_paste" msgid="2878324825602325706">"Haiwezi kubandika faili zilizochaguliwa katika eneo hili."</string>
- <string name="menu_rename" msgid="7678802479104285353">"Badilisha jina"</string>
- <string name="rename_error" msgid="4203041674883412606">"Imeshindwa kubadilisha jina la hati"</string>
- <string name="menu_eject_root" msgid="2768224615494227325">"Ondoa"</string>
- <string name="notification_copy_files_converted_title" msgid="3153573223054275181">"Baadhi ya faili zimebadilishwa muundo"</string>
- <string name="open_external_dialog_request" msgid="5789329484285817629">"Ungependa kuruhusu <xliff:g id="APPNAME"><b>^1</b></xliff:g> ifikie saraka ya <xliff:g id="DIRECTORY"><i>^2</i></xliff:g> kwenye <xliff:g id="STORAGE"><i>^3</i></xliff:g>?"</string>
- <string name="open_external_dialog_request_primary_volume" msgid="6635562535713428688">"Ungependa kuruhusu <xliff:g id="APPNAME"><b>^1</b></xliff:g> ifikie saraka ya <xliff:g id="DIRECTORY"><i>^2</i></xliff:g>?"</string>
- <string name="open_external_dialog_root_request" msgid="8899108702926347720">"Ungependa kuruhusu <xliff:g id="APPNAME"><b>^1</b></xliff:g> ifikie data yako, ikiwa ni pamoja na picha na video kwenye <xliff:g id="STORAGE"><i>^2</i></xliff:g>?"</string>
- <string name="never_ask_again" msgid="4295278542972859268">"Usiniulize tena"</string>
- <string name="allow" msgid="7225948811296386551">"Ruhusu"</string>
- <string name="deny" msgid="2081879885755434506">"Kataza"</string>
- <plurals name="elements_selected" formatted="false" msgid="1376955402452875047">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> zimechaguliwa</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> imechaguliwa</item>
- </plurals>
- <plurals name="elements_dragged" formatted="false" msgid="3727204615215602228">
- <item quantity="other">Vipengee <xliff:g id="COUNT_1">%1$d</xliff:g></item>
- <item quantity="one">Kipengee <xliff:g id="COUNT_0">%1$d</xliff:g></item>
- </plurals>
- <string name="delete_filename_confirmation_message" msgid="5312817725577537488">"Ungependa kufuta \"<xliff:g id="NAME">%1$s</xliff:g>\"?"</string>
- <string name="delete_foldername_confirmation_message" msgid="5885501832257285329">"Ungependa kufuta folda ya \"<xliff:g id="NAME">%1$s</xliff:g>\" na maudhui yake?"</string>
- <plurals name="delete_files_confirmation_message" formatted="false" msgid="8417505791395471802">
- <item quantity="other">Ungependa kufuta faili <xliff:g id="COUNT_1">%1$d</xliff:g>?</item>
- <item quantity="one">Ungependa kufuta faili <xliff:g id="COUNT_0">%1$d</xliff:g>?</item>
- </plurals>
- <plurals name="delete_folders_confirmation_message" formatted="false" msgid="9185648028213507769">
- <item quantity="other">Ungependa kufuta folda <xliff:g id="COUNT_1">%1$d</xliff:g> na maudhui yaliyomo?</item>
- <item quantity="one">Ungependa kufuta folda <xliff:g id="COUNT_0">%1$d</xliff:g> na maudhui yaliyomo?</item>
- </plurals>
- <plurals name="delete_items_confirmation_message" formatted="false" msgid="5376214433530243459">
- <item quantity="other">Ungependa kufuta vipengee <xliff:g id="COUNT_1">%1$d</xliff:g>?</item>
- <item quantity="one">Ungependa kufuta kipengee <xliff:g id="COUNT_0">%1$d</xliff:g>?</item>
- </plurals>
-</resources>
diff --git a/packages/DocumentsUI/res/values-sw600dp/dimens.xml b/packages/DocumentsUI/res/values-sw600dp/dimens.xml
deleted file mode 100644
index 642ff7e..0000000
--- a/packages/DocumentsUI/res/values-sw600dp/dimens.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2015 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<resources>
- <dimen name="root_icon_margin">8dp</dimen>
-</resources>
diff --git a/packages/DocumentsUI/res/values-sw720dp-land/dimens.xml b/packages/DocumentsUI/res/values-sw720dp-land/dimens.xml
deleted file mode 100644
index 1b67ee5..0000000
--- a/packages/DocumentsUI/res/values-sw720dp-land/dimens.xml
+++ /dev/null
@@ -1,24 +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>
- <dimen name="list_item_height">64dp</dimen>
- <dimen name="list_item_padding">24dp</dimen>
-
- <dimen name="list_divider_inset">80dp</dimen>
-
- <dimen name="max_drawer_width">320dp</dimen>
-</resources>
diff --git a/packages/DocumentsUI/res/values-sw720dp-land/layouts.xml b/packages/DocumentsUI/res/values-sw720dp-land/layouts.xml
deleted file mode 100644
index 0e1807c..0000000
--- a/packages/DocumentsUI/res/values-sw720dp-land/layouts.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2015 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<resources>
- <item name="files_activity" type="layout">@layout/fixed_layout</item>
-</resources>
diff --git a/packages/DocumentsUI/res/values-sw720dp/colors.xml b/packages/DocumentsUI/res/values-sw720dp/colors.xml
deleted file mode 100644
index 3ecafe2..0000000
--- a/packages/DocumentsUI/res/values-sw720dp/colors.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2016 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<resources>
- <color name="menu_search_background">#ff676f74</color>
-</resources>
diff --git a/packages/DocumentsUI/res/values-sw720dp/config.xml b/packages/DocumentsUI/res/values-sw720dp/config.xml
deleted file mode 100644
index 4898e74..0000000
--- a/packages/DocumentsUI/res/values-sw720dp/config.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2016 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>
- <!-- Indicates if search view is taking the whole toolbar space -->
- <bool name="full_bar_search_view">false</bool>
-</resources>
diff --git a/packages/DocumentsUI/res/values-sw720dp/dimens.xml b/packages/DocumentsUI/res/values-sw720dp/dimens.xml
deleted file mode 100644
index 982b204..0000000
--- a/packages/DocumentsUI/res/values-sw720dp/dimens.xml
+++ /dev/null
@@ -1,24 +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>
- <dimen name="grid_padding_horiz">16dp</dimen>
- <dimen name="grid_padding_vert">16dp</dimen>
-
- <dimen name="list_item_padding">24dp</dimen>
-
- <dimen name="max_drawer_width">320dp</dimen>
-</resources>
diff --git a/packages/DocumentsUI/res/values-ta-rIN/strings.xml b/packages/DocumentsUI/res/values-ta-rIN/strings.xml
deleted file mode 100644
index f29370b..0000000
--- a/packages/DocumentsUI/res/values-ta-rIN/strings.xml
+++ /dev/null
@@ -1,144 +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="app_label" msgid="1551050262492398204">"கோப்புகள்"</string>
- <string name="downloads_label" msgid="959113951084633612">"இறக்கங்கள்"</string>
- <string name="title_open" msgid="4353228937663917801">"இதில் திற"</string>
- <string name="title_save" msgid="2433679664882857999">"இதில் சேமி"</string>
- <string name="menu_create_dir" msgid="2547620241173881754">"புதிய கோப்புறை"</string>
- <string name="menu_grid" msgid="6878021334497835259">"கட்டக் காட்சி"</string>
- <string name="menu_list" msgid="7279285939892417279">"பட்டியல்"</string>
- <string name="menu_sort" msgid="7677740407158414452">"இதன்படி வரிசைப்படுத்து"</string>
- <string name="menu_search" msgid="3816712084502856974">"தேடு"</string>
- <string name="menu_settings" msgid="8239065133341597825">"சேமிப்பிட அமைப்புகள்"</string>
- <string name="menu_open" msgid="432922957274920903">"திற"</string>
- <string name="menu_save" msgid="2394743337684426338">"சேமி"</string>
- <string name="menu_share" msgid="3075149983979628146">"பகிர்"</string>
- <string name="menu_delete" msgid="8138799623850614177">"நீக்கு"</string>
- <string name="menu_select_all" msgid="8323579667348729928">"எல்லாவற்றையும் தேர்ந்தெடு"</string>
- <string name="menu_copy" msgid="3612326052677229148">"இங்கு நகலெடு…"</string>
- <string name="menu_move" msgid="1828090633118079817">"இதற்கு நகர்த்து…"</string>
- <string name="menu_new_window" msgid="1226032889278727538">"புதிய சாளரம்"</string>
- <string name="menu_cut_to_clipboard" msgid="2467149185452488383">"வெட்டு"</string>
- <string name="menu_copy_to_clipboard" msgid="489311381979634291">"நகலெடு"</string>
- <string name="menu_paste_from_clipboard" msgid="2071583031180257091">"ஒட்டு"</string>
- <string name="menu_advanced_show" msgid="4693652895715631401">"அகச் சேமிப்பகத்தைக் காட்டு"</string>
- <string name="menu_advanced_hide" msgid="4218809952721972589">"அகச் சேமிப்பகத்தை மறை"</string>
- <string name="menu_file_size_show" msgid="3240323619260823076">"கோப்பு அளவைக் காட்டு"</string>
- <string name="menu_file_size_hide" msgid="8881975928502581042">"கோப்பு அளவை மறை"</string>
- <string name="button_select" msgid="527196987259139214">"தேர்ந்தெடு"</string>
- <string name="button_copy" msgid="8706475544635021302">"நகலெடு"</string>
- <string name="button_move" msgid="2202666023104202232">"நகர்த்து"</string>
- <string name="button_dismiss" msgid="3714065566893946085">"நிராகரி"</string>
- <string name="button_retry" msgid="4392027584153752797">"மீண்டும் முயற்சிக்கவும்"</string>
- <string name="sort_name" msgid="9183560467917256779">"பெயரின்படி"</string>
- <string name="sort_date" msgid="586080032956151448">"திருத்தப்பட்ட தேதியின்படி"</string>
- <string name="sort_size" msgid="3350681319735474741">"அளவின்படி"</string>
- <string name="drawer_open" msgid="4545466532430226949">"வழிகளைக் காட்டு"</string>
- <string name="drawer_close" msgid="7602734368552123318">"வழிகளை மறை"</string>
- <string name="save_error" msgid="6167009778003223664">"ஆவணத்தைச் சேமிப்பதில் தோல்வி"</string>
- <string name="create_error" msgid="3735649141335444215">"கோப்புறையை உருவாக்குவதில் தோல்வி"</string>
- <string name="query_error" msgid="5999895349602476581">"தற்போது உள்ளடக்கத்தை ஏற்ற முடியாது"</string>
- <string name="root_recent" msgid="4470053704320518133">"சமீபத்தியவை"</string>
- <string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> இலவசம்"</string>
- <string name="root_type_service" msgid="2178854894416775409">"சேமிப்பிட சாதனங்கள்"</string>
- <string name="root_type_shortcut" msgid="3318760609471618093">"குறுக்குவழிகள்"</string>
- <string name="root_type_device" msgid="7121342474653483538">"சாதனங்கள்"</string>
- <string name="root_type_apps" msgid="8838065367985945189">"மேலும் பயன்பாடுகள்"</string>
- <string name="empty" msgid="7858882803708117596">"எதுவும் இல்லை"</string>
- <string name="no_results" msgid="6622510343880730446">"%1$s இல் பொருந்தும் முடிவு இல்லை"</string>
- <string name="toast_no_application" msgid="4632640357724698144">"கோப்பைத் திறக்க முடியாது"</string>
- <string name="toast_failed_delete" msgid="2180678019407244069">"சில ஆவணங்களை நீக்க முடியவில்லை"</string>
- <string name="share_via" msgid="8966594246261344259">"இதன் வழியாகப் பகிர்"</string>
- <string name="copy_notification_title" msgid="6374299806748219777">"கோப்புகளை நகலெடுத்தல்"</string>
- <string name="move_notification_title" msgid="6193835179777284805">"கோப்புகளை நகர்த்துதல்"</string>
- <string name="delete_notification_title" msgid="3329403967712437496">"கோப்புகளை நீக்குகிறது"</string>
- <string name="copy_remaining" msgid="6283790937387975095">"<xliff:g id="DURATION">%s</xliff:g> மீதமுள்ளது"</string>
- <plurals name="copy_begin" formatted="false" msgid="9071199452634086365">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> கோப்புகளை நகலெடுக்கிறது.</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> கோப்பை நகலெடுக்கிறது.</item>
- </plurals>
- <plurals name="move_begin" formatted="false" msgid="8430330882138871643">
- <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="5054338566802559411">
- <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="7905788502491742328">"செயல்தவிர்"</string>
- <string name="copy_preparing" msgid="3896202461003039386">"நகல் தயாராகிறது…"</string>
- <string name="move_preparing" msgid="2772219441375531410">"நகர்த்துவதற்குத் தயார்படுத்துகிறது…"</string>
- <string name="delete_preparing" msgid="5655813182533491992">"நீக்கத் தயாராகிறது…"</string>
- <string name="delete_progress" msgid="5399405983046157222">"<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="7160447124922897689">
- <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="2710901971014783012">
- <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="7228393157786591199">
- <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="6268189413228855582">"விவரங்களைப் பார்க்க, தட்டவும்"</string>
- <string name="close" msgid="3043722427445528732">"மூடு"</string>
- <string name="copy_failure_alert_content" msgid="4563147454522476183">"பின்வரும் கோப்புகள் நகலெடுக்கப்படவில்லை: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="move_failure_alert_content" msgid="2635075788682922861">"பின்வரும் கோப்புகள் நகர்த்தப்படவில்லை: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="delete_failure_alert_content" msgid="892393767207938353">"பின்வரும் கோப்புகள் நீக்கப்படவில்லை: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="copy_converted_warning_content" msgid="5753861488218674361">"இந்தக் கோப்புகள் வேறொரு வடிவத்திற்கு மாற்றப்பட்டன: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <plurals name="clipboard_files_clipped" formatted="false" msgid="855459017537058539">
- <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="clipboard_files_cannot_paste" msgid="2878324825602325706">"தேர்ந்தெடுத்த கோப்புகளை இங்கு ஒட்ட முடியாது."</string>
- <string name="menu_rename" msgid="7678802479104285353">"மறுபெயரிடு"</string>
- <string name="rename_error" msgid="4203041674883412606">"ஆவணத்திற்கு மறுபெயரிடுவதில் தோல்வி"</string>
- <string name="menu_eject_root" msgid="2768224615494227325">"வெளியேற்று"</string>
- <string name="notification_copy_files_converted_title" msgid="3153573223054275181">"சில கோப்புகள் மாற்றப்பட்டன"</string>
- <string name="open_external_dialog_request" msgid="5789329484285817629">"<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="6635562535713428688">"<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="8899108702926347720">"<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="4295278542972859268">"மீண்டும் கேட்காதே"</string>
- <string name="allow" msgid="7225948811296386551">"அனுமதி"</string>
- <string name="deny" msgid="2081879885755434506">"நிராகரி"</string>
- <plurals name="elements_selected" formatted="false" msgid="1376955402452875047">
- <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="3727204615215602228">
- <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="5312817725577537488">"\"<xliff:g id="NAME">%1$s</xliff:g>\"ஐ நீக்கவா?"</string>
- <string name="delete_foldername_confirmation_message" msgid="5885501832257285329">"\"<xliff:g id="NAME">%1$s</xliff:g>\" கோப்புறையையும் அதன் உள்ளடக்கத்தையும் நீக்கவா?"</string>
- <plurals name="delete_files_confirmation_message" formatted="false" msgid="8417505791395471802">
- <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="9185648028213507769">
- <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="5376214433530243459">
- <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>
-</resources>
diff --git a/packages/DocumentsUI/res/values-te-rIN/strings.xml b/packages/DocumentsUI/res/values-te-rIN/strings.xml
deleted file mode 100644
index 38bb007..0000000
--- a/packages/DocumentsUI/res/values-te-rIN/strings.xml
+++ /dev/null
@@ -1,144 +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="app_label" msgid="1551050262492398204">"ఫైల్లు"</string>
- <string name="downloads_label" msgid="959113951084633612">"డౌన్లోడ్లు"</string>
- <string name="title_open" msgid="4353228937663917801">"ఇక్కడి నుండి తెరువు"</string>
- <string name="title_save" msgid="2433679664882857999">"ఇందులో సేవ్ చేయి"</string>
- <string name="menu_create_dir" msgid="2547620241173881754">"కొత్త ఫోల్డర్"</string>
- <string name="menu_grid" msgid="6878021334497835259">"గ్రిడ్ వీక్షణ"</string>
- <string name="menu_list" msgid="7279285939892417279">"జాబితా వీక్షణ"</string>
- <string name="menu_sort" msgid="7677740407158414452">"ఇలా క్రమబద్ధీకరించు"</string>
- <string name="menu_search" msgid="3816712084502856974">"శోధించు"</string>
- <string name="menu_settings" msgid="8239065133341597825">"నిల్వ సెట్టింగ్లు"</string>
- <string name="menu_open" msgid="432922957274920903">"తెరువు"</string>
- <string name="menu_save" msgid="2394743337684426338">"సేవ్ చేయి"</string>
- <string name="menu_share" msgid="3075149983979628146">"భాగస్వామ్యం చేయి"</string>
- <string name="menu_delete" msgid="8138799623850614177">"తొలగించు"</string>
- <string name="menu_select_all" msgid="8323579667348729928">"అన్నీ ఎంచుకోండి"</string>
- <string name="menu_copy" msgid="3612326052677229148">"ఇక్కడికి కాపీ చేయి…"</string>
- <string name="menu_move" msgid="1828090633118079817">"దీనికి తరలించు..."</string>
- <string name="menu_new_window" msgid="1226032889278727538">"కొత్త విండో"</string>
- <string name="menu_cut_to_clipboard" msgid="2467149185452488383">"కత్తిరించు"</string>
- <string name="menu_copy_to_clipboard" msgid="489311381979634291">"కాపీ చేయి"</string>
- <string name="menu_paste_from_clipboard" msgid="2071583031180257091">"అతికించు"</string>
- <string name="menu_advanced_show" msgid="4693652895715631401">"అంతర్గత నిల్వను చూపు"</string>
- <string name="menu_advanced_hide" msgid="4218809952721972589">"అంతర్గత నిల్వను దాచు"</string>
- <string name="menu_file_size_show" msgid="3240323619260823076">"ఫైల్ పరిమాణాన్ని చూపు"</string>
- <string name="menu_file_size_hide" msgid="8881975928502581042">"ఫైల్ పరిమాణాన్ని దాచు"</string>
- <string name="button_select" msgid="527196987259139214">"ఎంచుకోండి"</string>
- <string name="button_copy" msgid="8706475544635021302">"కాపీ చేయి"</string>
- <string name="button_move" msgid="2202666023104202232">"తరలించు"</string>
- <string name="button_dismiss" msgid="3714065566893946085">"తీసివేయి"</string>
- <string name="button_retry" msgid="4392027584153752797">"మళ్లీ ప్రయత్నించు"</string>
- <string name="sort_name" msgid="9183560467917256779">"పేరు ద్వారా"</string>
- <string name="sort_date" msgid="586080032956151448">"సవరించిన తేదీ ద్వారా"</string>
- <string name="sort_size" msgid="3350681319735474741">"పరిమాణం ద్వారా"</string>
- <string name="drawer_open" msgid="4545466532430226949">"మూలాలను చూపు"</string>
- <string name="drawer_close" msgid="7602734368552123318">"మూలాలను దాచు"</string>
- <string name="save_error" msgid="6167009778003223664">"పత్రాన్ని సేవ్ చేయడంలో విఫలమైంది"</string>
- <string name="create_error" msgid="3735649141335444215">"ఫోల్డర్ను సృష్టించడంలో విఫలమైంది"</string>
- <string name="query_error" msgid="5999895349602476581">"ఈ సమయంలో కంటెంట్ను లోడ్ చేయడం సాధ్యపడదు"</string>
- <string name="root_recent" msgid="4470053704320518133">"ఇటీవల"</string>
- <string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> ఖాళీ"</string>
- <string name="root_type_service" msgid="2178854894416775409">"నిల్వ పరికరాలు"</string>
- <string name="root_type_shortcut" msgid="3318760609471618093">"సత్వరమార్గాలు"</string>
- <string name="root_type_device" msgid="7121342474653483538">"పరికరాలు"</string>
- <string name="root_type_apps" msgid="8838065367985945189">"మరిన్ని అనువర్తనాలు"</string>
- <string name="empty" msgid="7858882803708117596">"అంశాలు లేవు"</string>
- <string name="no_results" msgid="6622510343880730446">"%1$sలో సరిపోలినవి లేవు"</string>
- <string name="toast_no_application" msgid="4632640357724698144">"ఫైల్ను తెరవడం సాధ్యపడదు"</string>
- <string name="toast_failed_delete" msgid="2180678019407244069">"కొన్ని పత్రాలను తొలగించడం సాధ్యపడలేదు"</string>
- <string name="share_via" msgid="8966594246261344259">"దీని ద్వారా భాగస్వామ్యం చేయండి"</string>
- <string name="copy_notification_title" msgid="6374299806748219777">"ఫైల్లు కాపీ అవుతున్నాయి"</string>
- <string name="move_notification_title" msgid="6193835179777284805">"ఫైల్లను తరలిస్తోంది"</string>
- <string name="delete_notification_title" msgid="3329403967712437496">"ఫైల్లను తొలగిస్తోంది"</string>
- <string name="copy_remaining" msgid="6283790937387975095">"<xliff:g id="DURATION">%s</xliff:g> మిగిలి ఉంది"</string>
- <plurals name="copy_begin" formatted="false" msgid="9071199452634086365">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> ఫైల్లను కాపీ చేస్తోంది.</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> ఫైల్ను కాపీ చేస్తోంది.</item>
- </plurals>
- <plurals name="move_begin" formatted="false" msgid="8430330882138871643">
- <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="5054338566802559411">
- <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="7905788502491742328">"చర్య రద్దు చేయి"</string>
- <string name="copy_preparing" msgid="3896202461003039386">"కాపీ చేయడానికి సిద్ధం చేస్తోంది…"</string>
- <string name="move_preparing" msgid="2772219441375531410">"తరలించడానికి సిద్ధమవుతోంది…"</string>
- <string name="delete_preparing" msgid="5655813182533491992">"తొలగించడానికి సిద్ధం చేస్తోంది…"</string>
- <string name="delete_progress" msgid="5399405983046157222">"<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="7160447124922897689">
- <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="2710901971014783012">
- <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="7228393157786591199">
- <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="6268189413228855582">"వివరాలను వీక్షించడానికి నొక్కండి"</string>
- <string name="close" msgid="3043722427445528732">"మూసివేయి"</string>
- <string name="copy_failure_alert_content" msgid="4563147454522476183">"ఈ ఫైల్లు కాపీ చేయబడలేదు: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="move_failure_alert_content" msgid="2635075788682922861">"ఈ ఫైల్లు తరలించబడలేదు: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="delete_failure_alert_content" msgid="892393767207938353">"ఈ ఫైల్లు తొలగించబడలేదు: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="copy_converted_warning_content" msgid="5753861488218674361">"ఈ ఫైల్లు మరొక ఆకృతికి మార్చబడ్డాయి: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <plurals name="clipboard_files_clipped" formatted="false" msgid="855459017537058539">
- <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="clipboard_files_cannot_paste" msgid="2878324825602325706">"ఎంచుకున్న ఫైల్లను ఈ స్థానంలోకి తీసుకురావడం సాధ్యపడదు."</string>
- <string name="menu_rename" msgid="7678802479104285353">"పేరు మార్చు"</string>
- <string name="rename_error" msgid="4203041674883412606">"పత్రం పేరు మార్చడంలో విఫలమైంది"</string>
- <string name="menu_eject_root" msgid="2768224615494227325">"తొలగించు"</string>
- <string name="notification_copy_files_converted_title" msgid="3153573223054275181">"కొన్ని పైల్లు మార్చబడ్డాయి"</string>
- <string name="open_external_dialog_request" msgid="5789329484285817629">"<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="6635562535713428688">"<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="8899108702926347720">"<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="4295278542972859268">"మళ్లీ అడగవద్దు"</string>
- <string name="allow" msgid="7225948811296386551">"అనుమతించండి"</string>
- <string name="deny" msgid="2081879885755434506">"తిరస్కరించండి"</string>
- <plurals name="elements_selected" formatted="false" msgid="1376955402452875047">
- <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="3727204615215602228">
- <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="5312817725577537488">"\"<xliff:g id="NAME">%1$s</xliff:g>\"ని తొలగించాలా?"</string>
- <string name="delete_foldername_confirmation_message" msgid="5885501832257285329">"\"<xliff:g id="NAME">%1$s</xliff:g>\" ఫోల్డర్ని మరియు అందులోని కంటెంట్లను తొలగించాలా?"</string>
- <plurals name="delete_files_confirmation_message" formatted="false" msgid="8417505791395471802">
- <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="9185648028213507769">
- <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="5376214433530243459">
- <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>
-</resources>
diff --git a/packages/DocumentsUI/res/values-th/strings.xml b/packages/DocumentsUI/res/values-th/strings.xml
deleted file mode 100644
index f64be88..0000000
--- a/packages/DocumentsUI/res/values-th/strings.xml
+++ /dev/null
@@ -1,144 +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="app_label" msgid="1551050262492398204">"ไฟล์"</string>
- <string name="downloads_label" msgid="959113951084633612">"การดาวน์โหลด"</string>
- <string name="title_open" msgid="4353228937663917801">"เปิดจาก"</string>
- <string name="title_save" msgid="2433679664882857999">"บันทึกไปยัง"</string>
- <string name="menu_create_dir" msgid="2547620241173881754">"โฟลเดอร์ใหม่"</string>
- <string name="menu_grid" msgid="6878021334497835259">"มุมมองตาราง"</string>
- <string name="menu_list" msgid="7279285939892417279">"มุมมองรายการ"</string>
- <string name="menu_sort" msgid="7677740407158414452">"จัดเรียงตาม"</string>
- <string name="menu_search" msgid="3816712084502856974">"ค้นหา"</string>
- <string name="menu_settings" msgid="8239065133341597825">"การตั้งค่าที่เก็บข้อมูล"</string>
- <string name="menu_open" msgid="432922957274920903">"เปิด"</string>
- <string name="menu_save" msgid="2394743337684426338">"บันทึก"</string>
- <string name="menu_share" msgid="3075149983979628146">"แชร์"</string>
- <string name="menu_delete" msgid="8138799623850614177">"ลบ"</string>
- <string name="menu_select_all" msgid="8323579667348729928">"เลือกทั้งหมด"</string>
- <string name="menu_copy" msgid="3612326052677229148">"คัดลอกไปยัง…"</string>
- <string name="menu_move" msgid="1828090633118079817">"ย้ายไปที่…"</string>
- <string name="menu_new_window" msgid="1226032889278727538">"หน้าต่างใหม่"</string>
- <string name="menu_cut_to_clipboard" msgid="2467149185452488383">"ตัด"</string>
- <string name="menu_copy_to_clipboard" msgid="489311381979634291">"คัดลอก"</string>
- <string name="menu_paste_from_clipboard" msgid="2071583031180257091">"วาง"</string>
- <string name="menu_advanced_show" msgid="4693652895715631401">"แสดงที่จัดเก็บภายใน"</string>
- <string name="menu_advanced_hide" msgid="4218809952721972589">"ซ่อนที่จัดเก็บภายใน"</string>
- <string name="menu_file_size_show" msgid="3240323619260823076">"แสดงขนาดไฟล์"</string>
- <string name="menu_file_size_hide" msgid="8881975928502581042">"ซ่อนขนาดไฟล์"</string>
- <string name="button_select" msgid="527196987259139214">"เลือก"</string>
- <string name="button_copy" msgid="8706475544635021302">"คัดลอก"</string>
- <string name="button_move" msgid="2202666023104202232">"ย้าย"</string>
- <string name="button_dismiss" msgid="3714065566893946085">"ปิด"</string>
- <string name="button_retry" msgid="4392027584153752797">"ลองอีกครั้ง"</string>
- <string name="sort_name" msgid="9183560467917256779">"ตามชื่อ"</string>
- <string name="sort_date" msgid="586080032956151448">"ตามวันที่ที่ปรับเปลี่ยน"</string>
- <string name="sort_size" msgid="3350681319735474741">"ตามขนาด"</string>
- <string name="drawer_open" msgid="4545466532430226949">"แสดงราก"</string>
- <string name="drawer_close" msgid="7602734368552123318">"ซ่อนราก"</string>
- <string name="save_error" msgid="6167009778003223664">"การบันทึกเอกสารล้มเหลว"</string>
- <string name="create_error" msgid="3735649141335444215">"การสร้างโฟลเดอร์ล้มเหลว"</string>
- <string name="query_error" msgid="5999895349602476581">"โหลดเนื้อหาไม่ได้ในขณะนี้"</string>
- <string name="root_recent" msgid="4470053704320518133">"ล่าสุด"</string>
- <string name="root_available_bytes" msgid="8568452858617033281">"ว่าง <xliff:g id="SIZE">%1$s</xliff:g>"</string>
- <string name="root_type_service" msgid="2178854894416775409">"บริการที่เก็บข้อมูล"</string>
- <string name="root_type_shortcut" msgid="3318760609471618093">"ทางลัด"</string>
- <string name="root_type_device" msgid="7121342474653483538">"อุปกรณ์"</string>
- <string name="root_type_apps" msgid="8838065367985945189">"แอปเพิ่มเติม"</string>
- <string name="empty" msgid="7858882803708117596">"ไม่มีรายการ"</string>
- <string name="no_results" msgid="6622510343880730446">"ไม่พบข้อมูลที่ตรงกันใน %1$s"</string>
- <string name="toast_no_application" msgid="4632640357724698144">"เปิดไฟล์ไม่ได้"</string>
- <string name="toast_failed_delete" msgid="2180678019407244069">"ไม่สามารถลบเอกสารบางรายการ"</string>
- <string name="share_via" msgid="8966594246261344259">"แชร์ผ่าน"</string>
- <string name="copy_notification_title" msgid="6374299806748219777">"กำลังคัดลอกไฟล์"</string>
- <string name="move_notification_title" msgid="6193835179777284805">"กำลังย้ายไฟล์"</string>
- <string name="delete_notification_title" msgid="3329403967712437496">"กำลังลบไฟล์"</string>
- <string name="copy_remaining" msgid="6283790937387975095">"เหลือ <xliff:g id="DURATION">%s</xliff:g>"</string>
- <plurals name="copy_begin" formatted="false" msgid="9071199452634086365">
- <item quantity="other">กำลังคัดลอก <xliff:g id="COUNT_1">%1$d</xliff:g> ไฟล์</item>
- <item quantity="one">กำลังคัดลอก <xliff:g id="COUNT_0">%1$d</xliff:g> ไฟล์</item>
- </plurals>
- <plurals name="move_begin" formatted="false" msgid="8430330882138871643">
- <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="5054338566802559411">
- <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="7905788502491742328">"เลิกทำ"</string>
- <string name="copy_preparing" msgid="3896202461003039386">"กำลังเตรียมการคัดลอก…"</string>
- <string name="move_preparing" msgid="2772219441375531410">"กำลังเตรียมการย้าย…"</string>
- <string name="delete_preparing" msgid="5655813182533491992">"กำลังเตรียมลบ…"</string>
- <string name="delete_progress" msgid="5399405983046157222">"<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="7160447124922897689">
- <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="2710901971014783012">
- <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="7228393157786591199">
- <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="6268189413228855582">"แตะเพื่อดูรายละเอียด"</string>
- <string name="close" msgid="3043722427445528732">"ปิด"</string>
- <string name="copy_failure_alert_content" msgid="4563147454522476183">"ไม่ได้คัดลอกไฟล์เหล่านี้: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="move_failure_alert_content" msgid="2635075788682922861">"ไม่ได้ย้ายไฟล์เหล่านี้: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="delete_failure_alert_content" msgid="892393767207938353">"ไม่ได้ลบไฟล์เหล่านี้: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="copy_converted_warning_content" msgid="5753861488218674361">"ไฟล์ต่อไปนี้แปลงเป็นอีกรูปแบบหนึ่งแล้ว: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <plurals name="clipboard_files_clipped" formatted="false" msgid="855459017537058539">
- <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="clipboard_files_cannot_paste" msgid="2878324825602325706">"ไม่สามารถวางไฟล์ที่เลือกในตำแหน่งนี้"</string>
- <string name="menu_rename" msgid="7678802479104285353">"เปลี่ยนชื่อ"</string>
- <string name="rename_error" msgid="4203041674883412606">"ไม่สามารถเปลี่ยนชื่อเอกสาร"</string>
- <string name="menu_eject_root" msgid="2768224615494227325">"นำอุปกรณ์ออก"</string>
- <string name="notification_copy_files_converted_title" msgid="3153573223054275181">"แปลงบางไฟล์แล้ว"</string>
- <string name="open_external_dialog_request" msgid="5789329484285817629">"ให้สิทธิ์ <xliff:g id="APPNAME"><b>^1</b></xliff:g> ในการเข้าถึงไดเรกทอรี <xliff:g id="DIRECTORY"><i>^2</i></xliff:g> ใน <xliff:g id="STORAGE"><i>^3</i></xliff:g> ไหม"</string>
- <string name="open_external_dialog_request_primary_volume" msgid="6635562535713428688">"ให้สิทธิ์ <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="8899108702926347720">"ให้สิทธิ์ <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="4295278542972859268">"ไม่ต้องถามอีก"</string>
- <string name="allow" msgid="7225948811296386551">"อนุญาต"</string>
- <string name="deny" msgid="2081879885755434506">"ปฏิเสธ"</string>
- <plurals name="elements_selected" formatted="false" msgid="1376955402452875047">
- <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="3727204615215602228">
- <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="5312817725577537488">"ลบ \"<xliff:g id="NAME">%1$s</xliff:g>\" ไหม"</string>
- <string name="delete_foldername_confirmation_message" msgid="5885501832257285329">"ลบโฟลเดอร์ \"<xliff:g id="NAME">%1$s</xliff:g>\" และเนื้อหาข้างในไหม"</string>
- <plurals name="delete_files_confirmation_message" formatted="false" msgid="8417505791395471802">
- <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="9185648028213507769">
- <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="5376214433530243459">
- <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>
-</resources>
diff --git a/packages/DocumentsUI/res/values-tl/strings.xml b/packages/DocumentsUI/res/values-tl/strings.xml
deleted file mode 100644
index 22474469..0000000
--- a/packages/DocumentsUI/res/values-tl/strings.xml
+++ /dev/null
@@ -1,144 +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="app_label" msgid="1551050262492398204">"Mga File"</string>
- <string name="downloads_label" msgid="959113951084633612">"Mga Download"</string>
- <string name="title_open" msgid="4353228937663917801">"Buksan mula sa"</string>
- <string name="title_save" msgid="2433679664882857999">"I-save sa"</string>
- <string name="menu_create_dir" msgid="2547620241173881754">"Bagong folder"</string>
- <string name="menu_grid" msgid="6878021334497835259">"View na grid"</string>
- <string name="menu_list" msgid="7279285939892417279">"View na listahan"</string>
- <string name="menu_sort" msgid="7677740407158414452">"Uriin ayon sa"</string>
- <string name="menu_search" msgid="3816712084502856974">"Maghanap"</string>
- <string name="menu_settings" msgid="8239065133341597825">"Mga setting ng storage"</string>
- <string name="menu_open" msgid="432922957274920903">"Buksan"</string>
- <string name="menu_save" msgid="2394743337684426338">"I-save"</string>
- <string name="menu_share" msgid="3075149983979628146">"Ibahagi"</string>
- <string name="menu_delete" msgid="8138799623850614177">"I-delete"</string>
- <string name="menu_select_all" msgid="8323579667348729928">"Piliin lahat"</string>
- <string name="menu_copy" msgid="3612326052677229148">"Kopyahin sa..."</string>
- <string name="menu_move" msgid="1828090633118079817">"Ilipat sa…"</string>
- <string name="menu_new_window" msgid="1226032889278727538">"Bagong window"</string>
- <string name="menu_cut_to_clipboard" msgid="2467149185452488383">"I-cut"</string>
- <string name="menu_copy_to_clipboard" msgid="489311381979634291">"Kopyahin"</string>
- <string name="menu_paste_from_clipboard" msgid="2071583031180257091">"I-paste"</string>
- <string name="menu_advanced_show" msgid="4693652895715631401">"Ipakita internal storage"</string>
- <string name="menu_advanced_hide" msgid="4218809952721972589">"Itago internal storage"</string>
- <string name="menu_file_size_show" msgid="3240323619260823076">"Ipakita ang laki ng file"</string>
- <string name="menu_file_size_hide" msgid="8881975928502581042">"Itago ang laki ng file"</string>
- <string name="button_select" msgid="527196987259139214">"Pumili"</string>
- <string name="button_copy" msgid="8706475544635021302">"Kopyahin"</string>
- <string name="button_move" msgid="2202666023104202232">"Ilipat"</string>
- <string name="button_dismiss" msgid="3714065566893946085">"I-dismiss"</string>
- <string name="button_retry" msgid="4392027584153752797">"Subukang Muli"</string>
- <string name="sort_name" msgid="9183560467917256779">"Ayon sa pangalan"</string>
- <string name="sort_date" msgid="586080032956151448">"Ayon sa petsa ng pagbago"</string>
- <string name="sort_size" msgid="3350681319735474741">"Ayon sa laki"</string>
- <string name="drawer_open" msgid="4545466532430226949">"Ipakita ang mga root"</string>
- <string name="drawer_close" msgid="7602734368552123318">"Itago ang mga root"</string>
- <string name="save_error" msgid="6167009778003223664">"Hindi na-save ang dokumento"</string>
- <string name="create_error" msgid="3735649141335444215">"Hindi nagawa ang folder"</string>
- <string name="query_error" msgid="5999895349602476581">"Hindi ma-load ang content sa ngayon"</string>
- <string name="root_recent" msgid="4470053704320518133">"Kamakailan"</string>
- <string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> ang libre"</string>
- <string name="root_type_service" msgid="2178854894416775409">"Mga serbisyo ng storage"</string>
- <string name="root_type_shortcut" msgid="3318760609471618093">"Mga Shortcut"</string>
- <string name="root_type_device" msgid="7121342474653483538">"Mga Device"</string>
- <string name="root_type_apps" msgid="8838065367985945189">"Higit pang apps"</string>
- <string name="empty" msgid="7858882803708117596">"Walang mga item"</string>
- <string name="no_results" msgid="6622510343880730446">"Walang mga katugma sa %1$s"</string>
- <string name="toast_no_application" msgid="4632640357724698144">"Hindi mabuksan ang file"</string>
- <string name="toast_failed_delete" msgid="2180678019407244069">"Hindi matanggal ang ilang dokumento"</string>
- <string name="share_via" msgid="8966594246261344259">"Ibahagi sa pamamagitan ng"</string>
- <string name="copy_notification_title" msgid="6374299806748219777">"Kinokopya ang mga file"</string>
- <string name="move_notification_title" msgid="6193835179777284805">"Inililipat ang mga file"</string>
- <string name="delete_notification_title" msgid="3329403967712437496">"Pagde-delete ng mga file"</string>
- <string name="copy_remaining" msgid="6283790937387975095">"<xliff:g id="DURATION">%s</xliff:g> na lang ang natitira"</string>
- <plurals name="copy_begin" formatted="false" msgid="9071199452634086365">
- <item quantity="one">Kumokopya ng <xliff:g id="COUNT_1">%1$d</xliff:g> file.</item>
- <item quantity="other">Kumokopya ng <xliff:g id="COUNT_1">%1$d</xliff:g> na file.</item>
- </plurals>
- <plurals name="move_begin" formatted="false" msgid="8430330882138871643">
- <item quantity="one">Inililipat ang <xliff:g id="COUNT_1">%1$d</xliff:g> file.</item>
- <item quantity="other">Inililipat ang <xliff:g id="COUNT_1">%1$d</xliff:g> na file.</item>
- </plurals>
- <plurals name="deleting" formatted="false" msgid="5054338566802559411">
- <item quantity="one">Dine-delete ang <xliff:g id="COUNT_1">%1$d</xliff:g> file.</item>
- <item quantity="other">Dine-delete ang <xliff:g id="COUNT_1">%1$d</xliff:g> na file.</item>
- </plurals>
- <string name="undo" msgid="7905788502491742328">"I-undo"</string>
- <string name="copy_preparing" msgid="3896202461003039386">"Naghahanda para sa pagkopya…"</string>
- <string name="move_preparing" msgid="2772219441375531410">"Naghahanda para sa paglilipat…"</string>
- <string name="delete_preparing" msgid="5655813182533491992">"Naghahanda para sa pag-delete…"</string>
- <string name="delete_progress" msgid="5399405983046157222">"<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="7160447124922897689">
- <item quantity="one">Hindi makopya ang <xliff:g id="COUNT_1">%1$d</xliff:g> file</item>
- <item quantity="other">Hindi makopya ang <xliff:g id="COUNT_1">%1$d</xliff:g> na file</item>
- </plurals>
- <plurals name="move_error_notification_title" formatted="false" msgid="2710901971014783012">
- <item quantity="one">Hindi mailipat ang <xliff:g id="COUNT_1">%1$d</xliff:g> file</item>
- <item quantity="other">Hindi mailipat ang <xliff:g id="COUNT_1">%1$d</xliff:g> na file</item>
- </plurals>
- <plurals name="delete_error_notification_title" formatted="false" msgid="7228393157786591199">
- <item quantity="one">Hindi ma-delete ang <xliff:g id="COUNT_1">%1$d</xliff:g> file</item>
- <item quantity="other">Hindi ma-delete ang <xliff:g id="COUNT_1">%1$d</xliff:g> na file</item>
- </plurals>
- <string name="notification_touch_for_details" msgid="6268189413228855582">"I-tap upang tingnan ang mga detalye"</string>
- <string name="close" msgid="3043722427445528732">"Isara"</string>
- <string name="copy_failure_alert_content" msgid="4563147454522476183">"Hindi nakopya ang mga file na ito: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="move_failure_alert_content" msgid="2635075788682922861">"Hindi nailipat ang mga file na ito: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="delete_failure_alert_content" msgid="892393767207938353">"Hindi na-delete ang mga file na ito: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="copy_converted_warning_content" msgid="5753861488218674361">"Na-convert ang mga file na ito sa ibang format: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <plurals name="clipboard_files_clipped" formatted="false" msgid="855459017537058539">
- <item quantity="one">Nakopya ang <xliff:g id="COUNT_1">%1$d</xliff:g> file sa clipboard.</item>
- <item quantity="other">Nakopya ang <xliff:g id="COUNT_1">%1$d</xliff:g> na file sa clipboard.</item>
- </plurals>
- <string name="clipboard_files_cannot_paste" msgid="2878324825602325706">"Hindi mai-paste sa lokasyong ito ang mga piniling file."</string>
- <string name="menu_rename" msgid="7678802479104285353">"Palitan ang pangalan"</string>
- <string name="rename_error" msgid="4203041674883412606">"Hindi napalitan ang pangalan ng dokumento"</string>
- <string name="menu_eject_root" msgid="2768224615494227325">"I-eject"</string>
- <string name="notification_copy_files_converted_title" msgid="3153573223054275181">"Na-convert ang ilang file"</string>
- <string name="open_external_dialog_request" msgid="5789329484285817629">"Bigyan ang <xliff:g id="APPNAME"><b>^1</b></xliff:g> ng access sa directory ng <xliff:g id="DIRECTORY"><i>^2</i></xliff:g> sa <xliff:g id="STORAGE"><i>^3</i></xliff:g>?"</string>
- <string name="open_external_dialog_request_primary_volume" msgid="6635562535713428688">"Bibigyan ang <xliff:g id="APPNAME"><b>^1</b></xliff:g> ng access sa direktoryong <xliff:g id="DIRECTORY"><i>^2</i></xliff:g>?"</string>
- <string name="open_external_dialog_root_request" msgid="8899108702926347720">"Bigyan ang <xliff:g id="APPNAME"><b>^1</b></xliff:g> ng access sa iyong data, kabilang ang mga larawan at video, sa <xliff:g id="STORAGE"><i>^2</i></xliff:g>?"</string>
- <string name="never_ask_again" msgid="4295278542972859268">"Huwag nang tatanunging muli"</string>
- <string name="allow" msgid="7225948811296386551">"Payagan"</string>
- <string name="deny" msgid="2081879885755434506">"Tanggihan"</string>
- <plurals name="elements_selected" formatted="false" msgid="1376955402452875047">
- <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> ang napili</item>
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> ang napili</item>
- </plurals>
- <plurals name="elements_dragged" formatted="false" msgid="3727204615215602228">
- <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> item</item>
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> na item</item>
- </plurals>
- <string name="delete_filename_confirmation_message" msgid="5312817725577537488">"Gusto mo bang i-delete ang \"<xliff:g id="NAME">%1$s</xliff:g>?\""</string>
- <string name="delete_foldername_confirmation_message" msgid="5885501832257285329">"Gusto mo bang i-delete ang folder na \"<xliff:g id="NAME">%1$s</xliff:g>\" at ang mga content nito?"</string>
- <plurals name="delete_files_confirmation_message" formatted="false" msgid="8417505791395471802">
- <item quantity="one">Gusto mo bang i-delete ang <xliff:g id="COUNT_1">%1$d</xliff:g> file?</item>
- <item quantity="other">Gusto mo bang i-delete ang <xliff:g id="COUNT_1">%1$d</xliff:g> (na) file?</item>
- </plurals>
- <plurals name="delete_folders_confirmation_message" formatted="false" msgid="9185648028213507769">
- <item quantity="one">Gusto mo bang i-delete ang <xliff:g id="COUNT_1">%1$d</xliff:g> folder at mga content ng mga ito?</item>
- <item quantity="other">Gusto mo bang i-delete ang <xliff:g id="COUNT_1">%1$d</xliff:g> na folder at mga content ng mga ito?</item>
- </plurals>
- <plurals name="delete_items_confirmation_message" formatted="false" msgid="5376214433530243459">
- <item quantity="one">Gusto mo bang i-delete ang <xliff:g id="COUNT_1">%1$d</xliff:g> item?</item>
- <item quantity="other">Gusto mo bang i-delete ang <xliff:g id="COUNT_1">%1$d</xliff:g> na item?</item>
- </plurals>
-</resources>
diff --git a/packages/DocumentsUI/res/values-tr/strings.xml b/packages/DocumentsUI/res/values-tr/strings.xml
deleted file mode 100644
index 9dcc0e1..0000000
--- a/packages/DocumentsUI/res/values-tr/strings.xml
+++ /dev/null
@@ -1,144 +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="app_label" msgid="1551050262492398204">"Dosyalar"</string>
- <string name="downloads_label" msgid="959113951084633612">"İndirilenler"</string>
- <string name="title_open" msgid="4353228937663917801">"Şuradan aç:"</string>
- <string name="title_save" msgid="2433679664882857999">"Şuraya kaydet:"</string>
- <string name="menu_create_dir" msgid="2547620241173881754">"Yeni klasör"</string>
- <string name="menu_grid" msgid="6878021334497835259">"Tablo görünümü"</string>
- <string name="menu_list" msgid="7279285939892417279">"Liste görünümü"</string>
- <string name="menu_sort" msgid="7677740407158414452">"Sıralama ölçütü"</string>
- <string name="menu_search" msgid="3816712084502856974">"Ara"</string>
- <string name="menu_settings" msgid="8239065133341597825">"Depolama ayarları"</string>
- <string name="menu_open" msgid="432922957274920903">"Aç"</string>
- <string name="menu_save" msgid="2394743337684426338">"Kaydet"</string>
- <string name="menu_share" msgid="3075149983979628146">"Paylaş"</string>
- <string name="menu_delete" msgid="8138799623850614177">"Sil"</string>
- <string name="menu_select_all" msgid="8323579667348729928">"Tümünü seç"</string>
- <string name="menu_copy" msgid="3612326052677229148">"Kopyala…"</string>
- <string name="menu_move" msgid="1828090633118079817">"Taşı..."</string>
- <string name="menu_new_window" msgid="1226032889278727538">"Yeni pencere"</string>
- <string name="menu_cut_to_clipboard" msgid="2467149185452488383">"Kes"</string>
- <string name="menu_copy_to_clipboard" msgid="489311381979634291">"Kopyala"</string>
- <string name="menu_paste_from_clipboard" msgid="2071583031180257091">"Yapıştır"</string>
- <string name="menu_advanced_show" msgid="4693652895715631401">"Dahili depolamayı göster"</string>
- <string name="menu_advanced_hide" msgid="4218809952721972589">"Dahili depolamayı gizle"</string>
- <string name="menu_file_size_show" msgid="3240323619260823076">"Dosya boyutunu göster"</string>
- <string name="menu_file_size_hide" msgid="8881975928502581042">"Dosya boyutunu gizle"</string>
- <string name="button_select" msgid="527196987259139214">"Seç"</string>
- <string name="button_copy" msgid="8706475544635021302">"Kopyala"</string>
- <string name="button_move" msgid="2202666023104202232">"Taşı"</string>
- <string name="button_dismiss" msgid="3714065566893946085">"Kapat"</string>
- <string name="button_retry" msgid="4392027584153752797">"Tekrar Dene"</string>
- <string name="sort_name" msgid="9183560467917256779">"Ada göre"</string>
- <string name="sort_date" msgid="586080032956151448">"Değişiklik tarihine göre"</string>
- <string name="sort_size" msgid="3350681319735474741">"Boyuta göre"</string>
- <string name="drawer_open" msgid="4545466532430226949">"Kökleri göster"</string>
- <string name="drawer_close" msgid="7602734368552123318">"Kökleri sakla"</string>
- <string name="save_error" msgid="6167009778003223664">"Doküman kaydedilemedi"</string>
- <string name="create_error" msgid="3735649141335444215">"Klasör oluşturulamadı"</string>
- <string name="query_error" msgid="5999895349602476581">"İçerik şu anda yüklenemiyor"</string>
- <string name="root_recent" msgid="4470053704320518133">"En son"</string>
- <string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> boş"</string>
- <string name="root_type_service" msgid="2178854894416775409">"Depolama hizmetleri"</string>
- <string name="root_type_shortcut" msgid="3318760609471618093">"Kısayollar"</string>
- <string name="root_type_device" msgid="7121342474653483538">"Cihazlar"</string>
- <string name="root_type_apps" msgid="8838065367985945189">"Diğer uygulamalar"</string>
- <string name="empty" msgid="7858882803708117596">"Öğe yok"</string>
- <string name="no_results" msgid="6622510343880730446">"%1$s içinde eşleşme bulunamadı"</string>
- <string name="toast_no_application" msgid="4632640357724698144">"Dosya açılamıyor"</string>
- <string name="toast_failed_delete" msgid="2180678019407244069">"Bazı dokümanlar silinemiyor"</string>
- <string name="share_via" msgid="8966594246261344259">"Şunu kullanarak paylaş:"</string>
- <string name="copy_notification_title" msgid="6374299806748219777">"Dosyalar kopyalanıyor"</string>
- <string name="move_notification_title" msgid="6193835179777284805">"Dosyalar taşınıyor"</string>
- <string name="delete_notification_title" msgid="3329403967712437496">"Dosyalar siliniyor"</string>
- <string name="copy_remaining" msgid="6283790937387975095">"<xliff:g id="DURATION">%s</xliff:g> kaldı"</string>
- <plurals name="copy_begin" formatted="false" msgid="9071199452634086365">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> dosya kopyalanıyor.</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> dosya kopyalanıyor.</item>
- </plurals>
- <plurals name="move_begin" formatted="false" msgid="8430330882138871643">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> dosya taşınıyor.</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> dosya taşınıyor.</item>
- </plurals>
- <plurals name="deleting" formatted="false" msgid="5054338566802559411">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> dosya siliniyor.</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> dosya siliniyor.</item>
- </plurals>
- <string name="undo" msgid="7905788502491742328">"Geri al"</string>
- <string name="copy_preparing" msgid="3896202461003039386">"Kopyalanmak için hazırlanıyor…"</string>
- <string name="move_preparing" msgid="2772219441375531410">"Taşıma için hazırlanıyor…"</string>
- <string name="delete_preparing" msgid="5655813182533491992">"Silmek için hazırlanıyor…"</string>
- <string name="delete_progress" msgid="5399405983046157222">"<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="7160447124922897689">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> dosya kopyalanamadı</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> dosya kopyalanamadı</item>
- </plurals>
- <plurals name="move_error_notification_title" formatted="false" msgid="2710901971014783012">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> dosya taşınamadı</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> dosya taşınamadı</item>
- </plurals>
- <plurals name="delete_error_notification_title" formatted="false" msgid="7228393157786591199">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> dosya silinemedi</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> dosya silinemedi</item>
- </plurals>
- <string name="notification_touch_for_details" msgid="6268189413228855582">"Ayrıntıları görmek için hafifçe dokunun"</string>
- <string name="close" msgid="3043722427445528732">"Kapat"</string>
- <string name="copy_failure_alert_content" msgid="4563147454522476183">"Şu dosyalar kopyalanamadı: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="move_failure_alert_content" msgid="2635075788682922861">"Şu dosyalar taşınamadı: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="delete_failure_alert_content" msgid="892393767207938353">"Şu dosyalar silinemedi: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="copy_converted_warning_content" msgid="5753861488218674361">"Bu dosyalar başka bir biçime dönüştürüldü: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <plurals name="clipboard_files_clipped" formatted="false" msgid="855459017537058539">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> dosya panoya kopyalandı.</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> dosya panoya kopyalandı.</item>
- </plurals>
- <string name="clipboard_files_cannot_paste" msgid="2878324825602325706">"Seçili dosyalar bu konuma yapıştırılamıyor."</string>
- <string name="menu_rename" msgid="7678802479104285353">"Yeniden adlandır"</string>
- <string name="rename_error" msgid="4203041674883412606">"Dokümanın adı değiştirilemedi"</string>
- <string name="menu_eject_root" msgid="2768224615494227325">"Çıkar"</string>
- <string name="notification_copy_files_converted_title" msgid="3153573223054275181">"Bazı dosyalar dönüştürüldü"</string>
- <string name="open_external_dialog_request" msgid="5789329484285817629">"<xliff:g id="APPNAME"><b>^1</b></xliff:g> uygulamasına <xliff:g id="STORAGE"><i>^3</i></xliff:g> depolama alanındaki <xliff:g id="DIRECTORY"><i>^2</i></xliff:g> dizinine erişim izni verilsin mi?"</string>
- <string name="open_external_dialog_request_primary_volume" msgid="6635562535713428688">"<xliff:g id="DIRECTORY"><i>^2</i></xliff:g> dizinine erişmek için <xliff:g id="APPNAME"><b>^1</b></xliff:g> uygulamasına izin verilsin mi?"</string>
- <string name="open_external_dialog_root_request" msgid="8899108702926347720">"<xliff:g id="APPNAME"><b>^1</b></xliff:g> uygulamasının, fotoğraflar ve videolar dahil olmak üzere <xliff:g id="STORAGE"><i>^2</i></xliff:g> üzerindeki verilerinize erişmesine izin verilsin mi?"</string>
- <string name="never_ask_again" msgid="4295278542972859268">"Tekrar sorma"</string>
- <string name="allow" msgid="7225948811296386551">"İzin Ver"</string>
- <string name="deny" msgid="2081879885755434506">"Reddet"</string>
- <plurals name="elements_selected" formatted="false" msgid="1376955402452875047">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> öğe seçildi</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> öğe seçildi</item>
- </plurals>
- <plurals name="elements_dragged" formatted="false" msgid="3727204615215602228">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> öğe</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> öğe</item>
- </plurals>
- <string name="delete_filename_confirmation_message" msgid="5312817725577537488">"\"<xliff:g id="NAME">%1$s</xliff:g>\" silinsin mi?"</string>
- <string name="delete_foldername_confirmation_message" msgid="5885501832257285329">"\"<xliff:g id="NAME">%1$s</xliff:g>\" adlı klasör ve içindekiler silinsin mi?"</string>
- <plurals name="delete_files_confirmation_message" formatted="false" msgid="8417505791395471802">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> dosya silinsin mi?</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> dosya silinsin mi?</item>
- </plurals>
- <plurals name="delete_folders_confirmation_message" formatted="false" msgid="9185648028213507769">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> klasör ve içindekiler silinsin mi?</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> klasör ve içindekiler silinsin mi?</item>
- </plurals>
- <plurals name="delete_items_confirmation_message" formatted="false" msgid="5376214433530243459">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> öğe silinsin mi?</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> öğe silinsin mi?</item>
- </plurals>
-</resources>
diff --git a/packages/DocumentsUI/res/values-uk/strings.xml b/packages/DocumentsUI/res/values-uk/strings.xml
deleted file mode 100644
index 6d28f41..0000000
--- a/packages/DocumentsUI/res/values-uk/strings.xml
+++ /dev/null
@@ -1,168 +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="app_label" msgid="1551050262492398204">"Файли"</string>
- <string name="downloads_label" msgid="959113951084633612">"Завантаження"</string>
- <string name="title_open" msgid="4353228937663917801">"Відкрити"</string>
- <string name="title_save" msgid="2433679664882857999">"Зберегти в"</string>
- <string name="menu_create_dir" msgid="2547620241173881754">"Нова папка"</string>
- <string name="menu_grid" msgid="6878021334497835259">"Режим таблиці"</string>
- <string name="menu_list" msgid="7279285939892417279">"Режим списку"</string>
- <string name="menu_sort" msgid="7677740407158414452">"Параметри сортування"</string>
- <string name="menu_search" msgid="3816712084502856974">"Пошук"</string>
- <string name="menu_settings" msgid="8239065133341597825">"Налаштування пам’яті"</string>
- <string name="menu_open" msgid="432922957274920903">"Відкрити"</string>
- <string name="menu_save" msgid="2394743337684426338">"Зберегти"</string>
- <string name="menu_share" msgid="3075149983979628146">"Поділитися"</string>
- <string name="menu_delete" msgid="8138799623850614177">"Видалити"</string>
- <string name="menu_select_all" msgid="8323579667348729928">"Вибрати все"</string>
- <string name="menu_copy" msgid="3612326052677229148">"Копіювати в…"</string>
- <string name="menu_move" msgid="1828090633118079817">"Перемістити в…"</string>
- <string name="menu_new_window" msgid="1226032889278727538">"Нове вікно"</string>
- <string name="menu_cut_to_clipboard" msgid="2467149185452488383">"Вирізати"</string>
- <string name="menu_copy_to_clipboard" msgid="489311381979634291">"Копіювати"</string>
- <string name="menu_paste_from_clipboard" msgid="2071583031180257091">"Вставити"</string>
- <string name="menu_advanced_show" msgid="4693652895715631401">"Показати внутр. пам’ять"</string>
- <string name="menu_advanced_hide" msgid="4218809952721972589">"Сховати внутр. пам’ять"</string>
- <string name="menu_file_size_show" msgid="3240323619260823076">"Показати розмір файлу"</string>
- <string name="menu_file_size_hide" msgid="8881975928502581042">"Сховати розмір файлу"</string>
- <string name="button_select" msgid="527196987259139214">"Вибрати"</string>
- <string name="button_copy" msgid="8706475544635021302">"Копіювати"</string>
- <string name="button_move" msgid="2202666023104202232">"Перемістити"</string>
- <string name="button_dismiss" msgid="3714065566893946085">"Закрити"</string>
- <string name="button_retry" msgid="4392027584153752797">"Повторити спробу"</string>
- <string name="sort_name" msgid="9183560467917256779">"За назвою"</string>
- <string name="sort_date" msgid="586080032956151448">"За датою змінення"</string>
- <string name="sort_size" msgid="3350681319735474741">"За розміром"</string>
- <string name="drawer_open" msgid="4545466532430226949">"Показати кореневі каталоги"</string>
- <string name="drawer_close" msgid="7602734368552123318">"Сховати кореневі каталоги"</string>
- <string name="save_error" msgid="6167009778003223664">"Не вдалося зберегти документ"</string>
- <string name="create_error" msgid="3735649141335444215">"Помилка створення папки"</string>
- <string name="query_error" msgid="5999895349602476581">"Зараз не вдається завантажити вміст"</string>
- <string name="root_recent" msgid="4470053704320518133">"Останні"</string>
- <string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> вільного місця"</string>
- <string name="root_type_service" msgid="2178854894416775409">"Онлайн-сховища"</string>
- <string name="root_type_shortcut" msgid="3318760609471618093">"Ярлики"</string>
- <string name="root_type_device" msgid="7121342474653483538">"Пристрої"</string>
- <string name="root_type_apps" msgid="8838065367985945189">"Інші програми"</string>
- <string name="empty" msgid="7858882803708117596">"Нічого немає"</string>
- <string name="no_results" msgid="6622510343880730446">"Немає збігів для запиту \"%1$s\""</string>
- <string name="toast_no_application" msgid="4632640357724698144">"Не вдалося відкрити файл"</string>
- <string name="toast_failed_delete" msgid="2180678019407244069">"Не вдалося видалити деякі документи"</string>
- <string name="share_via" msgid="8966594246261344259">"Надіслати через"</string>
- <string name="copy_notification_title" msgid="6374299806748219777">"Копіювання файлів"</string>
- <string name="move_notification_title" msgid="6193835179777284805">"Переміщення файлів"</string>
- <string name="delete_notification_title" msgid="3329403967712437496">"Видалення файлів"</string>
- <string name="copy_remaining" msgid="6283790937387975095">"Залишилося <xliff:g id="DURATION">%s</xliff:g>"</string>
- <plurals name="copy_begin" formatted="false" msgid="9071199452634086365">
- <item quantity="one">Копіювання <xliff:g id="COUNT_1">%1$d</xliff:g> файлу.</item>
- <item quantity="few">Копіювання <xliff:g id="COUNT_1">%1$d</xliff:g> файлів.</item>
- <item quantity="many">Копіювання <xliff:g id="COUNT_1">%1$d</xliff:g> файлів.</item>
- <item quantity="other">Копіювання <xliff:g id="COUNT_1">%1$d</xliff:g> файлу.</item>
- </plurals>
- <plurals name="move_begin" formatted="false" msgid="8430330882138871643">
- <item quantity="one">Переміщення <xliff:g id="COUNT_1">%1$d</xliff:g> файла.</item>
- <item quantity="few">Переміщення <xliff:g id="COUNT_1">%1$d</xliff:g> файлів.</item>
- <item quantity="many">Переміщення <xliff:g id="COUNT_1">%1$d</xliff:g> файлів.</item>
- <item quantity="other">Переміщення <xliff:g id="COUNT_1">%1$d</xliff:g> файла.</item>
- </plurals>
- <plurals name="deleting" formatted="false" msgid="5054338566802559411">
- <item quantity="one">Видалення <xliff:g id="COUNT_1">%1$d</xliff:g> файлу.</item>
- <item quantity="few">Видалення <xliff:g id="COUNT_1">%1$d</xliff:g> файлів.</item>
- <item quantity="many">Видалення <xliff:g id="COUNT_1">%1$d</xliff:g> файлів.</item>
- <item quantity="other">Видалення <xliff:g id="COUNT_1">%1$d</xliff:g> файлу.</item>
- </plurals>
- <string name="undo" msgid="7905788502491742328">"Відмінити"</string>
- <string name="copy_preparing" msgid="3896202461003039386">"Підготовка до копіювання…"</string>
- <string name="move_preparing" msgid="2772219441375531410">"Підготовка до переміщення…"</string>
- <string name="delete_preparing" msgid="5655813182533491992">"Підготовка до видалення…"</string>
- <string name="delete_progress" msgid="5399405983046157222">"<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="7160447124922897689">
- <item quantity="one">Не вдалося скопіювати <xliff:g id="COUNT_1">%1$d</xliff:g> файл</item>
- <item quantity="few">Не вдалося скопіювати <xliff:g id="COUNT_1">%1$d</xliff:g> файли</item>
- <item quantity="many">Не вдалося скопіювати <xliff:g id="COUNT_1">%1$d</xliff:g> файлів</item>
- <item quantity="other">Не вдалося скопіювати <xliff:g id="COUNT_1">%1$d</xliff:g> файлу</item>
- </plurals>
- <plurals name="move_error_notification_title" formatted="false" msgid="2710901971014783012">
- <item quantity="one">Не вдалося перемістити <xliff:g id="COUNT_1">%1$d</xliff:g> файл</item>
- <item quantity="few">Не вдалося перемістити <xliff:g id="COUNT_1">%1$d</xliff:g> файли</item>
- <item quantity="many">Не вдалося перемістити <xliff:g id="COUNT_1">%1$d</xliff:g> файлів</item>
- <item quantity="other">Не вдалося перемістити <xliff:g id="COUNT_1">%1$d</xliff:g> файлу</item>
- </plurals>
- <plurals name="delete_error_notification_title" formatted="false" msgid="7228393157786591199">
- <item quantity="one">Не вдалося видалити <xliff:g id="COUNT_1">%1$d</xliff:g> файл</item>
- <item quantity="few">Не вдалося видалити <xliff:g id="COUNT_1">%1$d</xliff:g> файли</item>
- <item quantity="many">Не вдалося видалити <xliff:g id="COUNT_1">%1$d</xliff:g> файлів</item>
- <item quantity="other">Не вдалося видалити <xliff:g id="COUNT_1">%1$d</xliff:g> файлу</item>
- </plurals>
- <string name="notification_touch_for_details" msgid="6268189413228855582">"Торкніться, щоб переглянути деталі"</string>
- <string name="close" msgid="3043722427445528732">"Закрити"</string>
- <string name="copy_failure_alert_content" msgid="4563147454522476183">"Ці файли не скопійовано: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="move_failure_alert_content" msgid="2635075788682922861">"Ці файли не переміщено: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="delete_failure_alert_content" msgid="892393767207938353">"Ці файли не видалено: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="copy_converted_warning_content" msgid="5753861488218674361">"Ці файли конвертовано в інший формат: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <plurals name="clipboard_files_clipped" formatted="false" msgid="855459017537058539">
- <item quantity="one">У буфер обміну скопійовано <xliff:g id="COUNT_1">%1$d</xliff:g> файл.</item>
- <item quantity="few">У буфер обміну скопійовано <xliff:g id="COUNT_1">%1$d</xliff:g> файли.</item>
- <item quantity="many">У буфер обміну скопійовано <xliff:g id="COUNT_1">%1$d</xliff:g> файлів.</item>
- <item quantity="other">У буфер обміну скопійовано <xliff:g id="COUNT_1">%1$d</xliff:g> файла.</item>
- </plurals>
- <string name="clipboard_files_cannot_paste" msgid="2878324825602325706">"Не вдається вставити вибрані файли в цю папку."</string>
- <string name="menu_rename" msgid="7678802479104285353">"Перейменувати"</string>
- <string name="rename_error" msgid="4203041674883412606">"Не вдалося перейменувати документ"</string>
- <string name="menu_eject_root" msgid="2768224615494227325">"Вийняти"</string>
- <string name="notification_copy_files_converted_title" msgid="3153573223054275181">"Деякі файли конвертовано"</string>
- <string name="open_external_dialog_request" msgid="5789329484285817629">"Надати додатку <xliff:g id="APPNAME"><b>^1</b></xliff:g> доступ до каталогу <xliff:g id="DIRECTORY"><i>^2</i></xliff:g> на пристрої пам’яті <xliff:g id="STORAGE"><i>^3</i></xliff:g>?"</string>
- <string name="open_external_dialog_request_primary_volume" msgid="6635562535713428688">"Надати додатку <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="8899108702926347720">"Надати додатку <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="4295278542972859268">"Не запитувати знову"</string>
- <string name="allow" msgid="7225948811296386551">"Дозвол."</string>
- <string name="deny" msgid="2081879885755434506">"Забор."</string>
- <plurals name="elements_selected" formatted="false" msgid="1376955402452875047">
- <item quantity="one">Вибрано <xliff:g id="COUNT_1">%1$d</xliff:g></item>
- <item quantity="few">Вибрано <xliff:g id="COUNT_1">%1$d</xliff:g></item>
- <item quantity="many">Вибрано <xliff:g id="COUNT_1">%1$d</xliff:g></item>
- <item quantity="other">Вибрано <xliff:g id="COUNT_1">%1$d</xliff:g></item>
- </plurals>
- <plurals name="elements_dragged" formatted="false" msgid="3727204615215602228">
- <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> елемент</item>
- <item quantity="few"><xliff:g id="COUNT_1">%1$d</xliff:g> елементи</item>
- <item quantity="many"><xliff:g id="COUNT_1">%1$d</xliff:g> елементів</item>
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> елемента</item>
- </plurals>
- <string name="delete_filename_confirmation_message" msgid="5312817725577537488">"Видалити файл <xliff:g id="NAME">%1$s</xliff:g>?"</string>
- <string name="delete_foldername_confirmation_message" msgid="5885501832257285329">"Видалити папку \"<xliff:g id="NAME">%1$s</xliff:g>\" та її вміст?"</string>
- <plurals name="delete_files_confirmation_message" formatted="false" msgid="8417505791395471802">
- <item quantity="one">Видалити <xliff:g id="COUNT_1">%1$d</xliff:g> файл?</item>
- <item quantity="few">Видалити <xliff:g id="COUNT_1">%1$d</xliff:g> файли?</item>
- <item quantity="many">Видалити <xliff:g id="COUNT_1">%1$d</xliff:g> файлів?</item>
- <item quantity="other">Видалити <xliff:g id="COUNT_1">%1$d</xliff:g> файлу?</item>
- </plurals>
- <plurals name="delete_folders_confirmation_message" formatted="false" msgid="9185648028213507769">
- <item quantity="one">Видалити <xliff:g id="COUNT_1">%1$d</xliff:g> папку та їх вміст?</item>
- <item quantity="few">Видалити <xliff:g id="COUNT_1">%1$d</xliff:g> папки та їх вміст?</item>
- <item quantity="many">Видалити <xliff:g id="COUNT_1">%1$d</xliff:g> папок та їх вміст?</item>
- <item quantity="other">Видалити <xliff:g id="COUNT_1">%1$d</xliff:g> папки та їх вміст?</item>
- </plurals>
- <plurals name="delete_items_confirmation_message" formatted="false" msgid="5376214433530243459">
- <item quantity="one">Видалити <xliff:g id="COUNT_1">%1$d</xliff:g> елемент?</item>
- <item quantity="few">Видалити <xliff:g id="COUNT_1">%1$d</xliff:g> елементи?</item>
- <item quantity="many">Видалити <xliff:g id="COUNT_1">%1$d</xliff:g> елементів?</item>
- <item quantity="other">Видалити <xliff:g id="COUNT_1">%1$d</xliff:g> елемента?</item>
- </plurals>
-</resources>
diff --git a/packages/DocumentsUI/res/values-ur-rPK/strings.xml b/packages/DocumentsUI/res/values-ur-rPK/strings.xml
deleted file mode 100644
index 54289f8b..0000000
--- a/packages/DocumentsUI/res/values-ur-rPK/strings.xml
+++ /dev/null
@@ -1,144 +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="app_label" msgid="1551050262492398204">"فائلیں"</string>
- <string name="downloads_label" msgid="959113951084633612">"ڈاؤن لوڈز"</string>
- <string name="title_open" msgid="4353228937663917801">"کھولیں از"</string>
- <string name="title_save" msgid="2433679664882857999">"اس میں محفوظ کریں"</string>
- <string name="menu_create_dir" msgid="2547620241173881754">"نیا فولڈر"</string>
- <string name="menu_grid" msgid="6878021334497835259">"گرڈ منظر"</string>
- <string name="menu_list" msgid="7279285939892417279">"فہرست منظر"</string>
- <string name="menu_sort" msgid="7677740407158414452">"ترتیب دیں بلحاظ"</string>
- <string name="menu_search" msgid="3816712084502856974">"تلاش کریں"</string>
- <string name="menu_settings" msgid="8239065133341597825">"اسٹوریج کی ترتیبات"</string>
- <string name="menu_open" msgid="432922957274920903">"کھولیں"</string>
- <string name="menu_save" msgid="2394743337684426338">"محفوظ کریں"</string>
- <string name="menu_share" msgid="3075149983979628146">"اشتراک کریں"</string>
- <string name="menu_delete" msgid="8138799623850614177">"حذف کریں"</string>
- <string name="menu_select_all" msgid="8323579667348729928">"سبھی کو منتخب کریں"</string>
- <string name="menu_copy" msgid="3612326052677229148">"اس میں کاپی کریں…"</string>
- <string name="menu_move" msgid="1828090633118079817">"اس میں منتقل کریں…"</string>
- <string name="menu_new_window" msgid="1226032889278727538">"نئی ونڈو"</string>
- <string name="menu_cut_to_clipboard" msgid="2467149185452488383">"کٹ کریں"</string>
- <string name="menu_copy_to_clipboard" msgid="489311381979634291">"کاپی کریں"</string>
- <string name="menu_paste_from_clipboard" msgid="2071583031180257091">"پیسٹ کریں"</string>
- <string name="menu_advanced_show" msgid="4693652895715631401">"داخلی اسٹوریج دکھائیں"</string>
- <string name="menu_advanced_hide" msgid="4218809952721972589">"داخلی اسٹوریج چھپائیں"</string>
- <string name="menu_file_size_show" msgid="3240323619260823076">"فائل سائز دکھائیں"</string>
- <string name="menu_file_size_hide" msgid="8881975928502581042">"فائل سائز چھپائیں"</string>
- <string name="button_select" msgid="527196987259139214">"منتخب کریں"</string>
- <string name="button_copy" msgid="8706475544635021302">"کاپی کریں"</string>
- <string name="button_move" msgid="2202666023104202232">"منتقل کریں"</string>
- <string name="button_dismiss" msgid="3714065566893946085">"برخاست کریں"</string>
- <string name="button_retry" msgid="4392027584153752797">"دوبارہ کوشش کریں"</string>
- <string name="sort_name" msgid="9183560467917256779">"نام کے لحاظ سے"</string>
- <string name="sort_date" msgid="586080032956151448">"ترمیم کی تاریخ کے لحاظ سے"</string>
- <string name="sort_size" msgid="3350681319735474741">"سائز کے لحاظ سے"</string>
- <string name="drawer_open" msgid="4545466532430226949">"روٹس دکھائیں"</string>
- <string name="drawer_close" msgid="7602734368552123318">"روٹس کو چھپائیں"</string>
- <string name="save_error" msgid="6167009778003223664">"دستاویز کو محفوظ کرنے میں ناکام ہو گیا۔"</string>
- <string name="create_error" msgid="3735649141335444215">"فولڈر بنانے میں ناکام ہو گیا"</string>
- <string name="query_error" msgid="5999895349602476581">"اس وقت مواد لوڈ نہیں ہو سکتا"</string>
- <string name="root_recent" msgid="4470053704320518133">"حالیہ"</string>
- <string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> خالی"</string>
- <string name="root_type_service" msgid="2178854894416775409">"اسٹوریج سروسز"</string>
- <string name="root_type_shortcut" msgid="3318760609471618093">"شارٹ کٹس"</string>
- <string name="root_type_device" msgid="7121342474653483538">"آلات"</string>
- <string name="root_type_apps" msgid="8838065367985945189">"مزید ایپس"</string>
- <string name="empty" msgid="7858882803708117596">"کوئی آئٹمز نہيں ہیں"</string>
- <string name="no_results" msgid="6622510343880730446">"%1$s میں کوئی مماثل نہیں"</string>
- <string name="toast_no_application" msgid="4632640357724698144">"فائل نہیں کھل سکتی"</string>
- <string name="toast_failed_delete" msgid="2180678019407244069">"کچھ دستاویزات کو حذف کرنے سے قاصر"</string>
- <string name="share_via" msgid="8966594246261344259">"اشتراک کریں بذریعہ"</string>
- <string name="copy_notification_title" msgid="6374299806748219777">"فائلیں کاپی ہو رہی ہیں"</string>
- <string name="move_notification_title" msgid="6193835179777284805">"فائلیں منتقل ہو رہی ہیں"</string>
- <string name="delete_notification_title" msgid="3329403967712437496">"فائلیں حذف کی جا رہی ہیں"</string>
- <string name="copy_remaining" msgid="6283790937387975095">"<xliff:g id="DURATION">%s</xliff:g> باقی ہے"</string>
- <plurals name="copy_begin" formatted="false" msgid="9071199452634086365">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> فائلیں کاپی کی جا رہی ہیں۔</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> فائل کاپی کی جا رہی ہے۔</item>
- </plurals>
- <plurals name="move_begin" formatted="false" msgid="8430330882138871643">
- <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="5054338566802559411">
- <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="7905788502491742328">"کالعدم کریں"</string>
- <string name="copy_preparing" msgid="3896202461003039386">"کاپی کیلئے تیار ہو رہا ہے…"</string>
- <string name="move_preparing" msgid="2772219441375531410">"منتقلی کیلئے تیار ہو رہی ہیں…"</string>
- <string name="delete_preparing" msgid="5655813182533491992">"حذف کرنے کیلئے تیاری ہو رہی ہے…"</string>
- <string name="delete_progress" msgid="5399405983046157222">"<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="7160447124922897689">
- <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="2710901971014783012">
- <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="7228393157786591199">
- <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="6268189413228855582">"تفصیلات دیکھنے کیلئے تھپتھپائیں"</string>
- <string name="close" msgid="3043722427445528732">"بند کریں"</string>
- <string name="copy_failure_alert_content" msgid="4563147454522476183">"یہ فائلیں کاپی نہیں ہوئیں: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="move_failure_alert_content" msgid="2635075788682922861">"یہ فائلیں منتقل نہیں ہوئیں: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="delete_failure_alert_content" msgid="892393767207938353">"یہ فائلیں حذف نہیں ہوئیں: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="copy_converted_warning_content" msgid="5753861488218674361">"ان فائلوں کو ایک دوسرے فارمیٹ میں تبدیل کیا گیا تھا: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <plurals name="clipboard_files_clipped" formatted="false" msgid="855459017537058539">
- <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="clipboard_files_cannot_paste" msgid="2878324825602325706">"منتخب کردہ فائلز کو اس مقام پر پیسٹ نہیں کیا جا سکتا۔"</string>
- <string name="menu_rename" msgid="7678802479104285353">"نام تبدیل کریں"</string>
- <string name="rename_error" msgid="4203041674883412606">"دستاویز کا نام تبدیل کرنے میں ناکام"</string>
- <string name="menu_eject_root" msgid="2768224615494227325">"خارج کریں"</string>
- <string name="notification_copy_files_converted_title" msgid="3153573223054275181">"کچھ فائلوں کو تبدیل کیا گیا تھا"</string>
- <string name="open_external_dialog_request" msgid="5789329484285817629">"<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="6635562535713428688">"<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="8899108702926347720">"<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="4295278542972859268">"دوبارہ نہ پوچھیں"</string>
- <string name="allow" msgid="7225948811296386551">"اجازت دیں"</string>
- <string name="deny" msgid="2081879885755434506">"مسترد کریں"</string>
- <plurals name="elements_selected" formatted="false" msgid="1376955402452875047">
- <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="3727204615215602228">
- <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="5312817725577537488">"\"<xliff:g id="NAME">%1$s</xliff:g>\" حذف کریں؟"</string>
- <string name="delete_foldername_confirmation_message" msgid="5885501832257285329">"\"<xliff:g id="NAME">%1$s</xliff:g>\" فولڈر اور اس کی مشمولات حذف کریں؟"</string>
- <plurals name="delete_files_confirmation_message" formatted="false" msgid="8417505791395471802">
- <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="9185648028213507769">
- <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="5376214433530243459">
- <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>
-</resources>
diff --git a/packages/DocumentsUI/res/values-uz-rUZ/strings.xml b/packages/DocumentsUI/res/values-uz-rUZ/strings.xml
deleted file mode 100644
index de13d51..0000000
--- a/packages/DocumentsUI/res/values-uz-rUZ/strings.xml
+++ /dev/null
@@ -1,144 +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="app_label" msgid="1551050262492398204">"Fayllar"</string>
- <string name="downloads_label" msgid="959113951084633612">"Yuklanmalar"</string>
- <string name="title_open" msgid="4353228937663917801">"Ochish"</string>
- <string name="title_save" msgid="2433679664882857999">"Saqlash"</string>
- <string name="menu_create_dir" msgid="2547620241173881754">"Yangi jild"</string>
- <string name="menu_grid" msgid="6878021334497835259">"To‘r ko‘rinishida"</string>
- <string name="menu_list" msgid="7279285939892417279">"Ro‘yxat ko‘rinishida"</string>
- <string name="menu_sort" msgid="7677740407158414452">"Saralash"</string>
- <string name="menu_search" msgid="3816712084502856974">"Qidirish"</string>
- <string name="menu_settings" msgid="8239065133341597825">"Xotira sozlamalari"</string>
- <string name="menu_open" msgid="432922957274920903">"Ochish"</string>
- <string name="menu_save" msgid="2394743337684426338">"Saqlash"</string>
- <string name="menu_share" msgid="3075149983979628146">"Baham ko‘rish"</string>
- <string name="menu_delete" msgid="8138799623850614177">"O‘chirish"</string>
- <string name="menu_select_all" msgid="8323579667348729928">"Hammasini belgilash"</string>
- <string name="menu_copy" msgid="3612326052677229148">"Nusxalash…"</string>
- <string name="menu_move" msgid="1828090633118079817">"Ko‘chirib o‘tkazish…"</string>
- <string name="menu_new_window" msgid="1226032889278727538">"Yangi oyna"</string>
- <string name="menu_cut_to_clipboard" msgid="2467149185452488383">"Kesish"</string>
- <string name="menu_copy_to_clipboard" msgid="489311381979634291">"Nusxalash"</string>
- <string name="menu_paste_from_clipboard" msgid="2071583031180257091">"Joylash"</string>
- <string name="menu_advanced_show" msgid="4693652895715631401">"Ichki xotirani ko‘rsatish"</string>
- <string name="menu_advanced_hide" msgid="4218809952721972589">"Ichki xotirani berkitish"</string>
- <string name="menu_file_size_show" msgid="3240323619260823076">"Fayllar hajmi ko‘rsatilsin"</string>
- <string name="menu_file_size_hide" msgid="8881975928502581042">"Fayllar hajmi ko‘rsatilmasin"</string>
- <string name="button_select" msgid="527196987259139214">"Tanlash"</string>
- <string name="button_copy" msgid="8706475544635021302">"Nusxalash"</string>
- <string name="button_move" msgid="2202666023104202232">"Ko‘chirib o‘tkazish"</string>
- <string name="button_dismiss" msgid="3714065566893946085">"O‘chirish"</string>
- <string name="button_retry" msgid="4392027584153752797">"Qayta urinish"</string>
- <string name="sort_name" msgid="9183560467917256779">"Nomi bo‘yicha"</string>
- <string name="sort_date" msgid="586080032956151448">"Tahrir sanasi bo‘yicha"</string>
- <string name="sort_size" msgid="3350681319735474741">"Hajmi bo‘yicha"</string>
- <string name="drawer_open" msgid="4545466532430226949">"Asosiy jildlarni ko‘rsatish"</string>
- <string name="drawer_close" msgid="7602734368552123318">"Asosiy jildlarni yashirish"</string>
- <string name="save_error" msgid="6167009778003223664">"Hujjat saqlanmadi"</string>
- <string name="create_error" msgid="3735649141335444215">"Jild yaratilmadi"</string>
- <string name="query_error" msgid="5999895349602476581">"Ayni paytda kontentni yuklab bo‘lmayapti"</string>
- <string name="root_recent" msgid="4470053704320518133">"Yaqinda"</string>
- <string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> bo‘sh"</string>
- <string name="root_type_service" msgid="2178854894416775409">"Xotira xizmatlari"</string>
- <string name="root_type_shortcut" msgid="3318760609471618093">"Yorliqlar"</string>
- <string name="root_type_device" msgid="7121342474653483538">"Qurilmalar"</string>
- <string name="root_type_apps" msgid="8838065367985945189">"Ko‘proq dasturlar"</string>
- <string name="empty" msgid="7858882803708117596">"Hech narsa yo‘q"</string>
- <string name="no_results" msgid="6622510343880730446">"%1$s jildidan topilmadi"</string>
- <string name="toast_no_application" msgid="4632640357724698144">"Fayl ochilmadi"</string>
- <string name="toast_failed_delete" msgid="2180678019407244069">"Ba’zi hujjatlar o‘chirilmadi"</string>
- <string name="share_via" msgid="8966594246261344259">"Baham ko‘rish"</string>
- <string name="copy_notification_title" msgid="6374299806748219777">"Fayllar nusxalanmoqda"</string>
- <string name="move_notification_title" msgid="6193835179777284805">"Ko‘chirib o‘tkazilmoqda"</string>
- <string name="delete_notification_title" msgid="3329403967712437496">"Fayllar o‘chirilmoqda"</string>
- <string name="copy_remaining" msgid="6283790937387975095">"<xliff:g id="DURATION">%s</xliff:g> qoldi"</string>
- <plurals name="copy_begin" formatted="false" msgid="9071199452634086365">
- <item quantity="other"> <xliff:g id="COUNT_1">%1$d</xliff:g> ta fayl nusxalanmoqda</item>
- <item quantity="one"> <xliff:g id="COUNT_0">%1$d</xliff:g> ta fayl nusxalanmoqda</item>
- </plurals>
- <plurals name="move_begin" formatted="false" msgid="8430330882138871643">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> ta fayl ko‘chirib o‘tkazilmoqda.</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> ta fayl ko‘chirib o‘tkazilmoqda.</item>
- </plurals>
- <plurals name="deleting" formatted="false" msgid="5054338566802559411">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> ta fayl o‘chirilmoqda.</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> ta fayl o‘chirilmoqda.</item>
- </plurals>
- <string name="undo" msgid="7905788502491742328">"Bekor qilish"</string>
- <string name="copy_preparing" msgid="3896202461003039386">"Nuxsa olishga tayyorgarlik..."</string>
- <string name="move_preparing" msgid="2772219441375531410">"Ko‘chirishga tayyorgarlik…"</string>
- <string name="delete_preparing" msgid="5655813182533491992">"O‘chirishga tayyorlanmoqda…"</string>
- <string name="delete_progress" msgid="5399405983046157222">"<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="7160447124922897689">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> ta fayldan nusxa olib bo‘lmadi</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> ta fayldan nusxa olib bo‘lmadi</item>
- </plurals>
- <plurals name="move_error_notification_title" formatted="false" msgid="2710901971014783012">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> ta faylni ko‘chirib bo‘lmadi</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> ta faylni ko‘chirib bo‘lmadi</item>
- </plurals>
- <plurals name="delete_error_notification_title" formatted="false" msgid="7228393157786591199">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> ta faylni o‘chirib bo‘lmadi</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> ta faylni o‘chirib bo‘lmadi</item>
- </plurals>
- <string name="notification_touch_for_details" msgid="6268189413228855582">"Batafsil ma’lumot olish uchun bosing"</string>
- <string name="close" msgid="3043722427445528732">"Yopish"</string>
- <string name="copy_failure_alert_content" msgid="4563147454522476183">"Quyidagi fayllardan nusxa olinmadi: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="move_failure_alert_content" msgid="2635075788682922861">"Quyidagi fayllar ko‘chirilmadi: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="delete_failure_alert_content" msgid="892393767207938353">"Quyidagi fayllar o‘chirib tashlanmadi: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="copy_converted_warning_content" msgid="5753861488218674361">"Ushbu fayllar boshqa formatga o‘girildi: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <plurals name="clipboard_files_clipped" formatted="false" msgid="855459017537058539">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> ta fayldan vaqtinchalik xotiraga nusxa olindi.</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> ta fayldan vaqtinchalik xotiraga nusxa olindi.</item>
- </plurals>
- <string name="clipboard_files_cannot_paste" msgid="2878324825602325706">"Tanlangan fayllarni bu yerga joylab bo‘lmadi."</string>
- <string name="menu_rename" msgid="7678802479104285353">"Qayta nomlash"</string>
- <string name="rename_error" msgid="4203041674883412606">"Hujjatni qayta nomlab bo‘lmadi"</string>
- <string name="menu_eject_root" msgid="2768224615494227325">"Chiqarish"</string>
- <string name="notification_copy_files_converted_title" msgid="3153573223054275181">"Bir nechta fayllar o‘girildi"</string>
- <string name="open_external_dialog_request" msgid="5789329484285817629">"<xliff:g id="APPNAME"><b>^1</b></xliff:g> ilovasiga <xliff:g id="STORAGE"><i>^3</i></xliff:g> xotirasidagi “<xliff:g id="DIRECTORY"><i>^2</i></xliff:g>” jildidan foydalanishiga ruxsat berilsinmi?"</string>
- <string name="open_external_dialog_request_primary_volume" msgid="6635562535713428688">"<xliff:g id="APPNAME"><b>^1</b></xliff:g> ilovasiga “<xliff:g id="DIRECTORY"><i>^2</i></xliff:g>” jildidan foydalanishiga ruxsat berilsinmi?"</string>
- <string name="open_external_dialog_root_request" msgid="8899108702926347720">"<xliff:g id="APPNAME"><b>^1</b></xliff:g> ilovasiga <xliff:g id="STORAGE"><i>^2</i></xliff:g> xotirasidagi ma’lumotlardan, jumladan, rasmlar va videolardan foydalanishiga ruxsat berilsinmi?"</string>
- <string name="never_ask_again" msgid="4295278542972859268">"Boshqa so‘ralmasin"</string>
- <string name="allow" msgid="7225948811296386551">"Ruxsat berish"</string>
- <string name="deny" msgid="2081879885755434506">"Rad qilish"</string>
- <plurals name="elements_selected" formatted="false" msgid="1376955402452875047">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> ta belgilandi</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> ta belgilandi</item>
- </plurals>
- <plurals name="elements_dragged" formatted="false" msgid="3727204615215602228">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> ta element</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> ta element</item>
- </plurals>
- <string name="delete_filename_confirmation_message" msgid="5312817725577537488">"“<xliff:g id="NAME">%1$s</xliff:g>” o‘chirib tashlansinmi?"</string>
- <string name="delete_foldername_confirmation_message" msgid="5885501832257285329">"“<xliff:g id="NAME">%1$s</xliff:g>” jildi ichidagi kontentlari bilan o‘chirib tashlansinmi?"</string>
- <plurals name="delete_files_confirmation_message" formatted="false" msgid="8417505791395471802">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> ta fayl o‘chirilsinmi?</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> ta fayl o‘chirib tashlansinmi?</item>
- </plurals>
- <plurals name="delete_folders_confirmation_message" formatted="false" msgid="9185648028213507769">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> ta jild ichidagi kontentlari bilan o‘chirib tashlansinmi?</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> ta jild ichidagi kontentlari bilan o‘chirib tashlansinmi?</item>
- </plurals>
- <plurals name="delete_items_confirmation_message" formatted="false" msgid="5376214433530243459">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> ta element o‘chirib tashlansinmi?</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> ta element o‘chirib tashlansinmi?</item>
- </plurals>
-</resources>
diff --git a/packages/DocumentsUI/res/values-vi/strings.xml b/packages/DocumentsUI/res/values-vi/strings.xml
deleted file mode 100644
index 37f29a8..0000000
--- a/packages/DocumentsUI/res/values-vi/strings.xml
+++ /dev/null
@@ -1,144 +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="app_label" msgid="1551050262492398204">"Tệp"</string>
- <string name="downloads_label" msgid="959113951084633612">"Tải xuống"</string>
- <string name="title_open" msgid="4353228937663917801">"Mở từ"</string>
- <string name="title_save" msgid="2433679664882857999">"Lưu vào"</string>
- <string name="menu_create_dir" msgid="2547620241173881754">"Thư mục mới"</string>
- <string name="menu_grid" msgid="6878021334497835259">"Chế độ xem lưới"</string>
- <string name="menu_list" msgid="7279285939892417279">"Chế độ xem danh sách"</string>
- <string name="menu_sort" msgid="7677740407158414452">"Sắp xếp theo"</string>
- <string name="menu_search" msgid="3816712084502856974">"Tìm kiếm"</string>
- <string name="menu_settings" msgid="8239065133341597825">"Cài đặt bộ nhớ"</string>
- <string name="menu_open" msgid="432922957274920903">"Mở"</string>
- <string name="menu_save" msgid="2394743337684426338">"Lưu"</string>
- <string name="menu_share" msgid="3075149983979628146">"Chia sẻ"</string>
- <string name="menu_delete" msgid="8138799623850614177">"Xóa"</string>
- <string name="menu_select_all" msgid="8323579667348729928">"Chọn tất cả"</string>
- <string name="menu_copy" msgid="3612326052677229148">"Sao chép vào…"</string>
- <string name="menu_move" msgid="1828090633118079817">"Chuyển tới..."</string>
- <string name="menu_new_window" msgid="1226032889278727538">"Cửa sổ mới"</string>
- <string name="menu_cut_to_clipboard" msgid="2467149185452488383">"Cắt"</string>
- <string name="menu_copy_to_clipboard" msgid="489311381979634291">"Sao chép"</string>
- <string name="menu_paste_from_clipboard" msgid="2071583031180257091">"Dán"</string>
- <string name="menu_advanced_show" msgid="4693652895715631401">"Hiển thị bộ nhớ trong"</string>
- <string name="menu_advanced_hide" msgid="4218809952721972589">"Ẩn bộ nhớ trong"</string>
- <string name="menu_file_size_show" msgid="3240323619260823076">"Hiển thị kích thước tệp"</string>
- <string name="menu_file_size_hide" msgid="8881975928502581042">"Ẩn kích thước tệp"</string>
- <string name="button_select" msgid="527196987259139214">"Chọn"</string>
- <string name="button_copy" msgid="8706475544635021302">"Sao chép"</string>
- <string name="button_move" msgid="2202666023104202232">"Di chuyển"</string>
- <string name="button_dismiss" msgid="3714065566893946085">"Loại bỏ"</string>
- <string name="button_retry" msgid="4392027584153752797">"Thử lại"</string>
- <string name="sort_name" msgid="9183560467917256779">"Theo tên"</string>
- <string name="sort_date" msgid="586080032956151448">"Theo ngày sửa đổi"</string>
- <string name="sort_size" msgid="3350681319735474741">"Theo kích thước"</string>
- <string name="drawer_open" msgid="4545466532430226949">"Hiển thị gốc"</string>
- <string name="drawer_close" msgid="7602734368552123318">"Ẩn gốc"</string>
- <string name="save_error" msgid="6167009778003223664">"Không lưu tài liệu được"</string>
- <string name="create_error" msgid="3735649141335444215">"Không thể tạo thư mục"</string>
- <string name="query_error" msgid="5999895349602476581">"Không thể tải nội dung vào lúc này"</string>
- <string name="root_recent" msgid="4470053704320518133">"Gần đây"</string>
- <string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> còn trống"</string>
- <string name="root_type_service" msgid="2178854894416775409">"Dịch vụ lưu trữ"</string>
- <string name="root_type_shortcut" msgid="3318760609471618093">"Lối tắt"</string>
- <string name="root_type_device" msgid="7121342474653483538">"Thiết bị"</string>
- <string name="root_type_apps" msgid="8838065367985945189">"Các ứng dụng khác"</string>
- <string name="empty" msgid="7858882803708117596">"Không có mục nào"</string>
- <string name="no_results" msgid="6622510343880730446">"Không có kết quả phù hợp trong %1$s"</string>
- <string name="toast_no_application" msgid="4632640357724698144">"Không thể mở tệp"</string>
- <string name="toast_failed_delete" msgid="2180678019407244069">"Không thể xóa một số tài liệu"</string>
- <string name="share_via" msgid="8966594246261344259">"Chia sẻ qua"</string>
- <string name="copy_notification_title" msgid="6374299806748219777">"Đang sao chép tệp"</string>
- <string name="move_notification_title" msgid="6193835179777284805">"Đang di chuyển tệp"</string>
- <string name="delete_notification_title" msgid="3329403967712437496">"Đang xóa tệp"</string>
- <string name="copy_remaining" msgid="6283790937387975095">"Còn <xliff:g id="DURATION">%s</xliff:g>"</string>
- <plurals name="copy_begin" formatted="false" msgid="9071199452634086365">
- <item quantity="other">Đang sao chép <xliff:g id="COUNT_1">%1$d</xliff:g> tệp.</item>
- <item quantity="one">Đang sao chép <xliff:g id="COUNT_0">%1$d</xliff:g> tệp.</item>
- </plurals>
- <plurals name="move_begin" formatted="false" msgid="8430330882138871643">
- <item quantity="other">Đang di chuyển <xliff:g id="COUNT_1">%1$d</xliff:g> tệp.</item>
- <item quantity="one">Đang di chuyển <xliff:g id="COUNT_0">%1$d</xliff:g> tệp.</item>
- </plurals>
- <plurals name="deleting" formatted="false" msgid="5054338566802559411">
- <item quantity="other">Xóa <xliff:g id="COUNT_1">%1$d</xliff:g> tệp.</item>
- <item quantity="one">Xóa <xliff:g id="COUNT_0">%1$d</xliff:g> tệp.</item>
- </plurals>
- <string name="undo" msgid="7905788502491742328">"Hoàn tác"</string>
- <string name="copy_preparing" msgid="3896202461003039386">"Đang chuẩn bị sao chép…"</string>
- <string name="move_preparing" msgid="2772219441375531410">"Đang chuẩn bị di chuyển…"</string>
- <string name="delete_preparing" msgid="5655813182533491992">"Đang chuẩn bị xóa…"</string>
- <string name="delete_progress" msgid="5399405983046157222">"<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="7160447124922897689">
- <item quantity="other">Không thể sao chép <xliff:g id="COUNT_1">%1$d</xliff:g> tệp</item>
- <item quantity="one">Không thể sao chép <xliff:g id="COUNT_0">%1$d</xliff:g> tệp</item>
- </plurals>
- <plurals name="move_error_notification_title" formatted="false" msgid="2710901971014783012">
- <item quantity="other">Không thể di chuyển <xliff:g id="COUNT_1">%1$d</xliff:g> tệp</item>
- <item quantity="one">Không thể di chuyển <xliff:g id="COUNT_0">%1$d</xliff:g> tệp</item>
- </plurals>
- <plurals name="delete_error_notification_title" formatted="false" msgid="7228393157786591199">
- <item quantity="other">Không thể xóa <xliff:g id="COUNT_1">%1$d</xliff:g> tệp</item>
- <item quantity="one">Không thể xóa <xliff:g id="COUNT_0">%1$d</xliff:g> tệp</item>
- </plurals>
- <string name="notification_touch_for_details" msgid="6268189413228855582">"Nhấn để xem chi tiết"</string>
- <string name="close" msgid="3043722427445528732">"Đóng"</string>
- <string name="copy_failure_alert_content" msgid="4563147454522476183">"Những tệp này chưa được sao chép: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="move_failure_alert_content" msgid="2635075788682922861">"Những tệp này chưa được di chuyển: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="delete_failure_alert_content" msgid="892393767207938353">"Những tệp này chưa được xóa: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="copy_converted_warning_content" msgid="5753861488218674361">"Các tệp này đã được chuyển đổi sang định dạng khác: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <plurals name="clipboard_files_clipped" formatted="false" msgid="855459017537058539">
- <item quantity="other">Đã sao chép <xliff:g id="COUNT_1">%1$d</xliff:g> tệp vào khay nhớ tạm.</item>
- <item quantity="one">Đã sao chép <xliff:g id="COUNT_0">%1$d</xliff:g> tệp vào khay nhớ tạm.</item>
- </plurals>
- <string name="clipboard_files_cannot_paste" msgid="2878324825602325706">"Không thể dán các tệp đã chọn vào vị trí này."</string>
- <string name="menu_rename" msgid="7678802479104285353">"Đổi tên"</string>
- <string name="rename_error" msgid="4203041674883412606">"Không đổi được tên tài liệu"</string>
- <string name="menu_eject_root" msgid="2768224615494227325">"Đẩy ra"</string>
- <string name="notification_copy_files_converted_title" msgid="3153573223054275181">"Đã chuyển đổi một số tệp"</string>
- <string name="open_external_dialog_request" msgid="5789329484285817629">"Cấp cho <xliff:g id="APPNAME"><b>^1</b></xliff:g> quyền truy cập vào thư mục <xliff:g id="DIRECTORY"><i>^2</i></xliff:g> trong <xliff:g id="STORAGE"><i>^3</i></xliff:g>?"</string>
- <string name="open_external_dialog_request_primary_volume" msgid="6635562535713428688">"Cấp cho <xliff:g id="APPNAME"><b>^1</b></xliff:g> quyền truy cập thư mục <xliff:g id="DIRECTORY"><i>^2</i></xliff:g>?"</string>
- <string name="open_external_dialog_root_request" msgid="8899108702926347720">"Cấp cho <xliff:g id="APPNAME"><b>^1</b></xliff:g> quyền truy cập vào dữ liệu của bạn, kể cả ảnh và video trên <xliff:g id="STORAGE"><i>^2</i></xliff:g>?"</string>
- <string name="never_ask_again" msgid="4295278542972859268">"Không hỏi lại"</string>
- <string name="allow" msgid="7225948811296386551">"Cho phép"</string>
- <string name="deny" msgid="2081879885755434506">"Từ chối"</string>
- <plurals name="elements_selected" formatted="false" msgid="1376955402452875047">
- <item quantity="other">Đã chọn <xliff:g id="COUNT_1">%1$d</xliff:g></item>
- <item quantity="one">Đã chọn <xliff:g id="COUNT_0">%1$d</xliff:g></item>
- </plurals>
- <plurals name="elements_dragged" formatted="false" msgid="3727204615215602228">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> mục</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> mục</item>
- </plurals>
- <string name="delete_filename_confirmation_message" msgid="5312817725577537488">"Xóa \"<xliff:g id="NAME">%1$s</xliff:g>\"?"</string>
- <string name="delete_foldername_confirmation_message" msgid="5885501832257285329">"Xóa thư mục \"<xliff:g id="NAME">%1$s</xliff:g>\" và nội dung của thư mục?"</string>
- <plurals name="delete_files_confirmation_message" formatted="false" msgid="8417505791395471802">
- <item quantity="other">Xóa <xliff:g id="COUNT_1">%1$d</xliff:g> tệp?</item>
- <item quantity="one">Xóa <xliff:g id="COUNT_0">%1$d</xliff:g> tệp?</item>
- </plurals>
- <plurals name="delete_folders_confirmation_message" formatted="false" msgid="9185648028213507769">
- <item quantity="other">Xóa <xliff:g id="COUNT_1">%1$d</xliff:g> thư mục và nội dung trong đó?</item>
- <item quantity="one">Xóa <xliff:g id="COUNT_0">%1$d</xliff:g> thư mục và nội dung trong đó?</item>
- </plurals>
- <plurals name="delete_items_confirmation_message" formatted="false" msgid="5376214433530243459">
- <item quantity="other">Xóa <xliff:g id="COUNT_1">%1$d</xliff:g> mục?</item>
- <item quantity="one">Xóa <xliff:g id="COUNT_0">%1$d</xliff:g> mục?</item>
- </plurals>
-</resources>
diff --git a/packages/DocumentsUI/res/values-zh-rCN/strings.xml b/packages/DocumentsUI/res/values-zh-rCN/strings.xml
deleted file mode 100644
index 61f125b..0000000
--- a/packages/DocumentsUI/res/values-zh-rCN/strings.xml
+++ /dev/null
@@ -1,144 +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="app_label" msgid="1551050262492398204">"文件"</string>
- <string name="downloads_label" msgid="959113951084633612">"下载"</string>
- <string name="title_open" msgid="4353228937663917801">"打开文件"</string>
- <string name="title_save" msgid="2433679664882857999">"保存文件"</string>
- <string name="menu_create_dir" msgid="2547620241173881754">"新建文件夹"</string>
- <string name="menu_grid" msgid="6878021334497835259">"网格视图"</string>
- <string name="menu_list" msgid="7279285939892417279">"列表视图"</string>
- <string name="menu_sort" msgid="7677740407158414452">"排序依据"</string>
- <string name="menu_search" msgid="3816712084502856974">"搜索"</string>
- <string name="menu_settings" msgid="8239065133341597825">"存储设置"</string>
- <string name="menu_open" msgid="432922957274920903">"打开"</string>
- <string name="menu_save" msgid="2394743337684426338">"保存"</string>
- <string name="menu_share" msgid="3075149983979628146">"分享"</string>
- <string name="menu_delete" msgid="8138799623850614177">"删除"</string>
- <string name="menu_select_all" msgid="8323579667348729928">"全选"</string>
- <string name="menu_copy" msgid="3612326052677229148">"复制到…"</string>
- <string name="menu_move" msgid="1828090633118079817">"移动到…"</string>
- <string name="menu_new_window" msgid="1226032889278727538">"新建窗口"</string>
- <string name="menu_cut_to_clipboard" msgid="2467149185452488383">"剪切"</string>
- <string name="menu_copy_to_clipboard" msgid="489311381979634291">"复制"</string>
- <string name="menu_paste_from_clipboard" msgid="2071583031180257091">"粘贴"</string>
- <string name="menu_advanced_show" msgid="4693652895715631401">"显示内部存储设备"</string>
- <string name="menu_advanced_hide" msgid="4218809952721972589">"隐藏内部存储设备"</string>
- <string name="menu_file_size_show" msgid="3240323619260823076">"显示文件大小"</string>
- <string name="menu_file_size_hide" msgid="8881975928502581042">"隐藏文件大小"</string>
- <string name="button_select" msgid="527196987259139214">"选择"</string>
- <string name="button_copy" msgid="8706475544635021302">"复制"</string>
- <string name="button_move" msgid="2202666023104202232">"移动"</string>
- <string name="button_dismiss" msgid="3714065566893946085">"关闭"</string>
- <string name="button_retry" msgid="4392027584153752797">"重试"</string>
- <string name="sort_name" msgid="9183560467917256779">"按名称"</string>
- <string name="sort_date" msgid="586080032956151448">"按修改日期"</string>
- <string name="sort_size" msgid="3350681319735474741">"按大小"</string>
- <string name="drawer_open" msgid="4545466532430226949">"显示根目录"</string>
- <string name="drawer_close" msgid="7602734368552123318">"隐藏根目录"</string>
- <string name="save_error" msgid="6167009778003223664">"无法保存文档"</string>
- <string name="create_error" msgid="3735649141335444215">"无法创建文件夹"</string>
- <string name="query_error" msgid="5999895349602476581">"暂时无法加载内容"</string>
- <string name="root_recent" msgid="4470053704320518133">"最近"</string>
- <string name="root_available_bytes" msgid="8568452858617033281">"可用空间:<xliff:g id="SIZE">%1$s</xliff:g>"</string>
- <string name="root_type_service" msgid="2178854894416775409">"存储服务"</string>
- <string name="root_type_shortcut" msgid="3318760609471618093">"捷径"</string>
- <string name="root_type_device" msgid="7121342474653483538">"设备"</string>
- <string name="root_type_apps" msgid="8838065367985945189">"更多应用"</string>
- <string name="empty" msgid="7858882803708117596">"无任何文件"</string>
- <string name="no_results" msgid="6622510343880730446">"%1$s中没有任何相符项"</string>
- <string name="toast_no_application" msgid="4632640357724698144">"无法打开文件"</string>
- <string name="toast_failed_delete" msgid="2180678019407244069">"无法删除部分文档"</string>
- <string name="share_via" msgid="8966594246261344259">"分享方式"</string>
- <string name="copy_notification_title" msgid="6374299806748219777">"正在复制文件"</string>
- <string name="move_notification_title" msgid="6193835179777284805">"正在移动文件"</string>
- <string name="delete_notification_title" msgid="3329403967712437496">"正在删除文件"</string>
- <string name="copy_remaining" msgid="6283790937387975095">"剩余时间:<xliff:g id="DURATION">%s</xliff:g>"</string>
- <plurals name="copy_begin" formatted="false" msgid="9071199452634086365">
- <item quantity="other">正在复制 <xliff:g id="COUNT_1">%1$d</xliff:g> 个文件。</item>
- <item quantity="one">正在复制 <xliff:g id="COUNT_0">%1$d</xliff:g> 个文件。</item>
- </plurals>
- <plurals name="move_begin" formatted="false" msgid="8430330882138871643">
- <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="5054338566802559411">
- <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="7905788502491742328">"撤消"</string>
- <string name="copy_preparing" msgid="3896202461003039386">"正在准备复制…"</string>
- <string name="move_preparing" msgid="2772219441375531410">"正在准备移动…"</string>
- <string name="delete_preparing" msgid="5655813182533491992">"正在准备删除…"</string>
- <string name="delete_progress" msgid="5399405983046157222">"<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="7160447124922897689">
- <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="2710901971014783012">
- <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="7228393157786591199">
- <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="6268189413228855582">"点按即可查看详情"</string>
- <string name="close" msgid="3043722427445528732">"关闭"</string>
- <string name="copy_failure_alert_content" msgid="4563147454522476183">"无法复制以下文件:<xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="move_failure_alert_content" msgid="2635075788682922861">"无法移动以下文件:<xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="delete_failure_alert_content" msgid="892393767207938353">"未能删除以下文件:<xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="copy_converted_warning_content" msgid="5753861488218674361">"下列文件已转换成其他格式:<xliff:g id="LIST">%1$s</xliff:g>"</string>
- <plurals name="clipboard_files_clipped" formatted="false" msgid="855459017537058539">
- <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="clipboard_files_cannot_paste" msgid="2878324825602325706">"无法将所选文件粘贴到此位置。"</string>
- <string name="menu_rename" msgid="7678802479104285353">"重命名"</string>
- <string name="rename_error" msgid="4203041674883412606">"无法重命名文档"</string>
- <string name="menu_eject_root" msgid="2768224615494227325">"弹出"</string>
- <string name="notification_copy_files_converted_title" msgid="3153573223054275181">"部分文件已转换成其他格式"</string>
- <string name="open_external_dialog_request" msgid="5789329484285817629">"要授权<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="6635562535713428688">"要授权<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="8899108702926347720">"要授权<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="4295278542972859268">"不再询问"</string>
- <string name="allow" msgid="7225948811296386551">"允许"</string>
- <string name="deny" msgid="2081879885755434506">"拒绝"</string>
- <plurals name="elements_selected" formatted="false" msgid="1376955402452875047">
- <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="3727204615215602228">
- <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="5312817725577537488">"确定要删除“<xliff:g id="NAME">%1$s</xliff:g>”吗?"</string>
- <string name="delete_foldername_confirmation_message" msgid="5885501832257285329">"要删除文件夹“<xliff:g id="NAME">%1$s</xliff:g>”及其中的内容吗?"</string>
- <plurals name="delete_files_confirmation_message" formatted="false" msgid="8417505791395471802">
- <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="9185648028213507769">
- <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="5376214433530243459">
- <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>
-</resources>
diff --git a/packages/DocumentsUI/res/values-zh-rHK/strings.xml b/packages/DocumentsUI/res/values-zh-rHK/strings.xml
deleted file mode 100644
index 5fcf5af..0000000
--- a/packages/DocumentsUI/res/values-zh-rHK/strings.xml
+++ /dev/null
@@ -1,144 +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="app_label" msgid="1551050262492398204">"檔案"</string>
- <string name="downloads_label" msgid="959113951084633612">"下載"</string>
- <string name="title_open" msgid="4353228937663917801">"開啟檔案"</string>
- <string name="title_save" msgid="2433679664882857999">"儲存至"</string>
- <string name="menu_create_dir" msgid="2547620241173881754">"新增資料夾"</string>
- <string name="menu_grid" msgid="6878021334497835259">"格狀檢視"</string>
- <string name="menu_list" msgid="7279285939892417279">"清單檢視"</string>
- <string name="menu_sort" msgid="7677740407158414452">"排序方式"</string>
- <string name="menu_search" msgid="3816712084502856974">"搜尋"</string>
- <string name="menu_settings" msgid="8239065133341597825">"儲存空間設定"</string>
- <string name="menu_open" msgid="432922957274920903">"開啟"</string>
- <string name="menu_save" msgid="2394743337684426338">"儲存"</string>
- <string name="menu_share" msgid="3075149983979628146">"分享"</string>
- <string name="menu_delete" msgid="8138799623850614177">"刪除"</string>
- <string name="menu_select_all" msgid="8323579667348729928">"全部選取"</string>
- <string name="menu_copy" msgid="3612326052677229148">"複製到…"</string>
- <string name="menu_move" msgid="1828090633118079817">"移至…"</string>
- <string name="menu_new_window" msgid="1226032889278727538">"新視窗"</string>
- <string name="menu_cut_to_clipboard" msgid="2467149185452488383">"剪下"</string>
- <string name="menu_copy_to_clipboard" msgid="489311381979634291">"複製"</string>
- <string name="menu_paste_from_clipboard" msgid="2071583031180257091">"貼上"</string>
- <string name="menu_advanced_show" msgid="4693652895715631401">"顯示內部儲存空間"</string>
- <string name="menu_advanced_hide" msgid="4218809952721972589">"隱藏內部儲存空間"</string>
- <string name="menu_file_size_show" msgid="3240323619260823076">"顯示檔案大小"</string>
- <string name="menu_file_size_hide" msgid="8881975928502581042">"隱藏檔案大小"</string>
- <string name="button_select" msgid="527196987259139214">"選取"</string>
- <string name="button_copy" msgid="8706475544635021302">"複製"</string>
- <string name="button_move" msgid="2202666023104202232">"移動"</string>
- <string name="button_dismiss" msgid="3714065566893946085">"關閉"</string>
- <string name="button_retry" msgid="4392027584153752797">"再試一次"</string>
- <string name="sort_name" msgid="9183560467917256779">"按名稱"</string>
- <string name="sort_date" msgid="586080032956151448">"按修改日期"</string>
- <string name="sort_size" msgid="3350681319735474741">"按大小"</string>
- <string name="drawer_open" msgid="4545466532430226949">"顯示根目錄"</string>
- <string name="drawer_close" msgid="7602734368552123318">"隱藏根目錄"</string>
- <string name="save_error" msgid="6167009778003223664">"無法儲存文件"</string>
- <string name="create_error" msgid="3735649141335444215">"無法建立資料夾"</string>
- <string name="query_error" msgid="5999895349602476581">"目前無法載入內容"</string>
- <string name="root_recent" msgid="4470053704320518133">"最近"</string>
- <string name="root_available_bytes" msgid="8568452858617033281">"可用空間:<xliff:g id="SIZE">%1$s</xliff:g>"</string>
- <string name="root_type_service" msgid="2178854894416775409">"儲存空間服務"</string>
- <string name="root_type_shortcut" msgid="3318760609471618093">"捷徑"</string>
- <string name="root_type_device" msgid="7121342474653483538">"裝置"</string>
- <string name="root_type_apps" msgid="8838065367985945189">"更多應用程式"</string>
- <string name="empty" msgid="7858882803708117596">"沒有項目"</string>
- <string name="no_results" msgid="6622510343880730446">"「%1$s」中沒有相符結果"</string>
- <string name="toast_no_application" msgid="4632640357724698144">"無法開啟檔案"</string>
- <string name="toast_failed_delete" msgid="2180678019407244069">"無法刪除部分文件"</string>
- <string name="share_via" msgid="8966594246261344259">"分享方式:"</string>
- <string name="copy_notification_title" msgid="6374299806748219777">"正在複製檔案"</string>
- <string name="move_notification_title" msgid="6193835179777284805">"正在移動檔案"</string>
- <string name="delete_notification_title" msgid="3329403967712437496">"正在刪除檔案"</string>
- <string name="copy_remaining" msgid="6283790937387975095">"剩餘 <xliff:g id="DURATION">%s</xliff:g>"</string>
- <plurals name="copy_begin" formatted="false" msgid="9071199452634086365">
- <item quantity="other">正在複製 <xliff:g id="COUNT_1">%1$d</xliff:g> 個檔案。</item>
- <item quantity="one">正在複製 <xliff:g id="COUNT_0">%1$d</xliff:g> 個檔案。</item>
- </plurals>
- <plurals name="move_begin" formatted="false" msgid="8430330882138871643">
- <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="5054338566802559411">
- <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="7905788502491742328">"復原"</string>
- <string name="copy_preparing" msgid="3896202461003039386">"正在準備複製…"</string>
- <string name="move_preparing" msgid="2772219441375531410">"正在準備移動…"</string>
- <string name="delete_preparing" msgid="5655813182533491992">"正在準備刪除…"</string>
- <string name="delete_progress" msgid="5399405983046157222">"第 <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="7160447124922897689">
- <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="2710901971014783012">
- <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="7228393157786591199">
- <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="6268189413228855582">"輕按即可查看詳細資訊"</string>
- <string name="close" msgid="3043722427445528732">"關閉"</string>
- <string name="copy_failure_alert_content" msgid="4563147454522476183">"以下檔案未能複製:<xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="move_failure_alert_content" msgid="2635075788682922861">"以下檔案未能移動:<xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="delete_failure_alert_content" msgid="892393767207938353">"無法刪除以下檔案:<xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="copy_converted_warning_content" msgid="5753861488218674361">"這些檔案已轉換成其他格式:<xliff:g id="LIST">%1$s</xliff:g>"</string>
- <plurals name="clipboard_files_clipped" formatted="false" msgid="855459017537058539">
- <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="clipboard_files_cannot_paste" msgid="2878324825602325706">"無法在此位置貼上選取檔案。"</string>
- <string name="menu_rename" msgid="7678802479104285353">"重新命名"</string>
- <string name="rename_error" msgid="4203041674883412606">"無法重新命名文件"</string>
- <string name="menu_eject_root" msgid="2768224615494227325">"逐出"</string>
- <string name="notification_copy_files_converted_title" msgid="3153573223054275181">"部分檔案已轉換成其他格式"</string>
- <string name="open_external_dialog_request" msgid="5789329484285817629">"要為「<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="6635562535713428688">"要為「<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="8899108702926347720">"要向「<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="4295278542972859268">"不要再詢問"</string>
- <string name="allow" msgid="7225948811296386551">"允許"</string>
- <string name="deny" msgid="2081879885755434506">"拒絕"</string>
- <plurals name="elements_selected" formatted="false" msgid="1376955402452875047">
- <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="3727204615215602228">
- <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="5312817725577537488">"要刪除「<xliff:g id="NAME">%1$s</xliff:g>」嗎?"</string>
- <string name="delete_foldername_confirmation_message" msgid="5885501832257285329">"要刪除「<xliff:g id="NAME">%1$s</xliff:g>」資料夾及其內容嗎?"</string>
- <plurals name="delete_files_confirmation_message" formatted="false" msgid="8417505791395471802">
- <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="9185648028213507769">
- <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="5376214433530243459">
- <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>
-</resources>
diff --git a/packages/DocumentsUI/res/values-zh-rTW/strings.xml b/packages/DocumentsUI/res/values-zh-rTW/strings.xml
deleted file mode 100644
index baa6df9..0000000
--- a/packages/DocumentsUI/res/values-zh-rTW/strings.xml
+++ /dev/null
@@ -1,144 +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="app_label" msgid="1551050262492398204">"檔案"</string>
- <string name="downloads_label" msgid="959113951084633612">"下載"</string>
- <string name="title_open" msgid="4353228937663917801">"開啟檔案"</string>
- <string name="title_save" msgid="2433679664882857999">"儲存至"</string>
- <string name="menu_create_dir" msgid="2547620241173881754">"新增資料夾"</string>
- <string name="menu_grid" msgid="6878021334497835259">"格狀檢視"</string>
- <string name="menu_list" msgid="7279285939892417279">"清單檢視"</string>
- <string name="menu_sort" msgid="7677740407158414452">"排序依據"</string>
- <string name="menu_search" msgid="3816712084502856974">"搜尋"</string>
- <string name="menu_settings" msgid="8239065133341597825">"Storage 設定"</string>
- <string name="menu_open" msgid="432922957274920903">"開啟"</string>
- <string name="menu_save" msgid="2394743337684426338">"儲存"</string>
- <string name="menu_share" msgid="3075149983979628146">"共用"</string>
- <string name="menu_delete" msgid="8138799623850614177">"刪除"</string>
- <string name="menu_select_all" msgid="8323579667348729928">"全選"</string>
- <string name="menu_copy" msgid="3612326052677229148">"複製到…"</string>
- <string name="menu_move" msgid="1828090633118079817">"移至…"</string>
- <string name="menu_new_window" msgid="1226032889278727538">"新增視窗"</string>
- <string name="menu_cut_to_clipboard" msgid="2467149185452488383">"剪下"</string>
- <string name="menu_copy_to_clipboard" msgid="489311381979634291">"複製"</string>
- <string name="menu_paste_from_clipboard" msgid="2071583031180257091">"貼上"</string>
- <string name="menu_advanced_show" msgid="4693652895715631401">"顯示內部儲存空間"</string>
- <string name="menu_advanced_hide" msgid="4218809952721972589">"隱藏內部儲存空間"</string>
- <string name="menu_file_size_show" msgid="3240323619260823076">"顯示檔案大小"</string>
- <string name="menu_file_size_hide" msgid="8881975928502581042">"隱藏檔案大小"</string>
- <string name="button_select" msgid="527196987259139214">"選取"</string>
- <string name="button_copy" msgid="8706475544635021302">"複製"</string>
- <string name="button_move" msgid="2202666023104202232">"移動"</string>
- <string name="button_dismiss" msgid="3714065566893946085">"關閉"</string>
- <string name="button_retry" msgid="4392027584153752797">"再試一次"</string>
- <string name="sort_name" msgid="9183560467917256779">"依名稱"</string>
- <string name="sort_date" msgid="586080032956151448">"依修改日期"</string>
- <string name="sort_size" msgid="3350681319735474741">"依大小"</string>
- <string name="drawer_open" msgid="4545466532430226949">"顯示根目錄"</string>
- <string name="drawer_close" msgid="7602734368552123318">"隱藏根目錄"</string>
- <string name="save_error" msgid="6167009778003223664">"無法儲存文件"</string>
- <string name="create_error" msgid="3735649141335444215">"無法建立資料夾"</string>
- <string name="query_error" msgid="5999895349602476581">"目前無法載入內容"</string>
- <string name="root_recent" msgid="4470053704320518133">"最近"</string>
- <string name="root_available_bytes" msgid="8568452858617033281">"可用空間:<xliff:g id="SIZE">%1$s</xliff:g>"</string>
- <string name="root_type_service" msgid="2178854894416775409">"儲存空間服務"</string>
- <string name="root_type_shortcut" msgid="3318760609471618093">"捷徑"</string>
- <string name="root_type_device" msgid="7121342474653483538">"裝置"</string>
- <string name="root_type_apps" msgid="8838065367985945189">"更多應用程式"</string>
- <string name="empty" msgid="7858882803708117596">"沒有任何項目"</string>
- <string name="no_results" msgid="6622510343880730446">"沒有與「%1$s」相符的結果"</string>
- <string name="toast_no_application" msgid="4632640357724698144">"無法開啟檔案"</string>
- <string name="toast_failed_delete" msgid="2180678019407244069">"無法刪除部分文件"</string>
- <string name="share_via" msgid="8966594246261344259">"分享方式:"</string>
- <string name="copy_notification_title" msgid="6374299806748219777">"複製檔案"</string>
- <string name="move_notification_title" msgid="6193835179777284805">"正在移動檔案"</string>
- <string name="delete_notification_title" msgid="3329403967712437496">"正在刪除檔案"</string>
- <string name="copy_remaining" msgid="6283790937387975095">"剩餘 <xliff:g id="DURATION">%s</xliff:g>"</string>
- <plurals name="copy_begin" formatted="false" msgid="9071199452634086365">
- <item quantity="other">正在複製 <xliff:g id="COUNT_1">%1$d</xliff:g> 個檔案。</item>
- <item quantity="one">正在複製 <xliff:g id="COUNT_0">%1$d</xliff:g> 個檔案。</item>
- </plurals>
- <plurals name="move_begin" formatted="false" msgid="8430330882138871643">
- <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="5054338566802559411">
- <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="7905788502491742328">"復原"</string>
- <string name="copy_preparing" msgid="3896202461003039386">"正在準備複製…"</string>
- <string name="move_preparing" msgid="2772219441375531410">"準備移動…"</string>
- <string name="delete_preparing" msgid="5655813182533491992">"正在準備刪除…"</string>
- <string name="delete_progress" msgid="5399405983046157222">"<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="7160447124922897689">
- <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="2710901971014783012">
- <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="7228393157786591199">
- <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="6268189413228855582">"輕觸即可查看詳細資訊"</string>
- <string name="close" msgid="3043722427445528732">"關閉"</string>
- <string name="copy_failure_alert_content" msgid="4563147454522476183">"未複製下列檔案:<xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="move_failure_alert_content" msgid="2635075788682922861">"未移動下列檔案:<xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="delete_failure_alert_content" msgid="892393767207938353">"未刪除下列檔案:<xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="copy_converted_warning_content" msgid="5753861488218674361">"下列檔案已轉換成其他格式:<xliff:g id="LIST">%1$s</xliff:g>"</string>
- <plurals name="clipboard_files_clipped" formatted="false" msgid="855459017537058539">
- <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="clipboard_files_cannot_paste" msgid="2878324825602325706">"無法將所選檔案貼到這個位置。"</string>
- <string name="menu_rename" msgid="7678802479104285353">"重新命名"</string>
- <string name="rename_error" msgid="4203041674883412606">"無法重新命名文件"</string>
- <string name="menu_eject_root" msgid="2768224615494227325">"退出"</string>
- <string name="notification_copy_files_converted_title" msgid="3153573223054275181">"部分檔案已轉換成其他格式"</string>
- <string name="open_external_dialog_request" msgid="5789329484285817629">"要允許<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="6635562535713428688">"要允許<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="8899108702926347720">"要允許「<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="4295278542972859268">"不要再詢問"</string>
- <string name="allow" msgid="7225948811296386551">"允許"</string>
- <string name="deny" msgid="2081879885755434506">"拒絕"</string>
- <plurals name="elements_selected" formatted="false" msgid="1376955402452875047">
- <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="3727204615215602228">
- <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="5312817725577537488">"要刪除「<xliff:g id="NAME">%1$s</xliff:g>」嗎?"</string>
- <string name="delete_foldername_confirmation_message" msgid="5885501832257285329">"要刪除「<xliff:g id="NAME">%1$s</xliff:g>」資料夾和當中的內容嗎?"</string>
- <plurals name="delete_files_confirmation_message" formatted="false" msgid="8417505791395471802">
- <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="9185648028213507769">
- <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="5376214433530243459">
- <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>
-</resources>
diff --git a/packages/DocumentsUI/res/values-zu/strings.xml b/packages/DocumentsUI/res/values-zu/strings.xml
deleted file mode 100644
index 1177941..0000000
--- a/packages/DocumentsUI/res/values-zu/strings.xml
+++ /dev/null
@@ -1,144 +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="app_label" msgid="1551050262492398204">"Amafayela"</string>
- <string name="downloads_label" msgid="959113951084633612">"Okulandiwe"</string>
- <string name="title_open" msgid="4353228937663917801">"Vula kusuka ku-"</string>
- <string name="title_save" msgid="2433679664882857999">"Londoloza ku-"</string>
- <string name="menu_create_dir" msgid="2547620241173881754">"Ifolda entsha"</string>
- <string name="menu_grid" msgid="6878021334497835259">"Ukubuka kwegridi"</string>
- <string name="menu_list" msgid="7279285939892417279">"Ukubuka uhlu"</string>
- <string name="menu_sort" msgid="7677740407158414452">"Hlunga nge-"</string>
- <string name="menu_search" msgid="3816712084502856974">"Sesha"</string>
- <string name="menu_settings" msgid="8239065133341597825">"Izilungiselelo zesitoreji"</string>
- <string name="menu_open" msgid="432922957274920903">"Vula"</string>
- <string name="menu_save" msgid="2394743337684426338">"Londoloza"</string>
- <string name="menu_share" msgid="3075149983979628146">"Yabelana"</string>
- <string name="menu_delete" msgid="8138799623850614177">"Susa"</string>
- <string name="menu_select_all" msgid="8323579667348729928">"Khetha konke"</string>
- <string name="menu_copy" msgid="3612326052677229148">"Kopishela ku…"</string>
- <string name="menu_move" msgid="1828090633118079817">"Hambisa ku…"</string>
- <string name="menu_new_window" msgid="1226032889278727538">"Iwindi elisha"</string>
- <string name="menu_cut_to_clipboard" msgid="2467149185452488383">"Sika"</string>
- <string name="menu_copy_to_clipboard" msgid="489311381979634291">"Kopisha"</string>
- <string name="menu_paste_from_clipboard" msgid="2071583031180257091">"Namathisela"</string>
- <string name="menu_advanced_show" msgid="4693652895715631401">"Bonisa isitoreji sangaphakathi"</string>
- <string name="menu_advanced_hide" msgid="4218809952721972589">"Fihla isitoreji sangaphakathi"</string>
- <string name="menu_file_size_show" msgid="3240323619260823076">"Bonisa usayizi wefayela"</string>
- <string name="menu_file_size_hide" msgid="8881975928502581042">"Fihla usayizi wefayela"</string>
- <string name="button_select" msgid="527196987259139214">"Khetha"</string>
- <string name="button_copy" msgid="8706475544635021302">"Kopisha"</string>
- <string name="button_move" msgid="2202666023104202232">"Hambisa"</string>
- <string name="button_dismiss" msgid="3714065566893946085">"Cashisa"</string>
- <string name="button_retry" msgid="4392027584153752797">"Zama futhi"</string>
- <string name="sort_name" msgid="9183560467917256779">"Ngegama"</string>
- <string name="sort_date" msgid="586080032956151448">"Ngedethi yokuguqula"</string>
- <string name="sort_size" msgid="3350681319735474741">"Ngosayizi"</string>
- <string name="drawer_open" msgid="4545466532430226949">"Bonisa izimpande"</string>
- <string name="drawer_close" msgid="7602734368552123318">"Fihla izimpande"</string>
- <string name="save_error" msgid="6167009778003223664">"Yehlulekile ukulondoloza idokhumenti"</string>
- <string name="create_error" msgid="3735649141335444215">"Yehlulekile ukudala ifolda"</string>
- <string name="query_error" msgid="5999895349602476581">"Ayikwazanga ukulayisha okuqukethwe okwamanje"</string>
- <string name="root_recent" msgid="4470053704320518133">"Okwakamuva"</string>
- <string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> okhululekile"</string>
- <string name="root_type_service" msgid="2178854894416775409">"Amasevisi wesitoreji"</string>
- <string name="root_type_shortcut" msgid="3318760609471618093">"Izinqamuleli"</string>
- <string name="root_type_device" msgid="7121342474653483538">"Amadivayisi"</string>
- <string name="root_type_apps" msgid="8838065367985945189">"Izinhlelo zokusebenza eziningi"</string>
- <string name="empty" msgid="7858882803708117596">"Azikho izinto"</string>
- <string name="no_results" msgid="6622510343880730446">"Akukho okufanayo ku-%1$s"</string>
- <string name="toast_no_application" msgid="4632640357724698144">"Ayikwazanga ukuvula ifayela"</string>
- <string name="toast_failed_delete" msgid="2180678019407244069">"Ayikwazi ukususa amanye amadokhumenti"</string>
- <string name="share_via" msgid="8966594246261344259">"Yabelana nge-"</string>
- <string name="copy_notification_title" msgid="6374299806748219777">"Ikopisha amafayela"</string>
- <string name="move_notification_title" msgid="6193835179777284805">"Ihambisa amafayela"</string>
- <string name="delete_notification_title" msgid="3329403967712437496">"Ukususa amafayela"</string>
- <string name="copy_remaining" msgid="6283790937387975095">"<xliff:g id="DURATION">%s</xliff:g> okusele"</string>
- <plurals name="copy_begin" formatted="false" msgid="9071199452634086365">
- <item quantity="one">Ikopisha amafayela angu-<xliff:g id="COUNT_1">%1$d</xliff:g>.</item>
- <item quantity="other">Ikopisha amafayela angu-<xliff:g id="COUNT_1">%1$d</xliff:g>.</item>
- </plurals>
- <plurals name="move_begin" formatted="false" msgid="8430330882138871643">
- <item quantity="one">Ihambisa amafayela angu-<xliff:g id="COUNT_1">%1$d</xliff:g>.</item>
- <item quantity="other">Ihambisa amafayela angu-<xliff:g id="COUNT_1">%1$d</xliff:g>.</item>
- </plurals>
- <plurals name="deleting" formatted="false" msgid="5054338566802559411">
- <item quantity="one">Isusa amafayela angu-<xliff:g id="COUNT_1">%1$d</xliff:g>.</item>
- <item quantity="other">Isusa amafayela angu-<xliff:g id="COUNT_1">%1$d</xliff:g>.</item>
- </plurals>
- <string name="undo" msgid="7905788502491742328">"Hlehlisa"</string>
- <string name="copy_preparing" msgid="3896202461003039386">"Ilungiselela ukukopisha..."</string>
- <string name="move_preparing" msgid="2772219441375531410">"Ilungiselela ukuhambisa…"</string>
- <string name="delete_preparing" msgid="5655813182533491992">"Ilungiselela ukususa…"</string>
- <string name="delete_progress" msgid="5399405983046157222">"<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="7160447124922897689">
- <item quantity="one">Ayikwazanga ukukopisha amafayela angu-<xliff:g id="COUNT_1">%1$d</xliff:g></item>
- <item quantity="other">Ayikwazanga ukukopisha amafayela angu-<xliff:g id="COUNT_1">%1$d</xliff:g></item>
- </plurals>
- <plurals name="move_error_notification_title" formatted="false" msgid="2710901971014783012">
- <item quantity="one">Ayikwazanga ukuhambisa amafayela angu-<xliff:g id="COUNT_1">%1$d</xliff:g></item>
- <item quantity="other">Ayikwazanga ukuhambisa amafayela angu-<xliff:g id="COUNT_1">%1$d</xliff:g></item>
- </plurals>
- <plurals name="delete_error_notification_title" formatted="false" msgid="7228393157786591199">
- <item quantity="one">Ayikwazanga ukususa amafayela angu-<xliff:g id="COUNT_1">%1$d</xliff:g></item>
- <item quantity="other">Ayikwazanga ukususa amafayela angu-<xliff:g id="COUNT_1">%1$d</xliff:g></item>
- </plurals>
- <string name="notification_touch_for_details" msgid="6268189413228855582">"Thepha ukuze ubuke imininingwane"</string>
- <string name="close" msgid="3043722427445528732">"Vala"</string>
- <string name="copy_failure_alert_content" msgid="4563147454522476183">"Lawo mafayela awakopishwanga: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="move_failure_alert_content" msgid="2635075788682922861">"Lawa mafayela awazange ahanjiswe: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="delete_failure_alert_content" msgid="892393767207938353">"Lawa mafayela awazange asuswe: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <string name="copy_converted_warning_content" msgid="5753861488218674361">"Lawo mafayela aguqulelwe kwenye ifomethi: <xliff:g id="LIST">%1$s</xliff:g>"</string>
- <plurals name="clipboard_files_clipped" formatted="false" msgid="855459017537058539">
- <item quantity="one">Kukopishwe amafayela angu-<xliff:g id="COUNT_1">%1$d</xliff:g> kubhodi lokunamathisela.</item>
- <item quantity="other">Kukopishwe amafayela angu-<xliff:g id="COUNT_1">%1$d</xliff:g> kubhodi lokunamathisela.</item>
- </plurals>
- <string name="clipboard_files_cannot_paste" msgid="2878324825602325706">"Ayikwazi ukunamathisela amafayela akhethiwe kule ndawo."</string>
- <string name="menu_rename" msgid="7678802479104285353">"Qamba kabusha"</string>
- <string name="rename_error" msgid="4203041674883412606">"Yehlulekile ukuqamba kabusha idokhumenti"</string>
- <string name="menu_eject_root" msgid="2768224615494227325">"Khipha"</string>
- <string name="notification_copy_files_converted_title" msgid="3153573223054275181">"Amanye amafayela aguqulelwe"</string>
- <string name="open_external_dialog_request" msgid="5789329484285817629">"Nika i-<xliff:g id="APPNAME"><b>^1</b></xliff:g> ukufinyelela ekuqondiseni kwe-<xliff:g id="DIRECTORY"><i>^2</i></xliff:g> ku-<xliff:g id="STORAGE"><i>^3</i></xliff:g>?"</string>
- <string name="open_external_dialog_request_primary_volume" msgid="6635562535713428688">"Nika ukufinyelela kwe-<xliff:g id="APPNAME"><b>^1</b></xliff:g> kwinkomba ye-<xliff:g id="DIRECTORY"><i>^2</i></xliff:g>?"</string>
- <string name="open_external_dialog_root_request" msgid="8899108702926347720">"Nikeza i-<xliff:g id="APPNAME"><b>^1</b></xliff:g> ukufinyelela kudatha yakho, okufaka izithombe namavidiyo, ku-<xliff:g id="STORAGE"><i>^2</i></xliff:g>?"</string>
- <string name="never_ask_again" msgid="4295278542972859268">"Ungaphindi ubuze"</string>
- <string name="allow" msgid="7225948811296386551">"Vumela"</string>
- <string name="deny" msgid="2081879885755434506">"Yala"</string>
- <plurals name="elements_selected" formatted="false" msgid="1376955402452875047">
- <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> okukhethiwe</item>
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> okukhethiwe</item>
- </plurals>
- <plurals name="elements_dragged" formatted="false" msgid="3727204615215602228">
- <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> izinto</item>
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> izinto</item>
- </plurals>
- <string name="delete_filename_confirmation_message" msgid="5312817725577537488">"Susa i-\"<xliff:g id="NAME">%1$s</xliff:g>\"?"</string>
- <string name="delete_foldername_confirmation_message" msgid="5885501832257285329">"Susa ifolda engu-\"<xliff:g id="NAME">%1$s</xliff:g>\" nokuqukethwe kwalo?"</string>
- <plurals name="delete_files_confirmation_message" formatted="false" msgid="8417505791395471802">
- <item quantity="one">Susa amafayela angu-<xliff:g id="COUNT_1">%1$d</xliff:g>?</item>
- <item quantity="other">Susa amafayela angu-<xliff:g id="COUNT_1">%1$d</xliff:g>?</item>
- </plurals>
- <plurals name="delete_folders_confirmation_message" formatted="false" msgid="9185648028213507769">
- <item quantity="one">Susa amafolda angu-<xliff:g id="COUNT_1">%1$d</xliff:g> nokuqukethwe kwawo?</item>
- <item quantity="other">Susa amafolda angu-<xliff:g id="COUNT_1">%1$d</xliff:g> nokuqukethwe kwawo?</item>
- </plurals>
- <plurals name="delete_items_confirmation_message" formatted="false" msgid="5376214433530243459">
- <item quantity="one">Susa izinto ezingu-<xliff:g id="COUNT_1">%1$d</xliff:g>?</item>
- <item quantity="other">Susa izinto ezingu-<xliff:g id="COUNT_1">%1$d</xliff:g>?</item>
- </plurals>
-</resources>
diff --git a/packages/DocumentsUI/res/values/attrs.xml b/packages/DocumentsUI/res/values/attrs.xml
deleted file mode 100644
index 46ca582..0000000
--- a/packages/DocumentsUI/res/values/attrs.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2015 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-<resources>
- <declare-styleable name="HighlightedItemView">
- <attr name="state_highlighted" format="boolean"/>
- </declare-styleable>
-</resources>
diff --git a/packages/DocumentsUI/res/values/colors.xml b/packages/DocumentsUI/res/values/colors.xml
deleted file mode 100644
index 9da7742..0000000
--- a/packages/DocumentsUI/res/values/colors.xml
+++ /dev/null
@@ -1,42 +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>
- <!-- This is the window background, but also the background for anything
- else that needs to manually declare a background matching the "default"
- app background (e.g. the drawer overlay). -->
- <color name="window_background">#fff1f1f1</color>
- <color name="drawer_background">#fff1f1f1</color>
- <color name="directory_background">#fff7f7f7</color>
- <color name="menu_search_background">@android:color/transparent</color>
-
- <color name="primary_dark">@*android:color/primary_dark_device_default_settings</color>
- <color name="primary">@*android:color/primary_device_default_settings</color>
- <color name="accent">@*android:color/accent_device_default_light</color>
- <color name="accent_dark">@*android:color/accent_device_default_dark</color>
-
- <color name="band_select_background">#88ffffff</color>
- <color name="band_select_border">#44000000</color>
-
- <color name="root_activated_color">@*android:color/accent_device_default_700</color>
-
- <!-- TODO: Would be nice to move this to a color-set, but not sure how to support animation -->
- <color name="item_doc_background">#fffafafa</color>
- <color name="item_doc_background_disabled">#fff4f4f4</color>
- <color name="item_doc_background_selected">@*android:color/accent_device_default_50</color>
- <color name="item_breadcrumb_background_hovered">#1affffff</color>
-
-</resources>
diff --git a/packages/DocumentsUI/res/values/config.xml b/packages/DocumentsUI/res/values/config.xml
deleted file mode 100644
index f883164..0000000
--- a/packages/DocumentsUI/res/values/config.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2015 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<resources>
- <!-- Allow Advanced Devices default value to be customised -->
- <bool name="config_defaultAdvancedDevices">false</bool>
-
- <!-- Intentionally unset. Vendors should set this in an overlay. -->
- <string name="trusted_quick_viewer_package" translatable="false"></string>
-
- <!-- Flags setup as productivity oriented in which case Downloads app will be presented
- as Files app. Including showing of the Documents and "advanced" roots. -->
- <bool name="productivity_device">false</bool>
-
- <!-- Indicates if search view is taking the whole toolbar space -->
- <bool name="full_bar_search_view">true</bool>
-
-</resources>
diff --git a/packages/DocumentsUI/res/values/dimens.xml b/packages/DocumentsUI/res/values/dimens.xml
deleted file mode 100644
index 7cda341..0000000
--- a/packages/DocumentsUI/res/values/dimens.xml
+++ /dev/null
@@ -1,51 +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>
- <dimen name="grid_container_padding">10dp</dimen>
- <dimen name="list_container_padding">0dp</dimen>
- <dimen name="icon_size">40dp</dimen>
- <dimen name="root_icon_size">24dp</dimen>
- <dimen name="root_icon_margin">0dp</dimen>
- <dimen name="check_icon_size">30dp</dimen>
- <dimen name="list_item_thumbnail_size">40dp</dimen>
- <dimen name="grid_item_icon_size">30dp</dimen>
- <dimen name="progress_bar_height">4dp</dimen>
- <dimen name="grid_width">152dp</dimen>
- <dimen name="grid_height">176dp</dimen>
- <dimen name="grid_item_width">152dp</dimen>
- <dimen name="grid_item_height">176dp</dimen>
- <dimen name="grid_item_margin">4dp</dimen>
- <dimen name="grid_padding_horiz">4dp</dimen>
- <dimen name="grid_padding_vert">4dp</dimen>
- <dimen name="list_item_height">72dp</dimen>
- <dimen name="list_item_padding">16dp</dimen>
- <dimen name="breadcrumb_item_padding">8dp</dimen>
- <dimen name="breadcrumb_item_height">36dp</dimen>
- <dimen name="list_divider_inset">72dp</dimen>
- <dimen name="dir_elevation">8dp</dimen>
- <dimen name="drag_shadow_size">120dp</dimen>
- <dimen name="grid_item_elevation">2dp</dimen>
- <dimen name="max_drawer_width">280dp</dimen>
-
- <dimen name="drawer_edge_width">12dp</dimen>
-
- <dimen name="drag_shadow_width">160dp</dimen>
- <dimen name="drag_shadow_height">48dp</dimen>
-
- <dimen name="autoscroll_edge_height">32dp</dimen>
-
-</resources>
diff --git a/packages/DocumentsUI/res/values/layouts.xml b/packages/DocumentsUI/res/values/layouts.xml
deleted file mode 100644
index a60ce87..0000000
--- a/packages/DocumentsUI/res/values/layouts.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2015 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<resources>
- <item name="documents_activity" type="layout">@layout/drawer_layout</item>
- <item name="files_activity" type="layout">@layout/drawer_layout</item>
-</resources>
diff --git a/packages/DocumentsUI/res/values/strings.xml b/packages/DocumentsUI/res/values/strings.xml
deleted file mode 100644
index 416bb6f..0000000
--- a/packages/DocumentsUI/res/values/strings.xml
+++ /dev/null
@@ -1,256 +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:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- Title of the documents application [CHAR LIMIT=32] -->
- <string name="app_label">Files</string>
-
- <!-- Title of the standalone downloads activity. [CHAR LIMIT=32] -->
- <string name="downloads_label">Downloads</string>
-
- <!-- Action bar title prompting user to choose a location to open a document from [CHAR LIMIT=32] -->
- <string name="title_open">Open from</string>
- <!-- Action bar title prompting user to choose a location to save a document to [CHAR LIMIT=32] -->
- <string name="title_save">Save to</string>
-
- <!-- Menu item that creates a new directory/folder at the current location [CHAR LIMIT=24] -->
- <string name="menu_create_dir">New folder</string>
- <!-- Menu item that switches view to show documents as a large-format grid of thumbnails [CHAR LIMIT=24] -->
- <string name="menu_grid">Grid view</string>
- <!-- Menu item that switches view to show documents as a list [CHAR LIMIT=24] -->
- <string name="menu_list">List view</string>
- <!-- Menu item that switches the criteria with which documents are sorted [CHAR LIMIT=24] -->
- <string name="menu_sort">Sort by</string>
- <!-- Menu item that enters a mode to search for documents [CHAR LIMIT=24] -->
- <string name="menu_search">Search</string>
- <!-- Menu item that enters activity to change settings for current root [CHAR LIMIT=24] -->
- <string name="menu_settings">Storage settings</string>
-
- <!-- Menu item title that opens the selected documents [CHAR LIMIT=24] -->
- <string name="menu_open">Open</string>
- <!-- Menu item title that saves the current document [CHAR LIMIT=24] -->
- <string name="menu_save">Save</string>
- <!-- Menu item title that shares the selected documents [CHAR LIMIT=24] -->
- <string name="menu_share">Share</string>
- <!-- Menu item title that deletes the selected documents [CHAR LIMIT=24] -->
- <string name="menu_delete">Delete</string>
- <!-- Menu item title that selects all documents in the current directory [CHAR LIMIT=24] -->
- <string name="menu_select_all">Select all</string>
- <!-- Menu item title that copies the selected documents [CHAR LIMIT=24] -->
- <string name="menu_copy">Copy to\u2026</string>
- <!-- Menu item title that moves the selected documents [CHAR LIMIT=24] -->
- <string name="menu_move">Move to\u2026</string>
-
- <!-- Menu item title that creates a new window in the activity [CHAR LIMIT=24] -->
- <string name="menu_new_window">New window</string>
- <!-- Menu item title that cuts the selected documents to clipboard [CHAR LIMIT=24] -->
- <string name="menu_cut_to_clipboard">Cut</string>
- <!-- Menu item title that copies the selected documents to clipboard [CHAR LIMIT=24] -->
- <string name="menu_copy_to_clipboard">Copy</string>
- <!-- Menu item title that pastes files from the clipboard [CHAR LIMIT=24] -->
- <string name="menu_paste_from_clipboard">Paste</string>
-
- <!-- Menu item that reveals internal storage built into the device [CHAR LIMIT=24] -->
- <string name="menu_advanced_show">Show internal storage</string>
- <!-- Menu item that hides internal storage built into the device [CHAR LIMIT=24] -->
- <string name="menu_advanced_hide">Hide internal storage</string>
-
- <!-- Menu item that reveals the sizes of displayed files [CHAR LIMIT=24] -->
- <string name="menu_file_size_show">Show file size</string>
- <!-- Menu item that hides the sizes of displayed files [CHAR LIMIT=24] -->
- <string name="menu_file_size_hide">Hide file size</string>
-
- <!-- Button label that select the current directory [CHAR LIMIT=24] -->
- <string name="button_select">Select</string>
- <!-- Button label that copies files to the current directory [CHAR LIMIT=24] -->
- <string name="button_copy">Copy</string>
- <!-- Button label that moves files to the current directory [CHAR LIMIT=24] -->
- <string name="button_move">Move</string>
- <!-- Button label that hides the error bar [CHAR LIMIT=24] -->
- <string name="button_dismiss">Dismiss</string>
- <string name="button_retry">Try Again</string>
-
- <!-- Mode that sorts documents by their display name alphabetically [CHAR LIMIT=24] -->
- <string name="sort_name">By name</string>
- <!-- Mode that sorts documents by their last modified time in descending order; most recent first [CHAR LIMIT=24] -->
- <string name="sort_date">By date modified</string>
- <!-- Mode that sorts documents by their file size in descending order; largest first [CHAR LIMIT=24] -->
- <string name="sort_size">By size</string>
-
- <!-- Accessibility title to open the drawer showing all roots where documents can be stored [CHAR LIMIT=32] -->
- <string name="drawer_open">Show roots</string>
- <!-- Accessibility title to close the drawer showing all roots where documents can be stored [CHAR LIMIT=32] -->
- <string name="drawer_close">Hide roots</string>
-
- <!-- Toast shown when saving a document failed with an error [CHAR LIMIT=48] -->
- <string name="save_error">Failed to save document</string>
- <!-- Toast shown when creating a folder failed with an error [CHAR LIMIT=48] -->
- <string name="create_error">Failed to create folder</string>
- <!-- Error message shown when querying for a list of documents failed [CHAR LIMIT=48] -->
- <string name="query_error">Can\u2019t load content at the moment</string>
-
- <!-- Title of storage root location that contains recently modified or used documents [CHAR LIMIT=24] -->
- <string name="root_recent">Recent</string>
- <!-- Subtitle of storage root indicating the total free space available, in bytes [CHAR LIMIT=24] -->
- <string name="root_available_bytes"><xliff:g id="size" example="3GB">%1$s</xliff:g> free</string>
-
- <!-- Header title for list of storage roots that contains cloud services [CHAR LIMIT=24] -->
- <string name="root_type_service">Storage services</string>
- <!-- Header title for list of storage roots that contains shortcuts to documents that may be available elsewhere [CHAR LIMIT=24] -->
- <string name="root_type_shortcut">Shortcuts</string>
- <!-- Header title for list of storage roots that contains physical devices [CHAR LIMIT=24] -->
- <string name="root_type_device">Devices</string>
- <!-- Header title for list of additional apps that can provide documents [CHAR LIMIT=24] -->
- <string name="root_type_apps">More apps</string>
-
- <!-- Text shown when a directory of documents is empty [CHAR LIMIT=24] -->
- <string name="empty">No items</string>
- <!-- Text shown when a file search returns no items [CHAR LIMIT=32] -->
- <string name="no_results">No matches in %1$s</string>
-
- <!-- Toast shown when no app can be found to open the selected document [CHAR LIMIT=48] -->
- <string name="toast_no_application">Can\u2019t open file</string>
- <!-- Toast shown when some of the selected documents failed to be deleted [CHAR LIMIT=48] -->
- <string name="toast_failed_delete">Unable to delete some documents</string>
-
- <!-- Title of dialog when prompting user to select an app to share documents with [CHAR LIMIT=32] -->
- <string name="share_via">Share via</string>
-
- <!-- Title of the copy notification [CHAR LIMIT=24] -->
- <string name="copy_notification_title">Copying files</string>
- <!-- Title of the move notification [CHAR LIMIT=24] -->
- <string name="move_notification_title">Moving files</string>
- <!-- Title of the move notification [CHAR LIMIT=24] -->
- <string name="delete_notification_title">Deleting files</string>
- <!-- Text shown on the copy notification to indicate remaining time, in minutes [CHAR LIMIT=24] -->
- <string name="copy_remaining"><xliff:g id="duration" example="3 minutes">%s</xliff:g> left</string>
- <!-- Toast shown when a file copy is kicked off -->
- <plurals name="copy_begin">
- <item quantity="one">Copying <xliff:g id="count" example="1">%1$d</xliff:g> file.</item>
- <item quantity="other">Copying <xliff:g id="count" example="3">%1$d</xliff:g> files.</item>
- </plurals>
- <plurals name="move_begin">
- <item quantity="one">Moving <xliff:g id="count" example="1">%1$d</xliff:g> file.</item>
- <item quantity="other">Moving <xliff:g id="count" example="3">%1$d</xliff:g> files.</item>
- </plurals>
- <!-- Text shown when files are deleted -->
- <plurals name="deleting">
- <item quantity="one">Deleting <xliff:g id="count" example="1">%1$d</xliff:g> file.</item>
- <item quantity="other">Deleting <xliff:g id="count" example="3">%1$d</xliff:g> files.</item>
- </plurals>
- <!-- Text shown for the undo button -->
- <string name="undo">Undo</string>
- <!-- Text shown on the notification while DocumentsUI performs setup in preparation for copying files [CHAR LIMIT=32] -->
- <string name="copy_preparing">Preparing for copy\u2026</string>
- <!-- Text shown on the notification while DocumentsUI performs setup in preparation for moving files [CHAR LIMIT=32] -->
- <string name="move_preparing">Preparing for move\u2026</string>
- <!-- Text shown on the notification while DocumentsUI performs setup in preparation for deleting files [CHAR LIMIT=32] -->
- <string name="delete_preparing">Preparing for delete\u2026</string>
- <!-- Text progress shown on the notification while DocumentsUI is deleting files. -->
- <string name="delete_progress"><xliff:g id="count" example="3">%1$d</xliff:g> / <xliff:g id="totalCount" example="5">%2$d</xliff:g></string>
- <!-- Title of the copy error notification [CHAR LIMIT=48] -->
- <plurals name="copy_error_notification_title">
- <item quantity="one">Couldn\u2019t copy <xliff:g id="count" example="1">%1$d</xliff:g> file</item>
- <item quantity="other">Couldn\u2019t copy <xliff:g id="count" example="2">%1$d</xliff:g> files</item>
- </plurals>
- <!-- Title of the move error notification [CHAR LIMIT=48] -->
- <plurals name="move_error_notification_title">
- <item quantity="one">Couldn\u2019t move <xliff:g id="count" example="1">%1$d</xliff:g> file</item>
- <item quantity="other">Couldn\u2019t move <xliff:g id="count" example="2">%1$d</xliff:g> files</item>
- </plurals>
- <!-- Title of the delete error notification [CHAR LIMIT=48] -->
- <plurals name="delete_error_notification_title">
- <item quantity="one">Couldn\u2019t delete <xliff:g id="count" example="1">%1$d</xliff:g> file</item>
- <item quantity="other">Couldn\u2019t delete <xliff:g id="count" example="2">%1$d</xliff:g> files</item>
- </plurals>
- <!-- Second line for notifications saying that more information will be shown after touching [CHAR LIMIT=48] -->
- <string name="notification_touch_for_details">Tap to view details</string>
- <!-- Label of the close dialog button.[CHAR LIMIT=24] -->
- <string name="close">Close</string>
- <!-- Contents of the copying failure alert dialog. [CHAR LIMIT=48] -->
- <string name="copy_failure_alert_content">These files weren\u2019t copied: <xliff:g id="list">%1$s</xliff:g></string>
- <!-- Contents of the moving failure alert dialog. [CHAR LIMIT=48] -->
- <string name="move_failure_alert_content">These files weren\u2019t moved: <xliff:g id="list">%1$s</xliff:g></string>
- <!-- Message shown to users when an operation to delete one or more files has failed. Presented in a dialog. [CHAR LIMIT=48] -->
- <string name="delete_failure_alert_content">These files weren\u2019t deleted: <xliff:g id="list">%1$s</xliff:g></string>
- <!-- Contents of the copying warning dialog due to converted files. [CHAR LIMIT=64] -->
- <string name="copy_converted_warning_content">These files were converted to another format: <xliff:g id="list" example="Document.pdf, Photo.jpg, Song.ogg">%1$s</xliff:g></string>
- <!-- Toast shown when a user copies files to clipboard. -->
- <plurals name="clipboard_files_clipped">
- <item quantity="one">Copied <xliff:g id="count" example="1">%1$d</xliff:g> file to clipboard.</item>
- <item quantity="other">Copied <xliff:g id="count" example="3">%1$d</xliff:g> files to clipboard.</item>
- </plurals>
- <!-- Toast shown when a user tries to paste files into an unsupported location. -->
- <string name="clipboard_files_cannot_paste">Cannot paste the selected files in this location.</string>
- <!-- Menu item that renames the selected document [CHAR LIMIT=24] -->
- <string name="menu_rename">Rename</string>
- <!-- Toast shown when renaming document failed with an error [CHAR LIMIT=48] -->
- <string name="rename_error">Failed to rename document</string>
- <!-- Context Menu item that ejects the root selected [CHAR LIMIT=24] -->
- <string name="menu_eject_root">Eject</string>
- <!-- First line for notifications saying that some files were converted to a different format
- during a copy. [CHAR LIMIT=48] -->
- <string name="notification_copy_files_converted_title">Some files were converted</string>
-
- <!-- Text in an alert dialog asking user to grant app access to a given directory in an external storage volume -->
- <string name="open_external_dialog_request">Grant <xliff:g id="appName" example="System Settings"><b>^1</b></xliff:g>
- access to <xliff:g id="directory" example="Pictures"><i>^2</i></xliff:g> directory on
- <xliff:g id="storage" example="SD Card"><i>^3</i></xliff:g>?</string>
- <!-- Text in an alert dialog asking user to grant app access to a given directory in the internal storage -->
- <string name="open_external_dialog_request_primary_volume">Grant <xliff:g id="appName" example="System Settings"><b>^1</b></xliff:g>
- access to <xliff:g id="directory" example="Pictures"><i>^2</i></xliff:g> directory?</string>
- <!-- Text in an alert dialog asking user to grant app access to all data in an external storage volume -->
- <string name="open_external_dialog_root_request">Grant <xliff:g id="appName" example="System Settings"><b>^1</b></xliff:g>
- access to your data, including photos and videos, on <xliff:g id="storage" example="SD Card"><i>^2</i></xliff:g>?</string>
- <!-- Checkbox that allows user to not be questioned about the directory access request again -->
- <string name="never_ask_again">Don\'t ask again</string>
- <!-- Text in the button asking user to allow access to a given directory. -->
- <string name="allow">Allow</string>
- <!-- Text in the button asking user to deny access to a given directory. -->
- <string name="deny">Deny</string>
- <!-- Dialog text shown to users when asking if they want to delete files (a confirmation). -->
- <!-- Label text showing user how many items are selected. Can be one or more elements. -->
- <plurals name="elements_selected">
- <item quantity="one"><xliff:g id="count" example="1">%1$d</xliff:g> selected</item>
- <item quantity="other"><xliff:g id="count" example="3">%1$d</xliff:g> selected</item>
- </plurals>
-
- <!-- Label text showing user how many items are being dragged. Can be one or more elements. -->
- <plurals name="elements_dragged">
- <item quantity="one"><xliff:g id="count" example="1">%1$d</xliff:g> item</item>
- <item quantity="other"><xliff:g id="count" example="3">%1$d</xliff:g> items</item>
- </plurals>
-
- <!-- Dialog text shown to users when asking if they want to delete a file (a confirmation) -->
- <string name="delete_filename_confirmation_message">Delete \"<xliff:g id="name" example="cat.jpg">%1$s</xliff:g>\"?</string>
- <!-- Dialog text shown to users when asking if they want to delete a folder (a confirmation) -->
- <string name="delete_foldername_confirmation_message">Delete folder \"<xliff:g id="name" example="Photos">%1$s</xliff:g>\" and its contents?</string>
- <!-- Dialog text shown to users when asking if they want to delete files (a confirmation). -->
- <plurals name="delete_files_confirmation_message">
- <item quantity="one">Delete <xliff:g id="count" example="1">%1$d</xliff:g> file?</item>
- <item quantity="other">Delete <xliff:g id="count" example="3">%1$d</xliff:g> files?</item>
- </plurals>
- <!-- Dialog text shown to users when asking if they want to delete folders (a confirmation). -->
- <plurals name="delete_folders_confirmation_message">
- <item quantity="one">Delete <xliff:g id="count" example="1">%1$d</xliff:g> folder and its contents?</item>
- <item quantity="other">Delete <xliff:g id="count" example="3">%1$d</xliff:g> folders and their contents?</item>
- </plurals>
- <!-- Dialog text shown to users when asking if they want to delete mixed type items: files and folders (a confirmation). -->
- <plurals name="delete_items_confirmation_message">
- <item quantity="one">Delete <xliff:g id="count" example="1">%1$d</xliff:g> item?</item>
- <item quantity="other">Delete <xliff:g id="count" example="3">%1$d</xliff:g> items?</item>
- </plurals>
-</resources>
diff --git a/packages/DocumentsUI/res/values/styles.xml b/packages/DocumentsUI/res/values/styles.xml
deleted file mode 100644
index b5e32d4..0000000
--- a/packages/DocumentsUI/res/values/styles.xml
+++ /dev/null
@@ -1,49 +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">
-
- <style name="ActionBarTheme" parent="@*android:style/ThemeOverlay.Material.Dark.ActionBar" />
- <style name="ActionBarPopupTheme" parent="@*android:style/ThemeOverlay.Material.Light" />
-
- <style name="DocumentsTheme" parent="@style/Theme.AppCompat.Light.DarkActionBar">
- <item name="actionBarWidgetTheme">@null</item>
- <item name="actionBarTheme">@style/ActionBarTheme</item>
- <item name="actionBarPopupTheme">@style/ActionBarPopupTheme</item>
-
- <item name="android:windowBackground">@color/window_background</item>
- <item name="android:colorPrimaryDark">@color/primary_dark</item>
- <item name="android:colorPrimary">@color/primary</item>
- <item name="android:colorAccent">@color/accent</item>
- <item name="android:colorControlActivated">?android:attr/colorAccent</item>
- <item name="android:queryBackground">@color/menu_search_background</item>
-
- <item name="android:listDivider">@*android:drawable/list_divider_material</item>
-
- <item name="android:windowActionBar">false</item>
- <item name="android:windowActionModeOverlay">true</item>
- <item name="android:windowNoTitle">true</item>
-
- <item name="android:windowSoftInputMode">stateUnspecified|adjustUnspecified</item>
- </style>
-
- <style name="TrimmedHorizontalProgressBar" parent="android:Widget.Material.ProgressBar.Horizontal">
- <item name="android:indeterminateDrawable">@drawable/progress_indeterminate_horizontal_material_trimmed</item>
- <item name="android:minHeight">3dp</item>
- <item name="android:maxHeight">3dp</item>
- </style>
-
-</resources>
diff --git a/packages/DocumentsUI/res/values/tags.xml b/packages/DocumentsUI/res/values/tags.xml
deleted file mode 100644
index a7ff3d6..0000000
--- a/packages/DocumentsUI/res/values/tags.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2016 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>
- <item name="drag_hovering_tag" type="id" />
- <item name="item_position_tag" type="id" />
- <item name="layout_id_tag" type="id" />
-</resources>
\ No newline at end of file
diff --git a/packages/DocumentsUI/src/com/android/documentsui/BaseActivity.java b/packages/DocumentsUI/src/com/android/documentsui/BaseActivity.java
deleted file mode 100644
index d8d8d3e..0000000
--- a/packages/DocumentsUI/src/com/android/documentsui/BaseActivity.java
+++ /dev/null
@@ -1,866 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.documentsui;
-
-import static com.android.documentsui.Shared.DEBUG;
-import static com.android.documentsui.Shared.EXTRA_BENCHMARK;
-import static com.android.documentsui.State.ACTION_CREATE;
-import static com.android.documentsui.State.ACTION_GET_CONTENT;
-import static com.android.documentsui.State.ACTION_OPEN;
-import static com.android.documentsui.State.ACTION_OPEN_TREE;
-import static com.android.documentsui.State.ACTION_PICK_COPY_DESTINATION;
-import static com.android.documentsui.State.MODE_GRID;
-
-import android.app.Activity;
-import android.app.Fragment;
-import android.app.FragmentManager;
-import android.content.Intent;
-import android.content.pm.ApplicationInfo;
-import android.content.pm.PackageInfo;
-import android.content.pm.PackageManager;
-import android.content.pm.ProviderInfo;
-import android.database.ContentObserver;
-import android.net.Uri;
-import android.os.AsyncTask;
-import android.os.Bundle;
-import android.os.Handler;
-import android.os.MessageQueue.IdleHandler;
-import android.provider.DocumentsContract;
-import android.provider.DocumentsContract.Root;
-import android.support.annotation.CallSuper;
-import android.support.annotation.LayoutRes;
-import android.support.annotation.Nullable;
-import android.util.Log;
-import android.view.KeyEvent;
-import android.view.Menu;
-import android.view.MenuItem;
-
-import com.android.documentsui.MenuManager.DirectoryDetails;
-import com.android.documentsui.NavigationViewManager.Breadcrumb;
-import com.android.documentsui.SearchViewManager.SearchManagerListener;
-import com.android.documentsui.State.ViewMode;
-import com.android.documentsui.dirlist.AnimationView;
-import com.android.documentsui.dirlist.DirectoryFragment;
-import com.android.documentsui.dirlist.FragmentTuner;
-import com.android.documentsui.dirlist.Model;
-import com.android.documentsui.model.DocumentInfo;
-import com.android.documentsui.model.DocumentStack;
-import com.android.documentsui.model.RootInfo;
-import com.android.documentsui.services.FileOperationService;
-import com.android.documentsui.services.FileOperations;
-
-import java.io.FileNotFoundException;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Date;
-import java.util.List;
-import java.util.concurrent.Executor;
-
-public abstract class BaseActivity extends Activity
- implements SearchManagerListener, NavigationViewManager.Environment {
-
- public final FileOperations.Callback fileOpCallback = (status, opType, docCount) -> {
- if (status == FileOperations.Callback.STATUS_REJECTED) {
- Snackbars.showPasteFailed(this);
- return;
- }
-
- if (docCount == 0) {
- // Nothing has been pasted, so there is no need to show a snackbar.
- return;
- }
-
- switch (opType) {
- case FileOperationService.OPERATION_MOVE:
- Snackbars.showMove(this, docCount);
- break;
- case FileOperationService.OPERATION_COPY:
- Snackbars.showCopy(this, docCount);
- break;
- case FileOperationService.OPERATION_DELETE:
- // We don't show anything for deletion.
- break;
- default:
- throw new UnsupportedOperationException("Unsupported Operation: " + opType);
- }
- };
-
- private static final String BENCHMARK_TESTING_PACKAGE = "com.android.documentsui.appperftests";
-
- State mState;
- @Nullable RetainedState mRetainedState;
- RootsCache mRoots;
- SearchViewManager mSearchManager;
- DrawerController mDrawer;
- NavigationViewManager mNavigator;
- List<EventListener> mEventListeners = new ArrayList<>();
-
- private final String mTag;
- private final ContentObserver mRootsCacheObserver = new ContentObserver(new Handler()) {
- @Override
- public void onChange(boolean selfChange) {
- new HandleRootsChangedTask(BaseActivity.this).execute(getCurrentRoot());
- }
- };
-
- @LayoutRes
- private int mLayoutId;
-
- private boolean mNavDrawerHasFocus;
- private long mStartTime;
-
- public abstract void onDocumentPicked(DocumentInfo doc, Model model);
- public abstract void onDocumentsPicked(List<DocumentInfo> docs);
- public abstract FragmentTuner createFragmentTuner();
- public abstract MenuManager getMenuManager();
- public abstract DirectoryDetails getDirectoryDetails();
-
- abstract void onTaskFinished(Uri... uris);
- abstract void refreshDirectory(int anim);
- /** Allows sub-classes to include information in a newly created State instance. */
- abstract void includeState(State initialState);
-
- public BaseActivity(@LayoutRes int layoutId, String tag) {
- mLayoutId = layoutId;
- mTag = tag;
- }
-
- @CallSuper
- @Override
- public void onCreate(Bundle icicle) {
- // Record the time when onCreate is invoked for metric.
- mStartTime = new Date().getTime();
-
- super.onCreate(icicle);
-
- final Intent intent = getIntent();
-
- addListenerForLaunchCompletion();
-
- setContentView(mLayoutId);
-
- mDrawer = DrawerController.create(this);
- mState = getState(icicle);
- Metrics.logActivityLaunch(this, mState, intent);
-
- // we're really interested in retainining state in our very complex
- // DirectoryFragment. So we do a little code yoga to extend
- // support to that fragment.
- mRetainedState = (RetainedState) getLastNonConfigurationInstance();
- mRoots = DocumentsApplication.getRootsCache(this);
-
- getContentResolver().registerContentObserver(
- RootsCache.sNotificationUri, false, mRootsCacheObserver);
-
- mSearchManager = new SearchViewManager(this, icicle);
-
- DocumentsToolbar toolbar = (DocumentsToolbar) findViewById(R.id.toolbar);
- setActionBar(toolbar);
-
- Breadcrumb breadcrumb =
- Shared.findView(this, R.id.dropdown_breadcrumb, R.id.horizontal_breadcrumb);
- assert(breadcrumb != null);
-
- mNavigator = new NavigationViewManager(mDrawer, toolbar, mState, this, breadcrumb);
-
- // Base classes must update result in their onCreate.
- setResult(Activity.RESULT_CANCELED);
- }
-
- @Override
- public boolean onCreateOptionsMenu(Menu menu) {
- boolean showMenu = super.onCreateOptionsMenu(menu);
-
- getMenuInflater().inflate(R.menu.activity, menu);
- mNavigator.update();
- boolean fullBarSearch = getResources().getBoolean(R.bool.full_bar_search_view);
- mSearchManager.install((DocumentsToolbar) findViewById(R.id.toolbar), fullBarSearch);
-
- return showMenu;
- }
-
- @Override
- @CallSuper
- public boolean onPrepareOptionsMenu(Menu menu) {
- super.onPrepareOptionsMenu(menu);
- mSearchManager.showMenu(canSearchRoot());
- return true;
- }
-
- @Override
- protected void onDestroy() {
- getContentResolver().unregisterContentObserver(mRootsCacheObserver);
- super.onDestroy();
- }
-
- private State getState(@Nullable Bundle icicle) {
- if (icicle != null) {
- State state = icicle.<State>getParcelable(Shared.EXTRA_STATE);
- if (DEBUG) Log.d(mTag, "Recovered existing state object: " + state);
- return state;
- }
-
- State state = new State();
-
- final Intent intent = getIntent();
-
- state.localOnly = intent.getBooleanExtra(Intent.EXTRA_LOCAL_ONLY, false);
- state.forceSize = intent.getBooleanExtra(DocumentsContract.EXTRA_SHOW_FILESIZE, false);
- state.showSize = state.forceSize || LocalPreferences.getDisplayFileSize(this);
- state.initAcceptMimes(intent);
- state.excludedAuthorities = getExcludedAuthorities();
-
- includeState(state);
-
- // Advanced roots are shown by default without menu option if forced by config or intent.
- boolean forceAdvanced = Shared.shouldShowDeviceRoot(this, intent);
- boolean chosenAdvanced = LocalPreferences.getShowDeviceRoot(this, state.action);
- state.showAdvanced = forceAdvanced || chosenAdvanced;
-
- // Menu option is shown for whitelisted intents if advanced roots are not shown by default.
- state.showAdvancedOption = !forceAdvanced && (
- Shared.shouldShowFancyFeatures(this)
- || state.action == ACTION_OPEN
- || state.action == ACTION_CREATE
- || state.action == ACTION_OPEN_TREE
- || state.action == ACTION_PICK_COPY_DESTINATION
- || state.action == ACTION_GET_CONTENT);
-
- if (DEBUG) Log.d(mTag, "Created new state object: " + state);
-
- return state;
- }
-
- public void setRootsDrawerOpen(boolean open) {
- mNavigator.revealRootsDrawer(open);
- }
-
- void onRootPicked(RootInfo root) {
- // Clicking on the current root removes search
- mSearchManager.cancelSearch();
-
- // Skip refreshing if root nor directory didn't change
- if (root.equals(getCurrentRoot()) && mState.stack.size() == 1) {
- return;
- }
-
- mState.derivedMode = LocalPreferences.getViewMode(this, root, MODE_GRID);
-
- // Clear entire backstack and start in new root
- mState.onRootChanged(root);
-
- // Recents is always in memory, so we just load it directly.
- // Otherwise we delegate loading data from disk to a task
- // to ensure a responsive ui.
- if (mRoots.isRecentsRoot(root)) {
- refreshCurrentRootAndDirectory(AnimationView.ANIM_NONE);
- } else {
- new PickRootTask(this, root).executeOnExecutor(getExecutorForCurrentDirectory());
- }
- }
-
- @Override
- public boolean onOptionsItemSelected(MenuItem item) {
-
- switch (item.getItemId()) {
- case android.R.id.home:
- onBackPressed();
- return true;
-
- case R.id.menu_create_dir:
- showCreateDirectoryDialog();
- return true;
-
- case R.id.menu_search:
- // SearchViewManager listens for this directly.
- return false;
-
- case R.id.menu_sort_name:
- setUserSortOrder(State.SORT_ORDER_DISPLAY_NAME);
- return true;
-
- case R.id.menu_sort_date:
- setUserSortOrder(State.SORT_ORDER_LAST_MODIFIED);
- return true;
-
- case R.id.menu_sort_size:
- setUserSortOrder(State.SORT_ORDER_SIZE);
- return true;
-
- case R.id.menu_grid:
- setViewMode(State.MODE_GRID);
- return true;
-
- case R.id.menu_list:
- setViewMode(State.MODE_LIST);
- return true;
-
- case R.id.menu_advanced:
- setDisplayAdvancedDevices(!mState.showAdvanced);
- return true;
-
- case R.id.menu_file_size:
- setDisplayFileSize(!LocalPreferences.getDisplayFileSize(this));
- return true;
-
- default:
- return super.onOptionsItemSelected(item);
- }
- }
-
- final @Nullable DirectoryFragment getDirectoryFragment() {
- return DirectoryFragment.get(getFragmentManager());
- }
-
- void showCreateDirectoryDialog() {
- Metrics.logUserAction(this, Metrics.USER_ACTION_CREATE_DIR);
-
- CreateDirectoryFragment.show(getFragmentManager());
- }
-
- void onDirectoryCreated(DocumentInfo doc) {
- // By default we do nothing, just let the new directory appear.
- // DocumentsActivity auto-opens directories after creating them
- // As that is more attuned to the "picker" use cases it supports.
- }
-
- /**
- * Returns true if a directory can be created in the current location.
- * @return
- */
- boolean canCreateDirectory() {
- final RootInfo root = getCurrentRoot();
- final DocumentInfo cwd = getCurrentDirectory();
- return cwd != null
- && cwd.isCreateSupported()
- && !mSearchManager.isSearching()
- && !root.isRecents()
- && !root.isDownloads();
- }
-
- void openContainerDocument(DocumentInfo doc) {
- assert(doc.isContainer());
-
- notifyDirectoryNavigated(doc.derivedUri);
-
- mState.pushDocument(doc);
- // Show an opening animation only if pressing "back" would get us back to the
- // previous directory. Especially after opening a root document, pressing
- // back, wouldn't go to the previous root, but close the activity.
- final int anim = (mState.hasLocationChanged() && mState.stack.size() > 1)
- ? AnimationView.ANIM_ENTER : AnimationView.ANIM_NONE;
- refreshCurrentRootAndDirectory(anim);
- }
-
- /**
- * Refreshes the content of the director and the menu/action bar.
- * The current directory name and selection will get updated.
- * @param anim
- */
- @Override
- public final void refreshCurrentRootAndDirectory(int anim) {
- mSearchManager.cancelSearch();
-
- refreshDirectory(anim);
-
- final RootsFragment roots = RootsFragment.get(getFragmentManager());
- if (roots != null) {
- roots.onCurrentRootChanged();
- }
-
- mNavigator.update();
- invalidateOptionsMenu();
- }
-
- final void loadRoot(final Uri uri) {
- new LoadRootTask(this, uri).executeOnExecutor(
- ProviderExecutor.forAuthority(uri.getAuthority()));
- }
-
- /**
- * This is called when user hovers over a doc for enough time during a drag n' drop, to open a
- * folder that accepts drop. We should only open a container that's not an archive.
- */
- public void springOpenDirectory(DocumentInfo doc) {
- }
-
- /**
- * Called when search results changed.
- * Refreshes the content of the directory. It doesn't refresh elements on the action bar.
- * e.g. The current directory name displayed on the action bar won't get updated.
- */
- @Override
- public void onSearchChanged(@Nullable String query) {
- // We should not get here if root is not searchable
- assert(canSearchRoot());
- reloadSearch(query);
- }
-
- @Override
- public void onSearchFinished() {
- // Restores menu icons state
- invalidateOptionsMenu();
- }
-
- private void reloadSearch(String query) {
- FragmentManager fm = getFragmentManager();
- RootInfo root = getCurrentRoot();
- DocumentInfo cwd = getCurrentDirectory();
-
- DirectoryFragment.reloadSearch(fm, root, cwd, query);
- }
-
- final List<String> getExcludedAuthorities() {
- List<String> authorities = new ArrayList<>();
- if (getIntent().getBooleanExtra(DocumentsContract.EXTRA_EXCLUDE_SELF, false)) {
- // Exclude roots provided by the calling package.
- String packageName = getCallingPackageMaybeExtra();
- try {
- PackageInfo pkgInfo = getPackageManager().getPackageInfo(packageName,
- PackageManager.GET_PROVIDERS);
- for (ProviderInfo provider: pkgInfo.providers) {
- authorities.add(provider.authority);
- }
- } catch (PackageManager.NameNotFoundException e) {
- Log.e(mTag, "Calling package name does not resolve: " + packageName);
- }
- }
- return authorities;
- }
-
- boolean canSearchRoot() {
- final RootInfo root = getCurrentRoot();
- return (root.flags & Root.FLAG_SUPPORTS_SEARCH) != 0;
- }
-
- final String getCallingPackageMaybeExtra() {
- String callingPackage = getCallingPackage();
- // System apps can set the calling package name using an extra.
- try {
- ApplicationInfo info = getPackageManager().getApplicationInfo(callingPackage, 0);
- if (info.isSystemApp() || info.isUpdatedSystemApp()) {
- final String extra = getIntent().getStringExtra(DocumentsContract.EXTRA_PACKAGE_NAME);
- if (extra != null) {
- callingPackage = extra;
- }
- }
- } finally {
- return callingPackage;
- }
- }
-
- public static BaseActivity get(Fragment fragment) {
- return (BaseActivity) fragment.getActivity();
- }
-
- public State getDisplayState() {
- return mState;
- }
-
- /*
- * Get the default directory to be presented after starting the activity.
- * Method can be overridden if the change of the behavior of the the child activity is needed.
- */
- public Uri getDefaultRoot() {
- return Shared.shouldShowDocumentsRoot(this, getIntent())
- ? DocumentsContract.buildHomeUri()
- : DocumentsContract.buildRootUri(
- "com.android.providers.downloads.documents", "downloads");
- }
-
- /**
- * Set internal storage visible based on explicit user action.
- */
- void setDisplayAdvancedDevices(boolean display) {
- Metrics.logUserAction(this,
- display ? Metrics.USER_ACTION_SHOW_ADVANCED : Metrics.USER_ACTION_HIDE_ADVANCED);
-
- LocalPreferences.setShowDeviceRoot(this, mState.action, display);
- mState.showAdvanced = display;
- RootsFragment.get(getFragmentManager()).onDisplayStateChanged();
- invalidateOptionsMenu();
- }
-
- /**
- * Set file size visible based on explicit user action.
- */
- void setDisplayFileSize(boolean display) {
- Metrics.logUserAction(this,
- display ? Metrics.USER_ACTION_SHOW_SIZE : Metrics.USER_ACTION_HIDE_SIZE);
-
- LocalPreferences.setDisplayFileSize(this, display);
- mState.showSize = display;
- DirectoryFragment dir = getDirectoryFragment();
- if (dir != null) {
- dir.onDisplayStateChanged();
- }
- invalidateOptionsMenu();
- }
-
- /**
- * Set state sort order based on explicit user action.
- */
- void setUserSortOrder(int sortOrder) {
- switch(sortOrder) {
- case State.SORT_ORDER_DISPLAY_NAME:
- Metrics.logUserAction(this, Metrics.USER_ACTION_SORT_NAME);
- break;
- case State.SORT_ORDER_LAST_MODIFIED:
- Metrics.logUserAction(this, Metrics.USER_ACTION_SORT_DATE);
- break;
- case State.SORT_ORDER_SIZE:
- Metrics.logUserAction(this, Metrics.USER_ACTION_SORT_SIZE);
- break;
- }
-
- mState.userSortOrder = sortOrder;
- DirectoryFragment dir = getDirectoryFragment();
- if (dir != null) {
- dir.onSortOrderChanged();
- }
- }
-
- /**
- * Set mode based on explicit user action.
- */
- void setViewMode(@ViewMode int mode) {
- if (mode == State.MODE_GRID) {
- Metrics.logUserAction(this, Metrics.USER_ACTION_GRID);
- } else if (mode == State.MODE_LIST) {
- Metrics.logUserAction(this, Metrics.USER_ACTION_LIST);
- }
-
- LocalPreferences.setViewMode(this, getCurrentRoot(), mode);
- mState.derivedMode = mode;
-
- // view icon needs to be updated, but we *could* do it
- // in onOptionsItemSelected, and not do the full invalidation
- // But! That's a larger refactoring we'll save for another day.
- invalidateOptionsMenu();
- DirectoryFragment dir = getDirectoryFragment();
- if (dir != null) {
- dir.onViewModeChanged();
- }
- }
-
- public void setPending(boolean pending) {
- final SaveFragment save = SaveFragment.get(getFragmentManager());
- if (save != null) {
- save.setPending(pending);
- }
- }
-
- @Override
- protected void onSaveInstanceState(Bundle state) {
- super.onSaveInstanceState(state);
- state.putParcelable(Shared.EXTRA_STATE, mState);
- mSearchManager.onSaveInstanceState(state);
- }
-
- @Override
- protected void onRestoreInstanceState(Bundle state) {
- super.onRestoreInstanceState(state);
- }
-
- /**
- * Delegate ths call to the current fragment so it can save selection.
- * Feel free to expand on this with other useful state.
- */
- @Override
- public RetainedState onRetainNonConfigurationInstance() {
- RetainedState retained = new RetainedState();
- DirectoryFragment fragment = DirectoryFragment.get(getFragmentManager());
- if (fragment != null) {
- fragment.retainState(retained);
- }
- return retained;
- }
-
- public @Nullable RetainedState getRetainedState() {
- return mRetainedState;
- }
-
- @Override
- public boolean isSearchExpanded() {
- return mSearchManager.isExpanded();
- }
-
- @Override
- public RootInfo getCurrentRoot() {
- if (mState.stack.root != null) {
- return mState.stack.root;
- } else {
- return mRoots.getRecentsRoot();
- }
- }
-
- public DocumentInfo getCurrentDirectory() {
- return mState.stack.peek();
- }
-
- public Executor getExecutorForCurrentDirectory() {
- final DocumentInfo cwd = getCurrentDirectory();
- if (cwd != null && cwd.authority != null) {
- return ProviderExecutor.forAuthority(cwd.authority);
- } else {
- return AsyncTask.THREAD_POOL_EXECUTOR;
- }
- }
-
- @Override
- public void onBackPressed() {
- // While action bar is expanded, the state stack UI is hidden.
- if (mSearchManager.cancelSearch()) {
- return;
- }
-
- DirectoryFragment dir = getDirectoryFragment();
- if (dir != null && dir.onBackPressed()) {
- return;
- }
-
- if (!mState.hasLocationChanged()) {
- super.onBackPressed();
- return;
- }
-
- if (onBeforePopDir() || popDir()) {
- return;
- }
-
- super.onBackPressed();
- }
-
- boolean onBeforePopDir() {
- // Files app overrides this with some fancy logic.
- return false;
- }
-
- public void onStackPicked(DocumentStack stack) {
- try {
- // Update the restored stack to ensure we have freshest data
- stack.updateDocuments(getContentResolver());
- mState.setStack(stack);
- refreshCurrentRootAndDirectory(AnimationView.ANIM_SIDE);
-
- } catch (FileNotFoundException e) {
- Log.w(mTag, "Failed to restore stack: " + e);
- }
- }
-
- /**
- * Declare a global key handler to route key events when there isn't a specific focus view. This
- * covers the scenario where a user opens DocumentsUI and just starts typing.
- *
- * @param keyCode
- * @param event
- * @return
- */
- @CallSuper
- @Override
- public boolean onKeyDown(int keyCode, KeyEvent event) {
- if (Events.isNavigationKeyCode(keyCode)) {
- // Forward all unclaimed navigation keystrokes to the DirectoryFragment. This causes any
- // stray navigation keystrokes focus the content pane, which is probably what the user
- // is trying to do.
- DirectoryFragment df = DirectoryFragment.get(getFragmentManager());
- if (df != null) {
- df.requestFocus();
- return true;
- }
- } else if (keyCode == KeyEvent.KEYCODE_TAB) {
- // Tab toggles focus on the navigation drawer.
- toggleNavDrawerFocus();
- return true;
- } else if (keyCode == KeyEvent.KEYCODE_DEL) {
- popDir();
- return true;
- }
- return super.onKeyDown(keyCode, event);
- }
-
- public void addEventListener(EventListener listener) {
- mEventListeners.add(listener);
- }
-
- public void removeEventListener(EventListener listener) {
- mEventListeners.remove(listener);
- }
-
- public void notifyDirectoryLoaded(Uri uri) {
- for (EventListener listener : mEventListeners) {
- listener.onDirectoryLoaded(uri);
- }
- }
-
- void notifyDirectoryNavigated(Uri uri) {
- for (EventListener listener : mEventListeners) {
- listener.onDirectoryNavigated(uri);
- }
- }
-
- /**
- * Toggles focus between the navigation drawer and the directory listing. If the drawer isn't
- * locked, open/close it as appropriate.
- */
- void toggleNavDrawerFocus() {
- if (mNavDrawerHasFocus) {
- mDrawer.setOpen(false);
- DirectoryFragment df = DirectoryFragment.get(getFragmentManager());
- if (df != null) {
- df.requestFocus();
- }
- } else {
- mDrawer.setOpen(true);
- RootsFragment rf = RootsFragment.get(getFragmentManager());
- if (rf != null) {
- rf.requestFocus();
- }
- }
- mNavDrawerHasFocus = !mNavDrawerHasFocus;
- }
-
- /**
- * Pops the top entry off the directory stack, and returns the user to the previous directory.
- * If the directory stack only contains one item, this method does nothing.
- *
- * @return Whether the stack was popped.
- */
- private boolean popDir() {
- if (mState.stack.size() > 1) {
- mState.stack.pop();
- refreshCurrentRootAndDirectory(AnimationView.ANIM_LEAVE);
- return true;
- }
- return false;
- }
-
- /**
- * Closes the activity when it's idle.
- */
- private void addListenerForLaunchCompletion() {
- addEventListener(new EventListener() {
- @Override
- public void onDirectoryNavigated(Uri uri) {
- }
-
- @Override
- public void onDirectoryLoaded(Uri uri) {
- removeEventListener(this);
- getMainLooper().getQueue().addIdleHandler(new IdleHandler() {
- @Override
- public boolean queueIdle() {
- // If startup benchmark is requested by a whitelisted testing package, then
- // close the activity once idle, and notify the testing activity.
- if (getIntent().getBooleanExtra(EXTRA_BENCHMARK, false) &&
- BENCHMARK_TESTING_PACKAGE.equals(getCallingPackage())) {
- setResult(RESULT_OK);
- finish();
- }
-
- Metrics.logStartupMs(
- BaseActivity.this, (int) (new Date().getTime() - mStartTime));
-
- // Remove the idle handler.
- return false;
- }
- });
- new Handler().post(new Runnable() {
- @Override public void run() {
- }
- });
- }
- });
- }
-
- private static final class PickRootTask extends PairedTask<BaseActivity, Void, DocumentInfo> {
- private RootInfo mRoot;
-
- public PickRootTask(BaseActivity activity, RootInfo root) {
- super(activity);
- mRoot = root;
- }
-
- @Override
- protected DocumentInfo run(Void... params) {
- return mRoot.getRootDocumentBlocking(mOwner);
- }
-
- @Override
- protected void finish(DocumentInfo result) {
- if (result != null) {
- mOwner.openContainerDocument(result);
- }
- }
- }
-
- private static final class HandleRootsChangedTask
- extends PairedTask<BaseActivity, RootInfo, RootInfo> {
- RootInfo mCurrentRoot;
- DocumentInfo mDefaultRootDocument;
-
- public HandleRootsChangedTask(BaseActivity activity) {
- super(activity);
- }
-
- @Override
- protected RootInfo run(RootInfo... roots) {
- assert(roots.length == 1);
- mCurrentRoot = roots[0];
- final Collection<RootInfo> cachedRoots = mOwner.mRoots.getRootsBlocking();
- for (final RootInfo root : cachedRoots) {
- if (root.getUri().equals(mCurrentRoot.getUri())) {
- // We don't need to change the current root as the current root was not removed.
- return null;
- }
- }
-
- // Choose the default root.
- final RootInfo defaultRoot = mOwner.mRoots.getDefaultRootBlocking(mOwner.mState);
- assert(defaultRoot != null);
- if (!defaultRoot.isRecents()) {
- mDefaultRootDocument = defaultRoot.getRootDocumentBlocking(mOwner);
- }
- return defaultRoot;
- }
-
- @Override
- protected void finish(RootInfo defaultRoot) {
- if (defaultRoot == null) {
- return;
- }
-
- // If the activity has been launched for the specific root and it is removed, finish the
- // activity.
- final Uri uri = mOwner.getIntent().getData();
- if (uri != null && uri.equals(mCurrentRoot.getUri())) {
- mOwner.finish();
- return;
- }
-
- // Clear entire backstack and start in new root.
- mOwner.mState.onRootChanged(defaultRoot);
- mOwner.mSearchManager.update(defaultRoot);
-
- if (defaultRoot.isRecents()) {
- mOwner.refreshCurrentRootAndDirectory(AnimationView.ANIM_NONE);
- } else {
- mOwner.openContainerDocument(mDefaultRootDocument);
- }
- }
- }
-}
diff --git a/packages/DocumentsUI/src/com/android/documentsui/BootReceiver.java b/packages/DocumentsUI/src/com/android/documentsui/BootReceiver.java
deleted file mode 100644
index cdea9d7..0000000
--- a/packages/DocumentsUI/src/com/android/documentsui/BootReceiver.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.documentsui;
-
-import android.content.BroadcastReceiver;
-import android.content.Context;
-import android.content.Intent;
-
-/**
- * Prime {@link RootsCache} when the system is booted.
- */
-public class BootReceiver extends BroadcastReceiver {
- @Override
- public void onReceive(Context context, Intent intent) {
- // We already spun up our application object before getting here, which
- // kicked off a task to load roots, so this broadcast is finished once
- // that first pass is done.
- DocumentsApplication.getRootsCache(context).setBootCompletedResult(goAsync());
- }
-}
diff --git a/packages/DocumentsUI/src/com/android/documentsui/CheckedTask.java b/packages/DocumentsUI/src/com/android/documentsui/CheckedTask.java
deleted file mode 100644
index 747eb9c..0000000
--- a/packages/DocumentsUI/src/com/android/documentsui/CheckedTask.java
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.documentsui;
-
-import android.os.AsyncTask;
-
-/**
- * An {@link AsyncTask} that guards work with checks that a paired {@link Check}
- * has not yet given signals to stop progress.
- *
- * <p>Use this type of task for greater safety when executing tasks that might complete
- * after the owner of the task has explicitly given a signal to stop progress.
- *
- * <p>Also useful as tasks can be static, limiting scope, but still have access to
- * signal from the owning class.
- *
- * @template Input input type
- * @template Output output type
- */
-abstract class CheckedTask<Input, Output>
- extends AsyncTask<Input, Void, Output> {
-
- private Check mCheck;
-
- public CheckedTask(Check check) {
- mCheck = check;
- }
-
- /** Called prior to run being executed. Analogous to {@link AsyncTask#onPreExecute} */
- void prepare() {}
-
- /** Analogous to {@link AsyncTask#doInBackground} */
- abstract Output run(Input... input);
-
- /** Analogous to {@link AsyncTask#onPostExecute} */
- abstract void finish(Output output);
-
- @Override
- final protected void onPreExecute() {
- if (mCheck.stop()) {
- return;
- }
- prepare();
- }
-
- @Override
- final protected Output doInBackground(Input... input) {
- if (mCheck.stop()) {
- return null;
- }
- return run(input);
- }
-
- @Override
- final protected void onPostExecute(Output result) {
- if (mCheck.stop()) {
- return;
- }
- finish(result);
- }
-
- @FunctionalInterface
- interface Check {
- boolean stop();
- }
-}
diff --git a/packages/DocumentsUI/src/com/android/documentsui/CreateDirectoryFragment.java b/packages/DocumentsUI/src/com/android/documentsui/CreateDirectoryFragment.java
deleted file mode 100644
index 5b5a96e..0000000
--- a/packages/DocumentsUI/src/com/android/documentsui/CreateDirectoryFragment.java
+++ /dev/null
@@ -1,165 +0,0 @@
-/*
- * 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.
- */
-
-package com.android.documentsui;
-
-import static com.android.documentsui.Shared.TAG;
-
-import android.app.AlertDialog;
-import android.app.Dialog;
-import android.app.DialogFragment;
-import android.app.FragmentManager;
-import android.content.ContentProviderClient;
-import android.content.ContentResolver;
-import android.content.Context;
-import android.content.DialogInterface;
-import android.content.DialogInterface.OnClickListener;
-import android.net.Uri;
-import android.os.AsyncTask;
-import android.os.Bundle;
-import android.provider.DocumentsContract;
-import android.provider.DocumentsContract.Document;
-import android.support.annotation.Nullable;
-import android.support.design.widget.Snackbar;
-import android.util.Log;
-import android.view.KeyEvent;
-import android.view.inputmethod.EditorInfo;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.widget.EditText;
-import android.widget.TextView;
-import android.widget.TextView.OnEditorActionListener;
-
-import com.android.documentsui.model.DocumentInfo;
-
-/**
- * Dialog to create a new directory.
- */
-public class CreateDirectoryFragment extends DialogFragment {
- private static final String TAG_CREATE_DIRECTORY = "create_directory";
-
- public static void show(FragmentManager fm) {
- final CreateDirectoryFragment dialog = new CreateDirectoryFragment();
- dialog.show(fm, TAG_CREATE_DIRECTORY);
- }
-
- @Override
- public Dialog onCreateDialog(Bundle savedInstanceState) {
- final Context context = getActivity();
- final ContentResolver resolver = context.getContentResolver();
-
- final AlertDialog.Builder builder = new AlertDialog.Builder(context);
- final LayoutInflater dialogInflater = LayoutInflater.from(builder.getContext());
-
- final View view = dialogInflater.inflate(R.layout.dialog_file_name, null, false);
- final EditText editText = (EditText) view.findViewById(android.R.id.text1);
-
- builder.setTitle(R.string.menu_create_dir);
- builder.setView(view);
-
- builder.setPositiveButton(
- android.R.string.ok,
- new OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int which) {
- createDirectory(editText.getText().toString());
- }
- });
-
- builder.setNegativeButton(android.R.string.cancel, null);
- final AlertDialog dialog = builder.create();
-
- // Workaround for the problem - virtual keyboard doesn't show on the phone.
- Shared.ensureKeyboardPresent(context, dialog);
-
- editText.setOnEditorActionListener(
- new OnEditorActionListener() {
- @Override
- public boolean onEditorAction(
- TextView view, int actionId, @Nullable KeyEvent event) {
- if ((actionId == EditorInfo.IME_ACTION_DONE) || (event != null
- && event.getKeyCode() == KeyEvent.KEYCODE_ENTER
- && event.hasNoModifiers())) {
- createDirectory(editText.getText().toString());
- dialog.dismiss();
- return true;
- }
- return false;
- }
- });
-
-
- return dialog;
- }
-
- private void createDirectory(String name) {
- final BaseActivity activity = (BaseActivity) getActivity();
- final DocumentInfo cwd = activity.getCurrentDirectory();
-
- new CreateDirectoryTask(activity, cwd, name).executeOnExecutor(
- ProviderExecutor.forAuthority(cwd.authority));
- }
-
- private class CreateDirectoryTask extends AsyncTask<Void, Void, DocumentInfo> {
- private final BaseActivity mActivity;
- private final DocumentInfo mCwd;
- private final String mDisplayName;
-
- public CreateDirectoryTask(
- BaseActivity activity, DocumentInfo cwd, String displayName) {
- mActivity = activity;
- mCwd = cwd;
- mDisplayName = displayName;
- }
-
- @Override
- protected void onPreExecute() {
- mActivity.setPending(true);
- }
-
- @Override
- protected DocumentInfo doInBackground(Void... params) {
- final ContentResolver resolver = mActivity.getContentResolver();
- ContentProviderClient client = null;
- try {
- client = DocumentsApplication.acquireUnstableProviderOrThrow(
- resolver, mCwd.derivedUri.getAuthority());
- final Uri childUri = DocumentsContract.createDocument(
- client, mCwd.derivedUri, Document.MIME_TYPE_DIR, mDisplayName);
- return DocumentInfo.fromUri(resolver, childUri);
- } catch (Exception e) {
- Log.w(TAG, "Failed to create directory", e);
- return null;
- } finally {
- ContentProviderClient.releaseQuietly(client);
- }
- }
-
- @Override
- protected void onPostExecute(DocumentInfo result) {
- if (result != null) {
- // Navigate into newly created child
- mActivity.onDirectoryCreated(result);
- Metrics.logCreateDirOperation(getContext());
- } else {
- Snackbars.makeSnackbar(mActivity, R.string.create_error, Snackbar.LENGTH_SHORT)
- .show();
- Metrics.logCreateDirError(getContext());
- }
- mActivity.setPending(false);
- }
- }
-}
diff --git a/packages/DocumentsUI/src/com/android/documentsui/DirectoryLoader.java b/packages/DocumentsUI/src/com/android/documentsui/DirectoryLoader.java
deleted file mode 100644
index d2e918c..0000000
--- a/packages/DocumentsUI/src/com/android/documentsui/DirectoryLoader.java
+++ /dev/null
@@ -1,227 +0,0 @@
-/*
- * 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.
- */
-
-package com.android.documentsui;
-
-import static com.android.documentsui.Shared.DEBUG;
-import static com.android.documentsui.Shared.TAG;
-import static com.android.documentsui.State.SORT_ORDER_DISPLAY_NAME;
-import static com.android.documentsui.State.SORT_ORDER_LAST_MODIFIED;
-import static com.android.documentsui.State.SORT_ORDER_SIZE;
-
-import android.content.AsyncTaskLoader;
-import android.content.ContentProviderClient;
-import android.content.ContentResolver;
-import android.content.Context;
-import android.database.Cursor;
-import android.net.Uri;
-import android.os.CancellationSignal;
-import android.os.OperationCanceledException;
-import android.os.RemoteException;
-import android.provider.DocumentsContract;
-import android.provider.DocumentsContract.Document;
-import android.util.Log;
-
-import com.android.documentsui.dirlist.DirectoryFragment;
-import com.android.documentsui.model.DocumentInfo;
-import com.android.documentsui.model.RootInfo;
-
-import libcore.io.IoUtils;
-
-import java.io.FileNotFoundException;
-
-public class DirectoryLoader extends AsyncTaskLoader<DirectoryResult> {
-
- private static final String[] SEARCH_REJECT_MIMES = new String[] { Document.MIME_TYPE_DIR };
-
- private final ForceLoadContentObserver mObserver = new ForceLoadContentObserver();
-
- private final int mType;
- private final RootInfo mRoot;
- private final Uri mUri;
- private final int mUserSortOrder;
- private final boolean mSearchMode;
-
- private DocumentInfo mDoc;
- private CancellationSignal mSignal;
- private DirectoryResult mResult;
-
- public DirectoryLoader(Context context, int type, RootInfo root, DocumentInfo doc, Uri uri,
- int userSortOrder, boolean inSearchMode) {
- super(context, ProviderExecutor.forAuthority(root.authority));
- mType = type;
- mRoot = root;
- mUri = uri;
- mUserSortOrder = userSortOrder;
- mDoc = doc;
- mSearchMode = inSearchMode;
- }
-
- @Override
- public final DirectoryResult loadInBackground() {
- synchronized (this) {
- if (isLoadInBackgroundCanceled()) {
- throw new OperationCanceledException();
- }
- mSignal = new CancellationSignal();
- }
-
- final ContentResolver resolver = getContext().getContentResolver();
- final String authority = mUri.getAuthority();
-
- final DirectoryResult result = new DirectoryResult();
- result.doc = mDoc;
-
- // Use default document when searching
- if (mSearchMode) {
- final Uri docUri = DocumentsContract.buildDocumentUri(
- mRoot.authority, mRoot.documentId);
- try {
- mDoc = DocumentInfo.fromUri(resolver, docUri);
- } catch (FileNotFoundException e) {
- Log.w(TAG, "Failed to query", e);
- result.exception = e;
- return result;
- }
- }
-
- if (mUserSortOrder != State.SORT_ORDER_UNKNOWN) {
- result.sortOrder = mUserSortOrder;
- } else {
- if ((mDoc.flags & Document.FLAG_DIR_PREFERS_LAST_MODIFIED) != 0) {
- result.sortOrder = State.SORT_ORDER_LAST_MODIFIED;
- } else {
- result.sortOrder = State.SORT_ORDER_DISPLAY_NAME;
- }
- }
-
- // Search always uses ranking from provider
- if (mSearchMode) {
- result.sortOrder = State.SORT_ORDER_UNKNOWN;
- }
-
- if (DEBUG)
- Log.d(TAG, "userSortOrder=" + mUserSortOrder + ", sortOrder=" + result.sortOrder);
-
- ContentProviderClient client = null;
- Cursor cursor = null;
- try {
- client = DocumentsApplication.acquireUnstableProviderOrThrow(resolver, authority);
- cursor = client.query(
- mUri, null, null, null, getQuerySortOrder(result.sortOrder), mSignal);
- if (cursor == null) {
- throw new RemoteException("Provider returned null");
- }
-
- cursor.registerContentObserver(mObserver);
-
- cursor = new RootCursorWrapper(mUri.getAuthority(), mRoot.rootId, cursor, -1);
-
- if (mSearchMode) {
- // Filter directories out of search results, for now
- cursor = new FilteringCursorWrapper(cursor, null, SEARCH_REJECT_MIMES);
- }
-
- result.client = client;
- result.cursor = cursor;
- } catch (Exception e) {
- Log.w(TAG, "Failed to query", e);
- result.exception = e;
- ContentProviderClient.releaseQuietly(client);
- } finally {
- synchronized (this) {
- mSignal = null;
- }
- }
-
- return result;
- }
-
- @Override
- public void cancelLoadInBackground() {
- super.cancelLoadInBackground();
-
- synchronized (this) {
- if (mSignal != null) {
- mSignal.cancel();
- }
- }
- }
-
- @Override
- public void deliverResult(DirectoryResult result) {
- if (isReset()) {
- IoUtils.closeQuietly(result);
- return;
- }
- DirectoryResult oldResult = mResult;
- mResult = result;
-
- if (isStarted()) {
- super.deliverResult(result);
- }
-
- if (oldResult != null && oldResult != result) {
- IoUtils.closeQuietly(oldResult);
- }
- }
-
- @Override
- protected void onStartLoading() {
- if (mResult != null) {
- deliverResult(mResult);
- }
- if (takeContentChanged() || mResult == null) {
- forceLoad();
- }
- }
-
- @Override
- protected void onStopLoading() {
- cancelLoad();
- }
-
- @Override
- public void onCanceled(DirectoryResult result) {
- IoUtils.closeQuietly(result);
- }
-
- @Override
- protected void onReset() {
- super.onReset();
-
- // Ensure the loader is stopped
- onStopLoading();
-
- IoUtils.closeQuietly(mResult);
- mResult = null;
-
- getContext().getContentResolver().unregisterContentObserver(mObserver);
- }
-
- public static String getQuerySortOrder(int sortOrder) {
- switch (sortOrder) {
- case SORT_ORDER_DISPLAY_NAME:
- return Document.COLUMN_DISPLAY_NAME + " ASC";
- case SORT_ORDER_LAST_MODIFIED:
- return Document.COLUMN_LAST_MODIFIED + " DESC";
- case SORT_ORDER_SIZE:
- return Document.COLUMN_SIZE + " DESC";
- default:
- return null;
- }
- }
-}
diff --git a/packages/DocumentsUI/src/com/android/documentsui/DirectoryResult.java b/packages/DocumentsUI/src/com/android/documentsui/DirectoryResult.java
deleted file mode 100644
index 6268643..0000000
--- a/packages/DocumentsUI/src/com/android/documentsui/DirectoryResult.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * 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.
- */
-
-package com.android.documentsui;
-
-import static com.android.documentsui.State.MODE_UNKNOWN;
-import static com.android.documentsui.State.SORT_ORDER_UNKNOWN;
-
-import android.content.ContentProviderClient;
-import android.database.Cursor;
-
-import com.android.documentsui.model.DocumentInfo;
-
-import libcore.io.IoUtils;
-
-public class DirectoryResult implements AutoCloseable {
- ContentProviderClient client;
- public Cursor cursor;
- public Exception exception;
- public DocumentInfo doc;
-
- public int sortOrder = SORT_ORDER_UNKNOWN;
-
- @Override
- public void close() {
- IoUtils.closeQuietly(cursor);
- ContentProviderClient.releaseQuietly(client);
- cursor = null;
- client = null;
- }
-}
diff --git a/packages/DocumentsUI/src/com/android/documentsui/Display.java b/packages/DocumentsUI/src/com/android/documentsui/Display.java
deleted file mode 100644
index 8b13222..0000000
--- a/packages/DocumentsUI/src/com/android/documentsui/Display.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.documentsui;
-
-import android.app.Activity;
-import android.content.Context;
-import android.graphics.Point;
-import android.util.TypedValue;
-
-/*
- * Convenience class for getting display related attributes
- */
-public final class Display {
- /*
- * Returns the screen width in raw pixels.
- */
- public static float screenWidth(Activity activity) {
- Point size = new Point();
- activity.getWindowManager().getDefaultDisplay().getSize(size);
- return size.x;
- }
-
- /*
- * Returns logical density of the display.
- */
- public static float density(Context context) {
- return context.getResources().getDisplayMetrics().density;
- }
-
- /*
- * Returns action bar height in raw pixels.
- */
- public static float actionBarHeight(Context context) {
- int actionBarHeight = 0;
- TypedValue tv = new TypedValue();
- if (context.getTheme().resolveAttribute(android.R.attr.actionBarSize, tv, true)) {
- actionBarHeight = TypedValue.complexToDimensionPixelSize(tv.data,
- context.getResources().getDisplayMetrics());
- }
- return actionBarHeight;
- }
-}
diff --git a/packages/DocumentsUI/src/com/android/documentsui/DocumentsActivity.java b/packages/DocumentsUI/src/com/android/documentsui/DocumentsActivity.java
deleted file mode 100644
index 05f36e8..0000000
--- a/packages/DocumentsUI/src/com/android/documentsui/DocumentsActivity.java
+++ /dev/null
@@ -1,583 +0,0 @@
-/*
- * 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.
- */
-
-package com.android.documentsui;
-
-import static com.android.documentsui.Shared.DEBUG;
-import static com.android.documentsui.State.ACTION_CREATE;
-import static com.android.documentsui.State.ACTION_GET_CONTENT;
-import static com.android.documentsui.State.ACTION_OPEN;
-import static com.android.documentsui.State.ACTION_OPEN_TREE;
-import static com.android.documentsui.State.ACTION_PICK_COPY_DESTINATION;
-
-import android.app.Activity;
-import android.app.Fragment;
-import android.app.FragmentManager;
-import android.content.ClipData;
-import android.content.ComponentName;
-import android.content.ContentProviderClient;
-import android.content.ContentResolver;
-import android.content.ContentValues;
-import android.content.Intent;
-import android.content.pm.ResolveInfo;
-import android.database.Cursor;
-import android.net.Uri;
-import android.os.Bundle;
-import android.os.Parcelable;
-import android.provider.DocumentsContract;
-import android.support.design.widget.Snackbar;
-import android.util.Log;
-import android.view.Menu;
-
-import com.android.documentsui.MenuManager.DirectoryDetails;
-import com.android.documentsui.RecentsProvider.RecentColumns;
-import com.android.documentsui.RecentsProvider.ResumeColumns;
-import com.android.documentsui.dirlist.AnimationView;
-import com.android.documentsui.dirlist.DirectoryFragment;
-import com.android.documentsui.dirlist.FragmentTuner;
-import com.android.documentsui.dirlist.FragmentTuner.DocumentsTuner;
-import com.android.documentsui.dirlist.Model;
-import com.android.documentsui.model.DocumentInfo;
-import com.android.documentsui.model.DurableUtils;
-import com.android.documentsui.model.RootInfo;
-import com.android.documentsui.services.FileOperationService;
-
-import libcore.io.IoUtils;
-
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.List;
-
-public class DocumentsActivity extends BaseActivity {
- private static final int CODE_FORWARD = 42;
- private static final String TAG = "DocumentsActivity";
- private DocumentsMenuManager mMenuManager;
- private DirectoryDetails mDetails;
-
- public DocumentsActivity() {
- super(R.layout.documents_activity, TAG);
- }
-
- @Override
- public void onCreate(Bundle icicle) {
- super.onCreate(icicle);
- mMenuManager = new DocumentsMenuManager(mSearchManager, getDisplayState());
- mDetails = new DirectoryDetails(this);
-
- if (mState.action == ACTION_CREATE) {
- final String mimeType = getIntent().getType();
- final String title = getIntent().getStringExtra(Intent.EXTRA_TITLE);
- SaveFragment.show(getFragmentManager(), mimeType, title);
- } else if (mState.action == ACTION_OPEN_TREE ||
- mState.action == ACTION_PICK_COPY_DESTINATION) {
- PickFragment.show(getFragmentManager());
- }
-
- if (mState.action == ACTION_GET_CONTENT) {
- final Intent moreApps = new Intent(getIntent());
- moreApps.setComponent(null);
- moreApps.setPackage(null);
- RootsFragment.show(getFragmentManager(), moreApps);
- } else if (mState.action == ACTION_OPEN ||
- mState.action == ACTION_CREATE ||
- mState.action == ACTION_OPEN_TREE ||
- mState.action == ACTION_PICK_COPY_DESTINATION) {
- RootsFragment.show(getFragmentManager(), (Intent) null);
- }
-
- if (mState.restored) {
- if (DEBUG) Log.d(TAG, "Stack already resolved");
- } else {
- // We set the activity title in AsyncTask.onPostExecute().
- // To prevent talkback from reading aloud the default title, we clear it here.
- setTitle("");
-
- // As a matter of policy we don't load the last used stack for the copy
- // destination picker (user is already in Files app).
- // Concensus was that the experice was too confusing.
- // In all other cases, where the user is visiting us from another app
- // we restore the stack as last used from that app.
- if (mState.action == ACTION_PICK_COPY_DESTINATION) {
- if (DEBUG) Log.d(TAG, "Launching directly into Home directory.");
- loadRoot(getDefaultRoot());
- } else {
- if (DEBUG) Log.d(TAG, "Attempting to load last used stack for calling package.");
- new LoadLastUsedStackTask(this).execute();
- }
- }
- }
-
- @Override
- void includeState(State state) {
- final Intent intent = getIntent();
- final String action = intent.getAction();
- if (Intent.ACTION_OPEN_DOCUMENT.equals(action)) {
- state.action = ACTION_OPEN;
- } else if (Intent.ACTION_CREATE_DOCUMENT.equals(action)) {
- state.action = ACTION_CREATE;
- } else if (Intent.ACTION_GET_CONTENT.equals(action)) {
- state.action = ACTION_GET_CONTENT;
- } else if (Intent.ACTION_OPEN_DOCUMENT_TREE.equals(action)) {
- state.action = ACTION_OPEN_TREE;
- } else if (Shared.ACTION_PICK_COPY_DESTINATION.equals(action)) {
- state.action = ACTION_PICK_COPY_DESTINATION;
- }
-
- if (state.action == ACTION_OPEN || state.action == ACTION_GET_CONTENT) {
- state.allowMultiple = intent.getBooleanExtra(
- Intent.EXTRA_ALLOW_MULTIPLE, false);
- }
-
- if (state.action == ACTION_OPEN || state.action == ACTION_GET_CONTENT
- || state.action == ACTION_CREATE) {
- state.openableOnly = intent.hasCategory(Intent.CATEGORY_OPENABLE);
- }
-
- if (state.action == ACTION_PICK_COPY_DESTINATION) {
- // Indicates that a copy operation (or move) includes a directory.
- // Why? Directory creation isn't supported by some roots (like Downloads).
- // This allows us to restrict available roots to just those with support.
- state.directoryCopy = intent.getBooleanExtra(
- Shared.EXTRA_DIRECTORY_COPY, false);
- state.copyOperationSubType = intent.getIntExtra(
- FileOperationService.EXTRA_OPERATION_TYPE,
- FileOperationService.OPERATION_COPY);
- }
- }
-
- public void onAppPicked(ResolveInfo info) {
- final Intent intent = new Intent(getIntent());
- intent.setFlags(intent.getFlags() & ~Intent.FLAG_ACTIVITY_FORWARD_RESULT);
- intent.setComponent(new ComponentName(
- info.activityInfo.applicationInfo.packageName, info.activityInfo.name));
- startActivityForResult(intent, CODE_FORWARD);
- }
-
- @Override
- protected void onActivityResult(int requestCode, int resultCode, Intent data) {
- if (DEBUG) Log.d(TAG, "onActivityResult() code=" + resultCode);
-
- // Only relay back results when not canceled; otherwise stick around to
- // let the user pick another app/backend.
- if (requestCode == CODE_FORWARD && resultCode != RESULT_CANCELED) {
-
- // Remember that we last picked via external app
- final String packageName = getCallingPackageMaybeExtra();
- final ContentValues values = new ContentValues();
- values.put(ResumeColumns.EXTERNAL, 1);
- getContentResolver().insert(RecentsProvider.buildResume(packageName), values);
-
- // Pass back result to original caller
- setResult(resultCode, data);
- finish();
- } else {
- super.onActivityResult(requestCode, resultCode, data);
- }
- }
-
- @Override
- protected void onPostCreate(Bundle savedInstanceState) {
- super.onPostCreate(savedInstanceState);
- mDrawer.update();
- mNavigator.update();
- }
-
- @Override
- public String getDrawerTitle() {
- String title = getIntent().getStringExtra(DocumentsContract.EXTRA_PROMPT);
- if (title == null) {
- if (mState.action == ACTION_OPEN ||
- mState.action == ACTION_GET_CONTENT ||
- mState.action == ACTION_OPEN_TREE) {
- title = getResources().getString(R.string.title_open);
- } else if (mState.action == ACTION_CREATE ||
- mState.action == ACTION_PICK_COPY_DESTINATION) {
- title = getResources().getString(R.string.title_save);
- } else {
- // If all else fails, just call it "Documents".
- title = getResources().getString(R.string.app_label);
- }
- }
-
- return title;
- }
-
- @Override
- public boolean onPrepareOptionsMenu(Menu menu) {
- super.onPrepareOptionsMenu(menu);
- mMenuManager.updateOptionMenu(menu, mDetails);
-
- final DocumentInfo cwd = getCurrentDirectory();
-
- if (mState.action == ACTION_CREATE) {
- final FragmentManager fm = getFragmentManager();
- SaveFragment.get(fm).prepareForDirectory(cwd);
- }
-
- return true;
- }
-
- @Override
- void refreshDirectory(int anim) {
- final FragmentManager fm = getFragmentManager();
- final RootInfo root = getCurrentRoot();
- final DocumentInfo cwd = getCurrentDirectory();
-
- if (cwd == null) {
- // No directory means recents
- if (mState.action == ACTION_CREATE ||
- mState.action == ACTION_OPEN_TREE ||
- mState.action == ACTION_PICK_COPY_DESTINATION) {
- RecentsCreateFragment.show(fm);
- } else {
- DirectoryFragment.showRecentsOpen(fm, anim);
-
- // In recents we pick layout mode based on the mimetype,
- // picking GRID for visual types. We intentionally don't
- // consult a user's saved preferences here since they are
- // set per root (not per root and per mimetype).
- boolean visualMimes = MimePredicate.mimeMatches(
- MimePredicate.VISUAL_MIMES, mState.acceptMimes);
- mState.derivedMode = visualMimes ? State.MODE_GRID : State.MODE_LIST;
- }
- } else {
- // Normal boring directory
- DirectoryFragment.showDirectory(fm, root, cwd, anim);
- }
-
- // Forget any replacement target
- if (mState.action == ACTION_CREATE) {
- final SaveFragment save = SaveFragment.get(fm);
- if (save != null) {
- save.setReplaceTarget(null);
- }
- }
-
- if (mState.action == ACTION_OPEN_TREE ||
- mState.action == ACTION_PICK_COPY_DESTINATION) {
- final PickFragment pick = PickFragment.get(fm);
- if (pick != null) {
- pick.setPickTarget(mState.action, mState.copyOperationSubType, cwd);
- }
- }
- }
-
- void onSaveRequested(DocumentInfo replaceTarget) {
- new ExistingFinishTask(this, replaceTarget.derivedUri)
- .executeOnExecutor(getExecutorForCurrentDirectory());
- }
-
- @Override
- void onDirectoryCreated(DocumentInfo doc) {
- assert(doc.isDirectory());
- openContainerDocument(doc);
- }
-
- void onSaveRequested(String mimeType, String displayName) {
- new CreateFinishTask(this, mimeType, displayName)
- .executeOnExecutor(getExecutorForCurrentDirectory());
- }
-
- @Override
- public void onDocumentPicked(DocumentInfo doc, Model model) {
- final FragmentManager fm = getFragmentManager();
- if (doc.isContainer()) {
- openContainerDocument(doc);
- } else if (mState.action == ACTION_OPEN || mState.action == ACTION_GET_CONTENT) {
- // Explicit file picked, return
- new ExistingFinishTask(this, doc.derivedUri)
- .executeOnExecutor(getExecutorForCurrentDirectory());
- } else if (mState.action == ACTION_CREATE) {
- // Replace selected file
- SaveFragment.get(fm).setReplaceTarget(doc);
- }
- }
-
- @Override
- public void onDocumentsPicked(List<DocumentInfo> docs) {
- if (mState.action == ACTION_OPEN || mState.action == ACTION_GET_CONTENT) {
- final int size = docs.size();
- final Uri[] uris = new Uri[size];
- for (int i = 0; i < size; i++) {
- uris[i] = docs.get(i).derivedUri;
- }
- new ExistingFinishTask(this, uris)
- .executeOnExecutor(getExecutorForCurrentDirectory());
- }
- }
-
- public void onPickRequested(DocumentInfo pickTarget) {
- Uri result;
- if (mState.action == ACTION_OPEN_TREE) {
- result = DocumentsContract.buildTreeDocumentUri(
- pickTarget.authority, pickTarget.documentId);
- } else if (mState.action == ACTION_PICK_COPY_DESTINATION) {
- result = pickTarget.derivedUri;
- } else {
- // Should not be reached.
- throw new IllegalStateException("Invalid mState.action.");
- }
- new PickFinishTask(this, result).executeOnExecutor(getExecutorForCurrentDirectory());
- }
-
- void writeStackToRecentsBlocking() {
- final ContentResolver resolver = getContentResolver();
- final ContentValues values = new ContentValues();
-
- final byte[] rawStack = DurableUtils.writeToArrayOrNull(mState.stack);
- if (mState.action == ACTION_CREATE ||
- mState.action == ACTION_OPEN_TREE ||
- mState.action == ACTION_PICK_COPY_DESTINATION) {
- // Remember stack for last create
- values.clear();
- values.put(RecentColumns.KEY, mState.stack.buildKey());
- values.put(RecentColumns.STACK, rawStack);
- resolver.insert(RecentsProvider.buildRecent(), values);
- }
-
- // Remember location for next app launch
- final String packageName = getCallingPackageMaybeExtra();
- values.clear();
- values.put(ResumeColumns.STACK, rawStack);
- values.put(ResumeColumns.EXTERNAL, 0);
- resolver.insert(RecentsProvider.buildResume(packageName), values);
- }
-
- @Override
- void onTaskFinished(Uri... uris) {
- if (DEBUG) Log.d(TAG, "onFinished() " + Arrays.toString(uris));
-
- final Intent intent = new Intent();
- if (uris.length == 1) {
- intent.setData(uris[0]);
- } else if (uris.length > 1) {
- final ClipData clipData = new ClipData(
- null, mState.acceptMimes, new ClipData.Item(uris[0]));
- for (int i = 1; i < uris.length; i++) {
- clipData.addItem(new ClipData.Item(uris[i]));
- }
- intent.setClipData(clipData);
- }
-
- if (mState.action == ACTION_GET_CONTENT) {
- intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
- } else if (mState.action == ACTION_OPEN_TREE) {
- intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION
- | Intent.FLAG_GRANT_WRITE_URI_PERMISSION
- | Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION
- | Intent.FLAG_GRANT_PREFIX_URI_PERMISSION);
- } else if (mState.action == ACTION_PICK_COPY_DESTINATION) {
- // Picking a copy destination is only used internally by us, so we
- // don't need to extend permissions to the caller.
- intent.putExtra(Shared.EXTRA_STACK, (Parcelable) mState.stack);
- intent.putExtra(FileOperationService.EXTRA_OPERATION_TYPE, mState.copyOperationSubType);
- } else {
- intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION
- | Intent.FLAG_GRANT_WRITE_URI_PERMISSION
- | Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION);
- }
-
- setResult(Activity.RESULT_OK, intent);
- finish();
- }
-
-
- public static DocumentsActivity get(Fragment fragment) {
- return (DocumentsActivity) fragment.getActivity();
- }
-
- @Override
- public FragmentTuner createFragmentTuner() {
- // Currently DocumentsTuner maintains a state specific to the fragment instance. Because of
- // that, we create a new instance everytime it is needed
- return new DocumentsTuner(this, getDisplayState());
- }
-
- @Override
- public MenuManager getMenuManager() {
- return mMenuManager;
- }
-
- @Override
- public DirectoryDetails getDirectoryDetails() {
- return mDetails;
- }
-
- /**
- * Loads the last used path (stack) from Recents (history).
- * The path selected is based on the calling package name. So the last
- * path for an app like Gmail can be different than the last path
- * for an app like DropBox.
- */
- private static final class LoadLastUsedStackTask
- extends PairedTask<DocumentsActivity, Void, Void> {
-
- private volatile boolean mRestoredStack;
- private volatile boolean mExternal;
- private State mState;
-
- public LoadLastUsedStackTask(DocumentsActivity activity) {
- super(activity);
- mState = activity.mState;
- }
-
- @Override
- protected Void run(Void... params) {
- if (DEBUG && !mState.stack.isEmpty()) {
- Log.w(TAG, "Overwriting existing stack.");
- }
- RootsCache roots = DocumentsApplication.getRootsCache(mOwner);
-
- String packageName = mOwner.getCallingPackageMaybeExtra();
- Uri resumeUri = RecentsProvider.buildResume(packageName);
- Cursor cursor = mOwner.getContentResolver().query(resumeUri, null, null, null, null);
- try {
- if (cursor.moveToFirst()) {
- mExternal = cursor.getInt(cursor.getColumnIndex(ResumeColumns.EXTERNAL)) != 0;
- final byte[] rawStack = cursor.getBlob(
- cursor.getColumnIndex(ResumeColumns.STACK));
- DurableUtils.readFromArray(rawStack, mState.stack);
- mRestoredStack = true;
- }
- } catch (IOException e) {
- Log.w(TAG, "Failed to resume: " + e);
- } finally {
- IoUtils.closeQuietly(cursor);
- }
-
- if (mRestoredStack) {
- // Update the restored stack to ensure we have freshest data
- final Collection<RootInfo> matchingRoots = roots.getMatchingRootsBlocking(mState);
- try {
- mState.stack.updateRoot(matchingRoots);
- mState.stack.updateDocuments(mOwner.getContentResolver());
- } catch (FileNotFoundException e) {
- Log.w(TAG, "Failed to restore stack for package: " + packageName
- + " because of error: "+ e);
- mState.stack.reset();
- mRestoredStack = false;
- }
- }
-
- return null;
- }
-
- @Override
- protected void finish(Void result) {
- mState.restored = true;
- mState.external = mExternal;
- mOwner.refreshCurrentRootAndDirectory(AnimationView.ANIM_NONE);
- }
- }
-
- private static final class PickFinishTask extends PairedTask<DocumentsActivity, Void, Void> {
- private final Uri mUri;
-
- public PickFinishTask(DocumentsActivity activity, Uri uri) {
- super(activity);
- mUri = uri;
- }
-
- @Override
- protected Void run(Void... params) {
- mOwner.writeStackToRecentsBlocking();
- return null;
- }
-
- @Override
- protected void finish(Void result) {
- mOwner.onTaskFinished(mUri);
- }
- }
-
- private static final class ExistingFinishTask extends PairedTask<DocumentsActivity, Void, Void> {
- private final Uri[] mUris;
-
- public ExistingFinishTask(DocumentsActivity activity, Uri... uris) {
- super(activity);
- mUris = uris;
- }
-
- @Override
- protected Void run(Void... params) {
- mOwner.writeStackToRecentsBlocking();
- return null;
- }
-
- @Override
- protected void finish(Void result) {
- mOwner.onTaskFinished(mUris);
- }
- }
-
- /**
- * Task that creates a new document in the background.
- */
- private static final class CreateFinishTask extends PairedTask<DocumentsActivity, Void, Uri> {
- private final String mMimeType;
- private final String mDisplayName;
-
- public CreateFinishTask(DocumentsActivity activity, String mimeType, String displayName) {
- super(activity);
- mMimeType = mimeType;
- mDisplayName = displayName;
- }
-
- @Override
- protected void prepare() {
- mOwner.setPending(true);
- }
-
- @Override
- protected Uri run(Void... params) {
- final ContentResolver resolver = mOwner.getContentResolver();
- final DocumentInfo cwd = mOwner.getCurrentDirectory();
-
- ContentProviderClient client = null;
- Uri childUri = null;
- try {
- client = DocumentsApplication.acquireUnstableProviderOrThrow(
- resolver, cwd.derivedUri.getAuthority());
- childUri = DocumentsContract.createDocument(
- client, cwd.derivedUri, mMimeType, mDisplayName);
- } catch (Exception e) {
- Log.w(TAG, "Failed to create document", e);
- } finally {
- ContentProviderClient.releaseQuietly(client);
- }
-
- if (childUri != null) {
- mOwner.writeStackToRecentsBlocking();
- }
-
- return childUri;
- }
-
- @Override
- protected void finish(Uri result) {
- if (result != null) {
- mOwner.onTaskFinished(result);
- } else {
- Snackbars.makeSnackbar(
- mOwner, R.string.save_error, Snackbar.LENGTH_SHORT).show();
- }
-
- mOwner.setPending(false);
- }
- }
-}
diff --git a/packages/DocumentsUI/src/com/android/documentsui/DocumentsApplication.java b/packages/DocumentsUI/src/com/android/documentsui/DocumentsApplication.java
deleted file mode 100644
index 3b2529f..0000000
--- a/packages/DocumentsUI/src/com/android/documentsui/DocumentsApplication.java
+++ /dev/null
@@ -1,120 +0,0 @@
-/*
- * 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.
- */
-
-package com.android.documentsui;
-
-import android.app.ActivityManager;
-import android.app.Application;
-import android.content.BroadcastReceiver;
-import android.content.ContentProviderClient;
-import android.content.ContentResolver;
-import android.content.Context;
-import android.content.Intent;
-import android.content.IntentFilter;
-import android.net.Uri;
-import android.os.RemoteException;
-import android.text.format.DateUtils;
-
-import com.android.documentsui.clipping.ClipStorage;
-import com.android.documentsui.clipping.DocumentClipper;
-
-public class DocumentsApplication extends Application {
- private static final long PROVIDER_ANR_TIMEOUT = 20 * DateUtils.SECOND_IN_MILLIS;
-
- private RootsCache mRoots;
-
- private ThumbnailCache mThumbnailCache;
- private ClipStorage mClipStorage;
- private DocumentClipper mClipper;
-
- public static RootsCache getRootsCache(Context context) {
- return ((DocumentsApplication) context.getApplicationContext()).mRoots;
- }
-
- public static ThumbnailCache getThumbnailCache(Context context) {
- final DocumentsApplication app = (DocumentsApplication) context.getApplicationContext();
- return app.mThumbnailCache;
- }
-
- public static ContentProviderClient acquireUnstableProviderOrThrow(
- ContentResolver resolver, String authority) throws RemoteException {
- final ContentProviderClient client = resolver.acquireUnstableContentProviderClient(
- authority);
- if (client == null) {
- throw new RemoteException("Failed to acquire provider for " + authority);
- }
- client.setDetectNotResponding(PROVIDER_ANR_TIMEOUT);
- return client;
- }
-
- public static DocumentClipper getDocumentClipper(Context context) {
- return ((DocumentsApplication) context.getApplicationContext()).mClipper;
- }
-
- public static ClipStorage getClipStorage(Context context) {
- return ((DocumentsApplication) context.getApplicationContext()).mClipStorage;
- }
-
- @Override
- public void onCreate() {
- super.onCreate();
-
- final ActivityManager am = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
- final int memoryClassBytes = am.getMemoryClass() * 1024 * 1024;
-
- mRoots = new RootsCache(this);
- mRoots.updateAsync(false);
-
- mThumbnailCache = new ThumbnailCache(memoryClassBytes / 4);
-
- mClipStorage = new ClipStorage(
- ClipStorage.prepareStorage(getCacheDir()),
- getSharedPreferences(ClipStorage.PREF_NAME, 0));
- mClipper = new DocumentClipper(this, mClipStorage);
-
- final IntentFilter packageFilter = new IntentFilter();
- packageFilter.addAction(Intent.ACTION_PACKAGE_ADDED);
- packageFilter.addAction(Intent.ACTION_PACKAGE_CHANGED);
- packageFilter.addAction(Intent.ACTION_PACKAGE_REMOVED);
- packageFilter.addAction(Intent.ACTION_PACKAGE_DATA_CLEARED);
- packageFilter.addDataScheme("package");
- registerReceiver(mCacheReceiver, packageFilter);
-
- final IntentFilter localeFilter = new IntentFilter();
- localeFilter.addAction(Intent.ACTION_LOCALE_CHANGED);
- registerReceiver(mCacheReceiver, localeFilter);
- }
-
- @Override
- public void onTrimMemory(int level) {
- super.onTrimMemory(level);
-
- mThumbnailCache.onTrimMemory(level);
- }
-
- private BroadcastReceiver mCacheReceiver = new BroadcastReceiver() {
- @Override
- public void onReceive(Context context, Intent intent) {
- final Uri data = intent.getData();
- if (data != null) {
- final String packageName = data.getSchemeSpecificPart();
- mRoots.updatePackageAsync(packageName);
- } else {
- mRoots.updateAsync(true);
- }
- }
- };
-}
diff --git a/packages/DocumentsUI/src/com/android/documentsui/DocumentsMenuManager.java b/packages/DocumentsUI/src/com/android/documentsui/DocumentsMenuManager.java
deleted file mode 100644
index 9b07b49..0000000
--- a/packages/DocumentsUI/src/com/android/documentsui/DocumentsMenuManager.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.documentsui;
-
-import static com.android.documentsui.State.ACTION_CREATE;
-import static com.android.documentsui.State.ACTION_GET_CONTENT;
-import static com.android.documentsui.State.ACTION_OPEN;
-import static com.android.documentsui.State.ACTION_OPEN_TREE;
-import static com.android.documentsui.State.ACTION_PICK_COPY_DESTINATION;
-
-import android.view.Menu;
-import android.view.MenuItem;
-
-import com.android.documentsui.MenuManager.DirectoryDetails;
-
-final class DocumentsMenuManager extends MenuManager {
-
- private boolean mPicking;
-
- public DocumentsMenuManager(SearchViewManager searchManager, State displayState) {
- super(searchManager, displayState);
-
- mPicking = mState.action == ACTION_CREATE
- || mState.action == ACTION_OPEN_TREE
- || mState.action == ACTION_PICK_COPY_DESTINATION;
- }
-
- @Override
- public void updateOptionMenu(Menu menu, DirectoryDetails details) {
- super.updateOptionMenu(menu, details);
- if (mPicking) {
- // May already be hidden because the root
- // doesn't support search.
- mSearchManager.showMenu(false);
- }
- }
-
- @Override
- void updateModePicker(MenuItem grid, MenuItem list, DirectoryDetails directoryDetails) {
- // No display options in recent directories
- if (mPicking && directoryDetails.isInRecents()) {
- grid.setVisible(false);
- list.setVisible(false);
- } else {
- super.updateModePicker(grid, list, directoryDetails);
- }
- }
-
- @Override
- void updateFileSize(MenuItem fileSize, DirectoryDetails directoryDetails) {
- super.updateFileSize(fileSize, directoryDetails);
- fileSize.setVisible(fileSize.isVisible() && !mPicking);
- }
-
- @Override
- void updateSelectAll(MenuItem selectAll, SelectionDetails selectionDetails) {
- selectAll.setVisible(mState.allowMultiple);
- }
-
- @Override
- void updateCreateDir(MenuItem createDir, DirectoryDetails directoryDetails) {
- createDir.setVisible(mPicking);
- createDir.setEnabled(mPicking && directoryDetails.canCreateDirectory());
- }
-
- @Override
- void updateOpen(MenuItem open, SelectionDetails selectionDetails) {
- open.setVisible(mState.action == ACTION_GET_CONTENT
- || mState.action == ACTION_OPEN);
- }
-}
diff --git a/packages/DocumentsUI/src/com/android/documentsui/DocumentsToolbar.java b/packages/DocumentsUI/src/com/android/documentsui/DocumentsToolbar.java
deleted file mode 100644
index 7742cbf..0000000
--- a/packages/DocumentsUI/src/com/android/documentsui/DocumentsToolbar.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.documentsui;
-
-import android.content.Context;
-import android.util.AttributeSet;
-import android.view.MenuItem;
-import android.widget.Toolbar;
-
-/**
- * ToolBar of Documents UI.
- */
-public class DocumentsToolbar extends Toolbar {
- interface OnActionViewCollapsedListener {
- void onActionViewCollapsed();
- }
-
- private OnActionViewCollapsedListener mOnActionViewCollapsedListener;
-
- public DocumentsToolbar(Context context, AttributeSet attrs,
- int defStyleAttr, int defStyleRes) {
- super(context, attrs, defStyleAttr, defStyleRes);
- }
-
- public DocumentsToolbar(Context context, AttributeSet attrs,
- int defStyleAttr) {
- super(context, attrs, defStyleAttr);
- }
-
- public DocumentsToolbar(Context context, AttributeSet attrs) {
- super(context, attrs);
- }
-
- public DocumentsToolbar(Context context) {
- super(context);
- }
-
- @Override
- public void collapseActionView() {
- super.collapseActionView();
- if (mOnActionViewCollapsedListener != null) {
- mOnActionViewCollapsedListener.onActionViewCollapsed();
- }
- }
-
- /**
- * Adds a listener that is invoked after collapsing the action view.
- * @param listener
- */
- public void setOnActionViewCollapsedListener(
- OnActionViewCollapsedListener listener) {
- mOnActionViewCollapsedListener = listener;
- }
-
- public MenuItem getSearchMenu() {
- return getMenu().findItem(R.id.menu_search);
- }
-}
diff --git a/packages/DocumentsUI/src/com/android/documentsui/DragOverTextView.java b/packages/DocumentsUI/src/com/android/documentsui/DragOverTextView.java
deleted file mode 100644
index e9fc2a0..0000000
--- a/packages/DocumentsUI/src/com/android/documentsui/DragOverTextView.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.documentsui;
-
-import android.content.Context;
-import android.util.AttributeSet;
-import android.view.View.OnDragListener;
-import android.widget.TextView;
-
-/**
- * An {@link TextView} that uses drawable states to distinct between normal and highlighted states.
- */
-
-public final class DragOverTextView extends TextView {
- private static final int[] STATE_HIGHLIGHTED = {R.attr.state_highlighted};
-
- private boolean mHighlighted = false;
-
- public DragOverTextView(Context context, AttributeSet attrs) {
- super(context, attrs);
- }
-
- @Override
- protected int[] onCreateDrawableState(int extraSpace) {
- final int[] drawableState = super.onCreateDrawableState(extraSpace + 1);
-
- if (mHighlighted) {
- mergeDrawableStates(drawableState, STATE_HIGHLIGHTED);
- }
-
- return drawableState;
- }
-
- public void setHighlight(boolean highlight) {
- mHighlighted = highlight;
- refreshDrawableState();
- }
-}
diff --git a/packages/DocumentsUI/src/com/android/documentsui/DrawerController.java b/packages/DocumentsUI/src/com/android/documentsui/DrawerController.java
deleted file mode 100644
index 97d459b..0000000
--- a/packages/DocumentsUI/src/com/android/documentsui/DrawerController.java
+++ /dev/null
@@ -1,268 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.documentsui;
-
-import static com.android.documentsui.Shared.DEBUG;
-
-import android.annotation.IntDef;
-import android.app.Activity;
-import android.support.annotation.ColorRes;
-import android.support.v4.app.ActionBarDrawerToggle;
-import android.support.v4.widget.DrawerLayout;
-import android.support.v4.widget.DrawerLayout.DrawerListener;
-import android.util.Log;
-import android.view.View;
-import android.widget.Toolbar;
-
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-
-/**
- * A facade over the various pieces comprising "roots fragment in a Drawer".
- *
- * @see DrawerController#create(DrawerLayout)
- */
-abstract class DrawerController implements DrawerListener {
- public static final String TAG = "DrawerController";
-
- // Drawer opening triggered by tapping the navigation icon
- public static final int OPENED_HAMBURGER = 0;
- // Drawer opening triggered by swiping right from the edge of the screen
- public static final int OPENED_SWIPE = 1;
- // Mostly programmatically forced drawer opening
- public static final int OPENED_OTHER = 2;
-
- @IntDef(flag = true, value = {
- OPENED_HAMBURGER,
- OPENED_SWIPE,
- OPENED_OTHER
- })
- @Retention(RetentionPolicy.SOURCE)
- public @interface Trigger {}
-
- /**
- * Toggles the drawer and sets the OPENED_OTHER as the action that causes opening the drawer.
- * @param open
- */
- abstract void setOpen(boolean open);
-
- /**
- * Toggles the drawer.
- * @param open
- * @param trigger Indicates what action caused opening the drawer. It is ignored for closing.
- */
- abstract void setOpen(boolean open, @Trigger int trigger);
- abstract boolean isPresent();
- abstract boolean isOpen();
- abstract void setTitle(String title);
- abstract void update();
-
- /**
- * Returns a controller suitable for {@code Layout}.
- */
- static DrawerController create(Activity activity) {
-
- DrawerLayout layout = (DrawerLayout) activity.findViewById(R.id.drawer_layout);
-
- if (layout == null) {
- return new DummyDrawerController();
- }
-
- View drawer = activity.findViewById(R.id.drawer_roots);
- Toolbar toolbar = (Toolbar) activity.findViewById(R.id.roots_toolbar);
-
- drawer.getLayoutParams().width = calculateDrawerWidth(activity);
-
- ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
- activity,
- layout,
- R.drawable.ic_hamburger,
- R.string.drawer_open,
- R.string.drawer_close);
-
- return new RuntimeDrawerController(layout, drawer, toggle, toolbar);
- }
-
- /**
- * Returns a controller suitable for {@code Layout}.
- */
- static DrawerController createDummy() {
- return new DummyDrawerController();
- }
-
- private static int calculateDrawerWidth(Activity activity) {
- // Material design specification for navigation drawer:
- // https://www.google.com/design/spec/patterns/navigation-drawer.html
- float width = Display.screenWidth(activity) - Display.actionBarHeight(activity);
- float maxWidth = activity.getResources().getDimension(R.dimen.max_drawer_width);
- int finalWidth = (int) ((width > maxWidth ? maxWidth : width));
-
- if (DEBUG)
- Log.d(TAG, "Calculated drawer width:" + (finalWidth / Display.density(activity)));
-
- return finalWidth;
- }
-
- /**
- * Runtime controller that manages a real drawer.
- */
- private static final class RuntimeDrawerController extends DrawerController
- implements ItemDragListener.DragHost {
- private final ActionBarDrawerToggle mToggle;
- private DrawerLayout mLayout;
- private View mDrawer;
- private Toolbar mToolbar;
- private @Trigger int mTrigger = OPENED_OTHER;
-
- public RuntimeDrawerController(
- DrawerLayout layout, View drawer, ActionBarDrawerToggle toggle,
- Toolbar drawerToolbar) {
- mToolbar = drawerToolbar;
- assert(layout != null);
-
- mLayout = layout;
- mDrawer = drawer;
- mToggle = toggle;
-
- mLayout.setDrawerListener(this);
-
- View edge = layout.findViewById(R.id.drawer_edge);
- edge.setOnDragListener(new ItemDragListener<>(this));
- }
-
- @Override
- public void runOnUiThread(Runnable runnable) {
- mDrawer.post(runnable);
- }
-
- @Override
- public void setDropTargetHighlight(View v, boolean highlight) {
- assert (v.getId() == R.id.drawer_edge);
-
- @ColorRes int id = highlight ? R.color.item_doc_background_selected :
- android.R.color.transparent;
- v.setBackgroundColor(id);
- }
-
- @Override
- public void onViewHovered(View v) {
- assert (v.getId() == R.id.drawer_edge);
-
- setOpen(true);
- }
-
- @Override
- void setOpen(boolean open) {
- setOpen(open, OPENED_OTHER);
- }
-
- @Override
- void setOpen(boolean open, @Trigger int trigger) {
- if (open) {
- mLayout.openDrawer(mDrawer);
- mTrigger = trigger;
- } else {
- mLayout.closeDrawer(mDrawer);
- }
- }
-
- @Override
- boolean isOpen() {
- return mLayout.isDrawerOpen(mDrawer);
- }
-
- @Override
- boolean isPresent() {
- return true;
- }
-
- @Override
- void setTitle(String title) {
- mToolbar.setTitle(title);
- }
-
- @Override
- void update() {
- mToggle.syncState();
- }
-
- @Override
- public void onDrawerSlide(View drawerView, float slideOffset) {
- mToggle.onDrawerSlide(drawerView, slideOffset);
- }
-
- @Override
- public void onDrawerOpened(View drawerView) {
- mToggle.onDrawerOpened(drawerView);
- Metrics.logDrawerOpened(mToolbar.getContext(), mTrigger);
- }
-
- @Override
- public void onDrawerClosed(View drawerView) {
- mToggle.onDrawerClosed(drawerView);
- mTrigger = OPENED_OTHER;
- }
-
- @Override
- public void onDrawerStateChanged(int newState) {
- mToggle.onDrawerStateChanged(newState);
- if (newState == DrawerLayout.STATE_DRAGGING) {
- mTrigger = OPENED_SWIPE;
- }
- }
- }
-
- /*
- * Dummy controller useful with clients that don't host a real drawer.
- */
- private static final class DummyDrawerController extends DrawerController {
-
- @Override
- void setOpen(boolean open) {}
-
- @Override
- void setOpen(boolean open, @Trigger int trigger) {}
-
- @Override
- boolean isOpen() {
- return false;
- }
-
- @Override
- boolean isPresent() {
- return false;
- }
-
- @Override
- void setTitle(String title) {}
-
- @Override
- void update() {}
-
- @Override
- public void onDrawerSlide(View drawerView, float slideOffset) {}
-
- @Override
- public void onDrawerOpened(View drawerView) {}
-
- @Override
- public void onDrawerClosed(View drawerView) {}
-
- @Override
- public void onDrawerStateChanged(int newState) {}
- }
-}
diff --git a/packages/DocumentsUI/src/com/android/documentsui/DropdownBreadcrumb.java b/packages/DocumentsUI/src/com/android/documentsui/DropdownBreadcrumb.java
deleted file mode 100644
index 71d7334..0000000
--- a/packages/DocumentsUI/src/com/android/documentsui/DropdownBreadcrumb.java
+++ /dev/null
@@ -1,158 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.documentsui;
-
-import android.content.Context;
-import android.util.AttributeSet;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.AdapterView;
-import android.widget.BaseAdapter;
-import android.widget.Spinner;
-import android.widget.TextView;
-
-import com.android.documentsui.NavigationViewManager.Breadcrumb;
-import com.android.documentsui.NavigationViewManager.Environment;
-import com.android.documentsui.model.DocumentInfo;
-import com.android.documentsui.model.RootInfo;
-
-import java.util.function.Consumer;
-
-/**
- * Dropdown implementation of breadcrumb used for phone device layouts
- */
-
-public final class DropdownBreadcrumb extends Spinner implements Breadcrumb {
-
- private DropdownAdapter mAdapter;
-
- public DropdownBreadcrumb(
- Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
- super(context, attrs, defStyleAttr, defStyleRes);
- }
-
- public DropdownBreadcrumb(Context context, AttributeSet attrs, int defStyleAttr) {
- super(context, attrs, defStyleAttr);
- }
-
- public DropdownBreadcrumb(Context context, AttributeSet attrs) {
- super(context, attrs);
- }
-
- public DropdownBreadcrumb(Context context) {
- super(context);
- }
-
- @Override
- public void setup(Environment env, State state, Consumer<Integer> listener) {
- mAdapter = new DropdownAdapter(state, env);
- setOnItemSelectedListener(
- new OnItemSelectedListener() {
- @Override
- public void onItemSelected(
- AdapterView<?> parent, View view, int position, long id) {
- listener.accept(position);
- }
-
- @Override
- public void onNothingSelected(AdapterView<?> parent) {}
- });
- }
-
- @Override
- public void show(boolean visibility) {
- if (visibility) {
- setVisibility(VISIBLE);
- setAdapter(mAdapter);
- } else {
- setVisibility(GONE);
- setAdapter(null);
- }
- }
-
- @Override
- public void postUpdate() {
- setSelection(mAdapter.getCount() - 1, false);
- }
-
- private static final class DropdownAdapter extends BaseAdapter {
- private Environment mEnv;
- private State mState;
-
- public DropdownAdapter(State state, Environment env) {
- mState = state;
- mEnv = env;
- }
-
- @Override
- public int getCount() {
- return mState.stack.size();
- }
-
- @Override
- public DocumentInfo getItem(int position) {
- return mState.stack.get(mState.stack.size() - position - 1);
- }
-
- @Override
- public long getItemId(int position) {
- return position;
- }
-
- @Override
- public View getView(int position, View convertView, ViewGroup parent) {
- if (convertView == null) {
- convertView = LayoutInflater.from(parent.getContext())
- .inflate(R.layout.item_subdir_title, parent, false);
- }
-
- final TextView title = (TextView) convertView.findViewById(android.R.id.title);
- final DocumentInfo doc = getItem(position);
-
- if (position == 0) {
- final RootInfo root = mEnv.getCurrentRoot();
- title.setText(root.title);
- } else {
- title.setText(doc.displayName);
- }
-
- return convertView;
- }
-
- @Override
- public View getDropDownView(int position, View convertView, ViewGroup parent) {
- if (convertView == null) {
- convertView = LayoutInflater.from(parent.getContext())
- .inflate(R.layout.item_subdir, parent, false);
- }
-
- final TextView title = (TextView) convertView.findViewById(android.R.id.title);
- final DocumentInfo doc = getItem(position);
-
- if (position == 0) {
- final RootInfo root = mEnv.getCurrentRoot();
- title.setText(root.title);
- } else {
- title.setText(doc.displayName);
- }
-
- return convertView;
- }
- }
-
-}
diff --git a/packages/DocumentsUI/src/com/android/documentsui/EjectRootTask.java b/packages/DocumentsUI/src/com/android/documentsui/EjectRootTask.java
deleted file mode 100644
index e47a262..0000000
--- a/packages/DocumentsUI/src/com/android/documentsui/EjectRootTask.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.documentsui;
-
-import android.content.ContentProviderClient;
-import android.content.ContentResolver;
-import android.content.Context;
-import android.net.Uri;
-import android.provider.DocumentsContract;
-import android.util.Log;
-
-import java.util.function.BooleanSupplier;
-import java.util.function.Consumer;
-
-final class EjectRootTask extends CheckedTask<Void, Boolean> {
- private final String mAuthority;
- private final String mRootId;
- private final Consumer<Boolean> mCallback;
- private Context mContext;
-
- /**
- * @param ejectCanceledCheck The method reference we use to see whether eject should be stopped
- * at any point
- * @param finishCallback The end callback necessary when the eject task finishes
- */
- public EjectRootTask(Context context,
- String authority,
- String rootId,
- BooleanSupplier ejectCanceledCheck,
- Consumer<Boolean> finishCallback) {
- super(ejectCanceledCheck::getAsBoolean);
- mAuthority = authority;
- mRootId = rootId;
- mContext = context;
- mCallback = finishCallback;
- }
-
- @Override
- protected Boolean run(Void... params) {
- final ContentResolver resolver = mContext.getContentResolver();
-
- Uri rootUri = DocumentsContract.buildRootUri(mAuthority, mRootId);
- ContentProviderClient client = null;
- try {
- client = DocumentsApplication.acquireUnstableProviderOrThrow(
- resolver, mAuthority);
- return DocumentsContract.ejectRoot(client, rootUri);
- } catch (Exception e) {
- Log.w(Shared.TAG, "Failed to eject root", e);
- } finally {
- ContentProviderClient.releaseQuietly(client);
- }
-
- return false;
- }
-
- @Override
- protected void finish(Boolean ejected) {
- mCallback.accept(ejected);
- }
-}
\ No newline at end of file
diff --git a/packages/DocumentsUI/src/com/android/documentsui/EventListener.java b/packages/DocumentsUI/src/com/android/documentsui/EventListener.java
deleted file mode 100644
index c15e9a6..0000000
--- a/packages/DocumentsUI/src/com/android/documentsui/EventListener.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.documentsui;
-
-import android.net.Uri;
-import android.support.annotation.Nullable;
-
-public interface EventListener {
- /**
- * @param uri Uri navigated to. If recents, then null.
- */
- void onDirectoryNavigated(@Nullable Uri uri);
-
- /**
- * @param uri Uri of the loaded directory. If recents, then null.
- */
- void onDirectoryLoaded(@Nullable Uri uri);
-}
diff --git a/packages/DocumentsUI/src/com/android/documentsui/Events.java b/packages/DocumentsUI/src/com/android/documentsui/Events.java
deleted file mode 100644
index 95934c3f..0000000
--- a/packages/DocumentsUI/src/com/android/documentsui/Events.java
+++ /dev/null
@@ -1,274 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.documentsui;
-
-import static com.android.documentsui.Shared.DEBUG;
-
-import android.graphics.Point;
-import android.support.v7.widget.RecyclerView;
-import android.util.Log;
-import android.util.Pools;
-import android.view.KeyEvent;
-import android.view.MotionEvent;
-import android.view.View;
-
-/**
- * Utility code for dealing with MotionEvents.
- */
-public final class Events {
-
- /**
- * Returns true if event was triggered by a mouse.
- */
- public static boolean isMouseEvent(MotionEvent e) {
- int toolType = e.getToolType(0);
- return toolType == MotionEvent.TOOL_TYPE_MOUSE;
- }
-
- /**
- * Returns true if event was triggered by a finger or stylus touch.
- */
- public static boolean isActionDown(MotionEvent e) {
- return e.getActionMasked() == MotionEvent.ACTION_DOWN;
- }
-
- /**
- * Returns true if event was triggered by a finger or stylus touch.
- */
- public static boolean isActionUp(MotionEvent e) {
- return e.getActionMasked() == MotionEvent.ACTION_UP;
- }
-
- /**
- * Returns true if the shift is pressed.
- */
- public boolean isShiftPressed(MotionEvent e) {
- return hasShiftBit(e.getMetaState());
- }
-
- /**
- * Whether or not the given keyCode represents a navigation keystroke (e.g. up, down, home).
- *
- * @param keyCode
- * @return
- */
- public static boolean isNavigationKeyCode(int keyCode) {
- switch (keyCode) {
- case KeyEvent.KEYCODE_DPAD_UP:
- case KeyEvent.KEYCODE_DPAD_DOWN:
- case KeyEvent.KEYCODE_DPAD_LEFT:
- case KeyEvent.KEYCODE_DPAD_RIGHT:
- case KeyEvent.KEYCODE_MOVE_HOME:
- case KeyEvent.KEYCODE_MOVE_END:
- case KeyEvent.KEYCODE_PAGE_UP:
- case KeyEvent.KEYCODE_PAGE_DOWN:
- return true;
- default:
- return false;
- }
- }
-
-
- /**
- * Returns true if the "SHIFT" bit is set.
- */
- public static boolean hasShiftBit(int metaState) {
- return (metaState & KeyEvent.META_SHIFT_ON) != 0;
- }
-
- /**
- * A facade over MotionEvent primarily designed to permit for unit testing
- * of related code.
- */
- public interface InputEvent extends AutoCloseable {
- boolean isMouseEvent();
- boolean isPrimaryButtonPressed();
- boolean isSecondaryButtonPressed();
- boolean isShiftKeyDown();
-
- /** Returns true if the action is the initial press of a mouse or touch. */
- boolean isActionDown();
-
- /** Returns true if the action is the final release of a mouse or touch. */
- boolean isActionUp();
-
- // Eliminate the checked Exception from Autoclosable.
- @Override
- public void close();
-
- Point getOrigin();
- float getX();
- float getY();
- float getRawX();
- float getRawY();
-
- /** Returns true if the there is an item under the finger/cursor. */
- boolean isOverItem();
-
- /** Returns the adapter position of the item under the finger/cursor. */
- int getItemPosition();
- }
-
- public static final class MotionInputEvent implements InputEvent {
- private static final String TAG = "MotionInputEvent";
-
- private static final Pools.SimplePool<MotionInputEvent> sPool = new Pools.SimplePool<>(1);
-
- private MotionEvent mEvent;
- interface PositionProvider {
- int get(MotionEvent e);
- }
-
- private int mPosition;
-
- private MotionInputEvent() {
- if (DEBUG) Log.i(TAG, "Created a new instance.");
- }
-
- public static MotionInputEvent obtain(MotionEvent event, RecyclerView view) {
- Shared.checkMainLoop();
-
- MotionInputEvent instance = sPool.acquire();
- instance = (instance != null ? instance : new MotionInputEvent());
-
- instance.mEvent = event;
-
- // Consider determining position lazily as an optimization.
- View child = view.findChildViewUnder(event.getX(), event.getY());
- instance.mPosition = (child != null)
- ? view.getChildAdapterPosition(child)
- : RecyclerView.NO_POSITION;
-
- return instance;
- }
-
- public static MotionInputEvent obtain(
- MotionEvent event, PositionProvider positionProvider) {
- Shared.checkMainLoop();
-
- MotionInputEvent instance = sPool.acquire();
- instance = (instance != null ? instance : new MotionInputEvent());
-
- instance.mEvent = event;
- instance.mPosition = positionProvider.get(event);
-
- return instance;
- }
-
- public void recycle() {
- Shared.checkMainLoop();
-
- mEvent = null;
- mPosition = -1;
-
- boolean released = sPool.release(this);
- // This assert is used to guarantee we won't generate too many instances that can't be
- // held in the pool, which indicates our pool size is too small.
- //
- // Right now one instance is enough because we expect all instances are only used in
- // main thread.
- assert(released);
- }
-
- @Override
- public void close() {
- recycle();
- }
-
- @Override
- public boolean isMouseEvent() {
- return Events.isMouseEvent(mEvent);
- }
-
- @Override
- public boolean isPrimaryButtonPressed() {
- return mEvent.isButtonPressed(MotionEvent.BUTTON_PRIMARY);
- }
-
- @Override
- public boolean isSecondaryButtonPressed() {
- return mEvent.isButtonPressed(MotionEvent.BUTTON_SECONDARY);
- }
-
- @Override
- public boolean isShiftKeyDown() {
- return Events.hasShiftBit(mEvent.getMetaState());
- }
-
- @Override
- public boolean isActionDown() {
- return mEvent.getActionMasked() == MotionEvent.ACTION_DOWN;
- }
-
- @Override
- public boolean isActionUp() {
- return mEvent.getActionMasked() == MotionEvent.ACTION_UP;
- }
-
- @Override
- public Point getOrigin() {
- return new Point((int) mEvent.getX(), (int) mEvent.getY());
- }
-
- @Override
- public float getX() {
- return mEvent.getX();
- }
-
- @Override
- public float getY() {
- return mEvent.getY();
- }
-
- @Override
- public float getRawX() {
- return mEvent.getRawX();
- }
-
- @Override
- public float getRawY() {
- return mEvent.getRawY();
- }
-
- @Override
- public boolean isOverItem() {
- return getItemPosition() != RecyclerView.NO_POSITION;
- }
-
- @Override
- public int getItemPosition() {
- return mPosition;
- }
-
- @Override
- public String toString() {
- return new StringBuilder()
- .append("MotionInputEvent {")
- .append("isMouseEvent=").append(isMouseEvent())
- .append(" isPrimaryButtonPressed=").append(isPrimaryButtonPressed())
- .append(" isSecondaryButtonPressed=").append(isSecondaryButtonPressed())
- .append(" isShiftKeyDown=").append(isShiftKeyDown())
- .append(" isActionDown=").append(isActionDown())
- .append(" isActionUp=").append(isActionUp())
- .append(" getOrigin=").append(getOrigin())
- .append(" isOverItem=").append(isOverItem())
- .append(" getItemPosition=").append(getItemPosition())
- .append("}")
- .toString();
- }
- }
-}
diff --git a/packages/DocumentsUI/src/com/android/documentsui/Files.java b/packages/DocumentsUI/src/com/android/documentsui/Files.java
deleted file mode 100644
index 009fecb4..0000000
--- a/packages/DocumentsUI/src/com/android/documentsui/Files.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.documentsui;
-
-import java.io.File;
-
-/**
- * Utility class for working with {@link File} instances.
- */
-public final class Files {
-
- private Files() {} // no initialization for utility classes.
-
- public static void deleteRecursively(File file) {
- if (file.isDirectory()) {
- for (File child : file.listFiles()) {
- deleteRecursively(child);
- }
- }
- file.delete();
- }
-}
diff --git a/packages/DocumentsUI/src/com/android/documentsui/FilesActivity.java b/packages/DocumentsUI/src/com/android/documentsui/FilesActivity.java
deleted file mode 100644
index 54f3e61..0000000
--- a/packages/DocumentsUI/src/com/android/documentsui/FilesActivity.java
+++ /dev/null
@@ -1,531 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.documentsui;
-
-import static com.android.documentsui.OperationDialogFragment.DIALOG_TYPE_UNKNOWN;
-import static com.android.documentsui.Shared.DEBUG;
-
-import android.app.Activity;
-import android.app.FragmentManager;
-import android.content.ActivityNotFoundException;
-import android.content.ClipData;
-import android.content.ContentResolver;
-import android.content.ContentValues;
-import android.content.Intent;
-import android.net.Uri;
-import android.os.Bundle;
-import android.os.Parcelable;
-import android.provider.DocumentsContract;
-import android.support.design.widget.Snackbar;
-import android.util.Log;
-import android.view.KeyEvent;
-import android.view.Menu;
-import android.view.MenuItem;
-
-import com.android.documentsui.MenuManager.DirectoryDetails;
-import com.android.documentsui.OperationDialogFragment.DialogType;
-import com.android.documentsui.RecentsProvider.ResumeColumns;
-import com.android.documentsui.clipping.DocumentClipper;
-import com.android.documentsui.dirlist.AnimationView;
-import com.android.documentsui.dirlist.DirectoryFragment;
-import com.android.documentsui.dirlist.FragmentTuner;
-import com.android.documentsui.dirlist.FragmentTuner.FilesTuner;
-import com.android.documentsui.dirlist.Model;
-import com.android.documentsui.model.DocumentInfo;
-import com.android.documentsui.model.DocumentStack;
-import com.android.documentsui.model.DurableUtils;
-import com.android.documentsui.model.RootInfo;
-import com.android.documentsui.services.FileOperationService;
-
-import java.io.FileNotFoundException;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.List;
-
-/**
- * Standalone file management activity.
- */
-public class FilesActivity extends BaseActivity {
-
- public static final String TAG = "FilesActivity";
-
- // See comments where this const is referenced for details.
- private static final int DRAWER_NO_FIDDLE_DELAY = 1500;
-
- // Track the time we opened the drawer in response to back being pressed.
- // We use the time gap to figure out whether to close app or reopen the drawer.
- private long mDrawerLastFiddled;
- private DocumentClipper mClipper;
- private FilesMenuManager mMenuManager;
- private DirectoryDetails mDetails;
-
- public FilesActivity() {
- super(R.layout.files_activity, TAG);
- }
-
- @Override
- public void onCreate(Bundle icicle) {
- super.onCreate(icicle);
-
- mClipper = DocumentsApplication.getDocumentClipper(this);
- mMenuManager = new FilesMenuManager(mSearchManager, getDisplayState());
- mDetails = new DirectoryDetails(this) {
- @Override
- public boolean hasItemsToPaste() {
- return mClipper.hasItemsToPaste();
- }
- };
-
- RootsFragment.show(getFragmentManager(), this::openRootSettings);
-
- final Intent intent = getIntent();
- final Uri uri = intent.getData();
-
- if (mState.restored) {
- if (DEBUG) Log.d(TAG, "Stack already resolved for uri: " + intent.getData());
- } else if (!mState.stack.isEmpty()) {
- // If a non-empty stack is present in our state, it was read (presumably)
- // from EXTRA_STACK intent extra. In this case, we'll skip other means of
- // loading or restoring the stack (like URI).
- //
- // When restoring from a stack, if a URI is present, it should only ever be:
- // -- a launch URI: Launch URIs support sensible activity management,
- // but don't specify a real content target)
- // -- a fake Uri from notifications. These URIs have no authority (TODO: details).
- //
- // Any other URI is *sorta* unexpected...except when browsing an archive
- // in downloads.
- if(uri != null
- && uri.getAuthority() != null
- && !uri.equals(mState.stack.peek())
- && !LauncherActivity.isLaunchUri(uri)) {
- if (DEBUG) Log.w(TAG,
- "Launching with non-empty stack. Ignoring unexpected uri: " + uri);
- } else {
- if (DEBUG) Log.d(TAG, "Launching with non-empty stack.");
- }
- refreshCurrentRootAndDirectory(AnimationView.ANIM_NONE);
- } else if (Intent.ACTION_VIEW.equals(intent.getAction())) {
- assert(uri != null);
- new OpenUriForViewTask(this).executeOnExecutor(
- ProviderExecutor.forAuthority(uri.getAuthority()), uri);
- } else if (DocumentsContract.isRootUri(this, uri)) {
- if (DEBUG) Log.d(TAG, "Launching with root URI.");
- // If we've got a specific root to display, restore that root using a dedicated
- // authority. That way a misbehaving provider won't result in an ANR.
- loadRoot(uri);
- } else {
- if (DEBUG) Log.d(TAG, "All other means skipped. Launching into default directory.");
- loadRoot(getDefaultRoot());
- }
-
- final @DialogType int dialogType = intent.getIntExtra(
- FileOperationService.EXTRA_DIALOG_TYPE, DIALOG_TYPE_UNKNOWN);
- // DialogFragment takes care of restoring the dialog on configuration change.
- // Only show it manually for the first time (icicle is null).
- if (icicle == null && dialogType != DIALOG_TYPE_UNKNOWN) {
- final int opType = intent.getIntExtra(
- FileOperationService.EXTRA_OPERATION_TYPE,
- FileOperationService.OPERATION_COPY);
- final ArrayList<DocumentInfo> srcList =
- intent.getParcelableArrayListExtra(FileOperationService.EXTRA_SRC_LIST);
- OperationDialogFragment.show(
- getFragmentManager(),
- dialogType,
- srcList,
- mState.stack,
- opType);
- }
- }
-
- @Override
- void includeState(State state) {
- final Intent intent = getIntent();
-
- state.action = State.ACTION_BROWSE;
- state.allowMultiple = true;
-
- // Options specific to the DocumentsActivity.
- assert(!intent.hasExtra(Intent.EXTRA_LOCAL_ONLY));
-
- final DocumentStack stack = intent.getParcelableExtra(Shared.EXTRA_STACK);
- if (stack != null) {
- state.stack = stack;
- }
- }
-
- @Override
- protected void onPostCreate(Bundle savedInstanceState) {
- super.onPostCreate(savedInstanceState);
- // This check avoids a flicker from "Recents" to "Home".
- // Only update action bar at this point if there is an active
- // serach. Why? Because this avoid an early (undesired) load of
- // the recents root...which is the default root in other activities.
- // In Files app "Home" is the default, but it is loaded async.
- // update will be called once Home root is loaded.
- // Except while searching we need this call to ensure the
- // search bits get layed out correctly.
- if (mSearchManager.isSearching()) {
- mNavigator.update();
- }
- }
-
- @Override
- public void onResume() {
- super.onResume();
-
- final RootInfo root = getCurrentRoot();
-
- // If we're browsing a specific root, and that root went away, then we
- // have no reason to hang around.
- // TODO: Rather than just disappearing, maybe we should inform
- // the user what has happened, let them close us. Less surprising.
- if (mRoots.getRootBlocking(root.authority, root.rootId) == null) {
- finish();
- }
- }
-
- @Override
- public String getDrawerTitle() {
- Intent intent = getIntent();
- return (intent != null && intent.hasExtra(Intent.EXTRA_TITLE))
- ? intent.getStringExtra(Intent.EXTRA_TITLE)
- : getTitle().toString();
- }
-
- @Override
- public boolean onPrepareOptionsMenu(Menu menu) {
- super.onPrepareOptionsMenu(menu);
- mMenuManager.updateOptionMenu(menu, mDetails);
- return true;
- }
-
- @Override
- public boolean onOptionsItemSelected(MenuItem item) {
- switch (item.getItemId()) {
- case R.id.menu_create_dir:
- assert(canCreateDirectory());
- showCreateDirectoryDialog();
- break;
- case R.id.menu_new_window:
- createNewWindow();
- break;
- case R.id.menu_paste_from_clipboard:
- DirectoryFragment dir = getDirectoryFragment();
- if (dir != null) {
- dir.pasteFromClipboard();
- }
- break;
- case R.id.menu_settings:
- final RootInfo root = getCurrentRoot();
- openRootSettings(root);
- break;
- default:
- return super.onOptionsItemSelected(item);
- }
- return true;
- }
-
- void openRootSettings(RootInfo root) {
- Metrics.logUserAction(this, Metrics.USER_ACTION_SETTINGS);
- final Intent intent = new Intent(DocumentsContract.ACTION_DOCUMENT_ROOT_SETTINGS);
- intent.setDataAndType(root.getUri(), DocumentsContract.Root.MIME_TYPE_ITEM);
- startActivity(intent);
- }
-
- private void createNewWindow() {
- Metrics.logUserAction(this, Metrics.USER_ACTION_NEW_WINDOW);
-
- Intent intent = LauncherActivity.createLaunchIntent(this);
- intent.putExtra(Shared.EXTRA_STACK, (Parcelable) mState.stack);
-
- // With new multi-window mode we have to pick how we are launched.
- // By default we'd be launched in-place above the existing app.
- // By setting launch-to-side ActivityManager will open us to side.
- if (isInMultiWindowMode()) {
- intent.addFlags(Intent.FLAG_ACTIVITY_LAUNCH_ADJACENT);
- }
-
- startActivity(intent);
- }
-
- @Override
- void refreshDirectory(int anim) {
- final FragmentManager fm = getFragmentManager();
- final RootInfo root = getCurrentRoot();
- final DocumentInfo cwd = getCurrentDirectory();
-
- assert(!mSearchManager.isSearching());
-
- if (cwd == null) {
- DirectoryFragment.showRecentsOpen(fm, anim);
- } else {
- // Normal boring directory
- DirectoryFragment.showDirectory(fm, root, cwd, anim);
- }
- }
-
- @Override
- public void onDocumentsPicked(List<DocumentInfo> docs) {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public void onDocumentPicked(DocumentInfo doc, Model model) {
- // Anything on downloads goes through the back through downloads manager
- // (that's the MANAGE_DOCUMENT bit).
- // This is done for two reasons:
- // 1) The file in question might be a failed/queued or otherwise have some
- // specialized download handling.
- // 2) For APKs, the download manager will add on some important security stuff
- // like origin URL.
- // All other files not on downloads, event APKs, would get no benefit from this
- // treatment, thusly the "isDownloads" check.
-
- // Launch MANAGE_DOCUMENTS only for the root level files, so it's not called for
- // files in archives. Also, if the activity is already browsing a ZIP from downloads,
- // then skip MANAGE_DOCUMENTS.
- final boolean isViewing = Intent.ACTION_VIEW.equals(getIntent().getAction());
- final boolean isInArchive = mState.stack.size() > 1;
- if (getCurrentRoot().isDownloads() && !isInArchive && !isViewing) {
- // First try managing the document; we expect manager to filter
- // based on authority, so we don't grant.
- final Intent manage = new Intent(DocumentsContract.ACTION_MANAGE_DOCUMENT);
- manage.setData(doc.derivedUri);
-
- try {
- startActivity(manage);
- return;
- } catch (ActivityNotFoundException ex) {
- // fall back to regular handling below.
- }
- }
-
- if (doc.isContainer()) {
- openContainerDocument(doc);
- } else {
- openDocument(doc, model);
- }
- }
-
- @Override
- public void springOpenDirectory(DocumentInfo doc) {
- assert(doc.isContainer());
- assert(!doc.isArchive());
- openContainerDocument(doc);
- }
-
- /**
- * Launches an intent to view the specified document.
- */
- private void openDocument(DocumentInfo doc, Model model) {
- Intent intent = new QuickViewIntentBuilder(
- getPackageManager(), getResources(), doc, model).build();
-
- if (intent != null) {
- // TODO: un-work around issue b/24963914. Should be fixed soon.
- try {
- startActivity(intent);
- return;
- } catch (SecurityException e) {
- // Carry on to regular view mode.
- Log.e(TAG, "Caught security error: " + e.getLocalizedMessage());
- }
- }
-
- // Fall back to traditional VIEW action...
- intent = new Intent(Intent.ACTION_VIEW);
- intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
- intent.setData(doc.derivedUri);
-
- if (DEBUG && intent.getClipData() != null) {
- Log.d(TAG, "Starting intent w/ clip data: " + intent.getClipData());
- }
-
- try {
- startActivity(intent);
- } catch (ActivityNotFoundException e) {
- Snackbars.makeSnackbar(
- this, R.string.toast_no_application, Snackbar.LENGTH_SHORT).show();
- }
- }
-
- @Override
- public boolean onKeyShortcut(int keyCode, KeyEvent event) {
- DirectoryFragment dir;
- // TODO: All key events should be statically bound using alphabeticShortcut.
- // But not working.
- switch (keyCode) {
- case KeyEvent.KEYCODE_A:
- dir = getDirectoryFragment();
- if (dir != null) {
- dir.selectAllFiles();
- }
- return true;
- case KeyEvent.KEYCODE_X:
- dir = getDirectoryFragment();
- if (dir != null) {
- dir.cutSelectedToClipboard();
- }
- return true;
- case KeyEvent.KEYCODE_C:
- dir = getDirectoryFragment();
- if (dir != null) {
- dir.copySelectedToClipboard();
- }
- return true;
- case KeyEvent.KEYCODE_V:
- dir = getDirectoryFragment();
- if (dir != null) {
- dir.pasteFromClipboard();
- }
- return true;
- default:
- return super.onKeyShortcut(keyCode, event);
- }
- }
-
- // Do some "do what a I want" drawer fiddling, but don't
- // do it if user already hit back recently and we recently
- // did some fiddling.
- @Override
- boolean onBeforePopDir() {
- int size = mState.stack.size();
-
- if (mDrawer.isPresent()
- && (System.currentTimeMillis() - mDrawerLastFiddled) > DRAWER_NO_FIDDLE_DELAY) {
- // Close drawer if it is open.
- if (mDrawer.isOpen()) {
- mDrawer.setOpen(false);
- mDrawerLastFiddled = System.currentTimeMillis();
- return true;
- }
-
- // Open the Close drawer if it is closed and we're at the top of a root.
- if (size <= 1) {
- mDrawer.setOpen(true);
- // Remember so we don't just close it again if back is pressed again.
- mDrawerLastFiddled = System.currentTimeMillis();
- return true;
- }
- }
-
- return false;
- }
-
- // Turns out only DocumentsActivity was ever calling saveStackBlocking.
- // There may be a case where we want to contribute entries from
- // Behavior here in FilesActivity, but it isn't yet obvious.
- // TODO: Contribute to recents, or remove this.
- void writeStackToRecentsBlocking() {
- final ContentResolver resolver = getContentResolver();
- final ContentValues values = new ContentValues();
-
- final byte[] rawStack = DurableUtils.writeToArrayOrNull(mState.stack);
-
- // Remember location for next app launch
- final String packageName = getCallingPackageMaybeExtra();
- values.clear();
- values.put(ResumeColumns.STACK, rawStack);
- values.put(ResumeColumns.EXTERNAL, 0);
- resolver.insert(RecentsProvider.buildResume(packageName), values);
- }
-
- @Override
- void onTaskFinished(Uri... uris) {
- if (DEBUG) Log.d(TAG, "onFinished() " + Arrays.toString(uris));
-
- final Intent intent = new Intent();
- if (uris.length == 1) {
- intent.setData(uris[0]);
- } else if (uris.length > 1) {
- final ClipData clipData = new ClipData(
- null, mState.acceptMimes, new ClipData.Item(uris[0]));
- for (int i = 1; i < uris.length; i++) {
- clipData.addItem(new ClipData.Item(uris[i]));
- }
- intent.setClipData(clipData);
- }
-
- intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION
- | Intent.FLAG_GRANT_WRITE_URI_PERMISSION
- | Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION);
-
- setResult(Activity.RESULT_OK, intent);
- finish();
- }
-
- @Override
- public FragmentTuner createFragmentTuner() {
- return new FilesTuner(this, getDisplayState());
- }
-
- @Override
- public MenuManager getMenuManager() {
- return mMenuManager;
- }
-
- @Override
- public DirectoryDetails getDirectoryDetails() {
- return mDetails;
- }
-
- /**
- * Builds a stack for the specific Uris. Multi roots are not supported, as it's impossible
- * to know which root to select. Also, the stack doesn't contain intermediate directories.
- * It's primarly used for opening ZIP archives from Downloads app.
- */
- private static final class OpenUriForViewTask extends PairedTask<FilesActivity, Uri, Void> {
-
- private final State mState;
- public OpenUriForViewTask(FilesActivity activity) {
- super(activity);
- mState = activity.mState;
- }
-
- @Override
- public Void run(Uri... params) {
- final Uri uri = params[0];
-
- final RootsCache rootsCache = DocumentsApplication.getRootsCache(mOwner);
- final String authority = uri.getAuthority();
-
- final Collection<RootInfo> roots =
- rootsCache.getRootsForAuthorityBlocking(authority);
- if (roots.isEmpty()) {
- Log.e(TAG, "Failed to find root for the requested Uri: " + uri);
- return null;
- }
-
- final RootInfo root = roots.iterator().next();
- mState.stack.root = root;
- try {
- mState.stack.add(DocumentInfo.fromUri(mOwner.getContentResolver(), uri));
- } catch (FileNotFoundException e) {
- Log.e(TAG, "Failed to resolve DocumentInfo from Uri: " + uri);
- }
- mState.stack.add(root.getRootDocumentBlocking(mOwner));
- return null;
- }
-
- @Override
- public void finish(Void result) {
- mOwner.refreshCurrentRootAndDirectory(AnimationView.ANIM_NONE);
- }
- }
-}
diff --git a/packages/DocumentsUI/src/com/android/documentsui/FilesMenuManager.java b/packages/DocumentsUI/src/com/android/documentsui/FilesMenuManager.java
deleted file mode 100644
index a7e4905..0000000
--- a/packages/DocumentsUI/src/com/android/documentsui/FilesMenuManager.java
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.documentsui;
-
-import android.view.Menu;
-import android.view.MenuItem;
-
-import com.android.documentsui.model.RootInfo;
-
-final class FilesMenuManager extends MenuManager {
-
- public FilesMenuManager(SearchViewManager searchManager, State displayState) {
- super(searchManager, displayState);
- }
-
- @Override
- public void updateOptionMenu(Menu menu, DirectoryDetails details) {
- super.updateOptionMenu(menu, details);
-
- // It hides icon if searching in progress
- mSearchManager.updateMenu();
- }
-
- @Override
- void updateSettings(MenuItem settings, RootInfo root) {
- settings.setVisible(true);
- settings.setEnabled(root.hasSettings());
- }
-
- @Override
- void updateEject(MenuItem eject, RootInfo root) {
- eject.setVisible(true);
- eject.setEnabled(root.supportsEject() && !root.ejecting);
- }
-
- @Override
- void updateSettings(MenuItem settings, DirectoryDetails directoryDetails) {
- settings.setVisible(directoryDetails.hasRootSettings());
- }
-
- @Override
- void updateNewWindow(MenuItem newWindow, DirectoryDetails directoryDetails) {
- newWindow.setVisible(directoryDetails.shouldShowFancyFeatures());
- }
-
- @Override
- void updateMoveTo(MenuItem moveTo, SelectionDetails selectionDetails) {
- moveTo.setVisible(true);
- moveTo.setEnabled(!selectionDetails.containsPartialFiles() && selectionDetails.canDelete());
- }
-
- @Override
- void updateCopyTo(MenuItem copyTo, SelectionDetails selectionDetails) {
- copyTo.setVisible(true);
- copyTo.setEnabled(!selectionDetails.containsPartialFiles());
- }
-
- @Override
- void updateSelectAll(MenuItem selectAll, SelectionDetails selectionDetails) {
- selectAll.setVisible(true);
- }
-
- @Override
- void updateCreateDir(MenuItem createDir, DirectoryDetails directoryDetails) {
- createDir.setVisible(true);
- createDir.setEnabled(directoryDetails.canCreateDirectory());
- }
-
- @Override
- void updateShare(MenuItem share, SelectionDetails selectionDetails) {
- share.setVisible(!selectionDetails.containsDirectories()
- && !selectionDetails.containsPartialFiles());
- }
-
- @Override
- void updateDelete(MenuItem delete, SelectionDetails selectionDetails) {
- delete.setVisible(selectionDetails.canDelete());
- }
-
- @Override
- void updateRename(MenuItem rename, SelectionDetails selectionDetails) {
- rename.setVisible(true);
- rename.setEnabled(!selectionDetails.containsPartialFiles() && selectionDetails.canRename());
- }
-}
\ No newline at end of file
diff --git a/packages/DocumentsUI/src/com/android/documentsui/FilteringCursorWrapper.java b/packages/DocumentsUI/src/com/android/documentsui/FilteringCursorWrapper.java
deleted file mode 100644
index 7426af5..0000000
--- a/packages/DocumentsUI/src/com/android/documentsui/FilteringCursorWrapper.java
+++ /dev/null
@@ -1,139 +0,0 @@
-/*
- * 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.
- */
-
-package com.android.documentsui;
-
-import static com.android.documentsui.Shared.DEBUG;
-import static com.android.documentsui.Shared.TAG;
-import static com.android.documentsui.model.DocumentInfo.getCursorLong;
-import static com.android.documentsui.model.DocumentInfo.getCursorString;
-
-import android.database.AbstractCursor;
-import android.database.Cursor;
-import android.os.Bundle;
-import android.provider.DocumentsContract.Document;
-import android.util.Log;
-
-/**
- * Cursor wrapper that filters MIME types not matching given list.
- */
-public class FilteringCursorWrapper extends AbstractCursor {
- private final Cursor mCursor;
-
- private final int[] mPosition;
- private int mCount;
-
- public FilteringCursorWrapper(Cursor cursor, String[] acceptMimes) {
- this(cursor, acceptMimes, null, Long.MIN_VALUE);
- }
-
- public FilteringCursorWrapper(Cursor cursor, String[] acceptMimes, String[] rejectMimes) {
- this(cursor, acceptMimes, rejectMimes, Long.MIN_VALUE);
- }
-
- public FilteringCursorWrapper(
- Cursor cursor, String[] acceptMimes, String[] rejectMimes, long rejectBefore) {
- mCursor = cursor;
-
- final int count = cursor.getCount();
- mPosition = new int[count];
-
- cursor.moveToPosition(-1);
- while (cursor.moveToNext() && mCount < count) {
- final String mimeType = getCursorString(cursor, Document.COLUMN_MIME_TYPE);
- final long lastModified = getCursorLong(cursor, Document.COLUMN_LAST_MODIFIED);
- if (rejectMimes != null && MimePredicate.mimeMatches(rejectMimes, mimeType)) {
- continue;
- }
- if (lastModified < rejectBefore) {
- continue;
- }
- if (MimePredicate.mimeMatches(acceptMimes, mimeType)) {
- mPosition[mCount++] = cursor.getPosition();
- }
- }
-
- if (DEBUG && mCount != cursor.getCount()) {
- Log.d(TAG, "Before filtering " + cursor.getCount() + ", after " + mCount);
- }
- }
-
- @Override
- public Bundle getExtras() {
- return mCursor.getExtras();
- }
-
- @Override
- public void close() {
- super.close();
- mCursor.close();
- }
-
- @Override
- public boolean onMove(int oldPosition, int newPosition) {
- return mCursor.moveToPosition(mPosition[newPosition]);
- }
-
- @Override
- public String[] getColumnNames() {
- return mCursor.getColumnNames();
- }
-
- @Override
- public int getCount() {
- return mCount;
- }
-
- @Override
- public double getDouble(int column) {
- return mCursor.getDouble(column);
- }
-
- @Override
- public float getFloat(int column) {
- return mCursor.getFloat(column);
- }
-
- @Override
- public int getInt(int column) {
- return mCursor.getInt(column);
- }
-
- @Override
- public long getLong(int column) {
- return mCursor.getLong(column);
- }
-
- @Override
- public short getShort(int column) {
- return mCursor.getShort(column);
- }
-
- @Override
- public String getString(int column) {
- return mCursor.getString(column);
- }
-
- @Override
- public int getType(int column) {
- return mCursor.getType(column);
- }
-
- @Override
- public boolean isNull(int column) {
- return mCursor.isNull(column);
- }
-}
diff --git a/packages/DocumentsUI/src/com/android/documentsui/GridItemThumbnail.java b/packages/DocumentsUI/src/com/android/documentsui/GridItemThumbnail.java
deleted file mode 100644
index 38d6d72..0000000
--- a/packages/DocumentsUI/src/com/android/documentsui/GridItemThumbnail.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.documentsui;
-
-import android.content.Context;
-import android.util.AttributeSet;
-import android.widget.ImageView;
-
-/**
- * Ensures that grid thumbnails are always square.
- */
-public class GridItemThumbnail extends ImageView {
- public GridItemThumbnail(Context context) {
- super(context);
- }
-
- public GridItemThumbnail(Context context, AttributeSet attrs) {
- super(context, attrs);
- }
-
- public GridItemThumbnail(Context context, AttributeSet attrs, int defStyle) {
- super(context, attrs, defStyle);
- }
-
- @Override
- public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
- // Grid layout uses item width to figure out the number of columns, then dynamically fits
- // rows into the view. The upshot of this is that changing the item width will mess up the
- // grid layout - so to make the items square, throw out the height and use the width for
- // both dimensions. The grid layout will correctly adjust the row height.
- //
- // Note that this code will need to be changed if the layout manager's orientation is
- // changed from VERTICAL to HORIZONTAL.
- super.onMeasure(widthMeasureSpec, widthMeasureSpec);
- }
-}
diff --git a/packages/DocumentsUI/src/com/android/documentsui/HorizontalBreadcrumb.java b/packages/DocumentsUI/src/com/android/documentsui/HorizontalBreadcrumb.java
deleted file mode 100644
index 7a08071..0000000
--- a/packages/DocumentsUI/src/com/android/documentsui/HorizontalBreadcrumb.java
+++ /dev/null
@@ -1,258 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.documentsui;
-
-import android.content.Context;
-import android.support.v7.widget.LinearLayoutManager;
-import android.support.v7.widget.RecyclerView;
-import android.util.AttributeSet;
-import android.view.GestureDetector;
-import android.view.LayoutInflater;
-import android.view.MotionEvent;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.ImageView;
-
-import com.android.documentsui.NavigationViewManager.Breadcrumb;
-import com.android.documentsui.NavigationViewManager.Environment;
-import com.android.documentsui.model.DocumentInfo;
-import com.android.documentsui.model.RootInfo;
-
-import java.util.function.Consumer;
-
-/**
- * Horizontal implementation of breadcrumb used for tablet / desktop device layouts
- */
-public final class HorizontalBreadcrumb extends RecyclerView
- implements Breadcrumb, ItemDragListener.DragHost {
-
- private static final int USER_NO_SCROLL_OFFSET_THRESHOLD = 5;
-
- private LinearLayoutManager mLayoutManager;
- private BreadcrumbAdapter mAdapter;
- private Consumer<Integer> mListener;
-
- public HorizontalBreadcrumb(Context context, AttributeSet attrs, int defStyleAttr) {
- super(context, attrs, defStyleAttr);
- }
-
- public HorizontalBreadcrumb(Context context, AttributeSet attrs) {
- super(context, attrs);
- }
-
- public HorizontalBreadcrumb(Context context) {
- super(context);
- }
-
- @Override
- public void setup(Environment env,
- com.android.documentsui.State state,
- Consumer<Integer> listener) {
-
- mListener = listener;
- mLayoutManager = new LinearLayoutManager(
- getContext(), LinearLayoutManager.HORIZONTAL, false);
- mAdapter = new BreadcrumbAdapter(
- state, env, new ItemDragListener<>(this));
-
- setLayoutManager(mLayoutManager);
- addOnItemTouchListener(new ClickListener(getContext(), this::onSingleTapUp));
- }
-
- @Override
- public void show(boolean visibility) {
- if (visibility) {
- setVisibility(VISIBLE);
- boolean shouldScroll = !hasUserDefineScrollOffset();
- if (getAdapter() == null) {
- setAdapter(mAdapter);
- } else {
- int currentItemCount = mAdapter.getItemCount();
- int lastItemCount = mAdapter.getLastItemSize();
- if (currentItemCount > lastItemCount) {
- mAdapter.notifyItemRangeInserted(lastItemCount,
- currentItemCount - lastItemCount);
- mAdapter.notifyItemChanged(lastItemCount - 1);
- } else if (currentItemCount < lastItemCount) {
- mAdapter.notifyItemRangeRemoved(currentItemCount,
- lastItemCount - currentItemCount);
- mAdapter.notifyItemChanged(currentItemCount - 1);
- }
- }
- if (shouldScroll) {
- mLayoutManager.scrollToPosition(mAdapter.getItemCount() - 1);
- }
- } else {
- setVisibility(GONE);
- setAdapter(null);
- }
- mAdapter.updateLastItemSize();
- }
-
- private boolean hasUserDefineScrollOffset() {
- final int maxOffset = computeHorizontalScrollRange() - computeHorizontalScrollExtent();
- return (maxOffset - computeHorizontalScrollOffset() > USER_NO_SCROLL_OFFSET_THRESHOLD);
- }
-
- @Override
- public void postUpdate() {
- }
-
- @Override
- public void runOnUiThread(Runnable runnable) {
- post(runnable);
- }
-
- @Override
- public void setDropTargetHighlight(View v, boolean highlight) {
- RecyclerView.ViewHolder vh = getChildViewHolder(v);
- if (vh instanceof BreadcrumbHolder) {
- ((BreadcrumbHolder) vh).setHighlighted(highlight);
- }
- }
-
- @Override
- public void onViewHovered(View v) {
- int pos = getChildAdapterPosition(v);
- if (pos != mAdapter.getItemCount() - 1) {
- mListener.accept(pos);
- }
- }
-
- private void onSingleTapUp(MotionEvent e) {
- View itemView = findChildViewUnder(e.getX(), e.getY());
- int pos = getChildAdapterPosition(itemView);
- if (pos != mAdapter.getItemCount() - 1) {
- mListener.accept(pos);
- }
- }
-
- private static final class BreadcrumbAdapter
- extends RecyclerView.Adapter<BreadcrumbHolder> {
-
- private final Environment mEnv;
- private final com.android.documentsui.State mState;
- private final OnDragListener mDragListener;
- // We keep the old item size so the breadcrumb will only re-render views that are necessary
- private int mLastItemSize;
-
- public BreadcrumbAdapter(com.android.documentsui.State state,
- Environment env,
- OnDragListener dragListener) {
- mState = state;
- mEnv = env;
- mDragListener = dragListener;
- mLastItemSize = mState.stack.size();
- }
-
- @Override
- public BreadcrumbHolder onCreateViewHolder(ViewGroup parent, int viewType) {
- View v = LayoutInflater.from(parent.getContext())
- .inflate(R.layout.navigation_breadcrumb_item, null);
- return new BreadcrumbHolder(v);
- }
-
- @Override
- public void onBindViewHolder(BreadcrumbHolder holder, int position) {
- final DocumentInfo doc = getItem(position);
- final int horizontalPadding = (int) holder.itemView.getResources()
- .getDimension(R.dimen.breadcrumb_item_padding);
-
- if (position == 0) {
- final RootInfo root = mEnv.getCurrentRoot();
- holder.title.setText(root.title);
- holder.title.setPadding(0, 0, horizontalPadding, 0);
- } else {
- holder.title.setText(doc.displayName);
- holder.title.setPadding(horizontalPadding, 0, horizontalPadding, 0);
- }
-
- if (position == getItemCount() - 1) {
- holder.arrow.setVisibility(View.GONE);
- } else {
- holder.arrow.setVisibility(View.VISIBLE);
- }
- holder.itemView.setOnDragListener(mDragListener);
- }
-
- private DocumentInfo getItem(int position) {
- return mState.stack.get(mState.stack.size() - position - 1);
- }
-
- @Override
- public int getItemCount() {
- return mState.stack.size();
- }
-
- public int getLastItemSize() {
- return mLastItemSize;
- }
-
- public void updateLastItemSize() {
- mLastItemSize = mState.stack.size();
- }
- }
-
- private static class BreadcrumbHolder extends RecyclerView.ViewHolder {
-
- protected DragOverTextView title;
- protected ImageView arrow;
-
- public BreadcrumbHolder(View itemView) {
- super(itemView);
- title = (DragOverTextView) itemView.findViewById(R.id.breadcrumb_text);
- arrow = (ImageView) itemView.findViewById(R.id.breadcrumb_arrow);
- }
-
- /**
- * Highlights the associated item view.
- * @param highlighted
- */
- public void setHighlighted(boolean highlighted) {
- title.setHighlight(highlighted);
- }
- }
-
- private static final class ClickListener extends GestureDetector
- implements OnItemTouchListener {
-
- public ClickListener(Context context, Consumer<MotionEvent> listener) {
- super(context, new SimpleOnGestureListener() {
- @Override
- public boolean onSingleTapUp(MotionEvent e) {
- listener.accept(e);
- return true;
- }
- });
- }
-
- @Override
- public boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e) {
- onTouchEvent(e);
- return false;
- }
-
- @Override
- public void onTouchEvent(RecyclerView rv, MotionEvent e) {
- onTouchEvent(e);
- }
-
- @Override
- public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) {
- }
- }
-}
diff --git a/packages/DocumentsUI/src/com/android/documentsui/IconUtils.java b/packages/DocumentsUI/src/com/android/documentsui/IconUtils.java
deleted file mode 100644
index 177ba0d..0000000
--- a/packages/DocumentsUI/src/com/android/documentsui/IconUtils.java
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * 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.
- */
-
-package com.android.documentsui;
-
-import android.content.Context;
-import android.content.pm.PackageManager;
-import android.content.pm.ProviderInfo;
-import android.graphics.drawable.Drawable;
-import android.provider.DocumentsContract.Document;
-import android.util.TypedValue;
-
-public class IconUtils {
- public static Drawable loadPackageIcon(Context context, String authority, int icon) {
- if (icon != 0) {
- if (authority != null) {
- final PackageManager pm = context.getPackageManager();
- final ProviderInfo info = pm.resolveContentProvider(authority, 0);
- if (info != null) {
- return pm.getDrawable(info.packageName, icon, info.applicationInfo);
- }
- } else {
- return context.getDrawable(icon);
- }
- }
- return null;
- }
-
- public static Drawable loadMimeIcon(
- Context context, String mimeType, String authority, String docId, int mode) {
- if (Document.MIME_TYPE_DIR.equals(mimeType)) {
- // TODO: eventually move these hacky assets into that package
- if ("com.android.providers.media.documents".equals(authority)
- && docId.startsWith("album")) {
- return context.getDrawable(R.drawable.ic_doc_album);
- }
-
- if (mode == State.MODE_GRID) {
- return context.getDrawable(R.drawable.ic_grid_folder);
- } else {
- return context.getDrawable(com.android.internal.R.drawable.ic_doc_folder);
- }
- }
-
- return loadMimeIcon(context, mimeType);
- }
-
- public static Drawable loadMimeIcon(Context context, String mimeType) {
- return context.getContentResolver().getTypeDrawable(mimeType);
- }
-
- public static Drawable applyTintColor(Context context, int drawableId, int tintColorId) {
- final Drawable icon = context.getDrawable(drawableId);
- icon.mutate();
- icon.setTintList(context.getColorStateList(tintColorId));
- return icon;
- }
-
- public static Drawable applyTintAttr(Context context, int drawableId, int tintAttrId) {
- final TypedValue outValue = new TypedValue();
- context.getTheme().resolveAttribute(tintAttrId, outValue, true);
- return applyTintColor(context, drawableId, outValue.resourceId);
- }
-}
diff --git a/packages/DocumentsUI/src/com/android/documentsui/ItemDragListener.java b/packages/DocumentsUI/src/com/android/documentsui/ItemDragListener.java
deleted file mode 100644
index 152d3a0..0000000
--- a/packages/DocumentsUI/src/com/android/documentsui/ItemDragListener.java
+++ /dev/null
@@ -1,161 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.documentsui;
-
-import android.content.ClipData;
-import android.graphics.drawable.Drawable;
-import android.util.Log;
-import android.view.DragEvent;
-import android.view.View;
-import android.view.View.OnDragListener;
-
-import com.android.documentsui.ItemDragListener.DragHost;
-import com.android.internal.annotations.VisibleForTesting;
-
-import java.util.Timer;
-import java.util.TimerTask;
-
-/**
- * An {@link OnDragListener} that adds support for "spring loading views". Use this when you want
- * items to pop-open when user hovers on them during a drag n drop.
- */
-public class ItemDragListener<H extends DragHost> implements OnDragListener {
-
- private static final String TAG = "ItemDragListener";
-
- @VisibleForTesting
- static final int SPRING_TIMEOUT = 1000;
-
- protected final H mDragHost;
- private final Timer mHoverTimer;
-
- public ItemDragListener(H dragHost) {
- this(dragHost, new Timer());
- }
-
- @VisibleForTesting
- protected ItemDragListener(H dragHost, Timer timer) {
- mDragHost = dragHost;
- mHoverTimer = timer;
- }
-
- @Override
- public boolean onDrag(final View v, DragEvent event) {
- switch (event.getAction()) {
- case DragEvent.ACTION_DRAG_STARTED:
- return true;
- case DragEvent.ACTION_DRAG_ENTERED:
- handleEnteredEvent(v);
- return true;
- case DragEvent.ACTION_DRAG_LOCATION:
- handleLocationEvent(v, event.getX(), event.getY());
- return true;
- case DragEvent.ACTION_DRAG_EXITED:
- case DragEvent.ACTION_DRAG_ENDED:
- handleExitedEndedEvent(v);
- return true;
- case DragEvent.ACTION_DROP:
- return handleDropEvent(v, event);
- }
-
- return false;
- }
-
- private void handleEnteredEvent(View v) {
- mDragHost.setDropTargetHighlight(v, true);
-
- TimerTask task = createOpenTask(v);
- assert (task != null);
- v.setTag(R.id.drag_hovering_tag, task);
- mHoverTimer.schedule(task, SPRING_TIMEOUT);
- }
-
- private void handleLocationEvent(View v, float x, float y) {
- Drawable background = v.getBackground();
- if (background != null) {
- background.setHotspot(x, y);
- }
- }
-
- private void handleExitedEndedEvent(View v) {
- mDragHost.setDropTargetHighlight(v, false);
-
- TimerTask task = (TimerTask) v.getTag(R.id.drag_hovering_tag);
- if (task != null) {
- task.cancel();
- }
- }
-
- private boolean handleDropEvent(View v, DragEvent event) {
- ClipData clipData = event.getClipData();
- if (clipData == null) {
- Log.w(TAG, "Received invalid drop event with null clipdata. Ignoring.");
- return false;
- }
-
- return handleDropEventChecked(v, event);
- }
-
- @VisibleForTesting
- TimerTask createOpenTask(final View v) {
- TimerTask task = new TimerTask() {
- @Override
- public void run() {
- mDragHost.runOnUiThread(() -> {
- mDragHost.onViewHovered(v);
- });
- }
- };
- return task;
- }
-
- /**
- * Handles a drop event. Override it if you want to do something on drop event. It's called when
- * {@link DragEvent#ACTION_DROP} happens. ClipData in DragEvent is guaranteed not null.
- *
- * @param v The view where user drops.
- * @param event the drag event.
- * @return true if this event is consumed; false otherwise
- */
- public boolean handleDropEventChecked(View v, DragEvent event) {
- return false; // we didn't handle the drop
- }
-
- /**
- * An interface {@link ItemDragListener} uses to make some callbacks.
- */
- public interface DragHost {
-
- /**
- * Runs this runnable in main thread.
- */
- void runOnUiThread(Runnable runnable);
-
- /**
- * Highlights/unhighlights the view to visually indicate this view is being hovered.
- * @param v the view being hovered
- * @param highlight true if highlight the view; false if unhighlight it
- */
- void setDropTargetHighlight(View v, boolean highlight);
-
- /**
- * Notifies hovering timeout has elapsed
- * @param v the view being hovered
- */
- void onViewHovered(View v);
- }
-}
diff --git a/packages/DocumentsUI/src/com/android/documentsui/LauncherActivity.java b/packages/DocumentsUI/src/com/android/documentsui/LauncherActivity.java
deleted file mode 100644
index 5e27e78..0000000
--- a/packages/DocumentsUI/src/com/android/documentsui/LauncherActivity.java
+++ /dev/null
@@ -1,136 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.documentsui;
-
-import static com.android.documentsui.Shared.DEBUG;
-
-import android.app.Activity;
-import android.app.ActivityManager;
-import android.app.ActivityManager.AppTask;
-import android.content.Context;
-import android.content.Intent;
-import android.net.Uri;
-import android.os.Bundle;
-import android.provider.DocumentsContract;
-import android.support.annotation.Nullable;
-import android.util.Log;
-
-import java.util.List;
-
-/**
- * Provides FilesActivity task grouping support. This allows multiple FilesActivities to be
- * launched (a behavior imparted by way of {@code documentLaunchMode="intoExisting"} and
- * our use of pseudo document {@link Uri}s. This also lets us move an existing task
- * to the foreground when a suitable task exists.
- *
- * Requires that {@code documentLaunchMode="intoExisting"} be set on target activity.
- *
- */
-public class LauncherActivity extends Activity {
-
- private static final String LAUNCH_CONTROL_AUTHORITY = "com.android.documentsui.launchControl";
- private static final String TAG = "LauncherActivity";
-
- // Array of boolean extras that should be copied when creating new launch intents.
- // Missing intents will be ignored.
- private static final String[] PERSISTENT_BOOLEAN_EXTRAS = {
- DocumentsContract.EXTRA_SHOW_FILESIZE,
- DocumentsContract.EXTRA_SHOW_ADVANCED,
- DocumentsContract.EXTRA_FANCY_FEATURES,
- Shared.EXTRA_PRODUCTIVITY_MODE
- };
-
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
-
- ActivityManager activities = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
-
- Intent intent = findTask(activities);
- if (intent != null) {
- restoreTask(intent);
- } else {
- startTask();
- }
-
- finish();
- }
-
- private @Nullable Intent findTask(ActivityManager activities) {
- List<AppTask> tasks = activities.getAppTasks();
- for (AppTask task : tasks) {
- Intent intent = task.getTaskInfo().baseIntent;
- Uri uri = intent.getData();
- if (isLaunchUri(uri)) {
- return intent;
- }
- }
- return null;
- }
-
- private void startTask() {
- Intent intent = createLaunchIntent(this);
-
- // Forward any flags from the original intent.
- intent.setFlags(getIntent().getFlags());
- if (DEBUG) Log.d(TAG, "Starting new task > " + intent.getData());
- startActivity(intent);
- }
-
- private void restoreTask(Intent intent) {
- if (DEBUG) Log.d(TAG, "Restoring existing task > " + intent.getData());
- // TODO: This doesn't appear to restore a task once it has stopped running.
- startActivity(intent);
- }
-
- static final Intent createLaunchIntent(Activity activity) {
- Intent intent = new Intent(activity, FilesActivity.class);
- intent.setData(buildLaunchUri());
-
- // Relay any config overrides bits present in the original intent.
- Intent original = activity.getIntent();
- if (original != null) {
- copyExtras(original, intent);
- if (original.hasExtra(Intent.EXTRA_TITLE)) {
- intent.putExtra(
- Intent.EXTRA_TITLE,
- original.getStringExtra(Intent.EXTRA_TITLE));
- }
- }
- return intent;
- }
-
- private static void copyExtras(Intent src, Intent dest) {
- for (String extra : PERSISTENT_BOOLEAN_EXTRAS) {
- if (src.hasExtra(extra)) {
- dest.putExtra(extra, src.getBooleanExtra(extra, false));
- }
- }
- }
-
- private static Uri buildLaunchUri() {
- return new Uri.Builder()
- .authority(LAUNCH_CONTROL_AUTHORITY)
- .fragment(String.valueOf(System.currentTimeMillis()))
- .build();
- }
-
- static boolean isLaunchUri(@Nullable Uri uri) {
- boolean result = uri != null && LAUNCH_CONTROL_AUTHORITY.equals(uri.getAuthority());
- return result;
- }
-}
diff --git a/packages/DocumentsUI/src/com/android/documentsui/ListItem.java b/packages/DocumentsUI/src/com/android/documentsui/ListItem.java
deleted file mode 100644
index 6d6f21e..0000000
--- a/packages/DocumentsUI/src/com/android/documentsui/ListItem.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.documentsui;
-
-import android.content.Context;
-import android.graphics.Rect;
-import android.util.AttributeSet;
-import android.util.TypedValue;
-import android.widget.LinearLayout;
-
-/**
- * Layout for a single item in List mode. This class overrides the default focus listener in order
- * to light up a focus indicator when it is focused.
- */
-public class ListItem extends LinearLayout
-{
- public ListItem(Context context) {
- super(context);
- }
-
- public ListItem(Context context, AttributeSet attrs) {
- super(context, attrs);
- }
-
- @Override
- protected void onFocusChanged(boolean gainFocus, int direction, Rect previouslyFocusedRect) {
- TypedValue color = new TypedValue();
- int colorId = gainFocus ? android.R.attr.colorAccent : android.R.color.transparent;
- getContext().getTheme().resolveAttribute(colorId, color, true);
-
- findViewById(R.id.focus_indicator).setBackgroundColor(color.data);
- super.onFocusChanged(gainFocus, direction, previouslyFocusedRect);
- }
-}
diff --git a/packages/DocumentsUI/src/com/android/documentsui/LoadRootTask.java b/packages/DocumentsUI/src/com/android/documentsui/LoadRootTask.java
deleted file mode 100644
index c5d359b..0000000
--- a/packages/DocumentsUI/src/com/android/documentsui/LoadRootTask.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.documentsui;
-
-import android.net.Uri;
-import android.provider.DocumentsContract;
-import android.util.Log;
-
-import com.android.documentsui.model.RootInfo;
-
-final class LoadRootTask extends PairedTask<BaseActivity, Void, RootInfo> {
- private static final String TAG = "RestoreRootTask";
-
- private final Uri mRootUri;
-
- public LoadRootTask(BaseActivity activity, Uri rootUri) {
- super(activity);
- mRootUri = rootUri;
- }
-
- @Override
- protected RootInfo run(Void... params) {
- String rootId = DocumentsContract.getRootId(mRootUri);
- return mOwner.mRoots.getRootOneshot(mRootUri.getAuthority(), rootId);
- }
-
- @Override
- protected void finish(RootInfo root) {
- mOwner.mState.restored = true;
-
- if (root != null) {
- mOwner.onRootPicked(root);
- } else {
- Log.w(TAG, "Failed to find root: " + mRootUri);
- mOwner.finish();
- }
- }
-}
diff --git a/packages/DocumentsUI/src/com/android/documentsui/LocalPreferences.java b/packages/DocumentsUI/src/com/android/documentsui/LocalPreferences.java
deleted file mode 100644
index d2e9885..0000000
--- a/packages/DocumentsUI/src/com/android/documentsui/LocalPreferences.java
+++ /dev/null
@@ -1,118 +0,0 @@
-/*
- * 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.
- */
-
-package com.android.documentsui;
-
-import static com.android.documentsui.State.MODE_UNKNOWN;
-
-import android.annotation.IntDef;
-import android.annotation.Nullable;
-import android.content.Context;
-import android.content.SharedPreferences;
-import android.os.UserHandle;
-import android.preference.PreferenceManager;
-
-import com.android.documentsui.State.ActionType;
-import com.android.documentsui.State.ViewMode;
-import com.android.documentsui.model.RootInfo;
-
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-
-public class LocalPreferences {
- private static final String KEY_FILE_SIZE = "fileSize";
- private static final String INCLUDE_DEVICE_ROOT = "includeDeviceRoot-";
- private static final String ROOT_VIEW_MODE_PREFIX = "rootViewMode-";
-
- public static boolean getDisplayFileSize(Context context) {
- return getPrefs(context).getBoolean(KEY_FILE_SIZE, false);
- }
-
- public static @ViewMode int getViewMode(Context context, RootInfo root,
- @ViewMode int fallback) {
- return getPrefs(context).getInt(createKey(root), fallback);
- }
-
- public static void setDisplayFileSize(Context context, boolean display) {
- getPrefs(context).edit().putBoolean(KEY_FILE_SIZE, display).apply();
- }
-
- public static boolean getShowDeviceRoot(Context context, @ActionType int action) {
- return getPrefs(context).getBoolean(INCLUDE_DEVICE_ROOT + action, false);
- }
-
- public static void setShowDeviceRoot(
- Context context, @ActionType int action, boolean display) {
- getPrefs(context).edit().putBoolean(INCLUDE_DEVICE_ROOT + action, display).apply();
- }
-
- public static void setViewMode(Context context, RootInfo root, @ViewMode int viewMode) {
- assert(viewMode != MODE_UNKNOWN);
- getPrefs(context).edit().putInt(createKey(root), viewMode).apply();
- }
-
- private static SharedPreferences getPrefs(Context context) {
- return PreferenceManager.getDefaultSharedPreferences(context);
- }
-
- private static String createKey(RootInfo root) {
- return ROOT_VIEW_MODE_PREFIX + root.authority + root.rootId;
- }
-
- public static final int PERMISSION_ASK = 0;
- public static final int PERMISSION_ASK_AGAIN = 1;
- public static final int PERMISSION_NEVER_ASK = -1;
-
- @IntDef(flag = true, value = {
- PERMISSION_ASK,
- PERMISSION_ASK_AGAIN,
- PERMISSION_NEVER_ASK,
- })
- @Retention(RetentionPolicy.SOURCE)
- public @interface PermissionStatus {}
-
- /**
- * Methods below are used to keep track of denied user requests on scoped directory access so
- * the dialog is not offered when user checked the 'Do not ask again' box
- *
- * <p>It uses a shared preferences, whose key is:
- * <ol>
- * <li>{@code USER_ID|PACKAGE_NAME|VOLUME_UUID|DIRECTORY} for storage volumes that have a UUID
- * (typically physical volumes like SD cards).
- * <li>{@code USER_ID|PACKAGE_NAME||DIRECTORY} for storage volumes that do not have a UUID
- * (typically the emulated volume used for primary storage
- * </ol>
- */
- static @PermissionStatus int getScopedAccessPermissionStatus(Context context,
- String packageName, @Nullable String uuid, String directory) {
- final String key = getScopedAccessDenialsKey(packageName, uuid, directory);
- return getPrefs(context).getInt(key, PERMISSION_ASK);
- }
-
- static void setScopedAccessPermissionStatus(Context context, String packageName,
- @Nullable String uuid, String directory, @PermissionStatus int status) {
- final String key = getScopedAccessDenialsKey(packageName, uuid, directory);
- getPrefs(context).edit().putInt(key, status).apply();
- }
-
- private static String getScopedAccessDenialsKey(String packageName, String uuid,
- String directory) {
- final int userId = UserHandle.myUserId();
- return uuid == null
- ? userId + "|" + packageName + "||" + directory
- : userId + "|" + packageName + "|" + uuid + "|" + directory;
- }
-}
diff --git a/packages/DocumentsUI/src/com/android/documentsui/MenuManager.java b/packages/DocumentsUI/src/com/android/documentsui/MenuManager.java
deleted file mode 100644
index a23203b..0000000
--- a/packages/DocumentsUI/src/com/android/documentsui/MenuManager.java
+++ /dev/null
@@ -1,221 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.documentsui;
-
-import android.annotation.Nullable;
-import android.provider.DocumentsContract.Root;
-import android.view.Menu;
-import android.view.MenuItem;
-
-import com.android.documentsui.model.RootInfo;
-
-public abstract class MenuManager {
-
- final State mState;
- final SearchViewManager mSearchManager;
-
- public MenuManager(SearchViewManager searchManager, State displayState) {
- mSearchManager = searchManager;
- mState = displayState;
- }
-
- /** @See DirectoryFragment.SelectionModeListener#updateActionMenu */
- public void updateActionMenu(Menu menu, SelectionDetails selection) {
- updateOpen(menu.findItem(R.id.menu_open), selection);
- updateDelete(menu.findItem(R.id.menu_delete), selection);
- updateShare(menu.findItem(R.id.menu_share), selection);
- updateRename(menu.findItem(R.id.menu_rename), selection);
- updateSelectAll(menu.findItem(R.id.menu_select_all), selection);
- updateMoveTo(menu.findItem(R.id.menu_move_to), selection);
- updateCopyTo(menu.findItem(R.id.menu_copy_to), selection);
-
- Menus.disableHiddenItems(menu);
- }
-
- /** @See Activity#onPrepareOptionsMenu */
- public void updateOptionMenu(Menu menu, DirectoryDetails directoryDetails) {
- updateCreateDir(menu.findItem(R.id.menu_create_dir), directoryDetails);
- updateSettings(menu.findItem(R.id.menu_settings), directoryDetails);
- updateNewWindow(menu.findItem(R.id.menu_new_window), directoryDetails);
- updateFileSize(menu.findItem(R.id.menu_file_size), directoryDetails);
- updateModePicker(menu.findItem(
- R.id.menu_grid), menu.findItem(R.id.menu_list), directoryDetails);
- updateSort(menu.findItem(R.id.menu_sort),
- menu.findItem(R.id.menu_sort_size),
- directoryDetails);
- updateAdvanced(menu.findItem(R.id.menu_advanced), directoryDetails);
-
- Menus.disableHiddenItems(menu);
- }
-
- /** @See DirectoryFragment.onCreateContextMenu */
- public void updateContextMenu(Menu menu,
- @Nullable SelectionDetails selectionDetails,
- DirectoryDetails directoryDetails) {
-
- MenuItem cut = menu.findItem(R.id.menu_cut_to_clipboard);
- MenuItem copy = menu.findItem(R.id.menu_copy_to_clipboard);
- MenuItem paste = menu.findItem(R.id.menu_paste_from_clipboard);
- MenuItem delete = menu.findItem(R.id.menu_delete);
- MenuItem rename = menu.findItem(R.id.menu_rename);
- MenuItem createDir = menu.findItem(R.id.menu_create_dir);
-
- if (selectionDetails == null) {
- cut.setEnabled(false);
- copy.setEnabled(false);
- rename.setEnabled(false);
- delete.setEnabled(false);
- } else {
- copy.setEnabled(!selectionDetails.containsPartialFiles());
- cut.setEnabled(
- !selectionDetails.containsPartialFiles() && selectionDetails.canDelete());
- updateRename(rename, selectionDetails);
- updateDelete(delete, selectionDetails);
- }
- menu.findItem(R.id.menu_paste_from_clipboard)
- .setEnabled(directoryDetails.hasItemsToPaste());
- updateCreateDir(createDir, directoryDetails);
-
- //Cut, Copy, Paste and Delete should always be visible
- cut.setVisible(true);
- copy.setVisible(true);
- paste.setVisible(true);
- delete.setVisible(true);
- }
-
- public void updateRootContextMenu(Menu menu, RootInfo root) {
- MenuItem settings = menu.findItem(R.id.menu_settings);
- MenuItem eject = menu.findItem(R.id.menu_eject_root);
-
- updateSettings(settings, root);
- updateEject(eject, root);
- }
-
- void updateModePicker(MenuItem grid, MenuItem list, DirectoryDetails directoryDetails) {
- grid.setVisible(mState.derivedMode != State.MODE_GRID);
- list.setVisible(mState.derivedMode != State.MODE_LIST);
- }
-
- void updateFileSize(MenuItem fileSize, DirectoryDetails directoryDetails) {
- fileSize.setVisible(!mState.forceSize);
- fileSize.setTitle(directoryDetails.getDisplayFileSize()
- ? R.string.menu_file_size_hide : R.string.menu_file_size_show);
- }
-
- void updateSort(MenuItem sort, MenuItem sortSize, DirectoryDetails directoryDetails) {
- // Search uses backend ranking; no sorting, recents doesn't support sort.
- sort.setEnabled(!directoryDetails.isInRecents() && !mSearchManager.isSearching());
- sort.setVisible(true);
- sortSize.setVisible(mState.showSize); // Only sort by size when file sizes are visible
- }
-
- void updateAdvanced(MenuItem advanced, DirectoryDetails directoryDetails) {
- advanced.setVisible(mState.showAdvancedOption);
- advanced.setTitle(mState.showAdvancedOption && mState.showAdvanced
- ? R.string.menu_advanced_hide : R.string.menu_advanced_show);
- }
-
- void updateSettings(MenuItem settings, DirectoryDetails directoryDetails) {
- settings.setVisible(false);
- }
-
- void updateSettings(MenuItem settings, RootInfo root) {
- settings.setVisible(false);
- }
-
- void updateEject(MenuItem eject, RootInfo root) {
- eject.setVisible(false);
- }
-
- void updateNewWindow(MenuItem newWindow, DirectoryDetails directoryDetails) {
- newWindow.setVisible(false);
- }
-
- void updateOpen(MenuItem open, SelectionDetails selectionDetails) {
- open.setVisible(false);
- }
-
- void updateShare(MenuItem share, SelectionDetails selectionDetails) {
- share.setVisible(false);
- }
-
- void updateDelete(MenuItem delete, SelectionDetails selectionDetails) {
- delete.setVisible(false);
- }
-
- void updateRename(MenuItem rename, SelectionDetails selectionDetails) {
- rename.setVisible(false);
- }
-
- void updateMoveTo(MenuItem moveTo, SelectionDetails selectionDetails) {
- moveTo.setVisible(false);
- }
-
- void updateCopyTo(MenuItem copyTo, SelectionDetails selectionDetails) {
- copyTo.setVisible(false);
- }
-
- abstract void updateSelectAll(MenuItem selectAll, SelectionDetails selectionDetails);
- abstract void updateCreateDir(MenuItem createDir, DirectoryDetails directoryDetails);
-
- /**
- * Access to meta data about the selection.
- */
- public interface SelectionDetails {
- boolean containsDirectories();
-
- boolean containsPartialFiles();
-
- // TODO: Update these to express characteristics instead of answering concrete questions,
- // since the answer to those questions is (or can be) activity specific.
- boolean canDelete();
-
- boolean canRename();
- }
-
- public static class DirectoryDetails {
- private final BaseActivity mActivity;
-
- public DirectoryDetails(BaseActivity activity) {
- mActivity = activity;
- }
-
- public boolean shouldShowFancyFeatures() {
- return Shared.shouldShowFancyFeatures(mActivity);
- }
-
- public boolean hasRootSettings() {
- return mActivity.getCurrentRoot().hasSettings();
- }
-
- public boolean hasItemsToPaste() {
- return false;
- }
-
- public boolean isInRecents() {
- return mActivity.getCurrentDirectory() == null;
- }
-
- public boolean canCreateDirectory() {
- return mActivity.canCreateDirectory();
- }
-
- public boolean getDisplayFileSize() {
- return LocalPreferences.getDisplayFileSize(mActivity);
- }
- }
-}
diff --git a/packages/DocumentsUI/src/com/android/documentsui/Menus.java b/packages/DocumentsUI/src/com/android/documentsui/Menus.java
deleted file mode 100644
index 5277d2b..0000000
--- a/packages/DocumentsUI/src/com/android/documentsui/Menus.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.documentsui;
-
-import android.view.Menu;
-import android.view.MenuItem;
-
-public final class Menus {
-
- private Menus() {}
-
- /**
- * Disables hidden menu items so that they are not invokable via command shortcuts
- */
- public static void disableHiddenItems(Menu menu, MenuItem... exclusions) {
- for (int i = 0; i < menu.size(); i++) {
- MenuItem item = menu.getItem(i);
- if (item.isVisible()) {
- continue;
- }
- if (contains(exclusions, item)) {
- continue;
- }
- item.setEnabled(false);
- }
- }
-
- private static boolean contains(MenuItem[] exclusions, MenuItem item) {
- for (int x = 0; x < exclusions.length; x++) {
- if (exclusions[x] == item) {
- return true;
- }
- }
- return false;
- }
-}
diff --git a/packages/DocumentsUI/src/com/android/documentsui/MessageBar.java b/packages/DocumentsUI/src/com/android/documentsui/MessageBar.java
deleted file mode 100644
index 5c6213f..0000000
--- a/packages/DocumentsUI/src/com/android/documentsui/MessageBar.java
+++ /dev/null
@@ -1,129 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.documentsui;
-
-import android.annotation.Nullable;
-import android.app.Fragment;
-import android.app.FragmentManager;
-import android.app.FragmentTransaction;
-import android.os.Bundle;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.Button;
-import android.widget.ImageView;
-import android.widget.TextView;
-
-/**
- * A message bar displaying some info/error messages and a Dismiss button.
- */
-public class MessageBar extends Fragment {
- private View mView;
- private ViewGroup mContainer;
-
- /**
- * Creates an instance of a MessageBar. Note that the new MessagBar is not visible by default,
- * and has to be shown by calling MessageBar.show.
- */
- public static MessageBar create(FragmentManager fm) {
- final MessageBar fragment = new MessageBar();
-
- final FragmentTransaction ft = fm.beginTransaction();
- ft.replace(R.id.container_message_bar, fragment);
- ft.commitAllowingStateLoss();
-
- return fragment;
- }
-
- /**
- * Sets the info message. Can be null, in which case no info message will be displayed. The
- * message bar layout will be adjusted accordingly.
- */
- public void setInfo(@Nullable String info) {
- View infoContainer = mView.findViewById(R.id.container_info);
- if (info != null) {
- TextView infoText = (TextView) mView.findViewById(R.id.textview_info);
- infoText.setText(info);
- infoContainer.setVisibility(View.VISIBLE);
- } else {
- infoContainer.setVisibility(View.GONE);
- }
- }
-
- /**
- * Sets the error message. Can be null, in which case no error message will be displayed. The
- * message bar layout will be adjusted accordingly.
- */
- public void setError(@Nullable String error) {
- View errorView = mView.findViewById(R.id.container_error);
- if (error != null) {
- TextView errorText = (TextView) mView.findViewById(R.id.textview_error);
- errorText.setText(error);
- errorView.setVisibility(View.VISIBLE);
- } else {
- errorView.setVisibility(View.GONE);
- }
- }
-
- @Override
- public View onCreateView(
- LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
-
- mView = inflater.inflate(R.layout.fragment_message_bar, container, false);
-
- ImageView infoIcon = (ImageView) mView.findViewById(R.id.icon_info);
- infoIcon.setImageResource(R.drawable.ic_dialog_info);
-
- ImageView errorIcon = (ImageView) mView.findViewById(R.id.icon_error);
- errorIcon.setImageResource(R.drawable.ic_dialog_alert);
-
- Button dismiss = (Button) mView.findViewById(R.id.button_dismiss);
- dismiss.setOnClickListener(
- new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- hide();
- }
- });
-
- mContainer = container;
-
- return mView;
- }
-
- public void hide() {
- // The container view is used to show/hide the error bar. If a container is not provided,
- // fall back to showing/hiding the error bar View, which also works, but does not provide
- // the same animated transition.
- if (mContainer != null) {
- mContainer.setVisibility(View.GONE);
- } else {
- mView.setVisibility(View.GONE);
- }
- }
-
- public void show() {
- // The container view is used to show/hide the error bar. If a container is not provided,
- // fall back to showing/hiding the error bar View, which also works, but does not provide
- // the same animated transition.
- if (mContainer != null) {
- mContainer.setVisibility(View.VISIBLE);
- } else {
- mView.setVisibility(View.VISIBLE);
- }
- }
-}
diff --git a/packages/DocumentsUI/src/com/android/documentsui/Metrics.java b/packages/DocumentsUI/src/com/android/documentsui/Metrics.java
deleted file mode 100644
index 3c45a93..0000000
--- a/packages/DocumentsUI/src/com/android/documentsui/Metrics.java
+++ /dev/null
@@ -1,853 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.documentsui;
-
-import static android.os.Environment.STANDARD_DIRECTORIES;
-import static com.android.documentsui.Shared.DEBUG;
-
-import android.annotation.IntDef;
-import android.annotation.Nullable;
-import android.annotation.StringDef;
-import android.app.Activity;
-import android.content.Context;
-import android.content.Intent;
-import android.content.pm.ResolveInfo;
-import android.net.Uri;
-import android.provider.DocumentsContract;
-import android.util.Log;
-
-import com.android.documentsui.State.ActionType;
-import com.android.documentsui.model.DocumentInfo;
-import com.android.documentsui.model.RootInfo;
-import com.android.documentsui.services.FileOperationService;
-import com.android.documentsui.services.FileOperationService.OpType;
-import com.android.internal.logging.MetricsLogger;
-import com.android.internal.logging.MetricsProto.MetricsEvent;
-
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.util.List;
-
-/** @hide */
-public final class Metrics {
- private static final String TAG = "Metrics";
-
- // These are the native provider authorities that the metrics code is capable of recognizing and
- // explicitly counting.
- private static final String AUTHORITY_MEDIA = "com.android.providers.media.documents";
- private static final String AUTHORITY_STORAGE = "com.android.externalstorage.documents";
- private static final String AUTHORITY_DOWNLOADS = "com.android.providers.downloads.documents";
- private static final String AUTHORITY_MTP = "com.android.mtp.documents";
-
- // These strings have to be whitelisted in tron. Do not change them.
- private static final String COUNT_LAUNCH_ACTION = "docsui_launch_action";
- private static final String COUNT_ROOT_VISITED = "docsui_root_visited";
- private static final String COUNT_OPEN_MIME = "docsui_open_mime";
- private static final String COUNT_CREATE_MIME = "docsui_create_mime";
- private static final String COUNT_GET_CONTENT_MIME = "docsui_get_content_mime";
- private static final String COUNT_BROWSE_ROOT = "docsui_browse_root";
- @Deprecated private static final String COUNT_MANAGE_ROOT = "docsui_manage_root";
- @Deprecated private static final String COUNT_MULTI_WINDOW = "docsui_multi_window";
- private static final String COUNT_FILEOP_SYSTEM = "docsui_fileop_system";
- private static final String COUNT_FILEOP_EXTERNAL = "docsui_fileop_external";
- private static final String COUNT_FILEOP_CANCELED = "docsui_fileop_canceled";
- private static final String COUNT_STARTUP_MS = "docsui_startup_ms";
- private static final String COUNT_DRAWER_OPENED = "docsui_drawer_opened";
- private static final String COUNT_USER_ACTION = "docsui_menu_action";
-
- // Indices for bucketing roots in the roots histogram. "Other" is the catch-all index for any
- // root that is not explicitly recognized by the Metrics code (see {@link
- // #getSanitizedRootIndex}). Apps are also bucketed in this histogram.
- // Do not change or rearrange these values, that will break historical data. Only add to the end
- // of the list.
- // Do not use negative numbers or zero; clearcut only handles positive integers.
- private static final int ROOT_NONE = 1;
- private static final int ROOT_OTHER = 2;
- private static final int ROOT_AUDIO = 3;
- private static final int ROOT_DEVICE_STORAGE = 4;
- private static final int ROOT_DOWNLOADS = 5;
- private static final int ROOT_HOME = 6;
- private static final int ROOT_IMAGES = 7;
- private static final int ROOT_RECENTS = 8;
- private static final int ROOT_VIDEOS = 9;
- private static final int ROOT_MTP = 10;
- // Apps aren't really "roots", but they are treated as such in the roots fragment UI and so they
- // are logged analogously to roots.
- private static final int ROOT_THIRD_PARTY_APP = 100;
-
- @IntDef(flag = true, value = {
- ROOT_NONE,
- ROOT_OTHER,
- ROOT_AUDIO,
- ROOT_DEVICE_STORAGE,
- ROOT_DOWNLOADS,
- ROOT_HOME,
- ROOT_IMAGES,
- ROOT_RECENTS,
- ROOT_VIDEOS,
- ROOT_MTP,
- ROOT_THIRD_PARTY_APP
- })
- @Retention(RetentionPolicy.SOURCE)
- public @interface Root {}
-
- // Indices for bucketing mime types.
- // Do not change or rearrange these values, that will break historical data. Only add to the end
- // of the list.
- // Do not use negative numbers or zero; clearcut only handles positive integers.
- private static final int MIME_NONE = 1; // null mime
- private static final int MIME_ANY = 2; // */*
- private static final int MIME_APPLICATION = 3; // application/*
- private static final int MIME_AUDIO = 4; // audio/*
- private static final int MIME_IMAGE = 5; // image/*
- private static final int MIME_MESSAGE = 6; // message/*
- private static final int MIME_MULTIPART = 7; // multipart/*
- private static final int MIME_TEXT = 8; // text/*
- private static final int MIME_VIDEO = 9; // video/*
- private static final int MIME_OTHER = 10; // anything not enumerated below
-
- @IntDef(flag = true, value = {
- MIME_NONE,
- MIME_ANY,
- MIME_APPLICATION,
- MIME_AUDIO,
- MIME_IMAGE,
- MIME_MESSAGE,
- MIME_MULTIPART,
- MIME_TEXT,
- MIME_VIDEO,
- MIME_OTHER
- })
- @Retention(RetentionPolicy.SOURCE)
- public @interface Mime {}
-
- // Codes representing different kinds of file operations. These are used for bucketing
- // operations in the COUNT_FILEOP_{SYSTEM|EXTERNAL} histograms.
- // Do not change or rearrange these values, that will break historical data. Only add to the
- // list.
- // Do not use negative numbers or zero; clearcut only handles positive integers.
- private static final int FILEOP_OTHER = 1; // any file operation not listed below
- private static final int FILEOP_COPY_INTRA_PROVIDER = 2; // Copy within a provider
- private static final int FILEOP_COPY_SYSTEM_PROVIDER = 3; // Copy to a system provider.
- private static final int FILEOP_COPY_EXTERNAL_PROVIDER = 4; // Copy to a 3rd-party provider.
- private static final int FILEOP_MOVE_INTRA_PROVIDER = 5; // Move within a provider.
- private static final int FILEOP_MOVE_SYSTEM_PROVIDER = 6; // Move to a system provider.
- private static final int FILEOP_MOVE_EXTERNAL_PROVIDER = 7; // Move to a 3rd-party provider.
- private static final int FILEOP_DELETE = 8;
- private static final int FILEOP_RENAME = 9;
- private static final int FILEOP_CREATE_DIR = 10;
- private static final int FILEOP_OTHER_ERROR = 100;
- private static final int FILEOP_DELETE_ERROR = 101;
- private static final int FILEOP_MOVE_ERROR = 102;
- private static final int FILEOP_COPY_ERROR = 103;
- private static final int FILEOP_RENAME_ERROR = 104;
- private static final int FILEOP_CREATE_DIR_ERROR = 105;
-
- @IntDef(flag = true, value = {
- FILEOP_OTHER,
- FILEOP_COPY_INTRA_PROVIDER,
- FILEOP_COPY_SYSTEM_PROVIDER,
- FILEOP_COPY_EXTERNAL_PROVIDER,
- FILEOP_MOVE_INTRA_PROVIDER,
- FILEOP_MOVE_SYSTEM_PROVIDER,
- FILEOP_MOVE_EXTERNAL_PROVIDER,
- FILEOP_DELETE,
- FILEOP_RENAME,
- FILEOP_CREATE_DIR,
- FILEOP_OTHER_ERROR,
- FILEOP_COPY_ERROR,
- FILEOP_MOVE_ERROR,
- FILEOP_DELETE_ERROR,
- FILEOP_RENAME_ERROR,
- FILEOP_CREATE_DIR_ERROR
- })
- @Retention(RetentionPolicy.SOURCE)
- public @interface FileOp {}
-
- // Codes representing different kinds of file operations. These are used for bucketing
- // operations in the COUNT_FILEOP_CANCELED histogram.
- // Do not change or rearrange these values, that will break historical data. Only add to the
- // list.
- // Do not use negative numbers or zero; clearcut only handles positive integers.
- private static final int OPERATION_UNKNOWN = 1;
- private static final int OPERATION_COPY = 2;
- private static final int OPERATION_MOVE = 3;
- private static final int OPERATION_DELETE= 4;
-
- @IntDef(flag = true, value = {
- OPERATION_UNKNOWN,
- OPERATION_COPY,
- OPERATION_MOVE,
- OPERATION_DELETE
- })
- @Retention(RetentionPolicy.SOURCE)
- public @interface MetricsOpType {}
-
- // Codes representing different provider types. Used for sorting file operations when logging.
- private static final int PROVIDER_INTRA = 0;
- private static final int PROVIDER_SYSTEM = 1;
- private static final int PROVIDER_EXTERNAL = 2;
-
- @IntDef(flag = false, value = {
- PROVIDER_INTRA,
- PROVIDER_SYSTEM,
- PROVIDER_EXTERNAL
- })
- @Retention(RetentionPolicy.SOURCE)
- public @interface Provider {}
-
-
- // Codes representing different user actions. These are used for bucketing stats in the
- // COUNT_USER_ACTION histogram.
- // The historgram includes action triggered from menu or invoked by keyboard shortcut.
- // Do not change or rearrange these values, that will break historical data. Only add to the
- // list.
- // Do not use negative numbers or zero; clearcut only handles positive integers.
- public static final int USER_ACTION_OTHER = 1;
- public static final int USER_ACTION_GRID = 2;
- public static final int USER_ACTION_LIST = 3;
- public static final int USER_ACTION_SORT_NAME = 4;
- public static final int USER_ACTION_SORT_DATE = 5;
- public static final int USER_ACTION_SORT_SIZE = 6;
- public static final int USER_ACTION_SEARCH = 7;
- public static final int USER_ACTION_SHOW_SIZE = 8;
- public static final int USER_ACTION_HIDE_SIZE = 9;
- public static final int USER_ACTION_SETTINGS = 10;
- public static final int USER_ACTION_COPY_TO = 11;
- public static final int USER_ACTION_MOVE_TO = 12;
- public static final int USER_ACTION_DELETE = 13;
- public static final int USER_ACTION_RENAME = 14;
- public static final int USER_ACTION_CREATE_DIR = 15;
- public static final int USER_ACTION_SELECT_ALL = 16;
- public static final int USER_ACTION_SHARE = 17;
- public static final int USER_ACTION_OPEN = 18;
- public static final int USER_ACTION_SHOW_ADVANCED = 19;
- public static final int USER_ACTION_HIDE_ADVANCED = 20;
- public static final int USER_ACTION_NEW_WINDOW = 21;
- public static final int USER_ACTION_PASTE_CLIPBOARD = 22;
- public static final int USER_ACTION_COPY_CLIPBOARD = 23;
- public static final int USER_ACTION_DRAG_N_DROP = 24;
- public static final int USER_ACTION_DRAG_N_DROP_MULTI_WINDOW = 25;
- public static final int USER_ACTION_CUT_CLIPBOARD = 26;
-
- @IntDef(flag = false, value = {
- USER_ACTION_OTHER,
- USER_ACTION_GRID,
- USER_ACTION_LIST,
- USER_ACTION_SORT_NAME,
- USER_ACTION_SORT_DATE,
- USER_ACTION_SORT_SIZE,
- USER_ACTION_SEARCH,
- USER_ACTION_SHOW_SIZE,
- USER_ACTION_HIDE_SIZE,
- USER_ACTION_SETTINGS,
- USER_ACTION_COPY_TO,
- USER_ACTION_MOVE_TO,
- USER_ACTION_DELETE,
- USER_ACTION_RENAME,
- USER_ACTION_CREATE_DIR,
- USER_ACTION_SELECT_ALL,
- USER_ACTION_SHARE,
- USER_ACTION_OPEN,
- USER_ACTION_SHOW_ADVANCED,
- USER_ACTION_HIDE_ADVANCED,
- USER_ACTION_NEW_WINDOW,
- USER_ACTION_PASTE_CLIPBOARD,
- USER_ACTION_COPY_CLIPBOARD,
- USER_ACTION_DRAG_N_DROP,
- USER_ACTION_DRAG_N_DROP_MULTI_WINDOW,
- USER_ACTION_CUT_CLIPBOARD
- })
- @Retention(RetentionPolicy.SOURCE)
- public @interface UserAction {}
-
- // Codes representing different menu actions. These are used for bucketing stats in the
- // COUNT_MENU_ACTION histogram.
- // Do not change or rearrange these values, that will break historical data. Only add to the
- // list.
- // Do not use negative numbers or zero; clearcut only handles positive integers.
- private static final int ACTION_OTHER = 1;
- private static final int ACTION_OPEN = 2;
- private static final int ACTION_CREATE = 3;
- private static final int ACTION_GET_CONTENT = 4;
- private static final int ACTION_OPEN_TREE = 5;
- @Deprecated private static final int ACTION_MANAGE = 6;
- private static final int ACTION_BROWSE = 7;
- private static final int ACTION_PICK_COPY_DESTINATION = 8;
-
- @IntDef(flag = true, value = {
- ACTION_OTHER,
- ACTION_OPEN,
- ACTION_CREATE,
- ACTION_GET_CONTENT,
- ACTION_OPEN_TREE,
- ACTION_MANAGE,
- ACTION_BROWSE,
- ACTION_PICK_COPY_DESTINATION
- })
- @Retention(RetentionPolicy.SOURCE)
- public @interface MetricsAction {}
-
- // Codes representing different actions to open the drawer. They are used for bucketing stats in
- // the COUNT_DRAWER_OPENED histogram.
- // Do not change or rearrange these values, that will break historical data. Only add to the
- // list.
- // Do not use negative numbers or zero; clearcut only handles positive integers.
- private static final int DRAWER_OPENED_HAMBURGER = 1;
- private static final int DRAWER_OPENED_SWIPE = 2;
-
- @IntDef(flag = true, value = {
- DRAWER_OPENED_HAMBURGER,
- DRAWER_OPENED_SWIPE
- })
- @Retention(RetentionPolicy.SOURCE)
- public @interface DrawerTrigger {}
-
- /**
- * Logs when DocumentsUI is started, and how. Call this when DocumentsUI first starts up.
- *
- * @param context
- * @param state
- * @param intent
- */
- public static void logActivityLaunch(Context context, State state, Intent intent) {
- // Log the launch action.
- logHistogram(context, COUNT_LAUNCH_ACTION, toMetricsAction(state.action));
- // Then log auxiliary data (roots/mime types) associated with some actions.
- Uri uri = intent.getData();
- switch (state.action) {
- case State.ACTION_OPEN:
- logHistogram(context, COUNT_OPEN_MIME, sanitizeMime(intent.getType()));
- break;
- case State.ACTION_CREATE:
- logHistogram(context, COUNT_CREATE_MIME, sanitizeMime(intent.getType()));
- break;
- case State.ACTION_GET_CONTENT:
- logHistogram(context, COUNT_GET_CONTENT_MIME, sanitizeMime(intent.getType()));
- break;
- case State.ACTION_BROWSE:
- logHistogram(context, COUNT_BROWSE_ROOT, sanitizeRoot(uri));
- break;
- default:
- break;
- }
- }
-
- /**
- * Logs a root visited event. Call this when the user visits on a root in the RootsFragment.
- *
- * @param context
- * @param info
- */
- public static void logRootVisited(Context context, RootInfo info) {
- logHistogram(context, COUNT_ROOT_VISITED, sanitizeRoot(info));
- }
-
- /**
- * Logs an app visited event. Call this when the user visits on an app in the RootsFragment.
- *
- * @param context
- * @param info
- */
- public static void logAppVisited(Context context, ResolveInfo info) {
- logHistogram(context, COUNT_ROOT_VISITED, sanitizeRoot(info));
- }
-
- /**
- * Logs a drawer opened event. Call this when the user opens drawer by swipe or by clicking the
- * hamburger icon.
- * @param context
- * @param trigger type of action that opened the drawer
- */
- public static void logDrawerOpened(Context context, @DrawerController.Trigger int trigger) {
- if (trigger == DrawerController.OPENED_HAMBURGER) {
- logHistogram(context, COUNT_DRAWER_OPENED, DRAWER_OPENED_HAMBURGER);
- } else if (trigger == DrawerController.OPENED_SWIPE) {
- logHistogram(context, COUNT_DRAWER_OPENED, DRAWER_OPENED_SWIPE);
- }
- }
-
- /**
- * Logs file operation stats. Call this when a file operation has completed. The given
- * DocumentInfo is only used to distinguish broad categories of actions (e.g. copying from one
- * provider to another vs copying within a given provider). No PII is logged.
- *
- * @param context
- * @param operationType
- * @param srcs
- * @param dst
- */
- public static void logFileOperation(
- Context context,
- @OpType int operationType,
- List<DocumentInfo> srcs,
- @Nullable DocumentInfo dst) {
- ProviderCounts counts = countProviders(srcs, dst);
-
- if (counts.intraProvider > 0) {
- logIntraProviderFileOps(context, dst.authority, operationType);
- }
- if (counts.systemProvider > 0) {
- // Log file operations on system providers.
- logInterProviderFileOps(context, COUNT_FILEOP_SYSTEM, dst, operationType);
- }
- if (counts.externalProvider > 0) {
- // Log file operations on external providers.
- logInterProviderFileOps(context, COUNT_FILEOP_EXTERNAL, dst, operationType);
- }
- }
-
- /**
- * Logs create directory operation. It is a part of file operation stats. We do not
- * differentiate between internal and external locations, all create directory operations are
- * logged under COUNT_FILEOP_SYSTEM. Call this when a create directory operation has completed.
- *
- * @param context
- */
- public static void logCreateDirOperation(Context context) {
- logHistogram(context, COUNT_FILEOP_SYSTEM, FILEOP_CREATE_DIR);
- }
-
- /**
- * Logs rename file operation. It is a part of file operation stats. We do not differentiate
- * between internal and external locations, all rename operations are logged under
- * COUNT_FILEOP_SYSTEM. Call this when a rename file operation has completed.
- *
- * @param context
- */
- public static void logRenameFileOperation(Context context) {
- logHistogram(context, COUNT_FILEOP_SYSTEM, FILEOP_RENAME);
- }
-
- /**
- * Logs some kind of file operation error. Call this when a file operation (e.g. copy, delete)
- * fails.
- *
- * @param context
- * @param operationType
- * @param failedFiles
- */
- public static void logFileOperationErrors(Context context, @OpType int operationType,
- List<DocumentInfo> failedFiles) {
- ProviderCounts counts = countProviders(failedFiles, null);
-
- @FileOp int opCode = FILEOP_OTHER_ERROR;
- switch (operationType) {
- case FileOperationService.OPERATION_COPY:
- opCode = FILEOP_COPY_ERROR;
- break;
- case FileOperationService.OPERATION_DELETE:
- opCode = FILEOP_DELETE_ERROR;
- break;
- case FileOperationService.OPERATION_MOVE:
- opCode = FILEOP_MOVE_ERROR;
- break;
- }
- if (counts.systemProvider > 0) {
- logHistogram(context, COUNT_FILEOP_SYSTEM, opCode);
- }
- if (counts.externalProvider > 0) {
- logHistogram(context, COUNT_FILEOP_EXTERNAL, opCode);
- }
- }
-
- /**
- * Logs create directory operation error. We do not differentiate between internal and external
- * locations, all create directory errors are logged under COUNT_FILEOP_SYSTEM. Call this when a
- * create directory operation fails.
- *
- * @param context
- */
- public static void logCreateDirError(Context context) {
- logHistogram(context, COUNT_FILEOP_SYSTEM, FILEOP_CREATE_DIR_ERROR);
- }
-
- /**
- * Logs rename file operation error. We do not differentiate between internal and external
- * locations, all rename errors are logged under COUNT_FILEOP_SYSTEM. Call this
- * when a rename file operation fails.
- *
- * @param context
- */
- public static void logRenameFileError(Context context) {
- logHistogram(context, COUNT_FILEOP_SYSTEM, FILEOP_RENAME_ERROR);
- }
-
- /**
- * Logs the cancellation of a file operation. Call this when a Job is canceled.
- * @param context
- * @param operationType
- */
- public static void logFileOperationCancelled(Context context, @OpType int operationType) {
- logHistogram(context, COUNT_FILEOP_CANCELED, toMetricsOpType(operationType));
- }
-
- /**
- * Logs startup time in milliseconds.
- * @param context
- * @param startupMs Startup time in milliseconds.
- */
- public static void logStartupMs(Context context, int startupMs) {
- logHistogram(context, COUNT_STARTUP_MS, startupMs);
- }
-
- private static void logInterProviderFileOps(
- Context context,
- String histogram,
- DocumentInfo dst,
- @OpType int operationType) {
- if (operationType == FileOperationService.OPERATION_DELETE) {
- logHistogram(context, histogram, FILEOP_DELETE);
- } else {
- assert(dst != null);
- @Provider int providerType =
- isSystemProvider(dst.authority) ? PROVIDER_SYSTEM : PROVIDER_EXTERNAL;
- logHistogram(context, histogram, getOpCode(operationType, providerType));
- }
- }
-
- private static void logIntraProviderFileOps(
- Context context, String authority, @OpType int operationType) {
- // Find the right histogram to log to, then log the operation.
- String histogram = isSystemProvider(authority) ? COUNT_FILEOP_SYSTEM : COUNT_FILEOP_EXTERNAL;
- logHistogram(context, histogram, getOpCode(operationType, PROVIDER_INTRA));
- }
-
- // Types for logInvalidScopedAccessRequest
- public static final String SCOPED_DIRECTORY_ACCESS_INVALID_ARGUMENTS =
- "docsui_scoped_directory_access_invalid_args";
- public static final String SCOPED_DIRECTORY_ACCESS_INVALID_DIRECTORY =
- "docsui_scoped_directory_access_invalid_dir";
- public static final String SCOPED_DIRECTORY_ACCESS_ERROR =
- "docsui_scoped_directory_access_error";
-
- @StringDef(value = {
- SCOPED_DIRECTORY_ACCESS_INVALID_ARGUMENTS,
- SCOPED_DIRECTORY_ACCESS_INVALID_DIRECTORY,
- SCOPED_DIRECTORY_ACCESS_ERROR
- })
- @Retention(RetentionPolicy.SOURCE)
- public @interface InvalidScopedAccess{}
-
- public static void logInvalidScopedAccessRequest(Context context,
- @InvalidScopedAccess String type) {
- switch (type) {
- case SCOPED_DIRECTORY_ACCESS_INVALID_ARGUMENTS:
- case SCOPED_DIRECTORY_ACCESS_INVALID_DIRECTORY:
- case SCOPED_DIRECTORY_ACCESS_ERROR:
- logCount(context, type);
- break;
- default:
- Log.wtf(TAG, "invalid InvalidScopedAccess: " + type);
- }
- }
-
- // Types for logValidScopedAccessRequest
- public static final int SCOPED_DIRECTORY_ACCESS_ALREADY_GRANTED = 0;
- public static final int SCOPED_DIRECTORY_ACCESS_GRANTED = 1;
- public static final int SCOPED_DIRECTORY_ACCESS_DENIED = 2;
- public static final int SCOPED_DIRECTORY_ACCESS_DENIED_AND_PERSIST = 3;
- public static final int SCOPED_DIRECTORY_ACCESS_ALREADY_DENIED = 4;
-
- @IntDef(flag = true, value = {
- SCOPED_DIRECTORY_ACCESS_ALREADY_GRANTED,
- SCOPED_DIRECTORY_ACCESS_GRANTED,
- SCOPED_DIRECTORY_ACCESS_DENIED,
- SCOPED_DIRECTORY_ACCESS_DENIED_AND_PERSIST,
- SCOPED_DIRECTORY_ACCESS_ALREADY_DENIED
- })
- @Retention(RetentionPolicy.SOURCE)
- public @interface ScopedAccessGrant {}
-
- public static void logValidScopedAccessRequest(Activity activity, String directory,
- @ScopedAccessGrant int type) {
- int index = -1;
- if (OpenExternalDirectoryActivity.DIRECTORY_ROOT.equals(directory)) {
- index = -2;
- } else {
- for (int i = 0; i < STANDARD_DIRECTORIES.length; i++) {
- if (STANDARD_DIRECTORIES[i].equals(directory)) {
- index = i;
- break;
- }
- }
- }
- final String packageName = activity.getCallingPackage();
- switch (type) {
- case SCOPED_DIRECTORY_ACCESS_ALREADY_GRANTED:
- MetricsLogger.action(activity, MetricsEvent
- .ACTION_SCOPED_DIRECTORY_ACCESS_ALREADY_GRANTED_BY_PACKAGE, packageName);
- MetricsLogger.action(activity, MetricsEvent
- .ACTION_SCOPED_DIRECTORY_ACCESS_ALREADY_GRANTED_BY_FOLDER, index);
- break;
- case SCOPED_DIRECTORY_ACCESS_GRANTED:
- MetricsLogger.action(activity, MetricsEvent
- .ACTION_SCOPED_DIRECTORY_ACCESS_GRANTED_BY_PACKAGE, packageName);
- MetricsLogger.action(activity, MetricsEvent
- .ACTION_SCOPED_DIRECTORY_ACCESS_GRANTED_BY_FOLDER, index);
- break;
- case SCOPED_DIRECTORY_ACCESS_DENIED:
- MetricsLogger.action(activity, MetricsEvent
- .ACTION_SCOPED_DIRECTORY_ACCESS_DENIED_BY_PACKAGE, packageName);
- MetricsLogger.action(activity, MetricsEvent
- .ACTION_SCOPED_DIRECTORY_ACCESS_DENIED_BY_FOLDER, index);
- break;
- case SCOPED_DIRECTORY_ACCESS_DENIED_AND_PERSIST:
- MetricsLogger.action(activity, MetricsEvent
- .ACTION_SCOPED_DIRECTORY_ACCESS_DENIED_AND_PERSIST_BY_PACKAGE, packageName);
- MetricsLogger.action(activity, MetricsEvent
- .ACTION_SCOPED_DIRECTORY_ACCESS_DENIED_AND_PERSIST_BY_FOLDER, index);
- break;
- case SCOPED_DIRECTORY_ACCESS_ALREADY_DENIED:
- MetricsLogger.action(activity, MetricsEvent
- .ACTION_SCOPED_DIRECTORY_ACCESS_ALREADY_DENIED_BY_PACKAGE, packageName);
- MetricsLogger.action(activity, MetricsEvent
- .ACTION_SCOPED_DIRECTORY_ACCESS_ALREADY_DENIED_BY_FOLDER, index);
- break;
- default:
- Log.wtf(TAG, "invalid ScopedAccessGrant: " + type);
- }
- }
-
- /**
- * Logs the action that was started by user.
- * @param context
- * @param userAction
- */
- public static void logUserAction(Context context, @UserAction int userAction) {
- logHistogram(context, COUNT_USER_ACTION, userAction);
- }
-
- /**
- * Internal method for making a MetricsLogger.count call. Increments the given counter by 1.
- *
- * @param context
- * @param name The counter to increment.
- */
- private static void logCount(Context context, String name) {
- if (DEBUG) Log.d(TAG, name + ": " + 1);
- MetricsLogger.count(context, name, 1);
- }
-
- /**
- * Internal method for making a MetricsLogger.histogram call.
- *
- * @param context
- * @param name The name of the histogram.
- * @param bucket The bucket to increment.
- */
- private static void logHistogram(Context context, String name, @ActionType int bucket) {
- if (DEBUG) Log.d(TAG, name + ": " + bucket);
- MetricsLogger.histogram(context, name, bucket);
- }
-
- /**
- * Generates an integer identifying the given root. For privacy, this function only recognizes a
- * small set of hard-coded roots (ones provided by the system). Other roots are all grouped into
- * a single ROOT_OTHER bucket.
- */
- private static @Root int sanitizeRoot(Uri uri) {
- if (uri == null || uri.getAuthority() == null || LauncherActivity.isLaunchUri(uri)) {
- return ROOT_NONE;
- }
-
- switch (uri.getAuthority()) {
- case AUTHORITY_MEDIA:
- switch (DocumentsContract.getRootId(uri)) {
- case "audio_root":
- return ROOT_AUDIO;
- case "images_root":
- return ROOT_IMAGES;
- case "videos_root":
- return ROOT_VIDEOS;
- default:
- return ROOT_OTHER;
- }
- case AUTHORITY_STORAGE:
- if ("home".equals(DocumentsContract.getRootId(uri))) {
- return ROOT_HOME;
- } else {
- return ROOT_DEVICE_STORAGE;
- }
- case AUTHORITY_DOWNLOADS:
- return ROOT_DOWNLOADS;
- case AUTHORITY_MTP:
- return ROOT_MTP;
- default:
- return ROOT_OTHER;
- }
- }
-
- /** @see #sanitizeRoot(Uri) */
- private static @Root int sanitizeRoot(RootInfo root) {
- if (root.isRecents()) {
- // Recents root is special and only identifiable via this method call. Other roots are
- // identified by URI.
- return ROOT_RECENTS;
- } else {
- return sanitizeRoot(root.getUri());
- }
- }
-
- /** @see #sanitizeRoot(Uri) */
- private static @Root int sanitizeRoot(ResolveInfo info) {
- // Log all apps under a single bucket in the roots histogram.
- return ROOT_THIRD_PARTY_APP;
- }
-
- /**
- * Generates an int identifying a mime type. For privacy, this function only recognizes a small
- * set of hard-coded types. For any other type, this function returns "other".
- *
- * @param mimeType
- * @return
- */
- private static @Mime int sanitizeMime(String mimeType) {
- if (mimeType == null) {
- return MIME_NONE;
- } else if ("*/*".equals(mimeType)) {
- return MIME_ANY;
- } else {
- String type = mimeType.substring(0, mimeType.indexOf('/'));
- switch (type) {
- case "application":
- return MIME_APPLICATION;
- case "audio":
- return MIME_AUDIO;
- case "image":
- return MIME_IMAGE;
- case "message":
- return MIME_MESSAGE;
- case "multipart":
- return MIME_MULTIPART;
- case "text":
- return MIME_TEXT;
- case "video":
- return MIME_VIDEO;
- }
- }
- // Bucket all other types into one bucket.
- return MIME_OTHER;
- }
-
- private static boolean isSystemProvider(String authority) {
- switch (authority) {
- case AUTHORITY_MEDIA:
- case AUTHORITY_STORAGE:
- case AUTHORITY_DOWNLOADS:
- return true;
- default:
- return false;
- }
- }
-
- /**
- * @param operation
- * @param providerType
- * @return An opcode, suitable for use as histogram bucket, for the given operation/provider
- * combination.
- */
- private static @FileOp int getOpCode(@OpType int operation, @Provider int providerType) {
- switch (operation) {
- case FileOperationService.OPERATION_COPY:
- switch (providerType) {
- case PROVIDER_INTRA:
- return FILEOP_COPY_INTRA_PROVIDER;
- case PROVIDER_SYSTEM:
- return FILEOP_COPY_SYSTEM_PROVIDER;
- case PROVIDER_EXTERNAL:
- return FILEOP_COPY_EXTERNAL_PROVIDER;
- }
- case FileOperationService.OPERATION_MOVE:
- switch (providerType) {
- case PROVIDER_INTRA:
- return FILEOP_MOVE_INTRA_PROVIDER;
- case PROVIDER_SYSTEM:
- return FILEOP_MOVE_SYSTEM_PROVIDER;
- case PROVIDER_EXTERNAL:
- return FILEOP_MOVE_EXTERNAL_PROVIDER;
- }
- case FileOperationService.OPERATION_DELETE:
- return FILEOP_DELETE;
- default:
- Log.w(TAG, "Unrecognized operation type when logging a file operation");
- return FILEOP_OTHER;
- }
- }
-
- /**
- * Maps FileOperationService OpType values, to MetricsOpType values.
- */
- private static @MetricsOpType int toMetricsOpType(@OpType int operation) {
- switch (operation) {
- case FileOperationService.OPERATION_COPY:
- return OPERATION_COPY;
- case FileOperationService.OPERATION_MOVE:
- return OPERATION_MOVE;
- case FileOperationService.OPERATION_DELETE:
- return OPERATION_DELETE;
- case FileOperationService.OPERATION_UNKNOWN:
- default:
- return OPERATION_UNKNOWN;
- }
- }
-
- private static @MetricsAction int toMetricsAction(int action) {
- switch(action) {
- case State.ACTION_OPEN:
- return ACTION_OPEN;
- case State.ACTION_CREATE:
- return ACTION_CREATE;
- case State.ACTION_GET_CONTENT:
- return ACTION_GET_CONTENT;
- case State.ACTION_OPEN_TREE:
- return ACTION_OPEN_TREE;
- case State.ACTION_BROWSE:
- return ACTION_BROWSE;
- case State.ACTION_PICK_COPY_DESTINATION:
- return ACTION_PICK_COPY_DESTINATION;
- default:
- return ACTION_OTHER;
- }
- }
-
- /**
- * Count the given src documents and provide a tally of how many come from the same provider as
- * the dst document (if a dst is provided), how many come from system providers, and how many
- * come from external 3rd-party providers.
- */
- private static ProviderCounts countProviders(
- List<DocumentInfo> srcs, @Nullable DocumentInfo dst) {
- ProviderCounts counts = new ProviderCounts();
- for (DocumentInfo doc: srcs) {
- if (dst != null && doc.authority.equals(dst.authority)) {
- counts.intraProvider++;
- } else if (isSystemProvider(doc.authority)){
- counts.systemProvider++;
- } else {
- counts.externalProvider++;
- }
- }
- return counts;
- }
-
- private static class ProviderCounts {
- int intraProvider;
- int systemProvider;
- int externalProvider;
- }
-}
diff --git a/packages/DocumentsUI/src/com/android/documentsui/MimePredicate.java b/packages/DocumentsUI/src/com/android/documentsui/MimePredicate.java
deleted file mode 100644
index 859763b..0000000
--- a/packages/DocumentsUI/src/com/android/documentsui/MimePredicate.java
+++ /dev/null
@@ -1,107 +0,0 @@
-/*
- * 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.
- */
-
-package com.android.documentsui;
-
-import android.annotation.Nullable;
-import android.provider.DocumentsContract.Document;
-
-import com.android.documentsui.model.DocumentInfo;
-import com.android.internal.util.Predicate;
-
-public class MimePredicate implements Predicate<DocumentInfo> {
- private final String[] mFilters;
-
- private static final String APK_TYPE = "application/vnd.android.package-archive";
- /**
- * MIME types that are visual in nature. For example, they should always be
- * shown as thumbnails in list mode.
- */
- public static final String[] VISUAL_MIMES = new String[] { "image/*", "video/*" };
-
- public MimePredicate(String[] filters) {
- mFilters = filters;
- }
-
- @Override
- public boolean apply(DocumentInfo doc) {
- if (doc.isDirectory()) {
- return true;
- }
- if (mimeMatches(mFilters, doc.mimeType)) {
- return true;
- }
- return false;
- }
-
- public static boolean mimeMatches(String[] filters, String[] tests) {
- if (tests == null) {
- return false;
- }
- for (String test : tests) {
- if (mimeMatches(filters, test)) {
- return true;
- }
- }
- return false;
- }
-
- public static boolean mimeMatches(String filter, String[] tests) {
- if (tests == null) {
- return true;
- }
- for (String test : tests) {
- if (mimeMatches(filter, test)) {
- return true;
- }
- }
- return false;
- }
-
- public static boolean mimeMatches(String[] filters, String test) {
- if (filters == null) {
- return true;
- }
- for (String filter : filters) {
- if (mimeMatches(filter, test)) {
- return true;
- }
- }
- return false;
- }
-
- public static boolean mimeMatches(String filter, String test) {
- if (test == null) {
- return false;
- } else if (filter == null || "*/*".equals(filter)) {
- return true;
- } else if (filter.equals(test)) {
- return true;
- } else if (filter.endsWith("/*")) {
- return filter.regionMatches(0, test, 0, filter.indexOf('/'));
- } else {
- return false;
- }
- }
-
- public static boolean isApkType(@Nullable String mimeType) {
- return APK_TYPE.equals(mimeType);
- }
-
- public static boolean isDirectoryType(@Nullable String mimeType) {
- return Document.MIME_TYPE_DIR.equals(mimeType);
- }
-}
diff --git a/packages/DocumentsUI/src/com/android/documentsui/NavigationViewManager.java b/packages/DocumentsUI/src/com/android/documentsui/NavigationViewManager.java
deleted file mode 100644
index 2554246..0000000
--- a/packages/DocumentsUI/src/com/android/documentsui/NavigationViewManager.java
+++ /dev/null
@@ -1,137 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.documentsui;
-
-import static com.android.documentsui.Shared.DEBUG;
-
-import android.annotation.Nullable;
-import android.graphics.drawable.Drawable;
-import android.util.Log;
-import android.view.View;
-
-import com.android.documentsui.dirlist.AnimationView;
-import com.android.documentsui.model.RootInfo;
-
-import java.util.function.Consumer;
-
-/**
- * A facade over the portions of the app and drawer toolbars.
- */
-public class NavigationViewManager {
-
- private static final String TAG = "NavigationViewManager";
-
- final DrawerController mDrawer;
- final DocumentsToolbar mToolbar;
- final State mState;
- final NavigationViewManager.Environment mEnv;
- final Breadcrumb mBreadcrumb;
-
- public NavigationViewManager(
- DrawerController drawer,
- DocumentsToolbar toolbar,
- State state,
- NavigationViewManager.Environment env,
- Breadcrumb breadcrumb) {
-
- mToolbar = toolbar;
- mDrawer = drawer;
- mState = state;
- mEnv = env;
- mBreadcrumb = breadcrumb;
- mBreadcrumb.setup(env, state, this::onNavigationItemSelected);
-
- mToolbar.setNavigationOnClickListener(
- new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- onNavigationIconClicked();
- }
- });
- }
-
- private void onNavigationIconClicked() {
- if (mDrawer.isPresent()) {
- mDrawer.setOpen(true, DrawerController.OPENED_HAMBURGER);
- }
- }
-
- void onNavigationItemSelected(int position) {
- boolean changed = false;
- while (mState.stack.size() > position + 1) {
- changed = true;
- mState.popDocument();
- }
- if (changed) {
- mEnv.refreshCurrentRootAndDirectory(AnimationView.ANIM_LEAVE);
- }
- }
-
- void update() {
-
- // TODO: Looks to me like this block is never getting hit.
- if (mEnv.isSearchExpanded()) {
- mToolbar.setTitle(null);
- mBreadcrumb.show(false);
- return;
- }
-
- mDrawer.setTitle(mEnv.getDrawerTitle());
-
- mToolbar.setNavigationIcon(getActionBarIcon());
- mToolbar.setNavigationContentDescription(R.string.drawer_open);
-
- if (mState.stack.size() <= 1) {
- mBreadcrumb.show(false);
- String title = mEnv.getCurrentRoot().title;
- if (DEBUG) Log.d(TAG, "New toolbar title is: " + title);
- mToolbar.setTitle(title);
- } else {
- mBreadcrumb.show(true);
- mToolbar.setTitle(null);
- mBreadcrumb.postUpdate();
- }
-
- if (DEBUG) Log.d(TAG, "Final toolbar title is: " + mToolbar.getTitle());
- }
-
- // Hamburger if drawer is present, else sad nullness.
- private @Nullable Drawable getActionBarIcon() {
- if (mDrawer.isPresent()) {
- return mToolbar.getContext().getDrawable(R.drawable.ic_hamburger);
- } else {
- return null;
- }
- }
-
- void revealRootsDrawer(boolean open) {
- mDrawer.setOpen(open);
- }
-
- interface Breadcrumb {
- void setup(Environment env, State state, Consumer<Integer> listener);
- void show(boolean visibility);
- void postUpdate();
- }
-
- interface Environment {
- RootInfo getCurrentRoot();
- String getDrawerTitle();
- void refreshCurrentRootAndDirectory(int animation);
- boolean isSearchExpanded();
- }
-}
diff --git a/packages/DocumentsUI/src/com/android/documentsui/OpenExternalDirectoryActivity.java b/packages/DocumentsUI/src/com/android/documentsui/OpenExternalDirectoryActivity.java
deleted file mode 100644
index 6588ee1..0000000
--- a/packages/DocumentsUI/src/com/android/documentsui/OpenExternalDirectoryActivity.java
+++ /dev/null
@@ -1,512 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.documentsui;
-
-import static android.os.Environment.isStandardDirectory;
-import static android.os.Environment.STANDARD_DIRECTORIES;
-import static android.os.storage.StorageVolume.EXTRA_DIRECTORY_NAME;
-import static android.os.storage.StorageVolume.EXTRA_STORAGE_VOLUME;
-
-import static com.android.documentsui.LocalPreferences.getScopedAccessPermissionStatus;
-import static com.android.documentsui.LocalPreferences.PERMISSION_ASK;
-import static com.android.documentsui.LocalPreferences.PERMISSION_ASK_AGAIN;
-import static com.android.documentsui.LocalPreferences.PERMISSION_NEVER_ASK;
-import static com.android.documentsui.LocalPreferences.setScopedAccessPermissionStatus;
-import static com.android.documentsui.Metrics.SCOPED_DIRECTORY_ACCESS_ALREADY_DENIED;
-import static com.android.documentsui.Metrics.SCOPED_DIRECTORY_ACCESS_ALREADY_GRANTED;
-import static com.android.documentsui.Metrics.SCOPED_DIRECTORY_ACCESS_DENIED;
-import static com.android.documentsui.Metrics.SCOPED_DIRECTORY_ACCESS_DENIED_AND_PERSIST;
-import static com.android.documentsui.Metrics.SCOPED_DIRECTORY_ACCESS_ERROR;
-import static com.android.documentsui.Metrics.SCOPED_DIRECTORY_ACCESS_GRANTED;
-import static com.android.documentsui.Metrics.SCOPED_DIRECTORY_ACCESS_INVALID_ARGUMENTS;
-import static com.android.documentsui.Metrics.SCOPED_DIRECTORY_ACCESS_INVALID_DIRECTORY;
-import static com.android.documentsui.Metrics.logInvalidScopedAccessRequest;
-import static com.android.documentsui.Metrics.logValidScopedAccessRequest;
-import static com.android.documentsui.Shared.DEBUG;
-
-import android.annotation.SuppressLint;
-import android.app.Activity;
-import android.app.ActivityManager;
-import android.app.AlertDialog;
-import android.app.Dialog;
-import android.app.DialogFragment;
-import android.app.FragmentManager;
-import android.app.FragmentTransaction;
-import android.content.ContentProviderClient;
-import android.content.Context;
-import android.content.DialogInterface;
-import android.content.DialogInterface.OnClickListener;
-import android.content.Intent;
-import android.content.UriPermission;
-import android.content.pm.PackageManager;
-import android.content.pm.PackageManager.NameNotFoundException;
-import android.net.Uri;
-import android.os.Bundle;
-import android.os.Parcelable;
-import android.os.RemoteException;
-import android.os.UserHandle;
-import android.os.storage.StorageManager;
-import android.os.storage.StorageVolume;
-import android.os.storage.VolumeInfo;
-import android.provider.DocumentsContract;
-import android.text.TextUtils;
-import android.util.Log;
-import android.view.View;
-import android.widget.CheckBox;
-import android.widget.CompoundButton;
-import android.widget.CompoundButton.OnCheckedChangeListener;
-import android.widget.TextView;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.List;
-
-/**
- * Activity responsible for handling {@link Intent#ACTION_OPEN_EXTERNAL_DOCUMENT}.
- */
-public class OpenExternalDirectoryActivity extends Activity {
- private static final String TAG = "OpenExternalDirectory";
- private static final String FM_TAG = "open_external_directory";
- private static final String EXTERNAL_STORAGE_AUTH = "com.android.externalstorage.documents";
- private static final String EXTRA_FILE = "com.android.documentsui.FILE";
- private static final String EXTRA_APP_LABEL = "com.android.documentsui.APP_LABEL";
- private static final String EXTRA_VOLUME_LABEL = "com.android.documentsui.VOLUME_LABEL";
- private static final String EXTRA_VOLUME_UUID = "com.android.documentsui.VOLUME_UUID";
- private static final String EXTRA_IS_ROOT = "com.android.documentsui.IS_ROOT";
- private static final String EXTRA_IS_PRIMARY = "com.android.documentsui.IS_PRIMARY";
- // Special directory name representing the full volume
- static final String DIRECTORY_ROOT = "ROOT_DIRECTORY";
-
- private ContentProviderClient mExternalStorageClient;
-
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- if (savedInstanceState != null) {
- if (DEBUG) Log.d(TAG, "activity.onCreateDialog(): reusing instance");
- return;
- }
-
- final Intent intent = getIntent();
- if (intent == null) {
- if (DEBUG) Log.d(TAG, "missing intent");
- logInvalidScopedAccessRequest(this, SCOPED_DIRECTORY_ACCESS_INVALID_ARGUMENTS);
- setResult(RESULT_CANCELED);
- finish();
- return;
- }
- final Parcelable storageVolume = intent.getParcelableExtra(EXTRA_STORAGE_VOLUME);
- if (!(storageVolume instanceof StorageVolume)) {
- if (DEBUG)
- Log.d(TAG, "extra " + EXTRA_STORAGE_VOLUME + " is not a StorageVolume: "
- + storageVolume);
- logInvalidScopedAccessRequest(this, SCOPED_DIRECTORY_ACCESS_INVALID_ARGUMENTS);
- setResult(RESULT_CANCELED);
- finish();
- return;
- }
- String directoryName = intent.getStringExtra(EXTRA_DIRECTORY_NAME );
- if (directoryName == null) {
- directoryName = DIRECTORY_ROOT;
- }
- final StorageVolume volume = (StorageVolume) storageVolume;
- if (getScopedAccessPermissionStatus(getApplicationContext(), getCallingPackage(),
- volume.getUuid(), directoryName) == PERMISSION_NEVER_ASK) {
- logValidScopedAccessRequest(this, directoryName,
- SCOPED_DIRECTORY_ACCESS_ALREADY_DENIED);
- setResult(RESULT_CANCELED);
- finish();
- return;
- }
-
- final int userId = UserHandle.myUserId();
- if (!showFragment(this, userId, volume, directoryName)) {
- setResult(RESULT_CANCELED);
- finish();
- return;
- }
- }
-
- @Override
- public void onDestroy() {
- super.onDestroy();
- if (mExternalStorageClient != null) {
- mExternalStorageClient.close();
- }
- }
-
- /**
- * Validates the given path (volume + directory) and display the appropriate dialog asking the
- * user to grant access to it.
- */
- private static boolean showFragment(OpenExternalDirectoryActivity activity, int userId,
- StorageVolume storageVolume, String directoryName) {
- if (DEBUG)
- Log.d(TAG, "showFragment() for volume " + storageVolume.dump() + ", directory "
- + directoryName + ", and user " + userId);
- final boolean isRoot = directoryName.equals(DIRECTORY_ROOT);
- final boolean isPrimary = storageVolume.isPrimary();
-
- if (isRoot && isPrimary) {
- if (DEBUG) Log.d(TAG, "root access requested on primary volume");
- return false;
- }
-
- final File volumeRoot = storageVolume.getPathFile();
- File file;
- try {
- file = isRoot ? volumeRoot : new File(volumeRoot, directoryName).getCanonicalFile();
- } catch (IOException e) {
- Log.e(TAG, "Could not get canonical file for volume " + storageVolume.dump()
- + " and directory " + directoryName);
- logInvalidScopedAccessRequest(activity, SCOPED_DIRECTORY_ACCESS_ERROR);
- return false;
- }
- final StorageManager sm =
- (StorageManager) activity.getSystemService(Context.STORAGE_SERVICE);
-
- final String root, directory;
- if (isRoot) {
- root = volumeRoot.getAbsolutePath();
- directory = ".";
- } else {
- root = file.getParent();
- directory = file.getName();
- // Verify directory is valid.
- if (TextUtils.isEmpty(directory) || !isStandardDirectory(directory)) {
- if (DEBUG)
- Log.d(TAG, "Directory '" + directory + "' is not standard (full path: '"
- + file.getAbsolutePath() + "')");
- logInvalidScopedAccessRequest(activity, SCOPED_DIRECTORY_ACCESS_INVALID_DIRECTORY);
- return false;
- }
- }
-
- // Gets volume label and converted path.
- String volumeLabel = null;
- String volumeUuid = null;
- final List<VolumeInfo> volumes = sm.getVolumes();
- if (DEBUG) Log.d(TAG, "Number of volumes: " + volumes.size());
- File internalRoot = null;
- boolean found = true;
- for (VolumeInfo volume : volumes) {
- if (isRightVolume(volume, root, userId)) {
- found = true;
- internalRoot = volume.getInternalPathForUser(userId);
- // Must convert path before calling getDocIdForFileCreateNewDir()
- if (DEBUG) Log.d(TAG, "Converting " + root + " to " + internalRoot);
- file = isRoot ? internalRoot : new File(internalRoot, directory);
- volumeUuid = storageVolume.getUuid();
- volumeLabel = sm.getBestVolumeDescription(volume);
- if (TextUtils.isEmpty(volumeLabel)) {
- volumeLabel = storageVolume.getDescription(activity);
- }
- if (TextUtils.isEmpty(volumeLabel)) {
- volumeLabel = activity.getString(android.R.string.unknownName);
- Log.w(TAG, "No volume description for " + volume + "; using " + volumeLabel);
- }
- break;
- }
- }
- if (internalRoot == null) {
- // Should not happen on normal circumstances, unless app crafted an invalid volume
- // using reflection or the list of mounted volumes changed.
- Log.e(TAG, "Didn't find right volume for '" + storageVolume.dump() + "' on " + volumes);
- return false;
- }
-
- // Checks if the user has granted the permission already.
- final Intent intent = getIntentForExistingPermission(activity, isRoot, internalRoot, file);
- if (intent != null) {
- logValidScopedAccessRequest(activity, directory,
- SCOPED_DIRECTORY_ACCESS_ALREADY_GRANTED);
- activity.setResult(RESULT_OK, intent);
- activity.finish();
- return true;
- }
-
- if (!found) {
- Log.e(TAG, "Could not get volume for " + file);
- logInvalidScopedAccessRequest(activity, SCOPED_DIRECTORY_ACCESS_ERROR);
- return false;
- }
-
- // Gets the package label.
- final String appLabel = getAppLabel(activity);
- if (appLabel == null) {
- // Error already logged.
- return false;
- }
-
- // Sets args that will be retrieve on onCreate()
- final Bundle args = new Bundle();
- args.putString(EXTRA_FILE, file.getAbsolutePath());
- args.putString(EXTRA_VOLUME_LABEL, volumeLabel);
- args.putString(EXTRA_VOLUME_UUID, volumeUuid);
- args.putString(EXTRA_APP_LABEL, appLabel);
- args.putBoolean(EXTRA_IS_ROOT, isRoot);
- args.putBoolean(EXTRA_IS_PRIMARY, isPrimary);
-
- final FragmentManager fm = activity.getFragmentManager();
- final FragmentTransaction ft = fm.beginTransaction();
- final OpenExternalDirectoryDialogFragment fragment =
- new OpenExternalDirectoryDialogFragment();
- fragment.setArguments(args);
- ft.add(fragment, FM_TAG);
- ft.commitAllowingStateLoss();
-
- return true;
- }
-
- private static String getAppLabel(Activity activity) {
- final String packageName = activity.getCallingPackage();
- final PackageManager pm = activity.getPackageManager();
- try {
- return pm.getApplicationLabel(pm.getApplicationInfo(packageName, 0)).toString();
- } catch (NameNotFoundException e) {
- logInvalidScopedAccessRequest(activity, SCOPED_DIRECTORY_ACCESS_ERROR);
- Log.w(TAG, "Could not get label for package " + packageName);
- return null;
- }
- }
-
- private static boolean isRightVolume(VolumeInfo volume, String root, int userId) {
- final File userPath = volume.getPathForUser(userId);
- final String path = userPath == null ? null : volume.getPathForUser(userId).getPath();
- final boolean isMounted = volume.isMountedReadable();
- if (DEBUG)
- Log.d(TAG, "Volume: " + volume
- + "\n\tuserId: " + userId
- + "\n\tuserPath: " + userPath
- + "\n\troot: " + root
- + "\n\tpath: " + path
- + "\n\tisMounted: " + isMounted);
-
- return isMounted && root.equals(path);
- }
-
- private static Uri getGrantedUriPermission(Context context, ContentProviderClient provider,
- File file) {
- // Calls ExternalStorageProvider to get the doc id for the file
- final Bundle bundle;
- try {
- bundle = provider.call("getDocIdForFileCreateNewDir", file.getPath(), null);
- } catch (RemoteException e) {
- Log.e(TAG, "Did not get doc id from External Storage provider for " + file, e);
- logInvalidScopedAccessRequest(context, SCOPED_DIRECTORY_ACCESS_ERROR);
- return null;
- }
- final String docId = bundle == null ? null : bundle.getString("DOC_ID");
- if (docId == null) {
- Log.e(TAG, "Did not get doc id from External Storage provider for " + file);
- logInvalidScopedAccessRequest(context, SCOPED_DIRECTORY_ACCESS_ERROR);
- return null;
- }
- if (DEBUG) Log.d(TAG, "doc id for " + file + ": " + docId);
-
- final Uri uri = DocumentsContract.buildTreeDocumentUri(EXTERNAL_STORAGE_AUTH, docId);
- if (uri == null) {
- Log.e(TAG, "Could not get URI for doc id " + docId);
- return null;
- }
- if (DEBUG) Log.d(TAG, "URI for " + file + ": " + uri);
- return uri;
- }
-
- private static Intent createGrantedUriPermissionsIntent(Context context,
- ContentProviderClient provider, File file) {
- final Uri uri = getGrantedUriPermission(context, provider, file);
- return createGrantedUriPermissionsIntent(uri);
- }
-
- private static Intent createGrantedUriPermissionsIntent(Uri uri) {
- final Intent intent = new Intent();
- intent.setData(uri);
- intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION
- | Intent.FLAG_GRANT_WRITE_URI_PERMISSION
- | Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION
- | Intent.FLAG_GRANT_PREFIX_URI_PERMISSION);
- return intent;
- }
-
- private static Intent getIntentForExistingPermission(OpenExternalDirectoryActivity activity,
- boolean isRoot, File root, File file) {
- final String packageName = activity.getCallingPackage();
- final ContentProviderClient storageClient = activity.getExternalStorageClient();
- final Uri grantedUri = getGrantedUriPermission(activity, storageClient, file);
- final Uri rootUri = root.equals(file) ? grantedUri
- : getGrantedUriPermission(activity, storageClient, root);
-
- if (DEBUG)
- Log.d(TAG, "checking if " + packageName + " already has permission for " + grantedUri
- + " or its root (" + rootUri + ")");
- final ActivityManager am =
- (ActivityManager) activity.getSystemService(Context.ACTIVITY_SERVICE);
- for (UriPermission uriPermission : am.getGrantedUriPermissions(packageName).getList()) {
- final Uri uri = uriPermission.getUri();
- if (uri == null) {
- Log.w(TAG, "null URI for " + uriPermission);
- continue;
- }
- if (uri.equals(grantedUri) || uri.equals(rootUri)) {
- if (DEBUG) Log.d(TAG, packageName + " already has permission: " + uriPermission);
- return createGrantedUriPermissionsIntent(grantedUri);
- }
- }
- if (DEBUG) Log.d(TAG, packageName + " does not have permission for " + grantedUri);
- return null;
- }
-
- public static class OpenExternalDirectoryDialogFragment extends DialogFragment {
-
- private File mFile;
- private String mVolumeUuid;
- private String mVolumeLabel;
- private String mAppLabel;
- private boolean mIsRoot;
- private boolean mIsPrimary;
- private CheckBox mDontAskAgain;
- private OpenExternalDirectoryActivity mActivity;
- private AlertDialog mDialog;
-
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setRetainInstance(true);
- final Bundle args = getArguments();
- if (args != null) {
- mFile = new File(args.getString(EXTRA_FILE));
- mVolumeUuid = args.getString(EXTRA_VOLUME_UUID);
- mVolumeLabel = args.getString(EXTRA_VOLUME_LABEL);
- mAppLabel = args.getString(EXTRA_APP_LABEL);
- mIsRoot = args.getBoolean(EXTRA_IS_ROOT);
- mIsPrimary= args.getBoolean(EXTRA_IS_PRIMARY);
- }
- mActivity = (OpenExternalDirectoryActivity) getActivity();
- }
-
- @Override
- public void onDestroyView() {
- // Workaround for https://code.google.com/p/android/issues/detail?id=17423
- if (mDialog != null && getRetainInstance()) {
- mDialog.setDismissMessage(null);
- }
- super.onDestroyView();
- }
-
- @Override
- public Dialog onCreateDialog(Bundle savedInstanceState) {
- if (mDialog != null) {
- if (DEBUG) Log.d(TAG, "fragment.onCreateDialog(): reusing dialog");
- return mDialog;
- }
- if (mActivity != getActivity()) {
- // Sanity check.
- Log.wtf(TAG, "activity references don't match on onCreateDialog(): mActivity = "
- + mActivity + " , getActivity() = " + getActivity());
- mActivity = (OpenExternalDirectoryActivity) getActivity();
- }
- final String directory = mFile.getName();
- final String directoryName = mIsRoot ? DIRECTORY_ROOT : directory;
- final Context context = mActivity.getApplicationContext();
- final OnClickListener listener = new OnClickListener() {
-
- @Override
- public void onClick(DialogInterface dialog, int which) {
- Intent intent = null;
- if (which == DialogInterface.BUTTON_POSITIVE) {
- intent = createGrantedUriPermissionsIntent(mActivity,
- mActivity.getExternalStorageClient(), mFile);
- }
- if (which == DialogInterface.BUTTON_NEGATIVE || intent == null) {
- logValidScopedAccessRequest(mActivity, directoryName,
- SCOPED_DIRECTORY_ACCESS_DENIED);
- final boolean checked = mDontAskAgain.isChecked();
- if (checked) {
- logValidScopedAccessRequest(mActivity, directory,
- SCOPED_DIRECTORY_ACCESS_DENIED_AND_PERSIST);
- setScopedAccessPermissionStatus(context, mActivity.getCallingPackage(),
- mVolumeUuid, directoryName, PERMISSION_NEVER_ASK);
- } else {
- setScopedAccessPermissionStatus(context, mActivity.getCallingPackage(),
- mVolumeUuid, directoryName, PERMISSION_ASK_AGAIN);
- }
- mActivity.setResult(RESULT_CANCELED);
- } else {
- logValidScopedAccessRequest(mActivity, directory,
- SCOPED_DIRECTORY_ACCESS_GRANTED);
- mActivity.setResult(RESULT_OK, intent);
- }
- mActivity.finish();
- }
- };
-
- @SuppressLint("InflateParams")
- // It's ok pass null ViewRoot on AlertDialogs.
- final View view = View.inflate(mActivity, R.layout.dialog_open_scoped_directory, null);
- final CharSequence message;
- if (mIsRoot) {
- message = TextUtils.expandTemplate(getText(
- R.string.open_external_dialog_root_request), mAppLabel, mVolumeLabel);
- } else {
- message = TextUtils.expandTemplate(
- getText(mIsPrimary ? R.string.open_external_dialog_request_primary_volume
- : R.string.open_external_dialog_request),
- mAppLabel, directory, mVolumeLabel);
- }
- final TextView messageField = (TextView) view.findViewById(R.id.message);
- messageField.setText(message);
- mDialog = new AlertDialog.Builder(mActivity, R.style.Theme_AppCompat_Light_Dialog_Alert)
- .setView(view)
- .setPositiveButton(R.string.allow, listener)
- .setNegativeButton(R.string.deny, listener)
- .create();
-
- mDontAskAgain = (CheckBox) view.findViewById(R.id.do_not_ask_checkbox);
- if (getScopedAccessPermissionStatus(context, mActivity.getCallingPackage(),
- mVolumeUuid, directoryName) == PERMISSION_ASK_AGAIN) {
- mDontAskAgain.setVisibility(View.VISIBLE);
- mDontAskAgain.setOnCheckedChangeListener(new OnCheckedChangeListener() {
-
- @Override
- public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
- mDialog.getButton(DialogInterface.BUTTON_POSITIVE).setEnabled(!isChecked);
- }
- });
- }
-
- return mDialog;
- }
-
- @Override
- public void onCancel(DialogInterface dialog) {
- super.onCancel(dialog);
- final Activity activity = getActivity();
- logValidScopedAccessRequest(activity, mFile.getName(), SCOPED_DIRECTORY_ACCESS_DENIED);
- activity.setResult(RESULT_CANCELED);
- activity.finish();
- }
- }
-
- private synchronized ContentProviderClient getExternalStorageClient() {
- if (mExternalStorageClient == null) {
- mExternalStorageClient =
- getContentResolver().acquireContentProviderClient(EXTERNAL_STORAGE_AUTH);
- }
- return mExternalStorageClient;
- }
-}
diff --git a/packages/DocumentsUI/src/com/android/documentsui/OperationDialogFragment.java b/packages/DocumentsUI/src/com/android/documentsui/OperationDialogFragment.java
deleted file mode 100644
index 140baad..0000000
--- a/packages/DocumentsUI/src/com/android/documentsui/OperationDialogFragment.java
+++ /dev/null
@@ -1,130 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.documentsui;
-
-import android.annotation.IntDef;
-import android.app.AlertDialog;
-import android.app.Dialog;
-import android.app.DialogFragment;
-import android.app.FragmentManager;
-import android.app.FragmentTransaction;
-import android.content.DialogInterface;
-import android.os.Bundle;
-import android.text.Html;
-
-import com.android.documentsui.model.DocumentInfo;
-import com.android.documentsui.model.DocumentStack;
-import com.android.documentsui.services.FileOperationService;
-import com.android.documentsui.services.FileOperationService.OpType;
-
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.util.ArrayList;
-
-/**
- * Alert dialog for operation dialogs.
- */
-public class OperationDialogFragment extends DialogFragment {
-
- public static final int DIALOG_TYPE_UNKNOWN = 0;
- public static final int DIALOG_TYPE_FAILURE = 1;
- public static final int DIALOG_TYPE_CONVERTED = 2;
-
- @IntDef(flag = true, value = {
- DIALOG_TYPE_UNKNOWN,
- DIALOG_TYPE_FAILURE,
- DIALOG_TYPE_CONVERTED
- })
-
- @Retention(RetentionPolicy.SOURCE)
- public @interface DialogType {}
-
- private static final String TAG = "OperationDialogFragment";
-
- public static void show(FragmentManager fm, @DialogType int dialogType,
- ArrayList<DocumentInfo> failedSrcList, DocumentStack dstStack,
- @OpType int operationType) {
- final Bundle args = new Bundle();
- args.putInt(FileOperationService.EXTRA_DIALOG_TYPE, dialogType);
- args.putInt(FileOperationService.EXTRA_OPERATION_TYPE, operationType);
- args.putParcelableArrayList(FileOperationService.EXTRA_SRC_LIST, failedSrcList);
-
- final FragmentTransaction ft = fm.beginTransaction();
- final OperationDialogFragment fragment = new OperationDialogFragment();
- fragment.setArguments(args);
-
- ft.add(fragment, TAG);
- ft.commitAllowingStateLoss();
- }
-
- @Override
- public Dialog onCreateDialog(Bundle inState) {
- super.onCreate(inState);
-
- final @DialogType int dialogType =
- getArguments().getInt(FileOperationService.EXTRA_DIALOG_TYPE);
- final @OpType int operationType =
- getArguments().getInt(FileOperationService.EXTRA_OPERATION_TYPE);
- final ArrayList<DocumentInfo> srcList = getArguments().getParcelableArrayList(
- FileOperationService.EXTRA_SRC_LIST);
-
- final AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
- String messageFormat;
-
- switch (dialogType) {
- case DIALOG_TYPE_CONVERTED:
- messageFormat = getString(R.string.copy_converted_warning_content);
- break;
-
- case DIALOG_TYPE_FAILURE:
- switch (operationType) {
- case FileOperationService.OPERATION_COPY:
- messageFormat = getString(R.string.copy_failure_alert_content);
- break;
- case FileOperationService.OPERATION_DELETE:
- messageFormat = getString(R.string.delete_failure_alert_content);
- break;
- case FileOperationService.OPERATION_MOVE:
- messageFormat = getString(R.string.move_failure_alert_content);
- break;
- default:
- throw new UnsupportedOperationException();
- }
- break;
-
- default:
- throw new UnsupportedOperationException();
- }
-
- final StringBuilder list = new StringBuilder("<p>");
- for (DocumentInfo documentInfo : srcList) {
- list.append(String.format("• %s<br>", Html.escapeHtml(documentInfo.displayName)));
- }
- list.append("</p>");
- builder.setMessage(Html.fromHtml(String.format(messageFormat, list.toString())));
- builder.setPositiveButton(
- R.string.close,
- new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int id) {
- dialog.dismiss();
- }
- });
-
- return builder.create();
- }
-}
diff --git a/packages/DocumentsUI/src/com/android/documentsui/PackageReceiver.java b/packages/DocumentsUI/src/com/android/documentsui/PackageReceiver.java
deleted file mode 100644
index aef63af..0000000
--- a/packages/DocumentsUI/src/com/android/documentsui/PackageReceiver.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * 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.
- */
-
-package com.android.documentsui;
-
-import android.content.BroadcastReceiver;
-import android.content.ContentResolver;
-import android.content.Context;
-import android.content.Intent;
-import android.net.Uri;
-
-/**
- * Clean up {@link RecentsProvider} when packages are removed.
- */
-public class PackageReceiver extends BroadcastReceiver {
- @Override
- public void onReceive(Context context, Intent intent) {
- final ContentResolver resolver = context.getContentResolver();
-
- final String action = intent.getAction();
- if (Intent.ACTION_PACKAGE_FULLY_REMOVED.equals(action)) {
- resolver.call(RecentsProvider.buildRecent(), RecentsProvider.METHOD_PURGE, null, null);
-
- } else if (Intent.ACTION_PACKAGE_DATA_CLEARED.equals(action)) {
- final Uri data = intent.getData();
- if (data != null) {
- final String packageName = data.getSchemeSpecificPart();
- resolver.call(RecentsProvider.buildRecent(), RecentsProvider.METHOD_PURGE_PACKAGE,
- packageName, null);
- }
- }
- }
-}
diff --git a/packages/DocumentsUI/src/com/android/documentsui/PairedTask.java b/packages/DocumentsUI/src/com/android/documentsui/PairedTask.java
deleted file mode 100644
index 7d2da0b..0000000
--- a/packages/DocumentsUI/src/com/android/documentsui/PairedTask.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.documentsui;
-
-import android.app.Activity;
-import android.os.AsyncTask;
-
-/**
- * An {@link CheckedTask} that guards work with checks that a paired {@link Activity}
- * is still alive. Instances of this class make no progress.
- *
- * @template Owner Activity type.
- * @template Input input type
- * @template Output output type
- */
-abstract class PairedTask<Owner extends Activity, Input, Output>
- extends CheckedTask<Input, Output> {
-
- protected final Owner mOwner;
-
- public PairedTask(Owner owner) {
- super(owner::isDestroyed);
- mOwner = owner;
- }
-}
diff --git a/packages/DocumentsUI/src/com/android/documentsui/PickFragment.java b/packages/DocumentsUI/src/com/android/documentsui/PickFragment.java
deleted file mode 100644
index 933506c..0000000
--- a/packages/DocumentsUI/src/com/android/documentsui/PickFragment.java
+++ /dev/null
@@ -1,140 +0,0 @@
-/*
- * Copyright (C) 2014 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.documentsui;
-
-import static com.android.documentsui.services.FileOperationService.OPERATION_DELETE;
-import static com.android.documentsui.services.FileOperationService.OPERATION_MOVE;
-import static com.android.documentsui.services.FileOperationService.OPERATION_UNKNOWN;
-
-import android.app.Activity;
-import android.app.Fragment;
-import android.app.FragmentManager;
-import android.app.FragmentTransaction;
-import android.os.Bundle;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.Button;
-
-import com.android.documentsui.model.DocumentInfo;
-import com.android.documentsui.services.FileOperationService.OpType;
-
-/**
- * Display pick confirmation bar, usually for selecting a directory.
- */
-public class PickFragment extends Fragment {
- public static final String TAG = "PickFragment";
-
- private int mAction;
- // Only legal values are OPERATION_COPY, OPERATION_MOVE, and unset (OPERATION_UNKNOWN).
- private @OpType int mCopyOperationSubType = OPERATION_UNKNOWN;
- private DocumentInfo mPickTarget;
- private View mContainer;
- private Button mPick;
- private Button mCancel;
-
- public static void show(FragmentManager fm) {
- // Fragment can be restored by FragmentManager automatically.
- if (get(fm) != null) {
- return;
- }
-
- final PickFragment fragment = new PickFragment();
- final FragmentTransaction ft = fm.beginTransaction();
- ft.replace(R.id.container_save, fragment, TAG);
- ft.commitAllowingStateLoss();
- }
-
- public static PickFragment get(FragmentManager fm) {
- return (PickFragment) fm.findFragmentByTag(TAG);
- }
-
- @Override
- public View onCreateView(
- LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
- mContainer = inflater.inflate(R.layout.fragment_pick, container, false);
-
- mPick = (Button) mContainer.findViewById(android.R.id.button1);
- mPick.setOnClickListener(mPickListener);
-
- mCancel = (Button) mContainer.findViewById(android.R.id.button2);
- mCancel.setOnClickListener(mCancelListener);
-
- updateView();
- return mContainer;
- }
-
- private View.OnClickListener mPickListener = new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- final DocumentsActivity activity = DocumentsActivity.get(PickFragment.this);
- activity.onPickRequested(mPickTarget);
- }
- };
-
- private View.OnClickListener mCancelListener = new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- final BaseActivity activity = BaseActivity.get(PickFragment.this);
- activity.setResult(Activity.RESULT_CANCELED);
- activity.finish();
- }
- };
-
- /**
- * @param action Which action defined in State is the picker shown for.
- */
- public void setPickTarget(
- int action, @OpType int copyOperationSubType, DocumentInfo pickTarget) {
- assert(copyOperationSubType != OPERATION_DELETE);
-
- mAction = action;
- mCopyOperationSubType = copyOperationSubType;
- mPickTarget = pickTarget;
- if (mContainer != null) {
- updateView();
- }
- }
-
- /**
- * Applies the state of fragment to the view components.
- */
- private void updateView() {
- switch (mAction) {
- case State.ACTION_OPEN_TREE:
- mPick.setText(R.string.button_select);
- mCancel.setVisibility(View.GONE);
- break;
- case State.ACTION_PICK_COPY_DESTINATION:
- mPick.setText(mCopyOperationSubType == OPERATION_MOVE
- ? R.string.button_move : R.string.button_copy);
- mCancel.setVisibility(View.VISIBLE);
- break;
- default:
- mContainer.setVisibility(View.GONE);
- return;
- }
-
- if (mPickTarget != null && (
- mAction == State.ACTION_OPEN_TREE ||
- mPickTarget.isCreateSupported())) {
- mContainer.setVisibility(View.VISIBLE);
- } else {
- mContainer.setVisibility(View.GONE);
- }
- }
-}
diff --git a/packages/DocumentsUI/src/com/android/documentsui/ProviderExecutor.java b/packages/DocumentsUI/src/com/android/documentsui/ProviderExecutor.java
deleted file mode 100644
index 8145edc..0000000
--- a/packages/DocumentsUI/src/com/android/documentsui/ProviderExecutor.java
+++ /dev/null
@@ -1,110 +0,0 @@
-/*
- * 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.
- */
-
-package com.android.documentsui;
-
-import android.os.AsyncTask;
-
-import com.android.internal.annotations.GuardedBy;
-
-import java.lang.ref.WeakReference;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.concurrent.Executor;
-import java.util.concurrent.LinkedBlockingQueue;
-
-public class ProviderExecutor extends Thread implements Executor {
-
- @GuardedBy("sExecutors")
- private static HashMap<String, ProviderExecutor> sExecutors = new HashMap<>();
-
- public static ProviderExecutor forAuthority(String authority) {
- synchronized (sExecutors) {
- ProviderExecutor executor = sExecutors.get(authority);
- if (executor == null) {
- executor = new ProviderExecutor();
- executor.setName("ProviderExecutor: " + authority);
- executor.start();
- sExecutors.put(authority, executor);
- }
- return executor;
- }
- }
-
- public interface Preemptable {
- void preempt();
- }
-
- private final LinkedBlockingQueue<Runnable> mQueue = new LinkedBlockingQueue<Runnable>();
-
- private final ArrayList<WeakReference<Preemptable>> mPreemptable = new ArrayList<>();
-
- private void preempt() {
- synchronized (mPreemptable) {
- int count = 0;
- for (WeakReference<Preemptable> ref : mPreemptable) {
- final Preemptable p = ref.get();
- if (p != null) {
- count++;
- p.preempt();
- }
- }
- mPreemptable.clear();
- }
- }
-
- /**
- * Execute the given task. If given task is not {@link Preemptable}, it will
- * preempt all outstanding preemptable tasks.
- */
- public <P> void execute(AsyncTask<P, ?, ?> task, P... params) {
- if (task instanceof Preemptable) {
- synchronized (mPreemptable) {
- mPreemptable.add(new WeakReference<Preemptable>((Preemptable) task));
- }
- task.executeOnExecutor(mNonPreemptingExecutor, params);
- } else {
- task.executeOnExecutor(this, params);
- }
- }
-
- private Executor mNonPreemptingExecutor = new Executor() {
- @Override
- public void execute(Runnable command) {
- assert(command != null);
- mQueue.add(command);
- }
- };
-
- @Override
- public void execute(Runnable command) {
- preempt();
- assert(command != null);
- mQueue.add(command);
- }
-
- @Override
- public void run() {
- while (true) {
- try {
- final Runnable command = mQueue.take();
- command.run();
- } catch (InterruptedException e) {
- // That was weird; let's go look for more tasks.
- }
- }
- }
-}
diff --git a/packages/DocumentsUI/src/com/android/documentsui/QuickViewIntentBuilder.java b/packages/DocumentsUI/src/com/android/documentsui/QuickViewIntentBuilder.java
deleted file mode 100644
index 5e3bbbb..0000000
--- a/packages/DocumentsUI/src/com/android/documentsui/QuickViewIntentBuilder.java
+++ /dev/null
@@ -1,199 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.documentsui;
-
-import static com.android.documentsui.Shared.DEBUG;
-import static com.android.documentsui.Shared.MAX_DOCS_IN_INTENT;
-import static com.android.documentsui.model.DocumentInfo.getCursorString;
-
-import android.content.ClipData;
-import android.content.ClipDescription;
-import android.content.ComponentName;
-import android.content.Intent;
-import android.content.pm.PackageManager;
-import android.content.res.Resources;
-import android.database.Cursor;
-import android.net.Uri;
-import android.os.Build;
-import android.provider.DocumentsContract;
-import android.provider.DocumentsContract.Document;
-import android.support.annotation.Nullable;
-import android.text.TextUtils;
-import android.util.Log;
-import android.util.Range;
-
-import com.android.documentsui.dirlist.Model;
-import com.android.documentsui.model.DocumentInfo;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Provides support for gather a list of quick-viewable files into a quick view intent.
- */
-final class QuickViewIntentBuilder {
-
- private static final String TAG = "QuickViewIntentBuilder";
-
- private final DocumentInfo mDocument;
- private final Model mModel;
-
- private final PackageManager mPkgManager;
- private final Resources mResources;
-
- public QuickViewIntentBuilder(
- PackageManager pkgManager,
- Resources resources,
- DocumentInfo doc,
- Model model) {
-
- mPkgManager = pkgManager;
- mResources = resources;
- mDocument = doc;
- mModel = model;
- }
-
- /**
- * Builds the intent for quick viewing. Short circuits building if a handler cannot
- * be resolved; in this case {@code null} is returned.
- */
- @Nullable Intent build() {
- if (DEBUG) Log.d(TAG, "Preparing intent for doc:" + mDocument.documentId);
-
- String trustedPkg = getQuickViewPackage();
-
- if (!TextUtils.isEmpty(trustedPkg)) {
- Intent intent = new Intent(Intent.ACTION_QUICK_VIEW);
- intent.setDataAndType(mDocument.derivedUri, mDocument.mimeType);
- intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
- intent.setPackage(trustedPkg);
- if (hasRegisteredHandler(intent)) {
- final ArrayList<Uri> uris = new ArrayList<Uri>();
- final int documentLocation = collectViewableUris(uris);
- final Range<Integer> range = computeSiblingsRange(uris, documentLocation);
-
- ClipData clipData = null;
- ClipData.Item item;
- Uri uri;
- for (int i = range.getLower(); i <= range.getUpper(); i++) {
- uri = uris.get(i);
- item = new ClipData.Item(uri);
- if (DEBUG) Log.d(TAG, "Including file: " + uri);
- if (clipData == null) {
- clipData = new ClipData(
- "URIs", new String[] { ClipDescription.MIMETYPE_TEXT_URILIST },
- item);
- } else {
- clipData.addItem(item);
- }
- }
-
- // The documentLocation variable contains an index in "uris". However,
- // ClipData contains a slice of "uris", so we need to shift the location
- // so it points to the same Uri.
- intent.putExtra(Intent.EXTRA_INDEX, documentLocation - range.getLower());
- intent.setClipData(clipData);
-
- return intent;
- } else {
- Log.e(TAG, "Can't resolve trusted quick view package: " + trustedPkg);
- }
- }
-
- return null;
- }
-
- private String getQuickViewPackage() {
- String resValue = mResources.getString(R.string.trusted_quick_viewer_package);
- if (Build.IS_DEBUGGABLE ) {
- // Allow users of debug devices to override default quick viewer
- // for the purposes of testing.
- return android.os.SystemProperties.get("debug.quick_viewer", resValue);
- }
- return resValue;
- }
-
- private int collectViewableUris(ArrayList<Uri> uris) {
- final String[] siblingIds = mModel.getModelIds();
- uris.ensureCapacity(siblingIds.length);
-
- int documentLocation = 0;
- Cursor cursor;
- String mimeType;
- String id;
- String authority;
- Uri uri;
-
- // Cursor's are not guaranteed to be immutable. Hence, traverse it only once.
- for (int i = 0; i < siblingIds.length; i++) {
- cursor = mModel.getItem(siblingIds[i]);
-
- if (cursor == null) {
- if (DEBUG) Log.d(TAG,
- "Unable to obtain cursor for sibling document, modelId: "
- + siblingIds[i]);
- continue;
- }
-
- mimeType = getCursorString(cursor, Document.COLUMN_MIME_TYPE);
- if (Document.MIME_TYPE_DIR.equals(mimeType)) {
- if (DEBUG) Log.d(TAG,
- "Skipping directory, not supported by quick view. modelId: "
- + siblingIds[i]);
- continue;
- }
-
- id = getCursorString(cursor, Document.COLUMN_DOCUMENT_ID);
- authority = getCursorString(cursor, RootCursorWrapper.COLUMN_AUTHORITY);
- uri = DocumentsContract.buildDocumentUri(authority, id);
-
- uris.add(uri);
-
- if (id.equals(mDocument.documentId)) {
- documentLocation = uris.size() - 1; // Position in "uris", not in the model.
- if (DEBUG) Log.d(TAG, "Found starting point for QV. " + documentLocation);
- }
- }
-
- return documentLocation;
- }
-
- private static Range<Integer> computeSiblingsRange(List<Uri> uris, int documentLocation) {
- // Restrict number of siblings to avoid hitting the IPC limit.
- // TODO: Remove this restriction once ClipData can hold an arbitrary number of
- // items.
- int firstSibling;
- int lastSibling;
- if (documentLocation < uris.size() / 2) {
- firstSibling = Math.max(0, documentLocation - MAX_DOCS_IN_INTENT / 2);
- lastSibling = Math.min(uris.size() - 1, firstSibling + MAX_DOCS_IN_INTENT - 1);
- } else {
- lastSibling = Math.min(uris.size() - 1, documentLocation + MAX_DOCS_IN_INTENT / 2);
- firstSibling = Math.max(0, lastSibling - MAX_DOCS_IN_INTENT + 1);
- }
-
- if (DEBUG) Log.d(TAG, "Copmuted siblings from index: " + firstSibling
- + " to: " + lastSibling);
-
- return new Range(firstSibling, lastSibling);
- }
-
- private boolean hasRegisteredHandler(Intent intent) {
- // Try to resolve the intent. If a matching app isn't installed, it won't resolve.
- return intent.resolveActivity(mPkgManager) != null;
- }
-}
diff --git a/packages/DocumentsUI/src/com/android/documentsui/RecentsCreateFragment.java b/packages/DocumentsUI/src/com/android/documentsui/RecentsCreateFragment.java
deleted file mode 100644
index 019ca86..0000000
--- a/packages/DocumentsUI/src/com/android/documentsui/RecentsCreateFragment.java
+++ /dev/null
@@ -1,282 +0,0 @@
-/*
- * 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.
- */
-
-package com.android.documentsui;
-
-import static com.android.documentsui.Shared.TAG;
-import static com.android.documentsui.State.ACTION_CREATE;
-
-import android.app.Fragment;
-import android.app.FragmentManager;
-import android.app.FragmentTransaction;
-import android.app.LoaderManager.LoaderCallbacks;
-import android.content.ContentResolver;
-import android.content.Context;
-import android.content.Loader;
-import android.database.Cursor;
-import android.graphics.drawable.Drawable;
-import android.net.Uri;
-import android.os.Bundle;
-import android.os.CancellationSignal;
-import android.support.annotation.Nullable;
-import android.support.v7.widget.LinearLayoutManager;
-import android.support.v7.widget.RecyclerView;
-import android.text.Spannable;
-import android.text.SpannableStringBuilder;
-import android.text.TextUtils.TruncateAt;
-import android.text.style.ImageSpan;
-import android.util.Log;
-import android.view.LayoutInflater;
-import android.view.MotionEvent;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.ImageView;
-import android.widget.TextView;
-
-import com.android.documentsui.Events.MotionInputEvent;
-import com.android.documentsui.RecentsProvider.RecentColumns;
-import com.android.documentsui.model.DocumentStack;
-import com.android.documentsui.model.DurableUtils;
-import com.android.documentsui.model.RootInfo;
-
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
-
-import libcore.io.IoUtils;
-
-/**
- * Display directories where recent creates took place.
- */
-public class RecentsCreateFragment extends Fragment {
-
- private View mEmptyView;
- private RecyclerView mRecView;
- private DocumentStackAdapter mAdapter;
- private LoaderCallbacks<List<DocumentStack>> mCallbacks;
-
- private static final int LOADER_RECENTS = 3;
-
- public static void show(FragmentManager fm) {
- final RecentsCreateFragment fragment = new RecentsCreateFragment();
- final FragmentTransaction ft = fm.beginTransaction();
- ft.replace(R.id.container_directory, fragment);
- ft.commitAllowingStateLoss();
- }
-
- @Override
- public View onCreateView(
- LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
- final Context context = inflater.getContext();
-
- final View view = inflater.inflate(R.layout.fragment_directory, container, false);
-
- mRecView = (RecyclerView) view.findViewById(R.id.dir_list);
- mRecView.setLayoutManager(new LinearLayoutManager(getContext()));
- mRecView.addOnItemTouchListener(mItemListener);
-
- mEmptyView = view.findViewById(android.R.id.empty);
-
- mAdapter = new DocumentStackAdapter();
- mRecView.setAdapter(mAdapter);
-
- final RootsCache roots = DocumentsApplication.getRootsCache(context);
- final State state = ((BaseActivity) getActivity()).getDisplayState();
-
- mCallbacks = new LoaderCallbacks<List<DocumentStack>>() {
- @Override
- public Loader<List<DocumentStack>> onCreateLoader(int id, Bundle args) {
- return new RecentsCreateLoader(context, roots, state);
- }
-
- @Override
- public void onLoadFinished(
- Loader<List<DocumentStack>> loader, List<DocumentStack> data) {
- mAdapter.update(data);
-
- // When launched into empty recents, show drawer
- if (mAdapter.isEmpty() && !state.hasLocationChanged()
- && state.action != ACTION_CREATE
- && context instanceof DocumentsActivity) {
- ((DocumentsActivity) context).setRootsDrawerOpen(true);
- }
- }
-
- @Override
- public void onLoaderReset(Loader<List<DocumentStack>> loader) {
- mAdapter.update(null);
- }
- };
-
- return view;
- }
-
- @Override
- public void onStart() {
- super.onStart();
- getLoaderManager().restartLoader(LOADER_RECENTS, getArguments(), mCallbacks);
- }
-
- @Override
- public void onStop() {
- super.onStop();
- getLoaderManager().destroyLoader(LOADER_RECENTS);
- }
-
- private RecyclerView.OnItemTouchListener mItemListener =
- new RecyclerView.OnItemTouchListener() {
- @Override
- public boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e) {
- try (MotionInputEvent event = MotionInputEvent.obtain(e, mRecView)) {
- if (event.isOverItem() && event.isActionUp()) {
- final DocumentStack stack = mAdapter.getItem(event.getItemPosition());
- ((BaseActivity) getActivity()).onStackPicked(stack);
- return true;
- }
- return false;
- }
- }
-
- @Override
- public void onTouchEvent(RecyclerView rv, MotionEvent e) {}
- @Override
- public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) {}
- };
-
- public static class RecentsCreateLoader extends UriDerivativeLoader<Uri, List<DocumentStack>> {
- private final RootsCache mRoots;
- private final State mState;
-
- public RecentsCreateLoader(Context context, RootsCache roots, State state) {
- super(context, RecentsProvider.buildRecent());
- mRoots = roots;
- mState = state;
- }
-
- @Override
- public List<DocumentStack> loadInBackground(Uri uri, CancellationSignal signal) {
- final Collection<RootInfo> matchingRoots = mRoots.getMatchingRootsBlocking(mState);
- final ArrayList<DocumentStack> result = new ArrayList<>();
-
- final ContentResolver resolver = getContext().getContentResolver();
- final Cursor cursor = resolver.query(
- uri, null, null, null, RecentColumns.TIMESTAMP + " DESC", signal);
- try {
- while (cursor != null && cursor.moveToNext()) {
- final byte[] rawStack = cursor.getBlob(
- cursor.getColumnIndex(RecentColumns.STACK));
- try {
- final DocumentStack stack = new DocumentStack();
- DurableUtils.readFromArray(rawStack, stack);
-
- // Only update root here to avoid spinning up all
- // providers; we update the stack during the actual
- // restore. This also filters away roots that don't
- // match current filter.
- stack.updateRoot(matchingRoots);
- result.add(stack);
- } catch (IOException e) {
- Log.w(TAG, "Failed to resolve stack: " + e);
- }
- }
- } finally {
- IoUtils.closeQuietly(cursor);
- }
-
- return result;
- }
- }
-
- private static final class StackHolder extends RecyclerView.ViewHolder {
- public View view;
- public StackHolder(View view) {
- super(view);
- this.view = view;
- }
- }
-
- private class DocumentStackAdapter extends RecyclerView.Adapter<StackHolder> {
- @Nullable private List<DocumentStack> mItems;
-
- DocumentStack getItem(int position) {
- return mItems.get(position);
- }
-
- @Override
- public int getItemCount() {
- return mItems == null ? 0 : mItems.size();
- }
-
- boolean isEmpty() {
- return mItems == null ? true : mItems.isEmpty();
- }
-
- void update(@Nullable List<DocumentStack> items) {
- mItems = items;
-
- if (isEmpty()) {
- mEmptyView.setVisibility(View.VISIBLE);
- } else {
- mEmptyView.setVisibility(View.GONE);
- }
-
- notifyDataSetChanged();
- }
-
- @Override
- public StackHolder onCreateViewHolder(ViewGroup parent, int viewType) {
- final Context context = parent.getContext();
-
- final LayoutInflater inflater = LayoutInflater.from(context);
- return new StackHolder(
- inflater.inflate(R.layout.item_doc_list, parent, false));
- }
-
- @Override
- public void onBindViewHolder(StackHolder holder, int position) {
- Context context = getContext();
- View view = holder.view;
-
- final ImageView iconMime = (ImageView) view.findViewById(R.id.icon_mime);
- final TextView title = (TextView) view.findViewById(android.R.id.title);
- final View line2 = view.findViewById(R.id.line2);
-
- final DocumentStack stack = getItem(position);
- iconMime.setImageDrawable(stack.root.loadIcon(context));
-
- final Drawable crumb = context.getDrawable(R.drawable.ic_breadcrumb_arrow);
- crumb.setBounds(0, 0, crumb.getIntrinsicWidth(), crumb.getIntrinsicHeight());
-
- final SpannableStringBuilder builder = new SpannableStringBuilder();
- builder.append(stack.root.title);
- for (int i = stack.size() - 2; i >= 0; i--) {
- appendDrawable(builder, crumb);
- builder.append(stack.get(i).displayName);
- }
- title.setText(builder);
- title.setEllipsize(TruncateAt.MIDDLE);
-
- if (line2 != null) line2.setVisibility(View.GONE);
- }
- }
-
- private static void appendDrawable(SpannableStringBuilder b, Drawable d) {
- final int length = b.length();
- b.append("\u232a");
- b.setSpan(new ImageSpan(d), length, b.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
- }
-}
diff --git a/packages/DocumentsUI/src/com/android/documentsui/RecentsLoader.java b/packages/DocumentsUI/src/com/android/documentsui/RecentsLoader.java
deleted file mode 100644
index cebc9b0..0000000
--- a/packages/DocumentsUI/src/com/android/documentsui/RecentsLoader.java
+++ /dev/null
@@ -1,313 +0,0 @@
-/*
- * 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.
- */
-
-package com.android.documentsui;
-
-import static com.android.documentsui.Shared.DEBUG;
-import static com.android.documentsui.Shared.TAG;
-import static com.android.documentsui.State.SORT_ORDER_LAST_MODIFIED;
-
-import android.app.ActivityManager;
-import android.content.AsyncTaskLoader;
-import android.content.ContentProviderClient;
-import android.content.Context;
-import android.database.Cursor;
-import android.database.MatrixCursor;
-import android.database.MergeCursor;
-import android.net.Uri;
-import android.os.Bundle;
-import android.provider.DocumentsContract;
-import android.provider.DocumentsContract.Document;
-import android.text.format.DateUtils;
-import android.util.Log;
-
-import com.android.documentsui.model.RootInfo;
-import com.android.internal.annotations.GuardedBy;
-
-import com.google.common.util.concurrent.AbstractFuture;
-
-import libcore.io.IoUtils;
-
-import java.io.Closeable;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.List;
-import java.util.concurrent.CountDownLatch;
-import java.util.concurrent.ExecutionException;
-import java.util.concurrent.Semaphore;
-import java.util.concurrent.TimeUnit;
-
-public class RecentsLoader extends AsyncTaskLoader<DirectoryResult> {
- // TODO: clean up cursor ownership so background thread doesn't traverse
- // previously returned cursors for filtering/sorting; this currently races
- // with the UI thread.
-
- private static final int MAX_OUTSTANDING_RECENTS = 4;
- private static final int MAX_OUTSTANDING_RECENTS_SVELTE = 2;
-
- /**
- * Time to wait for first pass to complete before returning partial results.
- */
- private static final int MAX_FIRST_PASS_WAIT_MILLIS = 500;
-
- /** Maximum documents from a single root. */
- private static final int MAX_DOCS_FROM_ROOT = 64;
-
- /** Ignore documents older than this age. */
- private static final long REJECT_OLDER_THAN = 45 * DateUtils.DAY_IN_MILLIS;
-
- /** MIME types that should always be excluded from recents. */
- private static final String[] RECENT_REJECT_MIMES = new String[] { Document.MIME_TYPE_DIR };
-
- private final Semaphore mQueryPermits;
-
- private final RootsCache mRoots;
- private final State mState;
-
- @GuardedBy("mTasks")
- private final HashMap<RootInfo, RecentsTask> mTasks = new HashMap<>();
-
- private final int mSortOrder = State.SORT_ORDER_LAST_MODIFIED;
-
- private CountDownLatch mFirstPassLatch;
- private volatile boolean mFirstPassDone;
-
- private DirectoryResult mResult;
-
- public RecentsLoader(Context context, RootsCache roots, State state) {
- super(context);
- mRoots = roots;
- mState = state;
-
- // Keep clients around on high-RAM devices, since we'd be spinning them
- // up moments later to fetch thumbnails anyway.
- final ActivityManager am = (ActivityManager) getContext().getSystemService(
- Context.ACTIVITY_SERVICE);
- mQueryPermits = new Semaphore(
- am.isLowRamDevice() ? MAX_OUTSTANDING_RECENTS_SVELTE : MAX_OUTSTANDING_RECENTS);
- }
-
- @Override
- public DirectoryResult loadInBackground() {
- synchronized (mTasks) {
- return loadInBackgroundLocked();
- }
- }
-
- private DirectoryResult loadInBackgroundLocked() {
- if (mFirstPassLatch == null) {
- // First time through we kick off all the recent tasks, and wait
- // around to see if everyone finishes quickly.
-
- final Collection<RootInfo> roots = mRoots.getMatchingRootsBlocking(mState);
- for (RootInfo root : roots) {
- if (root.supportsRecents()) {
- mTasks.put(root, new RecentsTask(root.authority, root.rootId));
- }
- }
-
- mFirstPassLatch = new CountDownLatch(mTasks.size());
- for (RecentsTask task : mTasks.values()) {
- ProviderExecutor.forAuthority(task.authority).execute(task);
- }
-
- try {
- mFirstPassLatch.await(MAX_FIRST_PASS_WAIT_MILLIS, TimeUnit.MILLISECONDS);
- mFirstPassDone = true;
- } catch (InterruptedException e) {
- throw new RuntimeException(e);
- }
- }
-
- final long rejectBefore = System.currentTimeMillis() - REJECT_OLDER_THAN;
-
- // Collect all finished tasks
- boolean allDone = true;
- List<Cursor> cursors = new ArrayList<>();
- for (RecentsTask task : mTasks.values()) {
- if (task.isDone()) {
- try {
- final Cursor cursor = task.get();
- if (cursor == null) continue;
-
- final FilteringCursorWrapper filtered = new FilteringCursorWrapper(
- cursor, mState.acceptMimes, RECENT_REJECT_MIMES, rejectBefore) {
- @Override
- public void close() {
- // Ignored, since we manage cursor lifecycle internally
- }
- };
- cursors.add(filtered);
- } catch (InterruptedException e) {
- throw new RuntimeException(e);
- } catch (ExecutionException e) {
- // We already logged on other side
- }
- } else {
- allDone = false;
- }
- }
-
- if (DEBUG) {
- Log.d(TAG, "Found " + cursors.size() + " of " + mTasks.size() + " recent queries done");
- }
-
- final DirectoryResult result = new DirectoryResult();
- result.sortOrder = SORT_ORDER_LAST_MODIFIED;
-
- final Cursor merged;
- if (cursors.size() > 0) {
- merged = new MergeCursor(cursors.toArray(new Cursor[cursors.size()]));
- } else {
- // Return something when nobody is ready
- merged = new MatrixCursor(new String[0]);
- }
-
- // Tell the UI if this is an in-progress result. When loading is complete, another update is
- // sent with EXTRA_LOADING set to false.
- Bundle extras = new Bundle();
- extras.putBoolean(DocumentsContract.EXTRA_LOADING, !allDone);
- merged.setExtras(extras);
-
- result.cursor = merged;
-
- return result;
- }
-
- @Override
- public void cancelLoadInBackground() {
- super.cancelLoadInBackground();
- }
-
- @Override
- public void deliverResult(DirectoryResult result) {
- if (isReset()) {
- IoUtils.closeQuietly(result);
- return;
- }
- DirectoryResult oldResult = mResult;
- mResult = result;
-
- if (isStarted()) {
- super.deliverResult(result);
- }
-
- if (oldResult != null && oldResult != result) {
- IoUtils.closeQuietly(oldResult);
- }
- }
-
- @Override
- protected void onStartLoading() {
- if (mResult != null) {
- deliverResult(mResult);
- }
- if (takeContentChanged() || mResult == null) {
- forceLoad();
- }
- }
-
- @Override
- protected void onStopLoading() {
- cancelLoad();
- }
-
- @Override
- public void onCanceled(DirectoryResult result) {
- IoUtils.closeQuietly(result);
- }
-
- @Override
- protected void onReset() {
- super.onReset();
-
- // Ensure the loader is stopped
- onStopLoading();
-
- synchronized (mTasks) {
- for (RecentsTask task : mTasks.values()) {
- IoUtils.closeQuietly(task);
- }
- }
-
- IoUtils.closeQuietly(mResult);
- mResult = null;
- }
-
- // TODO: create better transfer of ownership around cursor to ensure its
- // closed in all edge cases.
-
- public class RecentsTask extends AbstractFuture<Cursor> implements Runnable, Closeable {
- public final String authority;
- public final String rootId;
-
- private Cursor mWithRoot;
-
- public RecentsTask(String authority, String rootId) {
- this.authority = authority;
- this.rootId = rootId;
- }
-
- @Override
- public void run() {
- if (isCancelled()) return;
-
- try {
- mQueryPermits.acquire();
- } catch (InterruptedException e) {
- return;
- }
-
- try {
- runInternal();
- } finally {
- mQueryPermits.release();
- }
- }
-
- public void runInternal() {
- ContentProviderClient client = null;
- try {
- client = DocumentsApplication.acquireUnstableProviderOrThrow(
- getContext().getContentResolver(), authority);
-
- final Uri uri = DocumentsContract.buildRecentDocumentsUri(authority, rootId);
- final Cursor cursor = client.query(
- uri, null, null, null, DirectoryLoader.getQuerySortOrder(mSortOrder));
- mWithRoot = new RootCursorWrapper(authority, rootId, cursor, MAX_DOCS_FROM_ROOT);
-
- } catch (Exception e) {
- Log.w(TAG, "Failed to load " + authority + ", " + rootId, e);
- } finally {
- ContentProviderClient.releaseQuietly(client);
- }
-
- set(mWithRoot);
-
- mFirstPassLatch.countDown();
- if (mFirstPassDone) {
- onContentChanged();
- }
- }
-
- @Override
- public void close() throws IOException {
- IoUtils.closeQuietly(mWithRoot);
- }
- }
-}
diff --git a/packages/DocumentsUI/src/com/android/documentsui/RecentsProvider.java b/packages/DocumentsUI/src/com/android/documentsui/RecentsProvider.java
deleted file mode 100644
index 6ef9154..0000000
--- a/packages/DocumentsUI/src/com/android/documentsui/RecentsProvider.java
+++ /dev/null
@@ -1,370 +0,0 @@
-/*
- * 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.
- */
-
-package com.android.documentsui;
-
-import static com.android.documentsui.Shared.DEBUG;
-import static com.android.documentsui.model.DocumentInfo.getCursorString;
-
-import android.content.ContentProvider;
-import android.content.ContentResolver;
-import android.content.ContentValues;
-import android.content.Context;
-import android.content.Intent;
-import android.content.UriMatcher;
-import android.content.pm.ResolveInfo;
-import android.database.Cursor;
-import android.database.sqlite.SQLiteDatabase;
-import android.database.sqlite.SQLiteOpenHelper;
-import android.net.Uri;
-import android.os.Bundle;
-import android.provider.DocumentsContract;
-import android.provider.DocumentsContract.Document;
-import android.provider.DocumentsContract.Root;
-import android.text.format.DateUtils;
-import android.util.Log;
-
-import com.android.documentsui.model.DocumentStack;
-import com.android.documentsui.model.DurableUtils;
-import com.android.internal.util.Predicate;
-
-import com.google.android.collect.Sets;
-
-import libcore.io.IoUtils;
-
-import java.io.IOException;
-import java.util.Set;
-
-public class RecentsProvider extends ContentProvider {
- private static final String TAG = "RecentsProvider";
-
- private static final long MAX_HISTORY_IN_MILLIS = 45 * DateUtils.DAY_IN_MILLIS;
-
- private static final String AUTHORITY = "com.android.documentsui.recents";
-
- private static final UriMatcher sMatcher = new UriMatcher(UriMatcher.NO_MATCH);
-
- private static final int URI_RECENT = 1;
- private static final int URI_STATE = 2;
- private static final int URI_RESUME = 3;
-
- public static final String METHOD_PURGE = "purge";
- public static final String METHOD_PURGE_PACKAGE = "purgePackage";
-
- static {
- sMatcher.addURI(AUTHORITY, "recent", URI_RECENT);
- // state/authority/rootId/docId
- sMatcher.addURI(AUTHORITY, "state/*/*/*", URI_STATE);
- // resume/packageName
- sMatcher.addURI(AUTHORITY, "resume/*", URI_RESUME);
- }
-
- public static final String TABLE_RECENT = "recent";
- public static final String TABLE_STATE = "state";
- public static final String TABLE_RESUME = "resume";
-
- public static class RecentColumns {
- public static final String KEY = "key";
- public static final String STACK = "stack";
- public static final String TIMESTAMP = "timestamp";
- }
-
- public static class StateColumns {
- public static final String AUTHORITY = "authority";
- public static final String ROOT_ID = Root.COLUMN_ROOT_ID;
- public static final String DOCUMENT_ID = Document.COLUMN_DOCUMENT_ID;
-
- @Deprecated // mode is tracked in local preferences now...by root only
- public static final String MODE = "mode";
- public static final String SORT_ORDER = "sortOrder";
- }
-
- public static class ResumeColumns {
- public static final String PACKAGE_NAME = "package_name";
- public static final String STACK = "stack";
- public static final String TIMESTAMP = "timestamp";
- // Indicates handler was an external app, like photos.
- public static final String EXTERNAL = "external";
- }
-
- public static Uri buildRecent() {
- return new Uri.Builder().scheme(ContentResolver.SCHEME_CONTENT)
- .authority(AUTHORITY).appendPath("recent").build();
- }
-
- public static Uri buildState(String authority, String rootId, String documentId) {
- return new Uri.Builder().scheme(ContentResolver.SCHEME_CONTENT).authority(AUTHORITY)
- .appendPath("state").appendPath(authority).appendPath(rootId).appendPath(documentId)
- .build();
- }
-
- public static Uri buildResume(String packageName) {
- return new Uri.Builder().scheme(ContentResolver.SCHEME_CONTENT)
- .authority(AUTHORITY).appendPath("resume").appendPath(packageName).build();
- }
-
- private DatabaseHelper mHelper;
-
- private static class DatabaseHelper extends SQLiteOpenHelper {
- private static final String DB_NAME = "recents.db";
-
- private static final int VERSION_INIT = 1;
- private static final int VERSION_AS_BLOB = 3;
- private static final int VERSION_ADD_EXTERNAL = 4;
- private static final int VERSION_ADD_RECENT_KEY = 5;
-
- public DatabaseHelper(Context context) {
- super(context, DB_NAME, null, VERSION_ADD_RECENT_KEY);
- }
-
- @Override
- public void onCreate(SQLiteDatabase db) {
-
- db.execSQL("CREATE TABLE " + TABLE_RECENT + " (" +
- RecentColumns.KEY + " TEXT PRIMARY KEY ON CONFLICT REPLACE," +
- RecentColumns.STACK + " BLOB DEFAULT NULL," +
- RecentColumns.TIMESTAMP + " INTEGER" +
- ")");
-
- db.execSQL("CREATE TABLE " + TABLE_STATE + " (" +
- StateColumns.AUTHORITY + " TEXT," +
- StateColumns.ROOT_ID + " TEXT," +
- StateColumns.DOCUMENT_ID + " TEXT," +
- StateColumns.MODE + " INTEGER," +
- StateColumns.SORT_ORDER + " INTEGER," +
- "PRIMARY KEY (" + StateColumns.AUTHORITY + ", " + StateColumns.ROOT_ID + ", "
- + StateColumns.DOCUMENT_ID + ")" +
- ")");
-
- db.execSQL("CREATE TABLE " + TABLE_RESUME + " (" +
- ResumeColumns.PACKAGE_NAME + " TEXT NOT NULL PRIMARY KEY," +
- ResumeColumns.STACK + " BLOB DEFAULT NULL," +
- ResumeColumns.TIMESTAMP + " INTEGER," +
- ResumeColumns.EXTERNAL + " INTEGER NOT NULL DEFAULT 0" +
- ")");
- }
-
- @Override
- public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
- Log.w(TAG, "Upgrading database; wiping app data");
- db.execSQL("DROP TABLE IF EXISTS " + TABLE_RECENT);
- db.execSQL("DROP TABLE IF EXISTS " + TABLE_STATE);
- db.execSQL("DROP TABLE IF EXISTS " + TABLE_RESUME);
- onCreate(db);
- }
- }
-
- @Override
- public boolean onCreate() {
- mHelper = new DatabaseHelper(getContext());
- return true;
- }
-
- @Override
- public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs,
- String sortOrder) {
- final SQLiteDatabase db = mHelper.getReadableDatabase();
- switch (sMatcher.match(uri)) {
- case URI_RECENT:
- final long cutoff = System.currentTimeMillis() - MAX_HISTORY_IN_MILLIS;
- return db.query(TABLE_RECENT, projection, RecentColumns.TIMESTAMP + ">" + cutoff,
- null, null, null, sortOrder);
- case URI_STATE:
- final String authority = uri.getPathSegments().get(1);
- final String rootId = uri.getPathSegments().get(2);
- final String documentId = uri.getPathSegments().get(3);
- return db.query(TABLE_STATE, projection, StateColumns.AUTHORITY + "=? AND "
- + StateColumns.ROOT_ID + "=? AND " + StateColumns.DOCUMENT_ID + "=?",
- new String[] { authority, rootId, documentId }, null, null, sortOrder);
- case URI_RESUME:
- final String packageName = uri.getPathSegments().get(1);
- return db.query(TABLE_RESUME, projection, ResumeColumns.PACKAGE_NAME + "=?",
- new String[] { packageName }, null, null, sortOrder);
- default:
- throw new UnsupportedOperationException("Unsupported Uri " + uri);
- }
- }
-
- @Override
- public String getType(Uri uri) {
- return null;
- }
-
- @Override
- public Uri insert(Uri uri, ContentValues values) {
- final SQLiteDatabase db = mHelper.getWritableDatabase();
- final ContentValues key = new ContentValues();
- switch (sMatcher.match(uri)) {
- case URI_RECENT:
- values.put(RecentColumns.TIMESTAMP, System.currentTimeMillis());
- db.insert(TABLE_RECENT, null, values);
- final long cutoff = System.currentTimeMillis() - MAX_HISTORY_IN_MILLIS;
- db.delete(TABLE_RECENT, RecentColumns.TIMESTAMP + "<" + cutoff, null);
- return uri;
- case URI_STATE:
- final String authority = uri.getPathSegments().get(1);
- final String rootId = uri.getPathSegments().get(2);
- final String documentId = uri.getPathSegments().get(3);
-
- key.put(StateColumns.AUTHORITY, authority);
- key.put(StateColumns.ROOT_ID, rootId);
- key.put(StateColumns.DOCUMENT_ID, documentId);
-
- // Ensure that row exists, then update with changed values
- db.insertWithOnConflict(TABLE_STATE, null, key, SQLiteDatabase.CONFLICT_IGNORE);
- db.update(TABLE_STATE, values, StateColumns.AUTHORITY + "=? AND "
- + StateColumns.ROOT_ID + "=? AND " + StateColumns.DOCUMENT_ID + "=?",
- new String[] { authority, rootId, documentId });
-
- return uri;
- case URI_RESUME:
- values.put(ResumeColumns.TIMESTAMP, System.currentTimeMillis());
-
- final String packageName = uri.getPathSegments().get(1);
- key.put(ResumeColumns.PACKAGE_NAME, packageName);
-
- // Ensure that row exists, then update with changed values
- db.insertWithOnConflict(TABLE_RESUME, null, key, SQLiteDatabase.CONFLICT_IGNORE);
- db.update(TABLE_RESUME, values, ResumeColumns.PACKAGE_NAME + "=?",
- new String[] { packageName });
- return uri;
- default:
- throw new UnsupportedOperationException("Unsupported Uri " + uri);
- }
- }
-
- @Override
- public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) {
- throw new UnsupportedOperationException("Unsupported Uri " + uri);
- }
-
- @Override
- public int delete(Uri uri, String selection, String[] selectionArgs) {
- throw new UnsupportedOperationException("Unsupported Uri " + uri);
- }
-
- @Override
- public Bundle call(String method, String arg, Bundle extras) {
- if (METHOD_PURGE.equals(method)) {
- // Purge references to unknown authorities
- final Intent intent = new Intent(DocumentsContract.PROVIDER_INTERFACE);
- final Set<String> knownAuth = Sets.newHashSet();
- for (ResolveInfo info : getContext()
- .getPackageManager().queryIntentContentProviders(intent, 0)) {
- knownAuth.add(info.providerInfo.authority);
- }
-
- purgeByAuthority(new Predicate<String>() {
- @Override
- public boolean apply(String authority) {
- // Purge unknown authorities
- return !knownAuth.contains(authority);
- }
- });
-
- return null;
-
- } else if (METHOD_PURGE_PACKAGE.equals(method)) {
- // Purge references to authorities in given package
- final Intent intent = new Intent(DocumentsContract.PROVIDER_INTERFACE);
- intent.setPackage(arg);
- final Set<String> packageAuth = Sets.newHashSet();
- for (ResolveInfo info : getContext()
- .getPackageManager().queryIntentContentProviders(intent, 0)) {
- packageAuth.add(info.providerInfo.authority);
- }
-
- if (!packageAuth.isEmpty()) {
- purgeByAuthority(new Predicate<String>() {
- @Override
- public boolean apply(String authority) {
- // Purge authority matches
- return packageAuth.contains(authority);
- }
- });
- }
-
- return null;
-
- } else {
- return super.call(method, arg, extras);
- }
- }
-
- /**
- * Purge all internal data whose authority matches the given
- * {@link Predicate}.
- */
- private void purgeByAuthority(Predicate<String> predicate) {
- final SQLiteDatabase db = mHelper.getWritableDatabase();
- final DocumentStack stack = new DocumentStack();
-
- Cursor cursor = db.query(TABLE_RECENT, null, null, null, null, null, null);
- try {
- while (cursor.moveToNext()) {
- try {
- final byte[] rawStack = cursor.getBlob(
- cursor.getColumnIndex(RecentColumns.STACK));
- DurableUtils.readFromArray(rawStack, stack);
-
- if (stack.root != null && predicate.apply(stack.root.authority)) {
- final String key = getCursorString(cursor, RecentColumns.KEY);
- db.delete(TABLE_RECENT, RecentColumns.KEY + "=?", new String[] { key });
- }
- } catch (IOException ignored) {
- }
- }
- } finally {
- IoUtils.closeQuietly(cursor);
- }
-
- cursor = db.query(TABLE_STATE, new String[] {
- StateColumns.AUTHORITY }, null, null, StateColumns.AUTHORITY, null, null);
- try {
- while (cursor.moveToNext()) {
- final String authority = getCursorString(cursor, StateColumns.AUTHORITY);
- if (predicate.apply(authority)) {
- db.delete(TABLE_STATE, StateColumns.AUTHORITY + "=?", new String[] {
- authority });
- if (DEBUG) Log.d(TAG, "Purged state for " + authority);
- }
- }
- } finally {
- IoUtils.closeQuietly(cursor);
- }
-
- cursor = db.query(TABLE_RESUME, null, null, null, null, null, null);
- try {
- while (cursor.moveToNext()) {
- try {
- final byte[] rawStack = cursor.getBlob(
- cursor.getColumnIndex(ResumeColumns.STACK));
- DurableUtils.readFromArray(rawStack, stack);
-
- if (stack.root != null && predicate.apply(stack.root.authority)) {
- final String packageName = getCursorString(
- cursor, ResumeColumns.PACKAGE_NAME);
- db.delete(TABLE_RESUME, ResumeColumns.PACKAGE_NAME + "=?",
- new String[] { packageName });
- }
- } catch (IOException ignored) {
- }
- }
- } finally {
- IoUtils.closeQuietly(cursor);
- }
- }
-}
diff --git a/packages/DocumentsUI/src/com/android/documentsui/RetainedState.java b/packages/DocumentsUI/src/com/android/documentsui/RetainedState.java
deleted file mode 100644
index 57cf3b4..0000000
--- a/packages/DocumentsUI/src/com/android/documentsui/RetainedState.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.documentsui;
-
-import android.support.annotation.Nullable;
-
-import com.android.documentsui.dirlist.MultiSelectManager.Selection;
-
-/**
- * Object used to collect retained state from activity and fragments. Used
- * with Activity#onRetainNonConfigurationInstance. Information stored in
- * this class should be primarily ephemeral as instances of the class
- * only last across configuration changes (like device rotation). When
- * an application is fully town down, all instances are lost, fa-evah!
- */
-public final class RetainedState {
- public @Nullable Selection selection;
-
- public boolean hasSelection() {
- return selection != null;
- }
-}
diff --git a/packages/DocumentsUI/src/com/android/documentsui/RootCursorWrapper.java b/packages/DocumentsUI/src/com/android/documentsui/RootCursorWrapper.java
deleted file mode 100644
index 0b58218..0000000
--- a/packages/DocumentsUI/src/com/android/documentsui/RootCursorWrapper.java
+++ /dev/null
@@ -1,137 +0,0 @@
-/*
- * 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.
- */
-
-package com.android.documentsui;
-
-import android.database.AbstractCursor;
-import android.database.Cursor;
-import android.os.Bundle;
-
-/**
- * Cursor wrapper that adds columns to identify which root a document came from.
- */
-public class RootCursorWrapper extends AbstractCursor {
- private final String mAuthority;
- private final String mRootId;
-
- private final Cursor mCursor;
- private final int mCount;
-
- private final String[] mColumnNames;
-
- private final int mAuthorityIndex;
- private final int mRootIdIndex;
-
- public static final String COLUMN_AUTHORITY = "android:authority";
- public static final String COLUMN_ROOT_ID = "android:rootId";
-
- public RootCursorWrapper(String authority, String rootId, Cursor cursor, int maxCount) {
- mAuthority = authority;
- mRootId = rootId;
- mCursor = cursor;
-
- final int count = cursor.getCount();
- if (maxCount > 0 && count > maxCount) {
- mCount = maxCount;
- } else {
- mCount = count;
- }
-
- if (cursor.getColumnIndex(COLUMN_AUTHORITY) != -1
- || cursor.getColumnIndex(COLUMN_ROOT_ID) != -1) {
- throw new IllegalArgumentException("Cursor contains internal columns!");
- }
- final String[] before = cursor.getColumnNames();
- mColumnNames = new String[before.length + 2];
- System.arraycopy(before, 0, mColumnNames, 0, before.length);
- mAuthorityIndex = before.length;
- mRootIdIndex = before.length + 1;
- mColumnNames[mAuthorityIndex] = COLUMN_AUTHORITY;
- mColumnNames[mRootIdIndex] = COLUMN_ROOT_ID;
- }
-
- @Override
- public Bundle getExtras() {
- return mCursor.getExtras();
- }
-
- @Override
- public void close() {
- super.close();
- mCursor.close();
- }
-
- @Override
- public boolean onMove(int oldPosition, int newPosition) {
- return mCursor.moveToPosition(newPosition);
- }
-
- @Override
- public String[] getColumnNames() {
- return mColumnNames;
- }
-
- @Override
- public int getCount() {
- return mCount;
- }
-
- @Override
- public double getDouble(int column) {
- return mCursor.getDouble(column);
- }
-
- @Override
- public float getFloat(int column) {
- return mCursor.getFloat(column);
- }
-
- @Override
- public int getInt(int column) {
- return mCursor.getInt(column);
- }
-
- @Override
- public long getLong(int column) {
- return mCursor.getLong(column);
- }
-
- @Override
- public short getShort(int column) {
- return mCursor.getShort(column);
- }
-
- @Override
- public String getString(int column) {
- if (column == mAuthorityIndex) {
- return mAuthority;
- } else if (column == mRootIdIndex) {
- return mRootId;
- } else {
- return mCursor.getString(column);
- }
- }
-
- @Override
- public int getType(int column) {
- return mCursor.getType(column);
- }
-
- @Override
- public boolean isNull(int column) {
- return mCursor.isNull(column);
- }
-}
diff --git a/packages/DocumentsUI/src/com/android/documentsui/RootItemView.java b/packages/DocumentsUI/src/com/android/documentsui/RootItemView.java
deleted file mode 100644
index 93aa526..0000000
--- a/packages/DocumentsUI/src/com/android/documentsui/RootItemView.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.documentsui;
-
-import android.content.Context;
-import android.util.AttributeSet;
-import android.widget.LinearLayout;
-
-public final class RootItemView extends LinearLayout {
- private static final int[] STATE_HIGHLIGHTED = {R.attr.state_highlighted};
-
- private boolean mHighlighted = false;
-
- public RootItemView(Context context, AttributeSet attrs) {
- super(context, attrs);
- }
-
- @Override
- public int[] onCreateDrawableState(int extraSpace) {
- final int[] drawableState = super.onCreateDrawableState(extraSpace + 1);
-
- if (mHighlighted) {
- mergeDrawableStates(drawableState, STATE_HIGHLIGHTED);
- }
-
- return drawableState;
- }
-
- public void setHighlight(boolean highlight) {
- mHighlighted = highlight;
- refreshDrawableState();
- }
-
- /**
- * Synthesizes pressed state to trick RippleDrawable starting a ripple effect.
- */
- public void drawRipple() {
- setPressed(true);
- setPressed(false);
- }
-}
diff --git a/packages/DocumentsUI/src/com/android/documentsui/RootsCache.java b/packages/DocumentsUI/src/com/android/documentsui/RootsCache.java
deleted file mode 100644
index 117bb01..0000000
--- a/packages/DocumentsUI/src/com/android/documentsui/RootsCache.java
+++ /dev/null
@@ -1,529 +0,0 @@
-/*
- * 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.
- */
-
-package com.android.documentsui;
-
-import static com.android.documentsui.Shared.DEBUG;
-
-import android.content.BroadcastReceiver.PendingResult;
-import android.content.ContentProviderClient;
-import android.content.ContentResolver;
-import android.content.Context;
-import android.content.Intent;
-import android.content.pm.ApplicationInfo;
-import android.content.pm.PackageManager;
-import android.content.pm.ProviderInfo;
-import android.content.pm.ResolveInfo;
-import android.database.ContentObserver;
-import android.database.Cursor;
-import android.net.Uri;
-import android.os.AsyncTask;
-import android.os.Bundle;
-import android.os.Handler;
-import android.os.SystemClock;
-import android.provider.DocumentsContract;
-import android.provider.DocumentsContract.Root;
-import android.provider.DocumentsProvider;
-import android.support.annotation.VisibleForTesting;
-import android.util.Log;
-
-import com.android.documentsui.model.RootInfo;
-import com.android.internal.annotations.GuardedBy;
-
-import libcore.io.IoUtils;
-
-import com.google.common.collect.ArrayListMultimap;
-import com.google.common.collect.Multimap;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Objects;
-import java.util.concurrent.CountDownLatch;
-import java.util.concurrent.TimeUnit;
-
-/**
- * Cache of known storage backends and their roots.
- */
-public class RootsCache {
- public static final Uri sNotificationUri = Uri.parse(
- "content://com.android.documentsui.roots/");
-
- private static final String TAG = "RootsCache";
-
- private final Context mContext;
- private final ContentObserver mObserver;
-
- private final RootInfo mRecentsRoot;
-
- private final Object mLock = new Object();
- private final CountDownLatch mFirstLoad = new CountDownLatch(1);
-
- @GuardedBy("mLock")
- private boolean mFirstLoadDone;
- @GuardedBy("mLock")
- private PendingResult mBootCompletedResult;
-
- @GuardedBy("mLock")
- private Multimap<String, RootInfo> mRoots = ArrayListMultimap.create();
- @GuardedBy("mLock")
- private HashSet<String> mStoppedAuthorities = new HashSet<>();
-
- @GuardedBy("mObservedAuthorities")
- private final HashSet<String> mObservedAuthorities = new HashSet<>();
-
- public RootsCache(Context context) {
- mContext = context;
- mObserver = new RootsChangedObserver();
-
- // Create a new anonymous "Recents" RootInfo. It's a faker.
- mRecentsRoot = new RootInfo() {{
- // Special root for recents
- derivedIcon = R.drawable.ic_root_recent;
- derivedType = RootInfo.TYPE_RECENTS;
- flags = Root.FLAG_LOCAL_ONLY | Root.FLAG_SUPPORTS_IS_CHILD
- | Root.FLAG_SUPPORTS_CREATE;
- title = mContext.getString(R.string.root_recent);
- availableBytes = -1;
- }};
- }
-
- private class RootsChangedObserver extends ContentObserver {
- public RootsChangedObserver() {
- super(new Handler());
- }
-
- @Override
- public void onChange(boolean selfChange, Uri uri) {
- if (uri == null) {
- Log.w(TAG, "Received onChange event for null uri. Skipping.");
- return;
- }
- if (DEBUG) Log.d(TAG, "Updating roots due to change at " + uri);
- updateAuthorityAsync(uri.getAuthority());
- }
- }
-
- /**
- * Gather roots from all known storage providers.
- */
- public void updateAsync(boolean forceRefreshAll) {
-
- // NOTE: This method is called when the UI language changes.
- // For that reason we update our RecentsRoot to reflect
- // the current language.
- mRecentsRoot.title = mContext.getString(R.string.root_recent);
-
- // Nothing else about the root should ever change.
- assert(mRecentsRoot.authority == null);
- assert(mRecentsRoot.rootId == null);
- assert(mRecentsRoot.derivedIcon == R.drawable.ic_root_recent);
- assert(mRecentsRoot.derivedType == RootInfo.TYPE_RECENTS);
- assert(mRecentsRoot.flags == (Root.FLAG_LOCAL_ONLY
- | Root.FLAG_SUPPORTS_IS_CHILD
- | Root.FLAG_SUPPORTS_CREATE));
- assert(mRecentsRoot.availableBytes == -1);
-
- new UpdateTask(forceRefreshAll, null)
- .executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
- }
-
- /**
- * Gather roots from storage providers belonging to given package name.
- */
- public void updatePackageAsync(String packageName) {
- new UpdateTask(false, packageName).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
- }
-
- /**
- * Gather roots from storage providers belonging to given authority.
- */
- public void updateAuthorityAsync(String authority) {
- final ProviderInfo info = mContext.getPackageManager().resolveContentProvider(authority, 0);
- if (info != null) {
- updatePackageAsync(info.packageName);
- }
- }
-
- public void setBootCompletedResult(PendingResult result) {
- synchronized (mLock) {
- // Quickly check if we've already finished loading, otherwise hang
- // out until first pass is finished.
- if (mFirstLoadDone) {
- result.finish();
- } else {
- mBootCompletedResult = result;
- }
- }
- }
-
- /**
- * Block until the first {@link UpdateTask} pass has finished.
- *
- * @return {@code true} if cached roots is ready to roll, otherwise
- * {@code false} if we timed out while waiting.
- */
- private boolean waitForFirstLoad() {
- boolean success = false;
- try {
- success = mFirstLoad.await(15, TimeUnit.SECONDS);
- } catch (InterruptedException e) {
- }
- if (!success) {
- Log.w(TAG, "Timeout waiting for first update");
- }
- return success;
- }
-
- /**
- * Load roots from authorities that are in stopped state. Normal
- * {@link UpdateTask} passes ignore stopped applications.
- */
- private void loadStoppedAuthorities() {
- final ContentResolver resolver = mContext.getContentResolver();
- synchronized (mLock) {
- for (String authority : mStoppedAuthorities) {
- if (DEBUG) Log.d(TAG, "Loading stopped authority " + authority);
- mRoots.putAll(authority, loadRootsForAuthority(resolver, authority, true));
- }
- mStoppedAuthorities.clear();
- }
- }
-
- /**
- * Load roots from a stopped authority. Normal {@link UpdateTask} passes
- * ignore stopped applications.
- */
- private void loadStoppedAuthority(String authority) {
- final ContentResolver resolver = mContext.getContentResolver();
- synchronized (mLock) {
- if (!mStoppedAuthorities.contains(authority)) {
- return;
- }
- if (DEBUG) {
- Log.d(TAG, "Loading stopped authority " + authority);
- }
- mRoots.putAll(authority, loadRootsForAuthority(resolver, authority, true));
- mStoppedAuthorities.remove(authority);
- }
- }
-
- private class UpdateTask extends AsyncTask<Void, Void, Void> {
- private final boolean mForceRefreshAll;
- private final String mForceRefreshPackage;
-
- private final Multimap<String, RootInfo> mTaskRoots = ArrayListMultimap.create();
- private final HashSet<String> mTaskStoppedAuthorities = new HashSet<>();
-
- /**
- * Create task to update roots cache.
- *
- * @param forceRefreshAll when true, all previously cached values for
- * all packages should be ignored.
- * @param forceRefreshPackage when non-null, all previously cached
- * values for this specific package should be ignored.
- */
- public UpdateTask(boolean forceRefreshAll, String forceRefreshPackage) {
- mForceRefreshAll = forceRefreshAll;
- mForceRefreshPackage = forceRefreshPackage;
- }
-
- @Override
- protected Void doInBackground(Void... params) {
- final long start = SystemClock.elapsedRealtime();
-
- mTaskRoots.put(mRecentsRoot.authority, mRecentsRoot);
-
- final ContentResolver resolver = mContext.getContentResolver();
- final PackageManager pm = mContext.getPackageManager();
-
- // Pick up provider with action string
- final Intent intent = new Intent(DocumentsContract.PROVIDER_INTERFACE);
- final List<ResolveInfo> providers = pm.queryIntentContentProviders(intent, 0);
- for (ResolveInfo info : providers) {
- handleDocumentsProvider(info.providerInfo);
- }
-
- final long delta = SystemClock.elapsedRealtime() - start;
- if (DEBUG)
- Log.d(TAG, "Update found " + mTaskRoots.size() + " roots in " + delta + "ms");
- synchronized (mLock) {
- mFirstLoadDone = true;
- if (mBootCompletedResult != null) {
- mBootCompletedResult.finish();
- mBootCompletedResult = null;
- }
- mRoots = mTaskRoots;
- mStoppedAuthorities = mTaskStoppedAuthorities;
- }
- mFirstLoad.countDown();
- resolver.notifyChange(sNotificationUri, null, false);
- return null;
- }
-
- private void handleDocumentsProvider(ProviderInfo info) {
- // Ignore stopped packages for now; we might query them
- // later during UI interaction.
- if ((info.applicationInfo.flags & ApplicationInfo.FLAG_STOPPED) != 0) {
- if (DEBUG) Log.d(TAG, "Ignoring stopped authority " + info.authority);
- mTaskStoppedAuthorities.add(info.authority);
- return;
- }
-
- final boolean forceRefresh = mForceRefreshAll
- || Objects.equals(info.packageName, mForceRefreshPackage);
- mTaskRoots.putAll(info.authority, loadRootsForAuthority(mContext.getContentResolver(),
- info.authority, forceRefresh));
- }
- }
-
- /**
- * Bring up requested provider and query for all active roots.
- */
- private Collection<RootInfo> loadRootsForAuthority(ContentResolver resolver, String authority,
- boolean forceRefresh) {
- if (DEBUG) Log.d(TAG, "Loading roots for " + authority);
-
- synchronized (mObservedAuthorities) {
- if (mObservedAuthorities.add(authority)) {
- // Watch for any future updates
- final Uri rootsUri = DocumentsContract.buildRootsUri(authority);
- mContext.getContentResolver().registerContentObserver(rootsUri, true, mObserver);
- }
- }
-
- final Uri rootsUri = DocumentsContract.buildRootsUri(authority);
- if (!forceRefresh) {
- // Look for roots data that we might have cached for ourselves in the
- // long-lived system process.
- final Bundle systemCache = resolver.getCache(rootsUri);
- if (systemCache != null) {
- if (DEBUG) Log.d(TAG, "System cache hit for " + authority);
- return systemCache.getParcelableArrayList(TAG);
- }
- }
-
- final ArrayList<RootInfo> roots = new ArrayList<>();
- ContentProviderClient client = null;
- Cursor cursor = null;
- try {
- client = DocumentsApplication.acquireUnstableProviderOrThrow(resolver, authority);
- cursor = client.query(rootsUri, null, null, null, null);
- while (cursor.moveToNext()) {
- final RootInfo root = RootInfo.fromRootsCursor(authority, cursor);
- roots.add(root);
- }
- } catch (Exception e) {
- Log.w(TAG, "Failed to load some roots from " + authority + ": " + e);
- } finally {
- IoUtils.closeQuietly(cursor);
- ContentProviderClient.releaseQuietly(client);
- }
-
- // Cache these freshly parsed roots over in the long-lived system
- // process, in case our process goes away. The system takes care of
- // invalidating the cache if the package or Uri changes.
- final Bundle systemCache = new Bundle();
- systemCache.putParcelableArrayList(TAG, roots);
- resolver.putCache(rootsUri, systemCache);
-
- return roots;
- }
-
- /**
- * Return the requested {@link RootInfo}, but only loading the roots for the
- * requested authority. This is useful when we want to load fast without
- * waiting for all the other roots to come back.
- */
- public RootInfo getRootOneshot(String authority, String rootId) {
- return getRootOneshot(authority, rootId, false);
- }
-
- /**
- * Return the requested {@link RootInfo}, but only loading the roots of the requested authority.
- * It always fetches from {@link DocumentsProvider} if forceRefresh is true, which is used to
- * get the most up-to-date free space before starting copy operations.
- */
- public RootInfo getRootOneshot(String authority, String rootId, boolean forceRefresh) {
- synchronized (mLock) {
- RootInfo root = forceRefresh ? null : getRootLocked(authority, rootId);
- if (root == null) {
- mRoots.putAll(authority, loadRootsForAuthority(
- mContext.getContentResolver(), authority, forceRefresh));
- root = getRootLocked(authority, rootId);
- }
- return root;
- }
- }
-
- public RootInfo getRootBlocking(String authority, String rootId) {
- waitForFirstLoad();
- loadStoppedAuthorities();
- synchronized (mLock) {
- return getRootLocked(authority, rootId);
- }
- }
-
- private RootInfo getRootLocked(String authority, String rootId) {
- for (RootInfo root : mRoots.get(authority)) {
- if (Objects.equals(root.rootId, rootId)) {
- return root;
- }
- }
- return null;
- }
-
- public boolean isIconUniqueBlocking(RootInfo root) {
- waitForFirstLoad();
- loadStoppedAuthorities();
- synchronized (mLock) {
- final int rootIcon = root.derivedIcon != 0 ? root.derivedIcon : root.icon;
- for (RootInfo test : mRoots.get(root.authority)) {
- if (Objects.equals(test.rootId, root.rootId)) {
- continue;
- }
- final int testIcon = test.derivedIcon != 0 ? test.derivedIcon : test.icon;
- if (testIcon == rootIcon) {
- return false;
- }
- }
- return true;
- }
- }
-
- public RootInfo getRecentsRoot() {
- return mRecentsRoot;
- }
-
- public boolean isRecentsRoot(RootInfo root) {
- return mRecentsRoot.equals(root);
- }
-
- public Collection<RootInfo> getRootsBlocking() {
- waitForFirstLoad();
- loadStoppedAuthorities();
- synchronized (mLock) {
- return mRoots.values();
- }
- }
-
- public Collection<RootInfo> getMatchingRootsBlocking(State state) {
- waitForFirstLoad();
- loadStoppedAuthorities();
- synchronized (mLock) {
- return getMatchingRoots(mRoots.values(), state);
- }
- }
-
- /**
- * Returns a list of roots for the specified authority. If not found, then
- * an empty list is returned.
- */
- public Collection<RootInfo> getRootsForAuthorityBlocking(String authority) {
- waitForFirstLoad();
- loadStoppedAuthority(authority);
- synchronized (mLock) {
- final Collection<RootInfo> roots = mRoots.get(authority);
- return roots != null ? roots : Collections.<RootInfo>emptyList();
- }
- }
-
- /**
- * Returns the default root for the specified state.
- */
- public RootInfo getDefaultRootBlocking(State state) {
- for (RootInfo root : getMatchingRoots(getRootsBlocking(), state)) {
- if (root.isDownloads()) {
- return root;
- }
- }
- return mRecentsRoot;
- }
-
- @VisibleForTesting
- static List<RootInfo> getMatchingRoots(Collection<RootInfo> roots, State state) {
- final List<RootInfo> matching = new ArrayList<>();
- for (RootInfo root : roots) {
-
- if (DEBUG) Log.d(TAG, "Evaluating " + root);
-
- if (state.action == State.ACTION_CREATE && !root.supportsCreate()) {
- if (DEBUG) Log.d(TAG, "Excluding read-only root because: ACTION_CREATE.");
- continue;
- }
-
- if (state.action == State.ACTION_PICK_COPY_DESTINATION
- && !root.supportsCreate()) {
- if (DEBUG) Log.d(
- TAG, "Excluding read-only root because: ACTION_PICK_COPY_DESTINATION.");
- continue;
- }
-
- if (state.action == State.ACTION_OPEN_TREE && !root.supportsChildren()) {
- if (DEBUG) Log.d(
- TAG, "Excluding root !supportsChildren because: ACTION_OPEN_TREE.");
- continue;
- }
-
- if (!state.showAdvanced && root.isAdvanced()) {
- if (DEBUG) Log.d(TAG, "Excluding root because: unwanted advanced device.");
- continue;
- }
-
- if (state.localOnly && !root.isLocalOnly()) {
- if (DEBUG) Log.d(TAG, "Excluding root because: unwanted non-local device.");
- continue;
- }
-
- if (state.directoryCopy && root.isDownloads()) {
- if (DEBUG) Log.d(
- TAG, "Excluding downloads root because: unsupported directory copy.");
- continue;
- }
-
- if (state.action == State.ACTION_OPEN && root.isEmpty()) {
- if (DEBUG) Log.d(TAG, "Excluding empty root because: ACTION_OPEN.");
- continue;
- }
-
- if (state.action == State.ACTION_GET_CONTENT && root.isEmpty()) {
- if (DEBUG) Log.d(TAG, "Excluding empty root because: ACTION_GET_CONTENT.");
- continue;
- }
-
- final boolean overlap =
- MimePredicate.mimeMatches(root.derivedMimeTypes, state.acceptMimes) ||
- MimePredicate.mimeMatches(state.acceptMimes, root.derivedMimeTypes);
- if (!overlap) {
- if (DEBUG) Log.d(
- TAG, "Excluding root because: unsupported content types > "
- + state.acceptMimes);
- continue;
- }
-
- if (state.excludedAuthorities.contains(root.authority)) {
- if (DEBUG) Log.d(TAG, "Excluding root because: owned by calling package.");
- continue;
- }
-
- if (DEBUG) Log.d(TAG, "Including " + root);
- matching.add(root);
- }
- return matching;
- }
-}
diff --git a/packages/DocumentsUI/src/com/android/documentsui/RootsFragment.java b/packages/DocumentsUI/src/com/android/documentsui/RootsFragment.java
deleted file mode 100644
index ca28622..0000000
--- a/packages/DocumentsUI/src/com/android/documentsui/RootsFragment.java
+++ /dev/null
@@ -1,738 +0,0 @@
-/*
- * 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.
- */
-
-package com.android.documentsui;
-
-import static com.android.documentsui.Shared.DEBUG;
-
-import android.annotation.LayoutRes;
-import android.app.Activity;
-import android.app.Fragment;
-import android.app.FragmentManager;
-import android.app.FragmentTransaction;
-import android.app.LoaderManager.LoaderCallbacks;
-import android.content.ClipData;
-import android.content.Context;
-import android.content.Intent;
-import android.content.Loader;
-import android.content.pm.ActivityInfo;
-import android.content.pm.PackageManager;
-import android.content.pm.ResolveInfo;
-import android.net.Uri;
-import android.os.Bundle;
-import android.os.Looper;
-import android.provider.Settings;
-import android.support.annotation.Nullable;
-import android.text.TextUtils;
-import android.text.format.Formatter;
-import android.util.Log;
-import android.view.ContextMenu;
-import android.view.DragEvent;
-import android.view.LayoutInflater;
-import android.view.MenuInflater;
-import android.view.MenuItem;
-import android.view.MotionEvent;
-import android.view.View;
-import android.view.View.OnClickListener;
-import android.view.View.OnDragListener;
-import android.view.View.OnGenericMotionListener;
-import android.view.ViewGroup;
-import android.widget.AdapterView;
-import android.widget.AdapterView.AdapterContextMenuInfo;
-import android.widget.AdapterView.OnItemClickListener;
-import android.widget.AdapterView.OnItemLongClickListener;
-import android.widget.ArrayAdapter;
-import android.widget.ImageView;
-import android.widget.ListView;
-import android.widget.TextView;
-
-import com.android.documentsui.CheckedTask.Check;
-import com.android.documentsui.clipping.DocumentClipper;
-import com.android.documentsui.model.DocumentInfo;
-import com.android.documentsui.model.RootInfo;
-import com.android.documentsui.services.FileOperations;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
-import java.util.function.BooleanSupplier;
-import java.util.function.Consumer;
-
-/**
- * Display list of known storage backend roots.
- */
-public class RootsFragment extends Fragment implements ItemDragListener.DragHost {
-
- private static final String TAG = "RootsFragment";
- private static final String EXTRA_INCLUDE_APPS = "includeApps";
-
- private final OnDragListener mDragListener = new ItemDragListener<RootsFragment>(this) {
- @Override
- public boolean handleDropEventChecked(View v, DragEvent event) {
- final int position = (Integer) v.getTag(R.id.item_position_tag);
- final Item item = mAdapter.getItem(position);
-
- assert(item.isDropTarget());
-
- BaseActivity activity = getBaseActivity();
- return item.dropOn(event.getClipData(), activity, RootsFragment.this::isDetached,
- activity.fileOpCallback);
- }
- };
-
- private ListView mList;
- private RootsAdapter mAdapter;
- private LoaderCallbacks<Collection<RootInfo>> mCallbacks;
- private Consumer<RootInfo> mOpenSettings = (RootInfo) -> {
- throw new UnsupportedOperationException("Can't open settings.");
- };
-
- public static void show(FragmentManager fm, Consumer<RootInfo> openSettings) {
- RootsFragment fragment = show(fm, (Intent) null);
- fragment.mOpenSettings = openSettings;
- }
-
- public static RootsFragment show(FragmentManager fm, Intent includeApps) {
- final Bundle args = new Bundle();
- args.putParcelable(EXTRA_INCLUDE_APPS, includeApps);
-
- final RootsFragment fragment = new RootsFragment();
- fragment.setArguments(args);
-
- final FragmentTransaction ft = fm.beginTransaction();
- ft.replace(R.id.container_roots, fragment);
- ft.commitAllowingStateLoss();
-
- return fragment;
- }
-
- public static RootsFragment get(FragmentManager fm) {
- return (RootsFragment) fm.findFragmentById(R.id.container_roots);
- }
-
- @Override
- public View onCreateView(
- LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
-
- final View view = inflater.inflate(R.layout.fragment_roots, container, false);
- mList = (ListView) view.findViewById(R.id.roots_list);
- mList.setOnItemClickListener(mItemListener);
- // ListView does not have right-click specific listeners, so we will have a
- // GenericMotionListener to listen for it.
- // Currently, right click is viewed the same as long press, so we will have to quickly
- // register for context menu when we receive a right click event, and quickly unregister
- // it afterwards to prevent context menus popping up upon long presses.
- // All other motion events will then get passed to OnItemClickListener.
- mList.setOnGenericMotionListener(
- new OnGenericMotionListener() {
- @Override
- public boolean onGenericMotion(View v, MotionEvent event) {
- if (Events.isMouseEvent(event)
- && event.getButtonState() == MotionEvent.BUTTON_SECONDARY) {
- registerForContextMenu(v);
- v.showContextMenu(event.getX(), event.getY());
- unregisterForContextMenu(v);
- return true;
- }
- return false;
- }
- });
- mList.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
- return view;
- }
-
- @Override
- public void onActivityCreated(Bundle savedInstanceState) {
- super.onActivityCreated(savedInstanceState);
-
- final Context context = getActivity();
- final RootsCache roots = DocumentsApplication.getRootsCache(context);
- final State state = ((BaseActivity) context).getDisplayState();
-
- mCallbacks = new LoaderCallbacks<Collection<RootInfo>>() {
- @Override
- public Loader<Collection<RootInfo>> onCreateLoader(int id, Bundle args) {
- return new RootsLoader(context, roots, state);
- }
-
- @Override
- public void onLoadFinished(
- Loader<Collection<RootInfo>> loader, Collection<RootInfo> result) {
- if (!isAdded()) {
- return;
- }
-
- Intent handlerAppIntent = getArguments().getParcelable(EXTRA_INCLUDE_APPS);
-
- mAdapter =
- new RootsAdapter(context, result, handlerAppIntent, state, mDragListener);
- mList.setAdapter(mAdapter);
-
- onCurrentRootChanged();
- }
-
- @Override
- public void onLoaderReset(Loader<Collection<RootInfo>> loader) {
- mAdapter = null;
- mList.setAdapter(null);
- }
- };
- }
-
- @Override
- public void onResume() {
- super.onResume();
- onDisplayStateChanged();
- }
-
- public void onDisplayStateChanged() {
- final Context context = getActivity();
- final State state = ((BaseActivity) context).getDisplayState();
-
- if (state.action == State.ACTION_GET_CONTENT) {
- mList.setOnItemLongClickListener(mItemLongClickListener);
- } else {
- mList.setOnItemLongClickListener(null);
- mList.setLongClickable(false);
- }
-
- getLoaderManager().restartLoader(2, null, mCallbacks);
- }
-
- public void onCurrentRootChanged() {
- if (mAdapter == null) {
- return;
- }
-
- final RootInfo root = ((BaseActivity) getActivity()).getCurrentRoot();
- for (int i = 0; i < mAdapter.getCount(); i++) {
- final Object item = mAdapter.getItem(i);
- if (item instanceof RootItem) {
- final RootInfo testRoot = ((RootItem) item).root;
- if (Objects.equals(testRoot, root)) {
- mList.setItemChecked(i, true);
- return;
- }
- }
- }
- }
-
- /**
- * Attempts to shift focus back to the navigation drawer.
- */
- public void requestFocus() {
- mList.requestFocus();
- }
-
- private void showAppDetails(ResolveInfo ri) {
- final Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
- intent.setData(Uri.fromParts("package", ri.activityInfo.packageName, null));
- intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
- startActivity(intent);
- }
-
- private BaseActivity getBaseActivity() {
- return (BaseActivity) getActivity();
- }
-
- @Override
- public void runOnUiThread(Runnable runnable) {
- getActivity().runOnUiThread(runnable);
- }
-
- /**
- * {@inheritDoc}
- *
- * In RootsFragment we open the hovered root.
- */
- @Override
- public void onViewHovered(View v) {
- // SpacerView doesn't have DragListener so this view is guaranteed to be a RootItemView.
- RootItemView itemView = (RootItemView) v;
- itemView.drawRipple();
-
- final int position = (Integer) v.getTag(R.id.item_position_tag);
- final Item item = mAdapter.getItem(position);
- item.open(this);
- }
-
- @Override
- public void setDropTargetHighlight(View v, boolean highlight) {
- // SpacerView doesn't have DragListener so this view is guaranteed to be a RootItemView.
- RootItemView itemView = (RootItemView) v;
- itemView.setHighlight(highlight);
- }
-
- @Override
- public void onCreateContextMenu(
- ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
- super.onCreateContextMenu(menu, v, menuInfo);
- AdapterContextMenuInfo adapterMenuInfo = (AdapterContextMenuInfo) menuInfo;
- final Item item = mAdapter.getItem(adapterMenuInfo.position);
- if (item instanceof RootItem) {
- RootItem rootItem = (RootItem) item;
- MenuInflater inflater = getActivity().getMenuInflater();
- inflater.inflate(R.menu.root_context_menu, menu);
- (getBaseActivity()).getMenuManager().updateRootContextMenu(menu, rootItem.root);
- }
- }
-
- @Override
- public boolean onContextItemSelected(MenuItem item) {
- AdapterContextMenuInfo adapterMenuInfo = (AdapterContextMenuInfo) item.getMenuInfo();
- // There is a possibility that this is called from DirectoryFragment since
- // all fragments' onContextItemSelected gets called when any menu item is selected
- // This is to guard against it since DirectoryFragment's RecylerView does not have a
- // menuInfo
- if (adapterMenuInfo == null) {
- return false;
- }
- final RootItem rootItem = (RootItem) mAdapter.getItem(adapterMenuInfo.position);
- switch (item.getItemId()) {
- case R.id.menu_eject_root:
- final View ejectIcon = adapterMenuInfo.targetView.findViewById(R.id.eject_icon);
- ejectClicked(ejectIcon, rootItem.root);
- return true;
- case R.id.menu_settings:
- mOpenSettings.accept(rootItem.root);
- return true;
- default:
- if (DEBUG) Log.d(TAG, "Unhandled menu item selected: " + item);
- return false;
- }
- }
-
- private static void ejectClicked(View ejectIcon, RootInfo root) {
- assert(ejectIcon != null);
- assert(ejectIcon.getContext() instanceof BaseActivity);
- assert (!root.ejecting);
- ejectIcon.setEnabled(false);
- root.ejecting = true;
- ejectRoot(
- ejectIcon,
- root.authority,
- root.rootId,
- new Consumer<Boolean>() {
- @Override
- public void accept(Boolean ejected) {
- ejectIcon.setEnabled(!ejected);
- root.ejecting = false;
- }
- });
- }
-
- static void ejectRoot(
- View ejectIcon, String authority, String rootId, Consumer<Boolean> listener) {
- BooleanSupplier predicate = () -> {
- return !(ejectIcon.getVisibility() == View.VISIBLE);
- };
- new EjectRootTask(ejectIcon.getContext(),
- authority,
- rootId,
- predicate,
- listener).executeOnExecutor(ProviderExecutor.forAuthority(authority));
- }
-
- private OnItemClickListener mItemListener = new OnItemClickListener() {
- @Override
- public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
- final Item item = mAdapter.getItem(position);
- item.open(RootsFragment.this);
-
- ((BaseActivity) getActivity()).setRootsDrawerOpen(false);
- }
- };
-
- private OnItemLongClickListener mItemLongClickListener = new OnItemLongClickListener() {
- @Override
- public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
- final Item item = mAdapter.getItem(position);
- return item.showAppDetails(RootsFragment.this);
- }
- };
-
- private static abstract class Item {
- private final @LayoutRes int mLayoutId;
- private final String mStringId;
-
- public Item(@LayoutRes int layoutId, String stringId) {
- mLayoutId = layoutId;
- mStringId = stringId;
- }
-
- public View getView(View convertView, ViewGroup parent) {
- if (convertView == null
- || (Integer) convertView.getTag(R.id.layout_id_tag) != mLayoutId) {
- convertView = LayoutInflater.from(parent.getContext())
- .inflate(mLayoutId, parent, false);
- }
- convertView.setTag(R.id.layout_id_tag, mLayoutId);
- bindView(convertView);
- return convertView;
- }
-
- boolean showAppDetails(RootsFragment fragment) {
- return false;
- }
-
- abstract void bindView(View convertView);
-
- abstract boolean isDropTarget();
-
- abstract void open(RootsFragment fragment);
-
- boolean dropOn(ClipData data, Context context, Check check,
- FileOperations.Callback callback) {
- return false;
- }
- }
-
- private static class RootItem extends Item {
- private static final String STRING_ID_FORMAT = "RootItem{%s/%s}";
-
- public final RootInfo root;
-
- public RootItem(RootInfo root) {
- super(R.layout.item_root, getStringId(root));
- this.root = root;
- }
-
- private static String getStringId(RootInfo root) {
- // Empty URI authority is invalid, so we can use empty string if root.authority is null.
- // Directly passing null to String.format() will write "null" which can be a valid URI
- // authority.
- String authority = (root.authority == null ? "" : root.authority);
- return String.format(STRING_ID_FORMAT, authority, root.rootId);
- }
-
- @Override
- public void bindView(View convertView) {
- final ImageView icon = (ImageView) convertView.findViewById(android.R.id.icon);
- final TextView title = (TextView) convertView.findViewById(android.R.id.title);
- final TextView summary = (TextView) convertView.findViewById(android.R.id.summary);
- final ImageView ejectIcon = (ImageView) convertView.findViewById(R.id.eject_icon);
-
- final Context context = convertView.getContext();
- icon.setImageDrawable(root.loadDrawerIcon(context));
- title.setText(root.title);
-
- if (root.supportsEject()) {
- ejectIcon.setVisibility(View.VISIBLE);
- ejectIcon.setImageDrawable(root.loadEjectIcon(context));
- ejectIcon.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View unmountIcon) {
- RootsFragment.ejectClicked(unmountIcon, root);
- }
- });
- } else {
- ejectIcon.setVisibility(View.GONE);
- ejectIcon.setOnClickListener(null);
- }
- // Show available space if no summary
- String summaryText = root.summary;
- if (TextUtils.isEmpty(summaryText) && root.availableBytes >= 0) {
- summaryText = context.getString(R.string.root_available_bytes,
- Formatter.formatFileSize(context, root.availableBytes));
- }
-
- summary.setText(summaryText);
- summary.setVisibility(TextUtils.isEmpty(summaryText) ? View.GONE : View.VISIBLE);
- }
-
- @Override
- boolean isDropTarget() {
- return root.supportsCreate() && !root.isLibrary();
- }
-
- @Override
- void open(RootsFragment fragment) {
- BaseActivity activity = BaseActivity.get(fragment);
- Metrics.logRootVisited(fragment.getActivity(), root);
- activity.onRootPicked(root);
- }
-
- @Override
- boolean dropOn(
- ClipData data, Context context, Check check, FileOperations.Callback callback) {
- ProviderExecutor executor = ProviderExecutor.forAuthority(root.authority);
- new DropOnRootTask(data, root, context, check, callback).executeOnExecutor(executor);
- return true;
- }
- }
-
- private static class SpacerItem extends Item {
- private static final String STRING_ID = "SpacerItem";
-
- public SpacerItem() {
- // Multiple spacer items can share the same string id as they're identical.
- super(R.layout.item_root_spacer, STRING_ID);
- }
-
- @Override
- void bindView(View convertView) {
- // Nothing to bind
- }
-
- @Override
- boolean isDropTarget() {
- return false;
- }
-
- @Override
- void open(RootsFragment fragment) {
- if (DEBUG) Log.d(TAG, "Ignoring click/hover on spacer item.");
- }
- }
-
- private static class AppItem extends Item {
- private static final String STRING_ID_FORMAT = "AppItem{%s/%s}";
-
- public final ResolveInfo info;
-
- public AppItem(ResolveInfo info) {
- super(R.layout.item_root, getStringId(info));
- this.info = info;
- }
-
- private static String getStringId(ResolveInfo info) {
- ActivityInfo activityInfo = info.activityInfo;
-
- String component = String.format(
- STRING_ID_FORMAT, activityInfo.applicationInfo.packageName, activityInfo.name);
- return component;
- }
-
- @Override
- boolean showAppDetails(RootsFragment fragment) {
- fragment.showAppDetails(info);
- return true;
- }
-
- @Override
- void bindView(View convertView) {
- final ImageView icon = (ImageView) convertView.findViewById(android.R.id.icon);
- final TextView title = (TextView) convertView.findViewById(android.R.id.title);
- final TextView summary = (TextView) convertView.findViewById(android.R.id.summary);
-
- final PackageManager pm = convertView.getContext().getPackageManager();
- icon.setImageDrawable(info.loadIcon(pm));
- title.setText(info.loadLabel(pm));
-
- // TODO: match existing summary behavior from disambig dialog
- summary.setVisibility(View.GONE);
- }
-
- @Override
- boolean isDropTarget() {
- // We won't support drag n' drop in DocumentsActivity, and apps only show up there.
- return false;
- }
-
- @Override
- void open(RootsFragment fragment) {
- DocumentsActivity activity = DocumentsActivity.get(fragment);
- Metrics.logAppVisited(fragment.getActivity(), info);
- activity.onAppPicked(info);
- }
- }
-
- private static class DropOnRootTask extends CheckedTask<Void, DocumentInfo> {
- private ClipData mData;
- private RootInfo mDstRoot;
- private Context mContext;
- private FileOperations.Callback mCallback;
-
- private DropOnRootTask(ClipData data, RootInfo dstRoot, Context context, Check check,
- FileOperations.Callback callback) {
- super(check);
- mData = data;
- mDstRoot = dstRoot;
- mContext = context;
- mCallback = callback;
- }
-
- @Override
- public DocumentInfo run(Void... args) {
- return mDstRoot.getRootDocumentBlocking(mContext);
- }
-
- @Override
- public void finish(DocumentInfo doc) {
- if (doc != null) {
- DocumentClipper clipper =
- DocumentsApplication.getDocumentClipper(mContext);
- clipper.copyFromClipData(mDstRoot, doc, mData, mCallback);
- } else {
- Log.e(TAG, "Failed to get doc.");
- }
- }
- }
-
- private static class RootsAdapter extends ArrayAdapter<Item> {
- private static final Map<String, Long> sIdMap = new HashMap<String, Long>();
- // the next available id to associate with a new string id
- private static long sNextAvailableId;
-
- private OnDragListener mDragListener;
-
- /**
- * @param handlerAppIntent When not null, apps capable of handling the original intent will
- * be included in list of roots (in special section at bottom).
- */
- public RootsAdapter(Context context, Collection<RootInfo> roots,
- @Nullable Intent handlerAppIntent, State state, OnDragListener dragListener) {
- super(context, 0);
-
- final List<RootItem> libraries = new ArrayList<>();
- final List<RootItem> others = new ArrayList<>();
-
- for (final RootInfo root : roots) {
- final RootItem item = new RootItem(root);
-
- if (root.isHome() &&
- !Shared.shouldShowDocumentsRoot(context,
- ((Activity) context).getIntent())) {
- continue;
- } else if (root.isLibrary()) {
- if (DEBUG) Log.d(TAG, "Adding " + root + " as library.");
- libraries.add(item);
- } else {
- if (DEBUG) Log.d(TAG, "Adding " + root + " as non-library.");
- others.add(item);
- }
- }
-
- final RootComparator comp = new RootComparator();
- Collections.sort(libraries, comp);
- Collections.sort(others, comp);
-
- addAll(libraries);
- // Only add the spacer if it is actually separating something.
- if (!libraries.isEmpty() && !others.isEmpty()) {
- add(new SpacerItem());
- }
- addAll(others);
-
- // Include apps that can handle this intent too.
- if (handlerAppIntent != null) {
- includeHandlerApps(context, handlerAppIntent);
- }
-
- mDragListener = dragListener;
- }
-
- /**
- * Adds apps capable of handling the original intent will be included in list of roots (in
- * special section at bottom).
- */
- private void includeHandlerApps(Context context, Intent handlerAppIntent) {
- final PackageManager pm = context.getPackageManager();
- final List<ResolveInfo> infos = pm.queryIntentActivities(
- handlerAppIntent, PackageManager.MATCH_DEFAULT_ONLY);
-
- final List<AppItem> apps = new ArrayList<>();
-
- // Omit ourselves from the list
- for (ResolveInfo info : infos) {
- if (!context.getPackageName().equals(info.activityInfo.packageName)) {
- apps.add(new AppItem(info));
- }
- }
-
- if (apps.size() > 0) {
- add(new SpacerItem());
- addAll(apps);
- }
- }
-
- @Override
- public boolean hasStableIds() {
- return true;
- }
-
- @Override
- public long getItemId(int position) {
- // Ensure this method is only called in main thread because we don't have any
- // concurrency protection.
- assert(Looper.myLooper() == Looper.getMainLooper());
-
- String stringId = getItem(position).mStringId;
-
- long id;
- if (sIdMap.containsKey(stringId)) {
- id = sIdMap.get(stringId);
- } else {
- id = sNextAvailableId++;
- sIdMap.put(stringId, id);
- }
-
- return id;
- }
-
- @Override
- public View getView(int position, View convertView, ViewGroup parent) {
- final Item item = getItem(position);
- final View view = item.getView(convertView, parent);
-
- if (item.isDropTarget()) {
- view.setTag(R.id.item_position_tag, position);
- view.setOnDragListener(mDragListener);
- } else {
- view.setTag(R.id.item_position_tag, null);
- view.setOnDragListener(null);
- }
- return view;
- }
-
- @Override
- public boolean areAllItemsEnabled() {
- return false;
- }
-
- @Override
- public boolean isEnabled(int position) {
- return getItemViewType(position) != 1;
- }
-
- @Override
- public int getItemViewType(int position) {
- final Item item = getItem(position);
- if (item instanceof RootItem || item instanceof AppItem) {
- return 0;
- } else {
- return 1;
- }
- }
-
- @Override
- public int getViewTypeCount() {
- return 2;
- }
- }
-
- public static class RootComparator implements Comparator<RootItem> {
- @Override
- public int compare(RootItem lhs, RootItem rhs) {
- return lhs.root.compareTo(rhs.root);
- }
- }
-}
diff --git a/packages/DocumentsUI/src/com/android/documentsui/RootsList.java b/packages/DocumentsUI/src/com/android/documentsui/RootsList.java
deleted file mode 100644
index bf03ffd..0000000
--- a/packages/DocumentsUI/src/com/android/documentsui/RootsList.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.android.documentsui;
-
-import android.content.Context;
-import android.util.AttributeSet;
-import android.view.KeyEvent;
-import android.widget.ListView;
-
-/**
- * The list in the navigation drawer. This class exists for the purpose of overriding the key
- * handler on ListView. Ignoring keystrokes (e.g. the tab key) cannot be properly done using
- * View.OnKeyListener.
- */
-public class RootsList extends ListView {
-
- // Multiple constructors are needed to handle all the different ways this View could be
- // constructed by the framework. Don't remove them!
- public RootsList(Context context) {
- super(context);
- }
-
- public RootsList(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
- super(context, attrs, defStyleAttr, defStyleRes);
- }
-
- public RootsList(Context context, AttributeSet attrs, int defStyleAttr) {
- super(context, attrs, defStyleAttr);
- }
-
- public RootsList(Context context, AttributeSet attrs) {
- super(context, attrs);
- }
-
- @Override
- public boolean onKeyDown(int keyCode, KeyEvent event) {
- switch (keyCode) {
- // Ignore tab key events - this causes them to bubble up to the global key handler where
- // they are appropriately handled. See BaseActivity.onKeyDown.
- case KeyEvent.KEYCODE_TAB:
- return false;
- // Prevent left/right arrow keystrokes from shifting focus away from the roots list.
- case KeyEvent.KEYCODE_DPAD_LEFT:
- case KeyEvent.KEYCODE_DPAD_RIGHT:
- return true;
- default:
- return super.onKeyDown(keyCode, event);
- }
- }
-}
diff --git a/packages/DocumentsUI/src/com/android/documentsui/RootsLoader.java b/packages/DocumentsUI/src/com/android/documentsui/RootsLoader.java
deleted file mode 100644
index 5c4ccdd..0000000
--- a/packages/DocumentsUI/src/com/android/documentsui/RootsLoader.java
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- * 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.
- */
-
-package com.android.documentsui;
-
-import android.content.AsyncTaskLoader;
-import android.content.Context;
-
-import com.android.documentsui.model.RootInfo;
-
-import java.util.Collection;
-
-public class RootsLoader extends AsyncTaskLoader<Collection<RootInfo>> {
- private final ForceLoadContentObserver mObserver = new ForceLoadContentObserver();
-
- private final RootsCache mRoots;
- private final State mState;
-
- private Collection<RootInfo> mResult;
-
- public RootsLoader(Context context, RootsCache roots, State state) {
- super(context);
- mRoots = roots;
- mState = state;
-
- getContext().getContentResolver()
- .registerContentObserver(RootsCache.sNotificationUri, false, mObserver);
- }
-
- @Override
- public final Collection<RootInfo> loadInBackground() {
- return mRoots.getMatchingRootsBlocking(mState);
- }
-
- @Override
- public void deliverResult(Collection<RootInfo> result) {
- if (isReset()) {
- return;
- }
-
- mResult = result;
-
- if (isStarted()) {
- super.deliverResult(result);
- }
- }
-
- @Override
- protected void onStartLoading() {
- if (mResult != null) {
- deliverResult(mResult);
- }
- if (takeContentChanged() || mResult == null) {
- forceLoad();
- }
- }
-
- @Override
- protected void onStopLoading() {
- cancelLoad();
- }
-
- @Override
- protected void onReset() {
- super.onReset();
-
- // Ensure the loader is stopped
- onStopLoading();
-
- mResult = null;
-
- getContext().getContentResolver().unregisterContentObserver(mObserver);
- }
-}
diff --git a/packages/DocumentsUI/src/com/android/documentsui/SaveFragment.java b/packages/DocumentsUI/src/com/android/documentsui/SaveFragment.java
deleted file mode 100644
index a37590d..0000000
--- a/packages/DocumentsUI/src/com/android/documentsui/SaveFragment.java
+++ /dev/null
@@ -1,187 +0,0 @@
-/*
- * 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.
- */
-
-package com.android.documentsui;
-
-import android.app.Fragment;
-import android.app.FragmentManager;
-import android.app.FragmentTransaction;
-import android.content.Context;
-import android.os.Bundle;
-import android.text.Editable;
-import android.text.TextUtils;
-import android.text.TextWatcher;
-import android.view.KeyEvent;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.Button;
-import android.widget.EditText;
-import android.widget.ImageView;
-import android.widget.ProgressBar;
-
-import com.android.documentsui.model.DocumentInfo;
-
-/**
- * Display document title editor and save button.
- */
-public class SaveFragment extends Fragment {
- public static final String TAG = "SaveFragment";
-
- private DocumentInfo mReplaceTarget;
- private EditText mDisplayName;
- private Button mSave;
- private ProgressBar mProgress;
- private boolean mIgnoreNextEdit;
-
- private static final String EXTRA_MIME_TYPE = "mime_type";
- private static final String EXTRA_DISPLAY_NAME = "display_name";
-
- public static void show(FragmentManager fm, String mimeType, String displayName) {
- final Bundle args = new Bundle();
- args.putString(EXTRA_MIME_TYPE, mimeType);
- args.putString(EXTRA_DISPLAY_NAME, displayName);
-
- final SaveFragment fragment = new SaveFragment();
- fragment.setArguments(args);
-
- final FragmentTransaction ft = fm.beginTransaction();
- ft.replace(R.id.container_save, fragment, TAG);
- ft.commitAllowingStateLoss();
- }
-
- public static SaveFragment get(FragmentManager fm) {
- return (SaveFragment) fm.findFragmentByTag(TAG);
- }
-
- @Override
- public View onCreateView(
- LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
- final Context context = inflater.getContext();
-
- final View view = inflater.inflate(R.layout.fragment_save, container, false);
-
- final ImageView icon = (ImageView) view.findViewById(android.R.id.icon);
- icon.setImageDrawable(
- IconUtils.loadMimeIcon(context, getArguments().getString(EXTRA_MIME_TYPE)));
-
- mDisplayName = (EditText) view.findViewById(android.R.id.title);
- mDisplayName.addTextChangedListener(mDisplayNameWatcher);
- mDisplayName.setText(getArguments().getString(EXTRA_DISPLAY_NAME));
- mDisplayName.setOnKeyListener(
- new View.OnKeyListener() {
- @Override
- public boolean onKey(View v, int keyCode, KeyEvent event) {
- // Only handle key-down events. This is simpler, consistent with most other
- // UIs, and enables the handling of repeated key events from holding down a
- // key.
- if (event.getAction() != KeyEvent.ACTION_DOWN) {
- return false;
- }
-
- // Returning false in this method will bubble the event up to
- // {@link BaseActivity#onKeyDown}. In order to prevent backspace popping
- // documents once the textView is empty, we are going to trap it here.
- if (keyCode == KeyEvent.KEYCODE_DEL
- && TextUtils.isEmpty(mDisplayName.getText())) {
- return true;
- }
-
- if (keyCode == KeyEvent.KEYCODE_ENTER && mSave.isEnabled()) {
- performSave();
- return true;
- }
- return false;
- }
- });
-
- mSave = (Button) view.findViewById(android.R.id.button1);
- mSave.setOnClickListener(mSaveListener);
- mSave.setEnabled(false);
-
- mProgress = (ProgressBar) view.findViewById(android.R.id.progress);
-
- return view;
- }
-
- private TextWatcher mDisplayNameWatcher = new TextWatcher() {
- @Override
- public void onTextChanged(CharSequence s, int start, int before, int count) {
- if (mIgnoreNextEdit) {
- mIgnoreNextEdit = false;
- } else {
- mReplaceTarget = null;
- }
- }
-
- @Override
- public void beforeTextChanged(CharSequence s, int start, int count, int after) {
- // ignored
- }
-
- @Override
- public void afterTextChanged(Editable s) {
- // ignored
- }
- };
-
- private View.OnClickListener mSaveListener = new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- performSave();
- }
-
- };
-
- private void performSave() {
- final DocumentsActivity activity = DocumentsActivity.get(SaveFragment.this);
- if (mReplaceTarget != null) {
- activity.onSaveRequested(mReplaceTarget);
- } else {
- final String mimeType = getArguments().getString(EXTRA_MIME_TYPE);
- final String displayName = mDisplayName.getText().toString();
- activity.onSaveRequested(mimeType, displayName);
- }
- }
-
- /**
- * Set given document as target for in-place writing if user hits save
- * without changing the filename. Can be set to {@code null} if user
- * navigates outside the target directory.
- */
- public void setReplaceTarget(DocumentInfo replaceTarget) {
- mReplaceTarget = replaceTarget;
-
- if (mReplaceTarget != null) {
- getArguments().putString(EXTRA_DISPLAY_NAME, replaceTarget.displayName);
- mIgnoreNextEdit = true;
- mDisplayName.setText(replaceTarget.displayName);
- }
- }
-
- public void prepareForDirectory(DocumentInfo cwd) {
- setSaveEnabled(cwd != null && cwd.isCreateSupported());
- }
-
- private void setSaveEnabled(boolean enabled) {
- mSave.setEnabled(enabled);
- }
-
- public void setPending(boolean pending) {
- mSave.setVisibility(pending ? View.INVISIBLE : View.VISIBLE);
- mProgress.setVisibility(pending ? View.VISIBLE : View.GONE);
- }
-}
diff --git a/packages/DocumentsUI/src/com/android/documentsui/SearchViewManager.java b/packages/DocumentsUI/src/com/android/documentsui/SearchViewManager.java
deleted file mode 100644
index 46a14e6..0000000
--- a/packages/DocumentsUI/src/com/android/documentsui/SearchViewManager.java
+++ /dev/null
@@ -1,296 +0,0 @@
-/*
- * 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.
- */
-
-package com.android.documentsui;
-
-import static com.android.documentsui.Shared.DEBUG;
-
-import android.annotation.Nullable;
-import android.os.Bundle;
-import android.provider.DocumentsContract.Root;
-import android.text.TextUtils;
-import android.util.Log;
-import android.view.Menu;
-import android.view.MenuItem;
-import android.view.MenuItem.OnActionExpandListener;
-import android.view.View;
-import android.view.View.OnClickListener;
-import android.view.View.OnFocusChangeListener;
-import android.widget.SearchView;
-import android.widget.SearchView.OnQueryTextListener;
-
-import com.android.documentsui.model.RootInfo;
-
-/**
- * Manages searching UI behavior.
- */
-public class SearchViewManager implements
- SearchView.OnCloseListener, OnQueryTextListener, OnClickListener, OnFocusChangeListener,
- OnActionExpandListener {
-
- public interface SearchManagerListener {
- void onSearchChanged(@Nullable String query);
- void onSearchFinished();
- }
-
- private static final String TAG = "SearchManager";
-
- private SearchManagerListener mListener;
- private boolean mSearchExpanded;
- private String mCurrentSearch;
- private boolean mIgnoreNextClose;
- private boolean mFullBar;
-
- private DocumentsToolbar mActionBar;
- private MenuItem mMenuItem;
- private SearchView mSearchView;
-
- public SearchViewManager(SearchManagerListener listener, @Nullable Bundle savedState) {
- mListener = listener;
- mCurrentSearch = savedState != null ? savedState.getString(Shared.EXTRA_QUERY) : null;
- }
-
- public void setSearchMangerListener(SearchManagerListener listener) {
- mListener = listener;
- }
-
- public void install(DocumentsToolbar actionBar, boolean isFullBarSearch) {
- mActionBar = actionBar;
- mMenuItem = actionBar.getSearchMenu();
- mSearchView = (SearchView) mMenuItem.getActionView();
-
- mSearchView.setOnQueryTextListener(this);
- mSearchView.setOnCloseListener(this);
- mSearchView.setOnSearchClickListener(this);
- mSearchView.setOnQueryTextFocusChangeListener(this);
-
- mFullBar = isFullBarSearch;
- if (mFullBar) {
- mMenuItem.setShowAsActionFlags(MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW
- | MenuItem.SHOW_AS_ACTION_ALWAYS);
- mMenuItem.setOnActionExpandListener(this);
- }
-
- restoreSearch();
- }
-
- /**
- * Used to hide menu icons, when the search is being restored. Needed because search restoration
- * is done before onPrepareOptionsMenu(Menu menu) that is overriding the icons visibility.
- */
- public void updateMenu() {
- if (isSearching() && mFullBar) {
- Menu menu = mActionBar.getMenu();
- menu.setGroupVisible(R.id.group_hide_when_searching, false);
- }
- }
-
- /**
- * @param root Info about the current directory.
- */
- void update(RootInfo root) {
- if (mMenuItem == null) {
- if (DEBUG) Log.d(TAG, "update called before Search MenuItem installed.");
- return;
- }
-
- if (mCurrentSearch != null) {
- mMenuItem.expandActionView();
-
- mSearchView.setIconified(false);
- mSearchView.clearFocus();
- mSearchView.setQuery(mCurrentSearch, false);
- } else {
- mSearchView.clearFocus();
- if (!mSearchView.isIconified()) {
- mIgnoreNextClose = true;
- mSearchView.setIconified(true);
- }
-
- if (mMenuItem.isActionViewExpanded()) {
- mMenuItem.collapseActionView();
- }
- }
-
- showMenu(root != null
- && ((root.flags & Root.FLAG_SUPPORTS_SEARCH) != 0));
- }
-
- protected void showMenu(boolean visible) {
- if (mMenuItem == null) {
- if (DEBUG) Log.d(TAG, "showMenu called before Search MenuItem installed.");
- return;
- }
-
- if (!visible) {
- mCurrentSearch = null;
- }
-
- mMenuItem.setVisible(visible);
- }
-
- /**
- * Cancels current search operation. Triggers clearing and collapsing the SearchView.
- *
- * @return True if it cancels search. False if it does not operate search currently.
- */
- boolean cancelSearch() {
- if (isExpanded() || isSearching()) {
- // If the query string is not empty search view won't get iconified
- mSearchView.setQuery("", false);
-
- if (mFullBar) {
- onClose();
- } else {
- // Causes calling onClose(). onClose() is triggering directory content update.
- mSearchView.setIconified(true);
- }
- return true;
- }
- return false;
- }
-
- /**
- * Sets search view into the searching state. Used to restore state after device orientation
- * change.
- */
- private void restoreSearch() {
- if (isSearching()) {
- if(mFullBar) {
- mMenuItem.expandActionView();
- } else {
- mSearchView.setIconified(false);
- }
- onSearchExpanded();
- mSearchView.setQuery(mCurrentSearch, false);
- mSearchView.clearFocus();
- }
- }
-
- private void onSearchExpanded() {
- mSearchExpanded = true;
- if(mFullBar) {
- Menu menu = mActionBar.getMenu();
- menu.setGroupVisible(R.id.group_hide_when_searching, false);
- }
- }
-
- /**
- * Clears the search. Triggers refreshing of the directory content.
- * @return True if the default behavior of clearing/dismissing SearchView should be overridden.
- * False otherwise.
- */
- @Override
- public boolean onClose() {
- mSearchExpanded = false;
- if (mIgnoreNextClose) {
- mIgnoreNextClose = false;
- return false;
- }
-
- // Refresh the directory if a search was done
- if (mCurrentSearch != null) {
- mCurrentSearch = null;
- if (mListener != null) {
- mListener.onSearchChanged(mCurrentSearch);
- }
- }
-
- if(mFullBar) {
- mMenuItem.collapseActionView();
- }
- mListener.onSearchFinished();
-
- return false;
- }
-
- /**
- * Called when owning activity is saving state to be used to restore state during creation.
- * @param state Bundle to save state too
- */
- public void onSaveInstanceState(Bundle state) {
- state.putString(Shared.EXTRA_QUERY, mCurrentSearch);
- }
-
- /**
- * Sets mSearchExpanded. Called when search icon is clicked to start search for both search view
- * modes.
- */
- @Override
- public void onClick(View v) {
- onSearchExpanded();
- }
-
- @Override
- public boolean onQueryTextSubmit(String query) {
- mCurrentSearch = query;
- mSearchView.clearFocus();
- if (mListener != null) {
- mListener.onSearchChanged(mCurrentSearch);
- }
- return true;
- }
-
- /**
- * Used to detect and handle back button pressed event when search is expanded.
- */
- @Override
- public void onFocusChange(View v, boolean hasFocus) {
- if (!hasFocus) {
- if (mCurrentSearch == null) {
- mSearchView.setIconified(true);
- } else if (TextUtils.isEmpty(mSearchView.getQuery())) {
- cancelSearch();
- }
- }
- }
-
- @Override
- public boolean onQueryTextChange(String newText) {
- return false;
- }
-
- @Override
- public boolean onMenuItemActionCollapse(MenuItem item) {
- Menu menu = mActionBar.getMenu();
- menu.setGroupVisible(R.id.group_hide_when_searching, true);
-
- // Handles case when search view is collapsed by using the arrow on the left of the bar
- if (isExpanded() || isSearching()) {
- cancelSearch();
- return false;
- }
- return true;
- }
-
- @Override
- public boolean onMenuItemActionExpand(MenuItem item) {
- return true;
- }
-
- String getCurrentSearch() {
- return mCurrentSearch;
- }
-
- boolean isSearching() {
- return mCurrentSearch != null;
- }
-
- boolean isExpanded() {
- return mSearchExpanded;
- }
-
-}
diff --git a/packages/DocumentsUI/src/com/android/documentsui/SectionedListAdapter.java b/packages/DocumentsUI/src/com/android/documentsui/SectionedListAdapter.java
deleted file mode 100644
index ae959f9..0000000
--- a/packages/DocumentsUI/src/com/android/documentsui/SectionedListAdapter.java
+++ /dev/null
@@ -1,164 +0,0 @@
-/*
- * 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.
- */
-
-package com.android.documentsui;
-
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.AdapterView;
-import android.widget.BaseAdapter;
-import android.widget.ListAdapter;
-
-import java.util.ArrayList;
-
-/**
- * Adapter that combines multiple adapters as sections, asking each section to
- * provide a header, and correctly handling item types across child adapters.
- */
-public class SectionedListAdapter extends BaseAdapter {
- private ArrayList<SectionAdapter> mSections = new ArrayList<>();
-
- public interface SectionAdapter extends ListAdapter {
- public View getHeaderView(View convertView, ViewGroup parent);
- }
-
- public void clearSections() {
- mSections.clear();
- notifyDataSetChanged();
- }
-
- /**
- * After mutating sections, you <em>must</em>
- * {@link AdapterView#setAdapter(android.widget.Adapter)} to correctly
- * recount view types.
- */
- public void addSection(SectionAdapter adapter) {
- mSections.add(adapter);
- notifyDataSetChanged();
- }
-
- @Override
- public int getCount() {
- int count = 0;
- final int size = mSections.size();
- for (int i = 0; i < size; i++) {
- count += mSections.get(i).getCount() + 1;
- }
- return count;
- }
-
- @Override
- public Object getItem(int position) {
- final int size = mSections.size();
- for (int i = 0; i < size; i++) {
- final SectionAdapter section = mSections.get(i);
- final int sectionSize = section.getCount() + 1;
-
- // Check if position inside this section
- if (position == 0) {
- return section;
- } else if (position < sectionSize) {
- return section.getItem(position - 1);
- }
-
- // Otherwise jump into next section
- position -= sectionSize;
- }
- throw new IllegalStateException("Unknown position " + position);
- }
-
- @Override
- public long getItemId(int position) {
- return position;
- }
-
- @Override
- public View getView(int position, View convertView, ViewGroup parent) {
- final int size = mSections.size();
- for (int i = 0; i < size; i++) {
- final SectionAdapter section = mSections.get(i);
- final int sectionSize = section.getCount() + 1;
-
- // Check if position inside this section
- if (position == 0) {
- return section.getHeaderView(convertView, parent);
- } else if (position < sectionSize) {
- return section.getView(position - 1, convertView, parent);
- }
-
- // Otherwise jump into next section
- position -= sectionSize;
- }
- throw new IllegalStateException("Unknown position " + position);
- }
-
- @Override
- public boolean areAllItemsEnabled() {
- return false;
- }
-
- @Override
- public boolean isEnabled(int position) {
- final int size = mSections.size();
- for (int i = 0; i < size; i++) {
- final SectionAdapter section = mSections.get(i);
- final int sectionSize = section.getCount() + 1;
-
- // Check if position inside this section
- if (position == 0) {
- return false;
- } else if (position < sectionSize) {
- return section.isEnabled(position - 1);
- }
-
- // Otherwise jump into next section
- position -= sectionSize;
- }
- throw new IllegalStateException("Unknown position " + position);
- }
-
- @Override
- public int getItemViewType(int position) {
- int type = 1;
- final int size = mSections.size();
- for (int i = 0; i < size; i++) {
- final SectionAdapter section = mSections.get(i);
- final int sectionSize = section.getCount() + 1;
-
- // Check if position inside this section
- if (position == 0) {
- return 0;
- } else if (position < sectionSize) {
- return type + section.getItemViewType(position - 1);
- }
-
- // Otherwise jump into next section
- position -= sectionSize;
- type += section.getViewTypeCount();
- }
- throw new IllegalStateException("Unknown position " + position);
- }
-
- @Override
- public int getViewTypeCount() {
- int count = 1;
- final int size = mSections.size();
- for (int i = 0; i < size; i++) {
- count += mSections.get(i).getViewTypeCount();
- }
- return count;
- }
-}
diff --git a/packages/DocumentsUI/src/com/android/documentsui/Shared.java b/packages/DocumentsUI/src/com/android/documentsui/Shared.java
deleted file mode 100644
index c1db87d..0000000
--- a/packages/DocumentsUI/src/com/android/documentsui/Shared.java
+++ /dev/null
@@ -1,237 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.documentsui;
-
-import android.app.Activity;
-import android.app.AlertDialog;
-import android.content.Context;
-import android.content.Intent;
-import android.content.res.Configuration;
-import android.os.Looper;
-import android.provider.DocumentsContract;
-import android.text.TextUtils;
-import android.text.format.DateUtils;
-import android.text.format.Time;
-import android.util.Log;
-import android.view.WindowManager;
-
-import java.text.Collator;
-import java.util.ArrayList;
-import java.util.List;
-
-import javax.annotation.Nullable;
-
-/** @hide */
-public final class Shared {
-
- public static final String TAG = "Documents";
-
- public static final boolean DEBUG = true;
-
- /** Intent action name to pick a copy destination. */
- public static final String ACTION_PICK_COPY_DESTINATION =
- "com.android.documentsui.PICK_COPY_DESTINATION";
-
- /**
- * Extra flag allowing app to be opened in productivity mode (less downloadsy).
- * Useful developers and the likes. When set to true overrides the default
- * config value of productivity_device.
- */
- public static final String EXTRA_PRODUCTIVITY_MODE = "com.android.documentsui.PRODUCTIVITY";
-
- /**
- * Extra boolean flag for {@link ACTION_PICK_COPY_DESTINATION}, which
- * specifies if the destination directory needs to create new directory or not.
- */
- public static final String EXTRA_DIRECTORY_COPY = "com.android.documentsui.DIRECTORY_COPY";
-
- /**
- * Extra flag used to store the current stack so user opens in right spot.
- */
- public static final String EXTRA_STACK = "com.android.documentsui.STACK";
-
- /**
- * Extra flag used to store query of type String in the bundle.
- */
- public static final String EXTRA_QUERY = "query";
-
- /**
- * Extra flag used to store state of type State in the bundle.
- */
- public static final String EXTRA_STATE = "state";
-
- /**
- * Extra flag used to store type of DirectoryFragment's type ResultType type in the bundle.
- */
- public static final String EXTRA_TYPE = "type";
-
- /**
- * Extra flag used to store root of type RootInfo in the bundle.
- */
- public static final String EXTRA_ROOT = "root";
-
- /**
- * Extra flag used to store document of DocumentInfo type in the bundle.
- */
- public static final String EXTRA_DOC = "document";
-
- /**
- * Extra flag used to store DirectoryFragment's selection of Selection type in the bundle.
- */
- public static final String EXTRA_SELECTION = "selection";
-
- /**
- * Extra flag used to store DirectoryFragment's search mode of boolean type in the bundle.
- */
- public static final String EXTRA_SEARCH_MODE = "searchMode";
-
- /**
- * Extra flag used to store DirectoryFragment's ignore state of boolean type in the bundle.
- */
- public static final String EXTRA_IGNORE_STATE = "ignoreState";
-
- /**
- * Extra for an Intent for enabling performance benchmark. Used only by tests.
- */
- public static final String EXTRA_BENCHMARK = "com.android.documentsui.benchmark";
-
- /**
- * Maximum number of items in a Binder transaction packet.
- */
- public static final int MAX_DOCS_IN_INTENT = 500;
-
- private static final Collator sCollator;
-
- static {
- sCollator = Collator.getInstance();
- sCollator.setStrength(Collator.SECONDARY);
- }
-
- /**
- * Generates a formatted quantity string.
- */
- public static final String getQuantityString(Context context, int resourceId, int quantity) {
- return context.getResources().getQuantityString(resourceId, quantity, quantity);
- }
-
- public static String formatTime(Context context, long when) {
- // TODO: DateUtils should make this easier
- Time then = new Time();
- then.set(when);
- Time now = new Time();
- now.setToNow();
-
- int flags = DateUtils.FORMAT_NO_NOON | DateUtils.FORMAT_NO_MIDNIGHT
- | DateUtils.FORMAT_ABBREV_ALL;
-
- if (then.year != now.year) {
- flags |= DateUtils.FORMAT_SHOW_YEAR | DateUtils.FORMAT_SHOW_DATE;
- } else if (then.yearDay != now.yearDay) {
- flags |= DateUtils.FORMAT_SHOW_DATE;
- } else {
- flags |= DateUtils.FORMAT_SHOW_TIME;
- }
-
- return DateUtils.formatDateTime(context, when, flags);
- }
-
- /**
- * A convenient way to transform any list into a (parcelable) ArrayList.
- * Uses cast if possible, else creates a new list with entries from {@code list}.
- */
- public static <T> ArrayList<T> asArrayList(List<T> list) {
- return list instanceof ArrayList
- ? (ArrayList<T>) list
- : new ArrayList<T>(list);
- }
-
- /**
- * Compare two strings against each other using system default collator in a
- * case-insensitive mode. Clusters strings prefixed with {@link DIR_PREFIX}
- * before other items.
- */
- public static int compareToIgnoreCaseNullable(String lhs, String rhs) {
- final boolean leftEmpty = TextUtils.isEmpty(lhs);
- final boolean rightEmpty = TextUtils.isEmpty(rhs);
-
- if (leftEmpty && rightEmpty) return 0;
- if (leftEmpty) return -1;
- if (rightEmpty) return 1;
-
- return sCollator.compare(lhs, rhs);
- }
-
- public static boolean isHardwareKeyboardAvailable(Context context) {
- return context.getResources().getConfiguration().keyboard != Configuration.KEYBOARD_NOKEYS;
- }
-
- public static void ensureKeyboardPresent(Context context, AlertDialog dialog) {
- if (!isHardwareKeyboardAvailable(context)) {
- dialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE);
- }
- }
-
- /*
- * Returns true if app is running in "productivity mode".
- */
- private static boolean isProductivityMode(Context context, Intent intent) {
- return intent.getBooleanExtra(
- Shared.EXTRA_PRODUCTIVITY_MODE,
- context.getResources().getBoolean(R.bool.productivity_device));
- }
-
- /*
- * Returns true if "Documents" root should be shown.
- */
- public static boolean shouldShowDocumentsRoot(Context context, Intent intent) {
- return isProductivityMode(context, intent);
- }
-
- /*
- * Returns true if device root should be shown.
- */
- public static boolean shouldShowDeviceRoot(Context context, Intent intent) {
- return isProductivityMode(context, intent)
- || intent.getBooleanExtra(DocumentsContract.EXTRA_SHOW_ADVANCED, false);
- }
-
- /**
- * Returns true if device root should be shown.
- */
- public static boolean shouldShowFancyFeatures(Activity activity) {
- Intent intent = activity.getIntent();
- return isProductivityMode(activity, intent)
- || intent.getBooleanExtra(DocumentsContract.EXTRA_FANCY_FEATURES, false);
- }
-
- public static void checkMainLoop() {
- if (Looper.getMainLooper() != Looper.myLooper()) {
- Log.e(TAG, "Calling from non-UI thread!");
- }
- }
-
- public static @Nullable <T> T findView(Activity activity, int... resources) {
- for (int id : resources) {
- @SuppressWarnings("unchecked")
- T r = (T) activity.findViewById(id);
- if (r != null) {
- return r;
- }
- }
- return null;
- }
-}
diff --git a/packages/DocumentsUI/src/com/android/documentsui/Snackbars.java b/packages/DocumentsUI/src/com/android/documentsui/Snackbars.java
deleted file mode 100644
index c3a82d7..0000000
--- a/packages/DocumentsUI/src/com/android/documentsui/Snackbars.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.documentsui;
-
-import android.annotation.StringRes;
-import android.app.Activity;
-import android.support.design.widget.Snackbar;
-import android.view.View;
-
-public final class Snackbars {
- private Snackbars() {}
-
- public static final void showDocumentsClipped(Activity activity, int docCount) {
- String msg = Shared.getQuantityString(
- activity, R.plurals.clipboard_files_clipped, docCount);
- Snackbars.makeSnackbar(activity, msg, Snackbar.LENGTH_SHORT).show();
- }
-
- public static final void showMove(Activity activity, int docCount) {
- CharSequence message = Shared.getQuantityString(activity, R.plurals.move_begin, docCount);
- makeSnackbar(activity, message, Snackbar.LENGTH_SHORT).show();
- }
-
- public static final void showCopy(Activity activity, int docCount) {
- CharSequence message = Shared.getQuantityString(activity, R.plurals.copy_begin, docCount);
- makeSnackbar(activity, message, Snackbar.LENGTH_SHORT).show();
- }
-
- public static final void showPasteFailed(Activity activity) {
- makeSnackbar(activity, R.string.clipboard_files_cannot_paste, Snackbar.LENGTH_SHORT).show();
- }
-
- public static final Snackbar makeSnackbar(Activity activity, @StringRes int messageId,
- int duration) {
- return Snackbars.makeSnackbar(
- activity, activity.getResources().getText(messageId), duration);
- }
-
- public static final Snackbar makeSnackbar(
- Activity activity, CharSequence message, int duration) {
- final View view = activity.findViewById(R.id.coordinator_layout);
- return Snackbar.make(view, message, duration);
- }
-}
diff --git a/packages/DocumentsUI/src/com/android/documentsui/State.java b/packages/DocumentsUI/src/com/android/documentsui/State.java
deleted file mode 100644
index 9cdf1a8..0000000
--- a/packages/DocumentsUI/src/com/android/documentsui/State.java
+++ /dev/null
@@ -1,240 +0,0 @@
-/*
- * 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.
- */
-
-package com.android.documentsui;
-
-import static com.android.documentsui.Shared.DEBUG;
-
-import android.annotation.IntDef;
-import android.content.Intent;
-import android.os.Parcel;
-import android.os.Parcelable;
-import android.util.Log;
-import android.util.SparseArray;
-
-import com.android.documentsui.model.DocumentInfo;
-import com.android.documentsui.model.DocumentStack;
-import com.android.documentsui.model.DurableUtils;
-import com.android.documentsui.model.RootInfo;
-import com.android.documentsui.services.FileOperationService;
-import com.android.documentsui.services.FileOperationService.OpType;
-
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-
-public class State implements android.os.Parcelable {
-
- private static final String TAG = "State";
-
- @IntDef(flag = true, value = {
- ACTION_BROWSE,
- ACTION_PICK_COPY_DESTINATION,
- ACTION_OPEN,
- ACTION_CREATE,
- ACTION_GET_CONTENT,
- ACTION_OPEN_TREE
- })
- @Retention(RetentionPolicy.SOURCE)
- public @interface ActionType {}
- // File manager and related private picking activity.
- public static final int ACTION_BROWSE = 1;
- public static final int ACTION_PICK_COPY_DESTINATION = 2;
- // All public picking activities
- public static final int ACTION_OPEN = 3;
- public static final int ACTION_CREATE = 4;
- public static final int ACTION_GET_CONTENT = 5;
- public static final int ACTION_OPEN_TREE = 6;
-
- @IntDef(flag = true, value = {
- MODE_UNKNOWN,
- MODE_LIST,
- MODE_GRID
- })
- @Retention(RetentionPolicy.SOURCE)
- public @interface ViewMode {}
- public static final int MODE_UNKNOWN = 0;
- public static final int MODE_LIST = 1;
- public static final int MODE_GRID = 2;
-
- public static final int SORT_ORDER_UNKNOWN = 0;
- public static final int SORT_ORDER_DISPLAY_NAME = 1;
- public static final int SORT_ORDER_LAST_MODIFIED = 2;
- public static final int SORT_ORDER_SIZE = 3;
-
- public @ActionType int action;
- public String[] acceptMimes;
-
- /** Derived from local preferences */
- public @ViewMode int derivedMode = MODE_GRID;
-
- /** Explicit user choice */
- public int userSortOrder = SORT_ORDER_UNKNOWN;
- /** Derived after loader */
- public int derivedSortOrder = SORT_ORDER_DISPLAY_NAME;
-
- public boolean allowMultiple;
- public boolean forceSize;
- public boolean showSize;
- public boolean localOnly;
- public boolean showAdvancedOption;
- public boolean showAdvanced;
- public boolean restored;
- /*
- * Indicates handler was an external app, like photos.
- */
- public boolean external;
-
- // Indicates that a copy operation (or move) includes a directory.
- // Why? Directory creation isn't supported by some roots (like Downloads).
- // This allows us to restrict available roots to just those with support.
- public boolean directoryCopy;
- public boolean openableOnly;
-
- /**
- * This is basically a sub-type for the copy operation. It can be either COPY or MOVE.
- * The only legal values, if set, are: OPERATION_COPY, OPERATION_MOVE. Other pick
- * operations don't use this. In those cases OPERATION_UNKNOWN is also legal.
- */
- public @OpType int copyOperationSubType = FileOperationService.OPERATION_UNKNOWN;
-
- /** Current user navigation stack; empty implies recents. */
- public DocumentStack stack = new DocumentStack();
- private boolean mStackTouched;
- private boolean mInitialRootChanged;
- private boolean mInitialDocChanged;
-
- /** Instance state for every shown directory */
- public HashMap<String, SparseArray<Parcelable>> dirState = new HashMap<>();
-
- /** Name of the package that started DocsUI */
- public List<String> excludedAuthorities = new ArrayList<>();
-
- public void initAcceptMimes(Intent intent) {
- if (intent.hasExtra(Intent.EXTRA_MIME_TYPES)) {
- acceptMimes = intent.getStringArrayExtra(Intent.EXTRA_MIME_TYPES);
- } else {
- String glob = intent.getType();
- acceptMimes = new String[] { glob != null ? glob : "*/*" };
- }
- }
-
- public void onRootChanged(RootInfo root) {
- if (DEBUG) Log.d(TAG, "Root changed to: " + root);
- if (!mInitialRootChanged && stack.root != null && !root.equals(stack.root)) {
- mInitialRootChanged = true;
- }
- stack.root = root;
- stack.clear();
- mStackTouched = true;
- }
-
- public void pushDocument(DocumentInfo info) {
- if (DEBUG) Log.d(TAG, "Adding doc to stack: " + info);
- if (!mInitialDocChanged && stack.size() > 0 && !info.equals(stack.peek())) {
- mInitialDocChanged = true;
- }
- stack.push(info);
- mStackTouched = true;
- }
-
- public void popDocument() {
- if (DEBUG) Log.d(TAG, "Popping doc off stack.");
- stack.pop();
- mStackTouched = true;
- }
-
- public void setStack(DocumentStack stack) {
- if (DEBUG) Log.d(TAG, "Setting the whole darn stack to: " + stack);
- this.stack = stack;
- mStackTouched = true;
- }
-
- // This will return true even when the initial location is set.
- // To get a read on if the user has changed something, use #hasInitialLocationChanged.
- public boolean hasLocationChanged() {
- return mStackTouched;
- }
-
- public boolean hasInitialLocationChanged() {
- return mInitialRootChanged || mInitialDocChanged;
- }
-
- @Override
- public int describeContents() {
- return 0;
- }
-
- @Override
- public void writeToParcel(Parcel out, int flags) {
- out.writeInt(action);
- out.writeStringArray(acceptMimes);
- out.writeInt(userSortOrder);
- out.writeInt(allowMultiple ? 1 : 0);
- out.writeInt(forceSize ? 1 : 0);
- out.writeInt(showSize ? 1 : 0);
- out.writeInt(localOnly ? 1 : 0);
- out.writeInt(showAdvancedOption ? 1 : 0);
- out.writeInt(showAdvanced ? 1 : 0);
- out.writeInt(restored ? 1 : 0);
- out.writeInt(external ? 1 : 0);
- DurableUtils.writeToParcel(out, stack);
- out.writeMap(dirState);
- out.writeList(excludedAuthorities);
- out.writeInt(openableOnly ? 1 : 0);
- out.writeInt(mStackTouched ? 1 : 0);
- out.writeInt(mInitialRootChanged ? 1 : 0);
- out.writeInt(mInitialDocChanged ? 1 : 0);
- }
-
- public static final ClassLoaderCreator<State> CREATOR = new ClassLoaderCreator<State>() {
- @Override
- public State createFromParcel(Parcel in) {
- return createFromParcel(in, null);
- }
-
- @Override
- public State createFromParcel(Parcel in, ClassLoader loader) {
- final State state = new State();
- state.action = in.readInt();
- state.acceptMimes = in.readStringArray();
- state.userSortOrder = in.readInt();
- state.allowMultiple = in.readInt() != 0;
- state.forceSize = in.readInt() != 0;
- state.showSize = in.readInt() != 0;
- state.localOnly = in.readInt() != 0;
- state.showAdvancedOption = in.readInt() != 0;
- state.showAdvanced = in.readInt() != 0;
- state.restored = in.readInt() != 0;
- state.external = in.readInt() != 0;
- DurableUtils.readFromParcel(in, state.stack);
- in.readMap(state.dirState, loader);
- in.readList(state.excludedAuthorities, loader);
- state.openableOnly = in.readInt() != 0;
- state.mStackTouched = in.readInt() != 0;
- state.mInitialRootChanged = in.readInt() != 0;
- state.mInitialDocChanged = in.readInt() != 0;
- return state;
- }
-
- @Override
- public State[] newArray(int size) {
- return new State[size];
- }
- };
-}
diff --git a/packages/DocumentsUI/src/com/android/documentsui/ThumbnailCache.java b/packages/DocumentsUI/src/com/android/documentsui/ThumbnailCache.java
deleted file mode 100644
index 639d4fb..0000000
--- a/packages/DocumentsUI/src/com/android/documentsui/ThumbnailCache.java
+++ /dev/null
@@ -1,318 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.documentsui;
-
-import android.annotation.IntDef;
-import android.annotation.Nullable;
-import android.content.ComponentCallbacks2;
-import android.graphics.Bitmap;
-import android.graphics.Point;
-import android.net.Uri;
-import android.util.LruCache;
-import android.util.Pair;
-import android.util.Pools;
-
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.util.Comparator;
-import java.util.HashMap;
-import java.util.TreeMap;
-
-/**
- * An LRU cache that supports finding the thumbnail of the requested uri with a different size than
- * the requested one.
- */
-public class ThumbnailCache {
-
- private static final SizeComparator SIZE_COMPARATOR = new SizeComparator();
-
- /**
- * A 2-dimensional index into {@link #mCache} entries. Pair<Uri, Point> is the key to
- * {@link #mCache}. TreeMap is used to search the closest size to a given size and a given uri.
- */
- private final HashMap<Uri, TreeMap<Point, Pair<Uri, Point>>> mSizeIndex;
- private final Cache mCache;
-
- /**
- * Creates a thumbnail LRU cache.
- *
- * @param maxCacheSizeInBytes the maximum size of thumbnails in bytes this cache can hold.
- */
- public ThumbnailCache(int maxCacheSizeInBytes) {
- mSizeIndex = new HashMap<>();
- mCache = new Cache(maxCacheSizeInBytes);
- }
-
- /**
- * Obtains thumbnail given a uri and a size.
- *
- * @param uri the uri of the thumbnail in need
- * @param size the desired size of the thumbnail
- * @return the thumbnail result
- */
- public Result getThumbnail(Uri uri, Point size) {
- TreeMap<Point, Pair<Uri, Point>> sizeMap;
- sizeMap = mSizeIndex.get(uri);
- if (sizeMap == null || sizeMap.isEmpty()) {
- // There is not any thumbnail for this uri.
- return Result.obtainMiss();
- }
-
- // Look for thumbnail of the same size.
- Pair<Uri, Point> cacheKey = sizeMap.get(size);
- if (cacheKey != null) {
- Entry entry = mCache.get(cacheKey);
- if (entry != null) {
- return Result.obtain(Result.CACHE_HIT_EXACT, size, entry);
- }
- }
-
- // Look for thumbnail of bigger sizes.
- Point otherSize = sizeMap.higherKey(size);
- if (otherSize != null) {
- cacheKey = sizeMap.get(otherSize);
-
- if (cacheKey != null) {
- Entry entry = mCache.get(cacheKey);
- if (entry != null) {
- return Result.obtain(Result.CACHE_HIT_LARGER, otherSize, entry);
- }
- }
- }
-
- // Look for thumbnail of smaller sizes.
- otherSize = sizeMap.lowerKey(size);
- if (otherSize != null) {
- cacheKey = sizeMap.get(otherSize);
-
- if (cacheKey != null) {
- Entry entry = mCache.get(cacheKey);
- if (entry != null) {
- return Result.obtain(Result.CACHE_HIT_SMALLER, otherSize, entry);
- }
- }
- }
-
- // Cache miss.
- return Result.obtainMiss();
- }
-
- /**
- * Puts a thumbnail for the given uri and size in to the cache.
- * @param uri the uri of the thumbnail
- * @param size the size of the thumbnail
- * @param thumbnail the thumbnail to put in cache
- * @param lastModified last modified value of the thumbnail to track its validity
- */
- public void putThumbnail(Uri uri, Point size, Bitmap thumbnail, long lastModified) {
- Pair<Uri, Point> cacheKey = Pair.create(uri, size);
-
- TreeMap<Point, Pair<Uri, Point>> sizeMap;
- synchronized (mSizeIndex) {
- sizeMap = mSizeIndex.get(uri);
- if (sizeMap == null) {
- sizeMap = new TreeMap<>(SIZE_COMPARATOR);
- mSizeIndex.put(uri, sizeMap);
- }
- }
-
- Entry entry = new Entry(thumbnail, lastModified);
- mCache.put(cacheKey, entry);
- synchronized (sizeMap) {
- sizeMap.put(size, cacheKey);
- }
- }
-
- /**
- * Removes all thumbnail cache associated to the given uri.
- * @param uri the uri which thumbnail cache to remove
- */
- public void removeUri(Uri uri) {
- TreeMap<Point, Pair<Uri, Point>> sizeMap;
- synchronized (mSizeIndex) {
- sizeMap = mSizeIndex.get(uri);
- }
-
- if (sizeMap != null) {
- // Create an array to hold all values to avoid ConcurrentModificationException because
- // removeKey() will be called by LruCache but we can't modify the map while we're
- // iterating over the collection of values.
- for (Pair<Uri, Point> index : sizeMap.values().toArray(new Pair[0])) {
- mCache.remove(index);
- }
- }
- }
-
- private void removeKey(Uri uri, Point size) {
- TreeMap<Point, Pair<Uri, Point>> sizeMap;
- synchronized (mSizeIndex) {
- sizeMap = mSizeIndex.get(uri);
- }
-
- assert(sizeMap != null);
- synchronized (sizeMap) {
- sizeMap.remove(size);
- }
- }
-
- public void onTrimMemory(int level) {
- if (level >= ComponentCallbacks2.TRIM_MEMORY_MODERATE) {
- mCache.evictAll();
- } else if (level >= ComponentCallbacks2.TRIM_MEMORY_BACKGROUND) {
- mCache.trimToSize(mCache.size() / 2);
- }
- }
-
- /**
- * A class that holds thumbnail and cache status.
- */
- public static final class Result {
-
- @Retention(RetentionPolicy.SOURCE)
- @IntDef({CACHE_MISS, CACHE_HIT_EXACT, CACHE_HIT_SMALLER, CACHE_HIT_LARGER})
- @interface Status {}
- /**
- * Indicates there is no thumbnail for the requested uri. The thumbnail will be null.
- */
- public static final int CACHE_MISS = 0;
- /**
- * Indicates the thumbnail matches the requested size and requested uri.
- */
- public static final int CACHE_HIT_EXACT = 1;
- /**
- * Indicates the thumbnail is in a smaller size than the requested one from the requested
- * uri.
- */
- public static final int CACHE_HIT_SMALLER = 2;
- /**
- * Indicates the thumbnail is in a larger size than the requested one from the requested
- * uri.
- */
- public static final int CACHE_HIT_LARGER = 3;
-
- private static final Pools.SimplePool<Result> sPool = new Pools.SimplePool<>(1);
-
- private @Status int mStatus;
- private @Nullable Bitmap mThumbnail;
- private @Nullable Point mSize;
- private long mLastModified;
-
- private static Result obtainMiss() {
- return obtain(CACHE_MISS, null, null, 0);
- }
-
- private static Result obtain(@Status int status, Point size, Entry entry) {
- return obtain(status, entry.mThumbnail, size, entry.mLastModified);
- }
-
- private static Result obtain(@Status int status, @Nullable Bitmap thumbnail,
- @Nullable Point size, long lastModified) {
- Shared.checkMainLoop();
-
- Result instance = sPool.acquire();
- instance = (instance != null ? instance : new Result());
-
- instance.mStatus = status;
- instance.mThumbnail = thumbnail;
- instance.mSize = size;
- instance.mLastModified = lastModified;
-
- return instance;
- }
-
- private Result() {}
-
- public void recycle() {
- Shared.checkMainLoop();
-
- mStatus = -1;
- mThumbnail = null;
- mSize = null;
- mLastModified = -1;
-
- boolean released = sPool.release(this);
- // This assert is used to guarantee we won't generate too many instances that can't be
- // held in the pool, which indicates our pool size is too small.
- //
- // Right now one instance is enough because we expect all instances are only used in
- // main thread.
- assert (released);
- }
-
- public @Status int getStatus() {
- return mStatus;
- }
-
- public @Nullable Bitmap getThumbnail() {
- return mThumbnail;
- }
-
- public @Nullable Point getSize() {
- return mSize;
- }
-
- public long getLastModified() {
- return mLastModified;
- }
-
- public boolean isHit() {
- return (mStatus != CACHE_MISS);
- }
-
- public boolean isExactHit() {
- return (mStatus == CACHE_HIT_EXACT);
- }
- }
-
- private static final class Entry {
- private final Bitmap mThumbnail;
- private final long mLastModified;
-
- private Entry(Bitmap thumbnail, long lastModified) {
- mThumbnail = thumbnail;
- mLastModified = lastModified;
- }
- }
-
- private final class Cache extends LruCache<Pair<Uri, Point>, Entry> {
-
- private Cache(int maxSizeBytes) {
- super(maxSizeBytes);
- }
-
- @Override
- protected int sizeOf(Pair<Uri, Point> key, Entry value) {
- return value.mThumbnail.getByteCount();
- }
-
- @Override
- protected void entryRemoved(
- boolean evicted, Pair<Uri, Point> key, Entry oldValue, Entry newValue) {
- if (newValue == null) {
- removeKey(key.first, key.second);
- }
- }
- }
-
- private static final class SizeComparator implements Comparator<Point> {
- @Override
- public int compare(Point size0, Point size1) {
- // Assume all sizes are roughly square, so we only compare them in one dimension.
- return size0.x - size1.x;
- }
- }
-}
diff --git a/packages/DocumentsUI/src/com/android/documentsui/UriDerivativeLoader.java b/packages/DocumentsUI/src/com/android/documentsui/UriDerivativeLoader.java
deleted file mode 100644
index 7bb662c..0000000
--- a/packages/DocumentsUI/src/com/android/documentsui/UriDerivativeLoader.java
+++ /dev/null
@@ -1,135 +0,0 @@
-/*
- * 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.
- */
-
-package com.android.documentsui;
-
-import android.content.AsyncTaskLoader;
-import android.content.Context;
-import android.database.ContentObserver;
-import android.os.CancellationSignal;
-import android.os.OperationCanceledException;
-
-/**
- * Loader that derives its data from a Uri. Watches for {@link ContentObserver}
- * changes while started, manages {@link CancellationSignal}, and caches
- * returned results.
- */
-public abstract class UriDerivativeLoader<Param, Res> extends AsyncTaskLoader<Res> {
- final ForceLoadContentObserver mObserver;
-
- private final Param mParam;
-
- private Res mResult;
- private CancellationSignal mCancellationSignal;
-
- @Override
- public final Res loadInBackground() {
- synchronized (this) {
- if (isLoadInBackgroundCanceled()) {
- throw new OperationCanceledException();
- }
- mCancellationSignal = new CancellationSignal();
- }
- try {
- return loadInBackground(mParam, mCancellationSignal);
- } finally {
- synchronized (this) {
- mCancellationSignal = null;
- }
- }
- }
-
- public abstract Res loadInBackground(Param param, CancellationSignal signal);
-
- @Override
- public void cancelLoadInBackground() {
- super.cancelLoadInBackground();
-
- synchronized (this) {
- if (mCancellationSignal != null) {
- mCancellationSignal.cancel();
- }
- }
- }
-
- @Override
- public void deliverResult(Res result) {
- if (isReset()) {
- closeQuietly(result);
- return;
- }
- Res oldResult = mResult;
- mResult = result;
-
- if (isStarted()) {
- super.deliverResult(result);
- }
-
- if (oldResult != null && oldResult != result) {
- closeQuietly(oldResult);
- }
- }
-
- public UriDerivativeLoader(Context context, Param param) {
- super(context);
- mObserver = new ForceLoadContentObserver();
- mParam = param;
- }
-
- @Override
- protected void onStartLoading() {
- if (mResult != null) {
- deliverResult(mResult);
- }
- if (takeContentChanged() || mResult == null) {
- forceLoad();
- }
- }
-
- @Override
- protected void onStopLoading() {
- cancelLoad();
- }
-
- @Override
- public void onCanceled(Res result) {
- closeQuietly(result);
- }
-
- @Override
- protected void onReset() {
- super.onReset();
-
- // Ensure the loader is stopped
- onStopLoading();
-
- closeQuietly(mResult);
- mResult = null;
-
- getContext().getContentResolver().unregisterContentObserver(mObserver);
- }
-
- private void closeQuietly(Res result) {
- if (result instanceof AutoCloseable) {
- try {
- ((AutoCloseable) result).close();
- } catch (RuntimeException rethrown) {
- throw rethrown;
- } catch (Exception ignored) {
- }
- }
- }
-}
diff --git a/packages/DocumentsUI/src/com/android/documentsui/clipping/ClipStorage.java b/packages/DocumentsUI/src/com/android/documentsui/clipping/ClipStorage.java
deleted file mode 100644
index 49edbcf..0000000
--- a/packages/DocumentsUI/src/com/android/documentsui/clipping/ClipStorage.java
+++ /dev/null
@@ -1,270 +0,0 @@
-/*
- * Copyright (C) 2016 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.clipping;
-
-import android.content.SharedPreferences;
-import android.net.Uri;
-import android.os.AsyncTask;
-import android.support.annotation.VisibleForTesting;
-import android.system.ErrnoException;
-import android.system.Os;
-import android.util.Log;
-
-import com.android.documentsui.Files;
-
-import java.io.Closeable;
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.nio.channels.FileLock;
-import java.util.concurrent.TimeUnit;
-
-/**
- * Provides support for storing lists of documents identified by Uri.
- *
- * This class uses a ring buffer to recycle clip file slots, to mitigate the issue of clip file
- * deletions. Below is the directory layout:
- * [cache dir]
- * - [dir] 1
- * - [dir] 2
- * - ... to {@link #NUM_OF_SLOTS}
- * When a clip data is actively being used:
- * [cache dir]
- * - [dir] 1
- * - [file] primary
- * - [symlink] 1 > primary # copying to location X
- * - [symlink] 2 > primary # copying to location Y
- */
-public final class ClipStorage {
-
- public static final int NO_SELECTION_TAG = -1;
-
- public static final String PREF_NAME = "ClipStoragePref";
-
- @VisibleForTesting
- static final int NUM_OF_SLOTS = 20;
-
- private static final String TAG = "ClipStorage";
-
- private static final long STALENESS_THRESHOLD = TimeUnit.DAYS.toMillis(2);
-
- private static final String NEXT_POS_TAG = "NextPosTag";
- private static final String PRIMARY_DATA_FILE_NAME = "primary";
-
- private static final byte[] LINE_SEPARATOR = System.lineSeparator().getBytes();
-
- private final File mOutDir;
- private final SharedPreferences mPref;
-
- private final File[] mSlots = new File[NUM_OF_SLOTS];
- private int mNextPos;
-
- /**
- * @param outDir see {@link #prepareStorage(File)}.
- */
- public ClipStorage(File outDir, SharedPreferences pref) {
- assert(outDir.isDirectory());
- mOutDir = outDir;
- mPref = pref;
-
- mNextPos = mPref.getInt(NEXT_POS_TAG, 0);
- }
-
- /**
- * Tries to get the next available clip slot. It's guaranteed to return one. If none of
- * slots is available, it returns the next slot of the most recently returned slot by this
- * method.
- *
- * <p>This is not a perfect solution, but should be enough for most regular use. There are
- * several situations this method may not work:
- * <ul>
- * <li>Making {@link #NUM_OF_SLOTS} - 1 times of large drag and drop or moveTo/copyTo/delete
- * operations after cutting a primary clip, then the primary clip is overwritten.</li>
- * <li>Having more than {@link #NUM_OF_SLOTS} queued jumbo file operations, one or more clip
- * file may be overwritten.</li>
- * </ul>
- */
- synchronized int claimStorageSlot() {
- int curPos = mNextPos;
- for (int i = 0; i < NUM_OF_SLOTS; ++i, curPos = (curPos + 1) % NUM_OF_SLOTS) {
- createSlotFileObject(curPos);
-
- if (!mSlots[curPos].exists()) {
- break;
- }
-
- // No file or only primary file exists, we deem it available.
- if (mSlots[curPos].list().length <= 1) {
- break;
- }
- // This slot doesn't seem available, but still need to check if it's a legacy of
- // service being killed or a service crash etc. If it's stale, it's available.
- else if (checkStaleFiles(curPos)) {
- break;
- }
- }
-
- prepareSlot(curPos);
-
- mNextPos = (curPos + 1) % NUM_OF_SLOTS;
- mPref.edit().putInt(NEXT_POS_TAG, mNextPos).commit();
- return curPos;
- }
-
- private boolean checkStaleFiles(int pos) {
- File slotData = toSlotDataFile(pos);
-
- // No need to check if the file exists. File.lastModified() returns 0L if the file doesn't
- // exist.
- return slotData.lastModified() + STALENESS_THRESHOLD <= System.currentTimeMillis();
- }
-
- private void prepareSlot(int pos) {
- assert(mSlots[pos] != null);
-
- Files.deleteRecursively(mSlots[pos]);
- mSlots[pos].mkdir();
- assert(mSlots[pos].isDirectory());
- }
-
- /**
- * Returns a writer. Callers must close the writer when finished.
- */
- private Writer createWriter(int tag) throws IOException {
- File file = toSlotDataFile(tag);
- return new Writer(file);
- }
-
- /**
- * Gets a {@link File} instance given a tag.
- *
- * This method creates a symbolic link in the slot folder to the data file as a reference
- * counting method. When someone is done using this symlink, it's responsible to delete it.
- * Therefore we can have a neat way to track how many things are still using this slot.
- */
- public synchronized File getFile(int tag) throws IOException {
- createSlotFileObject(tag);
-
- File primary = toSlotDataFile(tag);
-
- String linkFileName = Integer.toString(mSlots[tag].list().length);
- File link = new File(mSlots[tag], linkFileName);
-
- try {
- Os.symlink(primary.getAbsolutePath(), link.getAbsolutePath());
- } catch (ErrnoException e) {
- e.rethrowAsIOException();
- }
- return link;
- }
-
- /**
- * Returns a Reader. Callers must close the reader when finished.
- */
- ClipStorageReader createReader(File file) throws IOException {
- assert(file.getParentFile().getParentFile().equals(mOutDir));
- return new ClipStorageReader(file);
- }
-
- private File toSlotDataFile(int pos) {
- assert(mSlots[pos] != null);
- return new File(mSlots[pos], PRIMARY_DATA_FILE_NAME);
- }
-
- private void createSlotFileObject(int pos) {
- if (mSlots[pos] == null) {
- mSlots[pos] = new File(mOutDir, Integer.toString(pos));
- }
- }
-
- /**
- * Provides initialization of the clip data storage directory.
- */
- public static File prepareStorage(File cacheDir) {
- File clipDir = getClipDir(cacheDir);
- clipDir.mkdir();
-
- assert(clipDir.isDirectory());
- return clipDir;
- }
-
- private static File getClipDir(File cacheDir) {
- return new File(cacheDir, "clippings");
- }
-
- private static final class Writer implements Closeable {
-
- private final FileOutputStream mOut;
- private final FileLock mLock;
-
- private Writer(File file) throws IOException {
- assert(!file.exists());
-
- mOut = new FileOutputStream(file);
-
- // Lock the file here so copy tasks would wait until everything is flushed to disk
- // before start to run.
- mLock = mOut.getChannel().lock();
- }
-
- public void write(Uri uri) throws IOException {
- mOut.write(uri.toString().getBytes());
- mOut.write(LINE_SEPARATOR);
- }
-
- @Override
- public void close() throws IOException {
- if (mLock != null) {
- mLock.release();
- }
-
- if (mOut != null) {
- mOut.close();
- }
- }
- }
-
- /**
- * An {@link AsyncTask} that persists doc uris in {@link ClipStorage}.
- */
- static final class PersistTask extends AsyncTask<Void, Void, Void> {
-
- private final ClipStorage mClipStorage;
- private final Iterable<Uri> mUris;
- private final int mTag;
-
- PersistTask(ClipStorage clipStorage, Iterable<Uri> uris, int tag) {
- mClipStorage = clipStorage;
- mUris = uris;
- mTag = tag;
- }
-
- @Override
- protected Void doInBackground(Void... params) {
- try(Writer writer = mClipStorage.createWriter(mTag)){
- for (Uri uri: mUris) {
- assert(uri != null);
- writer.write(uri);
- }
- } catch (IOException e) {
- Log.e(TAG, "Caught exception trying to write jumbo clip to disk.", e);
- }
-
- return null;
- }
- }
-}
diff --git a/packages/DocumentsUI/src/com/android/documentsui/clipping/ClipStorageReader.java b/packages/DocumentsUI/src/com/android/documentsui/clipping/ClipStorageReader.java
deleted file mode 100644
index 2bae0f8..0000000
--- a/packages/DocumentsUI/src/com/android/documentsui/clipping/ClipStorageReader.java
+++ /dev/null
@@ -1,125 +0,0 @@
-/*
- * Copyright (C) 2016 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.clipping;
-
-import android.net.Uri;
-
-import java.io.Closeable;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.nio.channels.FileLock;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Scanner;
-
-/**
- * Reader class used to read uris from clip files stored in {@link ClipStorage}. It provides
- * synchronization within a single process as an addition to {@link FileLock} which is for
- * cross-process synchronization.
- */
-class ClipStorageReader implements Iterable<Uri>, Closeable {
-
- /**
- * FileLock can't be held multiple times in a single JVM, but it's possible to have multiple
- * readers reading the same clip file. Share the FileLock here so that it can be released
- * when it's not needed.
- */
- private static final Map<String, FileLockEntry> sLocks = new HashMap<>();
-
- private final String mCanonicalPath;
- private final Scanner mScanner;
-
- ClipStorageReader(File file) throws IOException {
- FileInputStream inStream = new FileInputStream(file);
- mScanner = new Scanner(inStream);
-
- mCanonicalPath = file.getCanonicalPath(); // Resolve symlink
- synchronized (sLocks) {
- if (sLocks.containsKey(mCanonicalPath)) {
- // Read lock is already held by someone in this JVM, just increment the ref
- // count.
- sLocks.get(mCanonicalPath).mCount++;
- } else {
- // No map entry, need to lock the file so it won't pass this line until the
- // corresponding writer is done writing.
- FileLock lock = inStream.getChannel().lock(0L, Long.MAX_VALUE, true);
- sLocks.put(mCanonicalPath, new FileLockEntry(1, lock, mScanner));
- }
- }
- }
-
- @Override
- public Iterator iterator() {
- return new Iterator(mScanner);
- }
-
- @Override
- public void close() throws IOException {
- FileLockEntry ref;
- synchronized (sLocks) {
- ref = sLocks.get(mCanonicalPath);
-
- assert(ref.mCount > 0);
- if (--ref.mCount == 0) {
- // If ref count is 0 now, then there is no one who needs to hold the read lock.
- // Release the lock, and remove the entry.
- ref.mLock.release();
- ref.mScanner.close();
- sLocks.remove(mCanonicalPath);
- }
- }
-
- if (mScanner != ref.mScanner) {
- mScanner.close();
- }
- }
-
- private static final class Iterator implements java.util.Iterator {
- private final Scanner mScanner;
-
- private Iterator(Scanner scanner) {
- mScanner = scanner;
- }
-
- @Override
- public boolean hasNext() {
- return mScanner.hasNextLine();
- }
-
- @Override
- public Uri next() {
- String line = mScanner.nextLine();
- return Uri.parse(line);
- }
- }
-
- private static final class FileLockEntry {
- private final FileLock mLock;
- // We need to keep this scanner here because if the scanner is closed, the file lock is
- // closed too.
- private final Scanner mScanner;
-
- private int mCount;
-
- private FileLockEntry(int count, FileLock lock, Scanner scanner) {
- mCount = count;
- mLock = lock;
- mScanner = scanner;
- }
- }
-}
diff --git a/packages/DocumentsUI/src/com/android/documentsui/clipping/DocumentClipper.java b/packages/DocumentsUI/src/com/android/documentsui/clipping/DocumentClipper.java
deleted file mode 100644
index bdc1836..0000000
--- a/packages/DocumentsUI/src/com/android/documentsui/clipping/DocumentClipper.java
+++ /dev/null
@@ -1,339 +0,0 @@
-/*
- * Copyright (C) 2016 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.clipping;
-
-import android.content.ClipData;
-import android.content.ClipDescription;
-import android.content.ClipboardManager;
-import android.content.ContentResolver;
-import android.content.Context;
-import android.net.Uri;
-import android.os.PersistableBundle;
-import android.provider.DocumentsContract;
-import android.support.annotation.Nullable;
-import android.util.Log;
-
-import com.android.documentsui.Shared;
-import com.android.documentsui.dirlist.MultiSelectManager.Selection;
-import com.android.documentsui.model.DocumentInfo;
-import com.android.documentsui.model.DocumentStack;
-import com.android.documentsui.model.RootInfo;
-import com.android.documentsui.services.FileOperation;
-import com.android.documentsui.services.FileOperationService;
-import com.android.documentsui.services.FileOperationService.OpType;
-import com.android.documentsui.services.FileOperations;
-
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-import java.util.function.Function;
-
-/**
- * ClipboardManager wrapper class providing higher level logical
- * support for dealing with Documents.
- */
-public final class DocumentClipper {
-
- private static final String TAG = "DocumentClipper";
-
- static final String SRC_PARENT_KEY = "srcParent";
- static final String OP_TYPE_KEY = "opType";
- static final String OP_JUMBO_SELECTION_SIZE = "jumboSelection-size";
- static final String OP_JUMBO_SELECTION_TAG = "jumboSelection-tag";
-
- private final Context mContext;
- private final ClipStorage mClipStorage;
- private final ClipboardManager mClipboard;
-
- public DocumentClipper(Context context, ClipStorage storage) {
- mContext = context;
- mClipStorage = storage;
- mClipboard = context.getSystemService(ClipboardManager.class);
- }
-
- public boolean hasItemsToPaste() {
- if (mClipboard.hasPrimaryClip()) {
- ClipData clipData = mClipboard.getPrimaryClip();
-
- int count = clipData.getItemCount();
- if (count > 0) {
- for (int i = 0; i < count; ++i) {
- ClipData.Item item = clipData.getItemAt(i);
- Uri uri = item.getUri();
- if (isDocumentUri(uri)) {
- return true;
- }
- }
- }
- }
- return false;
- }
-
- private boolean isDocumentUri(@Nullable Uri uri) {
- return uri != null && DocumentsContract.isDocumentUri(mContext, uri);
- }
-
- /**
- * Returns {@link ClipData} representing the selection, or null if selection is empty,
- * or cannot be converted.
- */
- public ClipData getClipDataForDocuments(
- Function<String, Uri> uriBuilder, Selection selection, @OpType int opType) {
-
- assert(selection != null);
-
- if (selection.isEmpty()) {
- Log.w(TAG, "Attempting to clip empty selection. Ignoring.");
- return null;
- }
-
- return (selection.size() > Shared.MAX_DOCS_IN_INTENT)
- ? createJumboClipData(uriBuilder, selection, opType)
- : createStandardClipData(uriBuilder, selection, opType);
- }
-
- /**
- * Returns ClipData representing the selection.
- */
- private ClipData createStandardClipData(
- Function<String, Uri> uriBuilder, Selection selection, @OpType int opType) {
-
- assert(!selection.isEmpty());
- assert(selection.size() <= Shared.MAX_DOCS_IN_INTENT);
-
- final ContentResolver resolver = mContext.getContentResolver();
- final ArrayList<ClipData.Item> clipItems = new ArrayList<>();
- final Set<String> clipTypes = new HashSet<>();
-
- PersistableBundle bundle = new PersistableBundle();
- bundle.putInt(OP_TYPE_KEY, opType);
-
- for (String id : selection) {
- assert(id != null);
- Uri uri = uriBuilder.apply(id);
- DocumentInfo.addMimeTypes(resolver, uri, clipTypes);
- clipItems.add(new ClipData.Item(uri));
- }
-
- ClipDescription description = new ClipDescription(
- "", // Currently "label" is not displayed anywhere in the UI.
- clipTypes.toArray(new String[0]));
- description.setExtras(bundle);
-
- return new ClipData(description, clipItems);
- }
-
- /**
- * Returns ClipData representing the list of docs
- */
- private ClipData createJumboClipData(
- Function<String, Uri> uriBuilder, Selection selection, @OpType int opType) {
-
- assert(!selection.isEmpty());
- assert(selection.size() > Shared.MAX_DOCS_IN_INTENT);
-
- final List<Uri> uris = new ArrayList<>(selection.size());
-
- final int capacity = Math.min(selection.size(), Shared.MAX_DOCS_IN_INTENT);
- final ArrayList<ClipData.Item> clipItems = new ArrayList<>(capacity);
-
- // Set up mime types for the first Shared.MAX_DOCS_IN_INTENT
- final ContentResolver resolver = mContext.getContentResolver();
- final Set<String> clipTypes = new HashSet<>();
- int docCount = 0;
- for (String id : selection) {
- assert(id != null);
- Uri uri = uriBuilder.apply(id);
- if (docCount++ < Shared.MAX_DOCS_IN_INTENT) {
- DocumentInfo.addMimeTypes(resolver, uri, clipTypes);
- clipItems.add(new ClipData.Item(uri));
- }
-
- uris.add(uri);
- }
-
- // Prepare metadata
- PersistableBundle bundle = new PersistableBundle();
- bundle.putInt(OP_TYPE_KEY, opType);
- bundle.putInt(OP_JUMBO_SELECTION_SIZE, selection.size());
-
- // Creates a clip tag
- int tag = mClipStorage.claimStorageSlot();
- bundle.putInt(OP_JUMBO_SELECTION_TAG, tag);
-
- ClipDescription description = new ClipDescription(
- "", // Currently "label" is not displayed anywhere in the UI.
- clipTypes.toArray(new String[0]));
- description.setExtras(bundle);
-
- // Persists clip items
- new ClipStorage.PersistTask(mClipStorage, uris, tag).execute();
-
- return new ClipData(description, clipItems);
- }
-
- /**
- * Puts {@code ClipData} in a primary clipboard, describing a copy operation
- */
- public void clipDocumentsForCopy(Function<String, Uri> uriBuilder, Selection selection) {
- ClipData data =
- getClipDataForDocuments(uriBuilder, selection, FileOperationService.OPERATION_COPY);
- assert(data != null);
-
- mClipboard.setPrimaryClip(data);
- }
-
- /**
- * Puts {@Code ClipData} in a primary clipboard, describing a cut operation
- */
- public void clipDocumentsForCut(
- Function<String, Uri> uriBuilder, Selection selection, DocumentInfo parent) {
- assert(!selection.isEmpty());
- assert(parent.derivedUri != null);
-
- ClipData data = getClipDataForDocuments(uriBuilder, selection,
- FileOperationService.OPERATION_MOVE);
- assert(data != null);
-
- PersistableBundle bundle = data.getDescription().getExtras();
- bundle.putString(SRC_PARENT_KEY, parent.derivedUri.toString());
-
- mClipboard.setPrimaryClip(data);
- }
-
- /**
- * Copies documents from clipboard. It's the same as {@link #copyFromClipData} with clipData
- * returned from {@link ClipboardManager#getPrimaryClip()}.
- *
- * @param destination destination document.
- * @param docStack the document stack to the destination folder,
- * @param callback callback to notify when operation finishes.
- */
- public void copyFromClipboard(
- DocumentInfo destination,
- DocumentStack docStack,
- FileOperations.Callback callback) {
-
- copyFromClipData(destination, docStack, mClipboard.getPrimaryClip(), callback);
- }
-
- /**
- * Copied documents from given clip data to a root directory.
- * @param root the root which root directory to copy to
- * @param destination the root directory
- * @param clipData the clipData to copy from
- * @param callback callback to notify when operation finishes
- */
- public void copyFromClipData(
- final RootInfo root,
- final DocumentInfo destination,
- final @Nullable ClipData clipData,
- final FileOperations.Callback callback) {
- DocumentStack dstStack = new DocumentStack(root, destination);
- copyFromClipData(dstStack, clipData, callback);
- }
-
- /**
- * Copies documents from given clip data to a folder.
- *
- * @param destination destination folder
- * @param docStack the document stack to the destination folder (not including the destination
- * folder)
- * @param clipData the clipData to copy from
- * @param callback callback to notify when operation finishes
- */
- public void copyFromClipData(
- final DocumentInfo destination,
- final DocumentStack docStack,
- final @Nullable ClipData clipData,
- final FileOperations.Callback callback) {
-
- DocumentStack dstStack = new DocumentStack(docStack, destination);
- copyFromClipData(dstStack, clipData, callback);
- }
-
- private void copyFromClipData(
- final DocumentStack dstStack,
- final @Nullable ClipData clipData,
- final FileOperations.Callback callback) {
-
- if (clipData == null) {
- Log.i(TAG, "Received null clipData. Ignoring.");
- return;
- }
-
- PersistableBundle bundle = clipData.getDescription().getExtras();
- @OpType int opType = getOpType(bundle);
- try {
- if (!canCopy(dstStack.peek())) {
- callback.onOperationResult(
- FileOperations.Callback.STATUS_REJECTED, getOpType(clipData), 0);
- return;
- }
-
- UrisSupplier uris = UrisSupplier.create(clipData, mContext);
- if (uris.getItemCount() == 0) {
- callback.onOperationResult(
- FileOperations.Callback.STATUS_ACCEPTED, opType, 0);
- return;
- }
-
- String srcParentString = bundle.getString(SRC_PARENT_KEY);
- Uri srcParent = srcParentString == null ? null : Uri.parse(srcParentString);
-
- FileOperation operation = new FileOperation.Builder()
- .withOpType(opType)
- .withSrcParent(srcParent)
- .withDestination(dstStack)
- .withSrcs(uris)
- .build();
-
- FileOperations.start(mContext, operation, callback);
- } catch(IOException e) {
- Log.e(TAG, "Cannot create uris supplier.", e);
- callback.onOperationResult(FileOperations.Callback.STATUS_REJECTED, opType, 0);
- return;
- }
- }
-
- /**
- * Returns true if the list of files can be copied to destination. Note that this
- * is a policy check only. Currently the method does not attempt to verify
- * available space or any other environmental aspects possibly resulting in
- * failure to copy.
- *
- * @return true if the list of files can be copied to destination.
- */
- private static boolean canCopy(DocumentInfo dest) {
- if (dest == null || !dest.isDirectory() || !dest.isCreateSupported()) {
- return false;
- }
-
- return true;
- }
-
- public static @OpType int getOpType(ClipData data) {
- PersistableBundle bundle = data.getDescription().getExtras();
- return getOpType(bundle);
- }
-
- private static @OpType int getOpType(PersistableBundle bundle) {
- return bundle.getInt(OP_TYPE_KEY);
- }
-}
diff --git a/packages/DocumentsUI/src/com/android/documentsui/clipping/UrisSupplier.java b/packages/DocumentsUI/src/com/android/documentsui/clipping/UrisSupplier.java
deleted file mode 100644
index 7b1ba34..0000000
--- a/packages/DocumentsUI/src/com/android/documentsui/clipping/UrisSupplier.java
+++ /dev/null
@@ -1,282 +0,0 @@
-/*
- * Copyright (C) 2016 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.clipping;
-
-import static com.android.documentsui.clipping.DocumentClipper.OP_JUMBO_SELECTION_SIZE;
-import static com.android.documentsui.clipping.DocumentClipper.OP_JUMBO_SELECTION_TAG;
-
-import android.content.ClipData;
-import android.content.Context;
-import android.net.Uri;
-import android.os.Parcel;
-import android.os.Parcelable;
-import android.os.PersistableBundle;
-import android.support.annotation.VisibleForTesting;
-import android.util.Log;
-
-import com.android.documentsui.DocumentsApplication;
-import com.android.documentsui.Shared;
-import com.android.documentsui.dirlist.MultiSelectManager.Selection;
-import com.android.documentsui.services.FileOperation;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
-import java.util.concurrent.atomic.AtomicReference;
-import java.util.function.Function;
-
-/**
- * UrisSupplier provides doc uri list to {@link FileOperation}.
- *
- * <p>Under the hood it provides cross-process synchronization support such that its consumer doesn't
- * need to explicitly synchronize its access.
- */
-public abstract class UrisSupplier implements Parcelable {
-
- public abstract int getItemCount();
-
- /**
- * Gets doc list. This may only be called once because it may read a file
- * to get the list.
- *
- * @param context We need context to obtain {@link ClipStorage}. It can't be sent in a parcel.
- */
- public Iterable<Uri> getUris(Context context) throws IOException {
- return getUris(DocumentsApplication.getClipStorage(context));
- }
-
- @VisibleForTesting
- abstract Iterable<Uri> getUris(ClipStorage storage) throws IOException;
-
- public void dispose() {}
-
- @Override
- public int describeContents() {
- return 0;
- }
-
- public static UrisSupplier create(ClipData clipData, Context context) throws IOException {
- UrisSupplier uris;
- PersistableBundle bundle = clipData.getDescription().getExtras();
- if (bundle.containsKey(OP_JUMBO_SELECTION_TAG)) {
- uris = new JumboUrisSupplier(clipData, context);
- } else {
- uris = new StandardUrisSupplier(clipData);
- }
-
- return uris;
- }
-
- public static UrisSupplier create(
- Selection selection, Function<String, Uri> uriBuilder, Context context)
- throws IOException {
-
- ClipStorage storage = DocumentsApplication.getClipStorage(context);
-
- List<Uri> uris = new ArrayList<>(selection.size());
- for (String id : selection) {
- uris.add(uriBuilder.apply(id));
- }
-
- return create(uris, storage);
- }
-
- @VisibleForTesting
- static UrisSupplier create(List<Uri> uris, ClipStorage storage) throws IOException {
- UrisSupplier urisSupplier = (uris.size() > Shared.MAX_DOCS_IN_INTENT)
- ? new JumboUrisSupplier(uris, storage)
- : new StandardUrisSupplier(uris);
-
- return urisSupplier;
- }
-
- private static class JumboUrisSupplier extends UrisSupplier {
- private static final String TAG = "JumboUrisSupplier";
-
- private final File mFile;
- private final int mSelectionSize;
-
- private final transient AtomicReference<ClipStorageReader> mReader =
- new AtomicReference<>();
-
- private JumboUrisSupplier(ClipData clipData, Context context) throws IOException {
- PersistableBundle bundle = clipData.getDescription().getExtras();
- final int tag = bundle.getInt(OP_JUMBO_SELECTION_TAG, ClipStorage.NO_SELECTION_TAG);
- assert(tag != ClipStorage.NO_SELECTION_TAG);
- mFile = DocumentsApplication.getClipStorage(context).getFile(tag);
- assert(mFile.exists());
-
- mSelectionSize = bundle.getInt(OP_JUMBO_SELECTION_SIZE);
- assert(mSelectionSize > Shared.MAX_DOCS_IN_INTENT);
- }
-
- private JumboUrisSupplier(Collection<Uri> uris, ClipStorage storage) throws IOException {
- final int tag = storage.claimStorageSlot();
- new ClipStorage.PersistTask(storage, uris, tag).execute();
-
- // There is a tiny race condition here. A job may starts to read before persist task
- // starts to write, but it has to beat an IPC and background task schedule, which is
- // pretty rare. Creating a symlink doesn't need that file to exist, but we can't assert
- // on its existence.
- mFile = storage.getFile(tag);
- mSelectionSize = uris.size();
- }
-
- @Override
- public int getItemCount() {
- return mSelectionSize;
- }
-
- @Override
- Iterable<Uri> getUris(ClipStorage storage) throws IOException {
- ClipStorageReader reader = mReader.getAndSet(storage.createReader(mFile));
- if (reader != null) {
- reader.close();
- mReader.get().close();
- throw new IllegalStateException("This method can only be called once.");
- }
-
- return mReader.get();
- }
-
- @Override
- public void dispose() {
- try {
- ClipStorageReader reader = mReader.get();
- if (reader != null) {
- reader.close();
- }
- } catch (IOException e) {
- Log.w(TAG, "Failed to close the reader.", e);
- }
-
- // mFile is a symlink to the actual data file. Delete the symlink here so that we know
- // there is one fewer referrer that needs the data file. The actual data file will be
- // cleaned up during file slot rotation. See ClipStorage for more details.
- mFile.delete();
- }
-
- @Override
- public String toString() {
- StringBuilder builder = new StringBuilder();
- builder.append("JumboUrisSupplier{");
- builder.append("file=").append(mFile.getAbsolutePath());
- builder.append(", selectionSize=").append(mSelectionSize);
- builder.append("}");
- return builder.toString();
- }
-
- @Override
- public void writeToParcel(Parcel dest, int flags) {
- dest.writeString(mFile.getAbsolutePath());
- dest.writeInt(mSelectionSize);
- }
-
- private JumboUrisSupplier(Parcel in) {
- mFile = new File(in.readString());
- mSelectionSize = in.readInt();
- }
-
- public static final Parcelable.Creator<JumboUrisSupplier> CREATOR =
- new Parcelable.Creator<JumboUrisSupplier>() {
-
- @Override
- public JumboUrisSupplier createFromParcel(Parcel source) {
- return new JumboUrisSupplier(source);
- }
-
- @Override
- public JumboUrisSupplier[] newArray(int size) {
- return new JumboUrisSupplier[size];
- }
- };
- }
-
- /**
- * This class and its constructor is visible for testing to create test doubles of
- * {@link UrisSupplier}.
- */
- @VisibleForTesting
- public static class StandardUrisSupplier extends UrisSupplier {
- private final List<Uri> mDocs;
-
- private StandardUrisSupplier(ClipData clipData) {
- mDocs = listDocs(clipData);
- }
-
- @VisibleForTesting
- public StandardUrisSupplier(List<Uri> docs) {
- mDocs = docs;
- }
-
- private List<Uri> listDocs(ClipData clipData) {
- ArrayList<Uri> docs = new ArrayList<>(clipData.getItemCount());
-
- for (int i = 0; i < clipData.getItemCount(); ++i) {
- Uri uri = clipData.getItemAt(i).getUri();
- assert(uri != null);
- docs.add(uri);
- }
-
- return docs;
- }
-
- @Override
- public int getItemCount() {
- return mDocs.size();
- }
-
- @Override
- Iterable<Uri> getUris(ClipStorage storage) {
- return mDocs;
- }
-
- @Override
- public String toString() {
- StringBuilder builder = new StringBuilder();
- builder.append("StandardUrisSupplier{");
- builder.append("docs=").append(mDocs.toString());
- builder.append("}");
- return builder.toString();
- }
-
- @Override
- public void writeToParcel(Parcel dest, int flags) {
- dest.writeTypedList(mDocs);
- }
-
- private StandardUrisSupplier(Parcel in) {
- mDocs = in.createTypedArrayList(Uri.CREATOR);
- }
-
- public static final Parcelable.Creator<StandardUrisSupplier> CREATOR =
- new Parcelable.Creator<StandardUrisSupplier>() {
-
- @Override
- public StandardUrisSupplier createFromParcel(Parcel source) {
- return new StandardUrisSupplier(source);
- }
-
- @Override
- public StandardUrisSupplier[] newArray(int size) {
- return new StandardUrisSupplier[size];
- }
- };
- }
-}
diff --git a/packages/DocumentsUI/src/com/android/documentsui/dirlist/AnimationView.java b/packages/DocumentsUI/src/com/android/documentsui/dirlist/AnimationView.java
deleted file mode 100644
index a666456..0000000
--- a/packages/DocumentsUI/src/com/android/documentsui/dirlist/AnimationView.java
+++ /dev/null
@@ -1,112 +0,0 @@
-/*
- * 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.
- */
-
-package com.android.documentsui.dirlist;
-
-import android.annotation.IntDef;
-import android.app.FragmentTransaction;
-import android.content.Context;
-import android.os.Bundle;
-import android.util.AttributeSet;
-import android.widget.LinearLayout;
-
-import com.android.documentsui.R;
-import com.android.documentsui.Shared;
-
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-
-/**
- * This class exists solely to support animated transition of our directory fragment.
- * The structure of this class is tightly coupled with the static animations defined in
- * res/animator, specifically the "position" property referenced by
- * res/animator/dir_{enter,leave}.xml.
- */
-public class AnimationView extends LinearLayout {
-
- @IntDef(flag = true, value = {
- ANIM_NONE,
- ANIM_SIDE,
- ANIM_LEAVE,
- ANIM_ENTER
- })
- @Retention(RetentionPolicy.SOURCE)
- public @interface AnimationType {}
- public static final int ANIM_NONE = 1;
- public static final int ANIM_SIDE = 2;
- public static final int ANIM_LEAVE = 3;
- public static final int ANIM_ENTER = 4;
-
- private float mPosition = 0f;
-
- // The distance the animation will cover...currently matches the height of the
- // content area.
- private int mSpan;
-
- public AnimationView(Context context) {
- super(context);
- }
-
- public AnimationView(Context context, AttributeSet attrs) {
- super(context, attrs);
- }
-
- @Override
- protected void onSizeChanged(int w, int h, int oldw, int oldh) {
- super.onSizeChanged(w, h, oldw, oldh);
- mSpan = h;
- setPosition(mPosition);
- }
-
- public float getPosition() {
- return mPosition;
- }
-
- public void setPosition(float position) {
- mPosition = position;
- // Warning! If we ever decide to switch this to setX (slide left/right)
- // please remember to add RLT variations of the animations under res/animator-ldrtl.
- setY((mSpan > 0) ? (mPosition * mSpan) : 0);
-
- if (mPosition != 0) {
- setTranslationZ(getResources().getDimensionPixelSize(R.dimen.dir_elevation));
- } else {
- setTranslationZ(0);
- }
- }
-
- /**
- * Configures custom animations on the transaction according to the specified
- * @AnimationType.
- */
- static void setupAnimations(
- FragmentTransaction ft, @AnimationType int anim, Bundle args) {
- switch (anim) {
- case AnimationView.ANIM_SIDE:
- args.putBoolean(Shared.EXTRA_IGNORE_STATE, true);
- break;
- case AnimationView.ANIM_ENTER:
- // TODO: Document which behavior is being tailored
- // by passing this bit. Remove if possible.
- args.putBoolean(Shared.EXTRA_IGNORE_STATE, true);
- ft.setCustomAnimations(R.animator.dir_enter, R.animator.fade_out);
- break;
- case AnimationView.ANIM_LEAVE:
- ft.setCustomAnimations(R.animator.fade_in, R.animator.dir_leave);
- break;
- }
- }
-}
diff --git a/packages/DocumentsUI/src/com/android/documentsui/dirlist/BandController.java b/packages/DocumentsUI/src/com/android/documentsui/dirlist/BandController.java
deleted file mode 100644
index 5ab85c1..0000000
--- a/packages/DocumentsUI/src/com/android/documentsui/dirlist/BandController.java
+++ /dev/null
@@ -1,1173 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.documentsui.dirlist;
-
-import static com.android.documentsui.Shared.DEBUG;
-import static com.android.documentsui.dirlist.ModelBackedDocumentsAdapter.ITEM_TYPE_DIRECTORY;
-import static com.android.documentsui.dirlist.ModelBackedDocumentsAdapter.ITEM_TYPE_DOCUMENT;
-import static com.android.documentsui.dirlist.ViewAutoScroller.NOT_SET;
-
-import android.graphics.Point;
-import android.graphics.Rect;
-import android.graphics.drawable.Drawable;
-import android.support.annotation.Nullable;
-import android.support.annotation.VisibleForTesting;
-import android.support.v7.widget.GridLayoutManager;
-import android.support.v7.widget.RecyclerView;
-import android.util.Log;
-import android.util.SparseArray;
-import android.util.SparseBooleanArray;
-import android.util.SparseIntArray;
-import android.view.MotionEvent;
-import android.view.View;
-
-import com.android.documentsui.Events;
-import com.android.documentsui.Events.InputEvent;
-import com.android.documentsui.Events.MotionInputEvent;
-import com.android.documentsui.R;
-import com.android.documentsui.dirlist.MultiSelectManager.Selection;
-import com.android.documentsui.dirlist.ViewAutoScroller.ScrollActionDelegate;
-import com.android.documentsui.dirlist.ViewAutoScroller.ScrollDistanceDelegate;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-/**
- * Provides mouse driven band-select support when used in conjunction with {@link RecyclerView}
- * and {@link MultiSelectManager}. This class is responsible for rendering the band select
- * overlay and selecting overlaid items via MultiSelectManager.
- */
-public class BandController extends RecyclerView.OnScrollListener {
-
- private static final String TAG = "BandController";
- private static final int AUTOSCROLL_EDGE_HEIGHT = 1;
-
- private final Runnable mModelBuilder;
- private final SelectionEnvironment mEnvironment;
- private final DocumentsAdapter mAdapter;
- private final MultiSelectManager mSelectionManager;
- private final Runnable mViewScroller;
- private final GridModel.OnSelectionChangedListener mGridListener;
-
- @Nullable private Rect mBounds;
- @Nullable private Point mCurrentPosition;
- @Nullable private Point mOrigin;
- @Nullable private BandController.GridModel mModel;
-
- private Selection mSelection;
-
- public BandController(
- final RecyclerView view,
- DocumentsAdapter adapter,
- MultiSelectManager selectionManager) {
- this(new RuntimeSelectionEnvironment(view), adapter, selectionManager);
-
- view.addOnItemTouchListener(
- new RecyclerView.OnItemTouchListener() {
- @Override
- public boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e) {
- try (InputEvent event = MotionInputEvent.obtain(e, view)) {
- return handleEvent(event);
- }
- }
- @Override
- public void onTouchEvent(RecyclerView rv, MotionEvent e) {
- if (Events.isMouseEvent(e)) {
- try (InputEvent event = MotionInputEvent.obtain(e, view)) {
- processInputEvent(event);
- }
- }
- }
- @Override
- public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) {}
- });
- }
-
- private BandController(
- SelectionEnvironment env,
- DocumentsAdapter adapter,
- MultiSelectManager selectionManager) {
-
- selectionManager.bindContoller(this);
-
- mEnvironment = env;
- mAdapter = adapter;
- mSelectionManager = selectionManager;
-
- mEnvironment.addOnScrollListener(this);
- mViewScroller = new ViewAutoScroller(
- AUTOSCROLL_EDGE_HEIGHT,
- new ScrollDistanceDelegate() {
- @Override
- public Point getCurrentPosition() {
- return mCurrentPosition;
- }
-
- @Override
- public int getViewHeight() {
- return mEnvironment.getHeight();
- }
-
- @Override
- public boolean isActive() {
- return BandController.this.isActive();
- }
- },
- env);
-
- mAdapter.registerAdapterDataObserver(
- new RecyclerView.AdapterDataObserver() {
- @Override
- public void onChanged() {
- if (isActive()) {
- endBandSelect();
- }
- }
-
- @Override
- public void onItemRangeChanged(
- int startPosition, int itemCount, Object payload) {
- // No change in position. Ignoring.
- }
-
- @Override
- public void onItemRangeInserted(int startPosition, int itemCount) {
- if (isActive()) {
- endBandSelect();
- }
- }
-
- @Override
- public void onItemRangeRemoved(int startPosition, int itemCount) {
- assert(startPosition >= 0);
- assert(itemCount > 0);
-
- // TODO: Should update grid model.
- }
-
- @Override
- public void onItemRangeMoved(int fromPosition, int toPosition, int itemCount) {
- throw new UnsupportedOperationException();
- }
- });
-
- mGridListener = new GridModel.OnSelectionChangedListener() {
-
- @Override
- public void onSelectionChanged(Set<String> updatedSelection) {
- BandController.this.onSelectionChanged(updatedSelection);
- }
-
- @Override
- public boolean onBeforeItemStateChange(String id, boolean nextState) {
- return BandController.this.onBeforeItemStateChange(id, nextState);
- }
- };
-
- mModelBuilder = new Runnable() {
- @Override
- public void run() {
- mModel = new GridModel(mEnvironment, mAdapter);
- mModel.addOnSelectionChangedListener(mGridListener);
- }
- };
- }
-
- private boolean isActive() {
- return mModel != null;
- }
-
- void bindSelection(Selection selection) {
- mSelection = selection;
- }
-
- private boolean handleEvent(InputEvent e) {
- // Don't start, or extend bands on right click.
- if (e.isSecondaryButtonPressed()) {
- return false;
- }
-
- if (!e.isMouseEvent() && isActive()) {
- // Weird things happen if we keep up band select
- // when touch events happen.
- endBandSelect();
- return false;
- }
-
- // b/23793622 notes the fact that we *never* receive ACTION_DOWN
- // events in onTouchEvent. Where it not for this issue, we'd
- // push start handling down into handleInputEvent.
- if (shouldStart(e)) {
- // endBandSelect is handled in handleInputEvent.
- startBandSelect(e.getOrigin());
- } else if (isActive() && e.isActionUp()) {
- // Same issue here w b/23793622. The ACTION_UP event
- // is only evert dispatched to onTouchEvent when
- // there is some associated motion. If a user taps
- // mouse, but doesn't move, then band select gets
- // started BUT not ended. Causing phantom
- // bands to appear when the user later clicks to start
- // band select.
- if (e.isMouseEvent()) {
- processInputEvent(e);
- }
- }
-
- return isActive();
- }
-
- /**
- * Handle a change in layout by cleaning up and getting rid of the old model and creating
- * a new model which will track the new layout.
- */
- public void handleLayoutChanged() {
- if (mModel != null) {
- mModel.removeOnSelectionChangedListener(mGridListener);
- mModel.stopListening();
-
- // build a new model, all fresh and happy.
- mModelBuilder.run();
- }
- }
-
- boolean shouldStart(InputEvent e) {
- return !isActive()
- && e.isActionDown() // the initial button press
- && mAdapter.getItemCount() > 0
- && e.getItemPosition() == RecyclerView.NO_ID; // in empty space
- }
-
- boolean shouldStop(InputEvent input) {
- return isActive()
- && input.isMouseEvent()
- && input.isActionUp();
- }
-
- /**
- * Processes a MotionEvent by starting, ending, or resizing the band select overlay.
- * @param input
- */
- private void processInputEvent(InputEvent input) {
- assert(input.isMouseEvent());
-
- if (shouldStop(input)) {
- endBandSelect();
- return;
- }
-
- // We shouldn't get any events in this method when band select is not active,
- // but it turns some guests show up late to the party.
- if (!isActive()) {
- return;
- }
-
- mCurrentPosition = input.getOrigin();
- mModel.resizeSelection(input.getOrigin());
- scrollViewIfNecessary();
- resizeBandSelectRectangle();
- }
-
- /**
- * Starts band select by adding the drawable to the RecyclerView's overlay.
- */
- private void startBandSelect(Point origin) {
- if (DEBUG) Log.d(TAG, "Starting band select @ " + origin);
-
- mOrigin = origin;
- mModelBuilder.run(); // Creates a new selection model.
- mModel.startSelection(mOrigin);
- }
-
- /**
- * Scrolls the view if necessary.
- */
- private void scrollViewIfNecessary() {
- mEnvironment.removeCallback(mViewScroller);
- mViewScroller.run();
- mEnvironment.invalidateView();
- }
-
- /**
- * Resizes the band select rectangle by using the origin and the current pointer position as
- * two opposite corners of the selection.
- */
- private void resizeBandSelectRectangle() {
- mBounds = new Rect(Math.min(mOrigin.x, mCurrentPosition.x),
- Math.min(mOrigin.y, mCurrentPosition.y),
- Math.max(mOrigin.x, mCurrentPosition.x),
- Math.max(mOrigin.y, mCurrentPosition.y));
- mEnvironment.showBand(mBounds);
- }
-
- /**
- * Ends band select by removing the overlay.
- */
- private void endBandSelect() {
- if (DEBUG) Log.d(TAG, "Ending band select.");
-
- mEnvironment.hideBand();
- mSelection.applyProvisionalSelection();
- mModel.endSelection();
- int firstSelected = mModel.getPositionNearestOrigin();
- if (firstSelected != NOT_SET) {
- if (mSelection.contains(mAdapter.getModelId(firstSelected))) {
- // TODO: firstSelected should really be lastSelected, we want to anchor the item
- // where the mouse-up occurred.
- mSelectionManager.setSelectionRangeBegin(firstSelected);
- } else {
- // TODO: Check if this is really happening.
- Log.w(TAG, "First selected by band is NOT in selection!");
- }
- }
-
- mModel = null;
- mOrigin = null;
- }
-
- private void onSelectionChanged(Set<String> updatedSelection) {
- Map<String, Boolean> delta = mSelection.setProvisionalSelection(updatedSelection);
- for (Map.Entry<String, Boolean> entry: delta.entrySet()) {
- mSelectionManager.notifyItemStateChanged(entry.getKey(), entry.getValue());
- }
- mSelectionManager.notifySelectionChanged();
- }
-
- private boolean onBeforeItemStateChange(String id, boolean nextState) {
- return mSelectionManager.notifyBeforeItemStateChange(id, nextState);
- }
-
- @Override
- public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
- if (!isActive()) {
- return;
- }
-
- // Adjust the y-coordinate of the origin the opposite number of pixels so that the
- // origin remains in the same place relative to the view's items.
- mOrigin.y -= dy;
- resizeBandSelectRectangle();
- }
-
- /**
- * Provides a band selection item model for views within a RecyclerView. This class queries the
- * RecyclerView to determine where its items are placed; then, once band selection is underway,
- * it alerts listeners of which items are covered by the selections.
- */
- @VisibleForTesting
- static final class GridModel extends RecyclerView.OnScrollListener {
-
- public static final int NOT_SET = -1;
-
- // Enum values used to determine the corner at which the origin is located within the
- private static final int UPPER = 0x00;
- private static final int LOWER = 0x01;
- private static final int LEFT = 0x00;
- private static final int RIGHT = 0x02;
- private static final int UPPER_LEFT = UPPER | LEFT;
- private static final int UPPER_RIGHT = UPPER | RIGHT;
- private static final int LOWER_LEFT = LOWER | LEFT;
- private static final int LOWER_RIGHT = LOWER | RIGHT;
-
- private final SelectionEnvironment mHelper;
- private final DocumentsAdapter mAdapter;
-
- private final List<GridModel.OnSelectionChangedListener> mOnSelectionChangedListeners =
- new ArrayList<>();
-
- // Map from the x-value of the left side of a SparseBooleanArray of adapter positions, keyed
- // by their y-offset. For example, if the first column of the view starts at an x-value of 5,
- // mColumns.get(5) would return an array of positions in that column. Within that array, the
- // value for key y is the adapter position for the item whose y-offset is y.
- private final SparseArray<SparseIntArray> mColumns = new SparseArray<>();
-
- // List of limits along the x-axis (columns).
- // This list is sorted from furthest left to furthest right.
- private final List<GridModel.Limits> mColumnBounds = new ArrayList<>();
-
- // List of limits along the y-axis (rows). Note that this list only contains items which
- // have been in the viewport.
- private final List<GridModel.Limits> mRowBounds = new ArrayList<>();
-
- // The adapter positions which have been recorded so far.
- private final SparseBooleanArray mKnownPositions = new SparseBooleanArray();
-
- // Array passed to registered OnSelectionChangedListeners. One array is created and reused
- // throughout the lifetime of the object.
- private final Set<String> mSelection = new HashSet<>();
-
- // The current pointer (in absolute positioning from the top of the view).
- private Point mPointer = null;
-
- // The bounds of the band selection.
- private RelativePoint mRelativeOrigin;
- private RelativePoint mRelativePointer;
-
- private boolean mIsActive;
-
- // Tracks where the band select originated from. This is used to determine where selections
- // should expand from when Shift+click is used.
- private int mPositionNearestOrigin = NOT_SET;
-
- GridModel(SelectionEnvironment helper, DocumentsAdapter adapter) {
- mHelper = helper;
- mAdapter = adapter;
- mHelper.addOnScrollListener(this);
- }
-
- /**
- * Stops listening to the view's scrolls. Call this function before discarding a
- * BandSelecModel object to prevent memory leaks.
- */
- void stopListening() {
- mHelper.removeOnScrollListener(this);
- }
-
- /**
- * Start a band select operation at the given point.
- * @param relativeOrigin The origin of the band select operation, relative to the viewport.
- * For example, if the view is scrolled to the bottom, the top-left of the viewport
- * would have a relative origin of (0, 0), even though its absolute point has a higher
- * y-value.
- */
- void startSelection(Point relativeOrigin) {
- recordVisibleChildren();
- if (isEmpty()) {
- // The selection band logic works only if there is at least one visible child.
- return;
- }
-
- mIsActive = true;
- mPointer = mHelper.createAbsolutePoint(relativeOrigin);
- mRelativeOrigin = new RelativePoint(mPointer);
- mRelativePointer = new RelativePoint(mPointer);
- computeCurrentSelection();
- notifyListeners();
- }
-
- /**
- * Resizes the selection by adjusting the pointer (i.e., the corner of the selection
- * opposite the origin.
- * @param relativePointer The pointer (opposite of the origin) of the band select operation,
- * relative to the viewport. For example, if the view is scrolled to the bottom, the
- * top-left of the viewport would have a relative origin of (0, 0), even though its
- * absolute point has a higher y-value.
- */
- @VisibleForTesting
- void resizeSelection(Point relativePointer) {
- mPointer = mHelper.createAbsolutePoint(relativePointer);
- updateModel();
- }
-
- /**
- * Ends the band selection.
- */
- void endSelection() {
- mIsActive = false;
- }
-
- /**
- * @return The adapter position for the item nearest the origin corresponding to the latest
- * band select operation, or NOT_SET if the selection did not cover any items.
- */
- int getPositionNearestOrigin() {
- return mPositionNearestOrigin;
- }
-
- @Override
- public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
- if (!mIsActive) {
- return;
- }
-
- mPointer.x += dx;
- mPointer.y += dy;
- recordVisibleChildren();
- updateModel();
- }
-
- /**
- * Queries the view for all children and records their location metadata.
- */
- private void recordVisibleChildren() {
- for (int i = 0; i < mHelper.getVisibleChildCount(); i++) {
- int adapterPosition = mHelper.getAdapterPositionAt(i);
- // Sometimes the view is not attached, as we notify the multi selection manager
- // synchronously, while views are attached asynchronously. As a result items which
- // are in the adapter may not actually have a corresponding view (yet).
- if (mHelper.hasView(adapterPosition) &&
- !mHelper.isLayoutItem(adapterPosition) &&
- !mKnownPositions.get(adapterPosition)) {
- mKnownPositions.put(adapterPosition, true);
- recordItemData(mHelper.getAbsoluteRectForChildViewAt(i), adapterPosition);
- }
- }
- }
-
- /**
- * Checks if there are any recorded children.
- */
- private boolean isEmpty() {
- return mColumnBounds.size() == 0 || mRowBounds.size() == 0;
- }
-
- /**
- * Updates the limits lists and column map with the given item metadata.
- * @param absoluteChildRect The absolute rectangle for the child view being processed.
- * @param adapterPosition The position of the child view being processed.
- */
- private void recordItemData(Rect absoluteChildRect, int adapterPosition) {
- if (mColumnBounds.size() != mHelper.getColumnCount()) {
- // If not all x-limits have been recorded, record this one.
- recordLimits(
- mColumnBounds, new Limits(absoluteChildRect.left, absoluteChildRect.right));
- }
-
- recordLimits(mRowBounds, new Limits(absoluteChildRect.top, absoluteChildRect.bottom));
-
- SparseIntArray columnList = mColumns.get(absoluteChildRect.left);
- if (columnList == null) {
- columnList = new SparseIntArray();
- mColumns.put(absoluteChildRect.left, columnList);
- }
- columnList.put(absoluteChildRect.top, adapterPosition);
- }
-
- /**
- * Ensures limits exists within the sorted list limitsList, and adds it to the list if it
- * does not exist.
- */
- private void recordLimits(List<GridModel.Limits> limitsList, GridModel.Limits limits) {
- int index = Collections.binarySearch(limitsList, limits);
- if (index < 0) {
- limitsList.add(~index, limits);
- }
- }
-
- /**
- * Handles a moved pointer; this function determines whether the pointer movement resulted
- * in a selection change and, if it has, notifies listeners of this change.
- */
- private void updateModel() {
- RelativePoint old = mRelativePointer;
- mRelativePointer = new RelativePoint(mPointer);
- if (old != null && mRelativePointer.equals(old)) {
- return;
- }
-
- computeCurrentSelection();
- notifyListeners();
- }
-
- /**
- * Computes the currently-selected items.
- */
- private void computeCurrentSelection() {
- if (areItemsCoveredByBand(mRelativePointer, mRelativeOrigin)) {
- updateSelection(computeBounds());
- } else {
- mSelection.clear();
- mPositionNearestOrigin = NOT_SET;
- }
- }
-
- /**
- * Notifies all listeners of a selection change. Note that this function simply passes
- * mSelection, so computeCurrentSelection() should be called before this
- * function.
- */
- private void notifyListeners() {
- for (GridModel.OnSelectionChangedListener listener : mOnSelectionChangedListeners) {
- listener.onSelectionChanged(mSelection);
- }
- }
-
- /**
- * @param rect Rectangle including all covered items.
- */
- private void updateSelection(Rect rect) {
- int columnStart =
- Collections.binarySearch(mColumnBounds, new Limits(rect.left, rect.left));
- assert(columnStart >= 0);
- int columnEnd = columnStart;
-
- for (int i = columnStart; i < mColumnBounds.size()
- && mColumnBounds.get(i).lowerLimit <= rect.right; i++) {
- columnEnd = i;
- }
-
- int rowStart = Collections.binarySearch(mRowBounds, new Limits(rect.top, rect.top));
- if (rowStart < 0) {
- mPositionNearestOrigin = NOT_SET;
- return;
- }
-
- int rowEnd = rowStart;
- for (int i = rowStart; i < mRowBounds.size()
- && mRowBounds.get(i).lowerLimit <= rect.bottom; i++) {
- rowEnd = i;
- }
-
- updateSelection(columnStart, columnEnd, rowStart, rowEnd);
- }
-
- /**
- * Computes the selection given the previously-computed start- and end-indices for each
- * row and column.
- */
- private void updateSelection(
- int columnStartIndex, int columnEndIndex, int rowStartIndex, int rowEndIndex) {
- if (DEBUG) Log.d(TAG, String.format("updateSelection: %d, %d, %d, %d",
- columnStartIndex, columnEndIndex, rowStartIndex, rowEndIndex));
-
- mSelection.clear();
- for (int column = columnStartIndex; column <= columnEndIndex; column++) {
- SparseIntArray items = mColumns.get(mColumnBounds.get(column).lowerLimit);
- for (int row = rowStartIndex; row <= rowEndIndex; row++) {
- // The default return value for SparseIntArray.get is 0, which is a valid
- // position. Use a sentry value to prevent erroneously selecting item 0.
- final int rowKey = mRowBounds.get(row).lowerLimit;
- int position = items.get(rowKey, NOT_SET);
- if (position != NOT_SET) {
- String id = mAdapter.getModelId(position);
- if (id != null) {
- // The adapter inserts items for UI layout purposes that aren't associated
- // with files. Those will have a null model ID. Don't select them.
- if (canSelect(id)) {
- mSelection.add(id);
- }
- }
- if (isPossiblePositionNearestOrigin(column, columnStartIndex, columnEndIndex,
- row, rowStartIndex, rowEndIndex)) {
- // If this is the position nearest the origin, record it now so that it
- // can be returned by endSelection() later.
- mPositionNearestOrigin = position;
- }
- }
- }
- }
- }
-
- /**
- * @return True if the item is selectable.
- */
- private boolean canSelect(String id) {
- // TODO: Simplify the logic, so the check whether we can select is done in one place.
- // Consider injecting FragmentTuner, or move the checks from MultiSelectManager to
- // Selection.
- for (GridModel.OnSelectionChangedListener listener : mOnSelectionChangedListeners) {
- if (!listener.onBeforeItemStateChange(id, true)) {
- return false;
- }
- }
- return true;
- }
-
- /**
- * @return Returns true if the position is the nearest to the origin, or, in the case of the
- * lower-right corner, whether it is possible that the position is the nearest to the
- * origin. See comment below for reasoning for this special case.
- */
- private boolean isPossiblePositionNearestOrigin(int columnIndex, int columnStartIndex,
- int columnEndIndex, int rowIndex, int rowStartIndex, int rowEndIndex) {
- int corner = computeCornerNearestOrigin();
- switch (corner) {
- case UPPER_LEFT:
- return columnIndex == columnStartIndex && rowIndex == rowStartIndex;
- case UPPER_RIGHT:
- return columnIndex == columnEndIndex && rowIndex == rowStartIndex;
- case LOWER_LEFT:
- return columnIndex == columnStartIndex && rowIndex == rowEndIndex;
- case LOWER_RIGHT:
- // Note that in some cases, the last row will not have as many items as there
- // are columns (e.g., if there are 4 items and 3 columns, the second row will
- // only have one item in the first column). This function is invoked for each
- // position from left to right, so return true for any position in the bottom
- // row and only the right-most position in the bottom row will be recorded.
- return rowIndex == rowEndIndex;
- default:
- throw new RuntimeException("Invalid corner type.");
- }
- }
-
- /**
- * Listener for changes in which items have been band selected.
- */
- static interface OnSelectionChangedListener {
- public void onSelectionChanged(Set<String> updatedSelection);
- public boolean onBeforeItemStateChange(String id, boolean nextState);
- }
-
- void addOnSelectionChangedListener(GridModel.OnSelectionChangedListener listener) {
- mOnSelectionChangedListeners.add(listener);
- }
-
- void removeOnSelectionChangedListener(GridModel.OnSelectionChangedListener listener) {
- mOnSelectionChangedListeners.remove(listener);
- }
-
- /**
- * Limits of a view item. For example, if an item's left side is at x-value 5 and its right side
- * is at x-value 10, the limits would be from 5 to 10. Used to record the left- and right sides
- * of item columns and the top- and bottom sides of item rows so that it can be determined
- * whether the pointer is located within the bounds of an item.
- */
- private static class Limits implements Comparable<GridModel.Limits> {
- int lowerLimit;
- int upperLimit;
-
- Limits(int lowerLimit, int upperLimit) {
- this.lowerLimit = lowerLimit;
- this.upperLimit = upperLimit;
- }
-
- @Override
- public int compareTo(GridModel.Limits other) {
- return lowerLimit - other.lowerLimit;
- }
-
- @Override
- public boolean equals(Object other) {
- if (!(other instanceof GridModel.Limits)) {
- return false;
- }
-
- return ((GridModel.Limits) other).lowerLimit == lowerLimit &&
- ((GridModel.Limits) other).upperLimit == upperLimit;
- }
-
- @Override
- public String toString() {
- return "(" + lowerLimit + ", " + upperLimit + ")";
- }
- }
-
- /**
- * The location of a coordinate relative to items. This class represents a general area of the
- * view as it relates to band selection rather than an explicit point. For example, two
- * different points within an item are considered to have the same "location" because band
- * selection originating within the item would select the same items no matter which point
- * was used. Same goes for points between items as well as those at the very beginning or end
- * of the view.
- *
- * Tracking a coordinate (e.g., an x-value) as a CoordinateLocation instead of as an int has the
- * advantage of tying the value to the Limits of items along that axis. This allows easy
- * selection of items within those Limits as opposed to a search through every item to see if a
- * given coordinate value falls within those Limits.
- */
- private static class RelativeCoordinate
- implements Comparable<GridModel.RelativeCoordinate> {
- /**
- * Location describing points after the last known item.
- */
- static final int AFTER_LAST_ITEM = 0;
-
- /**
- * Location describing points before the first known item.
- */
- static final int BEFORE_FIRST_ITEM = 1;
-
- /**
- * Location describing points between two items.
- */
- static final int BETWEEN_TWO_ITEMS = 2;
-
- /**
- * Location describing points within the limits of one item.
- */
- static final int WITHIN_LIMITS = 3;
-
- /**
- * The type of this coordinate, which is one of AFTER_LAST_ITEM, BEFORE_FIRST_ITEM,
- * BETWEEN_TWO_ITEMS, or WITHIN_LIMITS.
- */
- final int type;
-
- /**
- * The limits before the coordinate; only populated when type == WITHIN_LIMITS or type ==
- * BETWEEN_TWO_ITEMS.
- */
- GridModel.Limits limitsBeforeCoordinate;
-
- /**
- * The limits after the coordinate; only populated when type == BETWEEN_TWO_ITEMS.
- */
- GridModel.Limits limitsAfterCoordinate;
-
- // Limits of the first known item; only populated when type == BEFORE_FIRST_ITEM.
- GridModel.Limits mFirstKnownItem;
- // Limits of the last known item; only populated when type == AFTER_LAST_ITEM.
- GridModel.Limits mLastKnownItem;
-
- /**
- * @param limitsList The sorted limits list for the coordinate type. If this
- * CoordinateLocation is an x-value, mXLimitsList should be passed; otherwise,
- * mYLimitsList should be pased.
- * @param value The coordinate value.
- */
- RelativeCoordinate(List<GridModel.Limits> limitsList, int value) {
- int index = Collections.binarySearch(limitsList, new Limits(value, value));
-
- if (index >= 0) {
- this.type = WITHIN_LIMITS;
- this.limitsBeforeCoordinate = limitsList.get(index);
- } else if (~index == 0) {
- this.type = BEFORE_FIRST_ITEM;
- this.mFirstKnownItem = limitsList.get(0);
- } else if (~index == limitsList.size()) {
- GridModel.Limits lastLimits = limitsList.get(limitsList.size() - 1);
- if (lastLimits.lowerLimit <= value && value <= lastLimits.upperLimit) {
- this.type = WITHIN_LIMITS;
- this.limitsBeforeCoordinate = lastLimits;
- } else {
- this.type = AFTER_LAST_ITEM;
- this.mLastKnownItem = lastLimits;
- }
- } else {
- GridModel.Limits limitsBeforeIndex = limitsList.get(~index - 1);
- if (limitsBeforeIndex.lowerLimit <= value && value <= limitsBeforeIndex.upperLimit) {
- this.type = WITHIN_LIMITS;
- this.limitsBeforeCoordinate = limitsList.get(~index - 1);
- } else {
- this.type = BETWEEN_TWO_ITEMS;
- this.limitsBeforeCoordinate = limitsList.get(~index - 1);
- this.limitsAfterCoordinate = limitsList.get(~index);
- }
- }
- }
-
- int toComparisonValue() {
- if (type == BEFORE_FIRST_ITEM) {
- return mFirstKnownItem.lowerLimit - 1;
- } else if (type == AFTER_LAST_ITEM) {
- return mLastKnownItem.upperLimit + 1;
- } else if (type == BETWEEN_TWO_ITEMS) {
- return limitsBeforeCoordinate.upperLimit + 1;
- } else {
- return limitsBeforeCoordinate.lowerLimit;
- }
- }
-
- @Override
- public boolean equals(Object other) {
- if (!(other instanceof GridModel.RelativeCoordinate)) {
- return false;
- }
-
- GridModel.RelativeCoordinate otherCoordinate = (GridModel.RelativeCoordinate) other;
- return toComparisonValue() == otherCoordinate.toComparisonValue();
- }
-
- @Override
- public int compareTo(GridModel.RelativeCoordinate other) {
- return toComparisonValue() - other.toComparisonValue();
- }
- }
-
- /**
- * The location of a point relative to the Limits of nearby items; consists of both an x- and
- * y-RelativeCoordinateLocation.
- */
- private class RelativePoint {
- final GridModel.RelativeCoordinate xLocation;
- final GridModel.RelativeCoordinate yLocation;
-
- RelativePoint(Point point) {
- this.xLocation = new RelativeCoordinate(mColumnBounds, point.x);
- this.yLocation = new RelativeCoordinate(mRowBounds, point.y);
- }
-
- @Override
- public boolean equals(Object other) {
- if (!(other instanceof RelativePoint)) {
- return false;
- }
-
- RelativePoint otherPoint = (RelativePoint) other;
- return xLocation.equals(otherPoint.xLocation) && yLocation.equals(otherPoint.yLocation);
- }
- }
-
- /**
- * Generates a rectangle which contains the items selected by the pointer and origin.
- * @return The rectangle, or null if no items were selected.
- */
- private Rect computeBounds() {
- Rect rect = new Rect();
- rect.left = getCoordinateValue(
- min(mRelativeOrigin.xLocation, mRelativePointer.xLocation),
- mColumnBounds,
- true);
- rect.right = getCoordinateValue(
- max(mRelativeOrigin.xLocation, mRelativePointer.xLocation),
- mColumnBounds,
- false);
- rect.top = getCoordinateValue(
- min(mRelativeOrigin.yLocation, mRelativePointer.yLocation),
- mRowBounds,
- true);
- rect.bottom = getCoordinateValue(
- max(mRelativeOrigin.yLocation, mRelativePointer.yLocation),
- mRowBounds,
- false);
- return rect;
- }
-
- /**
- * Computes the corner of the selection nearest the origin.
- * @return
- */
- private int computeCornerNearestOrigin() {
- int cornerValue = 0;
-
- if (mRelativeOrigin.yLocation ==
- min(mRelativeOrigin.yLocation, mRelativePointer.yLocation)) {
- cornerValue |= UPPER;
- } else {
- cornerValue |= LOWER;
- }
-
- if (mRelativeOrigin.xLocation ==
- min(mRelativeOrigin.xLocation, mRelativePointer.xLocation)) {
- cornerValue |= LEFT;
- } else {
- cornerValue |= RIGHT;
- }
-
- return cornerValue;
- }
-
- private GridModel.RelativeCoordinate min(GridModel.RelativeCoordinate first, GridModel.RelativeCoordinate second) {
- return first.compareTo(second) < 0 ? first : second;
- }
-
- private GridModel.RelativeCoordinate max(GridModel.RelativeCoordinate first, GridModel.RelativeCoordinate second) {
- return first.compareTo(second) > 0 ? first : second;
- }
-
- /**
- * @return The absolute coordinate (i.e., the x- or y-value) of the given relative
- * coordinate.
- */
- private int getCoordinateValue(GridModel.RelativeCoordinate coordinate,
- List<GridModel.Limits> limitsList, boolean isStartOfRange) {
- switch (coordinate.type) {
- case RelativeCoordinate.BEFORE_FIRST_ITEM:
- return limitsList.get(0).lowerLimit;
- case RelativeCoordinate.AFTER_LAST_ITEM:
- return limitsList.get(limitsList.size() - 1).upperLimit;
- case RelativeCoordinate.BETWEEN_TWO_ITEMS:
- if (isStartOfRange) {
- return coordinate.limitsAfterCoordinate.lowerLimit;
- } else {
- return coordinate.limitsBeforeCoordinate.upperLimit;
- }
- case RelativeCoordinate.WITHIN_LIMITS:
- return coordinate.limitsBeforeCoordinate.lowerLimit;
- }
-
- throw new RuntimeException("Invalid coordinate value.");
- }
-
- private boolean areItemsCoveredByBand(
- RelativePoint first, RelativePoint second) {
- return doesCoordinateLocationCoverItems(first.xLocation, second.xLocation) &&
- doesCoordinateLocationCoverItems(first.yLocation, second.yLocation);
- }
-
- private boolean doesCoordinateLocationCoverItems(
- GridModel.RelativeCoordinate pointerCoordinate,
- GridModel.RelativeCoordinate originCoordinate) {
- if (pointerCoordinate.type == RelativeCoordinate.BEFORE_FIRST_ITEM &&
- originCoordinate.type == RelativeCoordinate.BEFORE_FIRST_ITEM) {
- return false;
- }
-
- if (pointerCoordinate.type == RelativeCoordinate.AFTER_LAST_ITEM &&
- originCoordinate.type == RelativeCoordinate.AFTER_LAST_ITEM) {
- return false;
- }
-
- if (pointerCoordinate.type == RelativeCoordinate.BETWEEN_TWO_ITEMS &&
- originCoordinate.type == RelativeCoordinate.BETWEEN_TWO_ITEMS &&
- pointerCoordinate.limitsBeforeCoordinate.equals(
- originCoordinate.limitsBeforeCoordinate) &&
- pointerCoordinate.limitsAfterCoordinate.equals(
- originCoordinate.limitsAfterCoordinate)) {
- return false;
- }
-
- return true;
- }
- }
-
- /**
- * Provides functionality for BandController. Exists primarily to tests that are
- * fully isolated from RecyclerView.
- */
- interface SelectionEnvironment extends ScrollActionDelegate {
- void showBand(Rect rect);
- void hideBand();
- void addOnScrollListener(RecyclerView.OnScrollListener listener);
- void removeOnScrollListener(RecyclerView.OnScrollListener listener);
- int getHeight();
- void invalidateView();
- Point createAbsolutePoint(Point relativePoint);
- Rect getAbsoluteRectForChildViewAt(int index);
- int getAdapterPositionAt(int index);
- int getColumnCount();
- int getChildCount();
- int getVisibleChildCount();
- /**
- * Layout items are excluded from the GridModel.
- */
- boolean isLayoutItem(int adapterPosition);
- /**
- * Items may be in the adapter, but without an attached view.
- */
- boolean hasView(int adapterPosition);
- }
-
- /** Recycler view facade implementation backed by good ol' RecyclerView. */
- private static final class RuntimeSelectionEnvironment implements SelectionEnvironment {
-
- private final RecyclerView mView;
- private final Drawable mBand;
-
- private boolean mIsOverlayShown = false;
-
- RuntimeSelectionEnvironment(RecyclerView view) {
- mView = view;
- mBand = mView.getContext().getTheme().getDrawable(R.drawable.band_select_overlay);
- }
-
- @Override
- public int getAdapterPositionAt(int index) {
- return mView.getChildAdapterPosition(mView.getChildAt(index));
- }
-
- @Override
- public void addOnScrollListener(RecyclerView.OnScrollListener listener) {
- mView.addOnScrollListener(listener);
- }
-
- @Override
- public void removeOnScrollListener(RecyclerView.OnScrollListener listener) {
- mView.removeOnScrollListener(listener);
- }
-
- @Override
- public Point createAbsolutePoint(Point relativePoint) {
- return new Point(relativePoint.x + mView.computeHorizontalScrollOffset(),
- relativePoint.y + mView.computeVerticalScrollOffset());
- }
-
- @Override
- public Rect getAbsoluteRectForChildViewAt(int index) {
- final View child = mView.getChildAt(index);
- final Rect childRect = new Rect();
- child.getHitRect(childRect);
- childRect.left += mView.computeHorizontalScrollOffset();
- childRect.right += mView.computeHorizontalScrollOffset();
- childRect.top += mView.computeVerticalScrollOffset();
- childRect.bottom += mView.computeVerticalScrollOffset();
- return childRect;
- }
-
- @Override
- public int getChildCount() {
- return mView.getAdapter().getItemCount();
- }
-
- @Override
- public int getVisibleChildCount() {
- return mView.getChildCount();
- }
-
- @Override
- public int getColumnCount() {
- RecyclerView.LayoutManager layoutManager = mView.getLayoutManager();
- if (layoutManager instanceof GridLayoutManager) {
- return ((GridLayoutManager) layoutManager).getSpanCount();
- }
-
- // Otherwise, it is a list with 1 column.
- return 1;
- }
-
- @Override
- public int getHeight() {
- return mView.getHeight();
- }
-
- @Override
- public void invalidateView() {
- mView.invalidate();
- }
-
- @Override
- public void runAtNextFrame(Runnable r) {
- mView.postOnAnimation(r);
- }
-
- @Override
- public void removeCallback(Runnable r) {
- mView.removeCallbacks(r);
- }
-
- @Override
- public void scrollBy(int dy) {
- mView.scrollBy(0, dy);
- }
-
- @Override
- public void showBand(Rect rect) {
- mBand.setBounds(rect);
-
- if (!mIsOverlayShown) {
- mView.getOverlay().add(mBand);
- }
- }
-
- @Override
- public void hideBand() {
- mView.getOverlay().remove(mBand);
- }
-
- @Override
- public boolean isLayoutItem(int pos) {
- // The band selection model only operates on documents and directories. Exclude other
- // types of adapter items (e.g. whitespace items like dividers).
- RecyclerView.ViewHolder vh = mView.findViewHolderForAdapterPosition(pos);
- switch (vh.getItemViewType()) {
- case ITEM_TYPE_DOCUMENT:
- case ITEM_TYPE_DIRECTORY:
- return false;
- default:
- return true;
- }
- }
-
- @Override
- public boolean hasView(int pos) {
- return mView.findViewHolderForAdapterPosition(pos) != null;
- }
- }
-}
\ No newline at end of file
diff --git a/packages/DocumentsUI/src/com/android/documentsui/dirlist/DirectoryDragListener.java b/packages/DocumentsUI/src/com/android/documentsui/dirlist/DirectoryDragListener.java
deleted file mode 100644
index f0a7aae..0000000
--- a/packages/DocumentsUI/src/com/android/documentsui/dirlist/DirectoryDragListener.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (C) 2016 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.dirlist;
-
-import android.view.DragEvent;
-import android.view.View;
-
-import com.android.documentsui.ItemDragListener;
-
-class DirectoryDragListener extends ItemDragListener<DirectoryFragment> {
-
- DirectoryDragListener(DirectoryFragment fragment) {
- super(fragment);
- }
-
- @Override
- public boolean onDrag(View v, DragEvent event) {
- final boolean result = super.onDrag(v, event);
-
- if (event.getAction() == DragEvent.ACTION_DRAG_STARTED) {
- mDragHost.dragStarted();
- } else if (event.getAction() == DragEvent.ACTION_DRAG_ENDED) {
- // getResult() is true if drag was accepted
- mDragHost.dragStopped(event.getResult());
- }
-
- return result;
- }
-
- @Override
- public boolean handleDropEventChecked(View v, DragEvent event) {
- return mDragHost.handleDropEvent(v, event);
- }
-}
\ No newline at end of file
diff --git a/packages/DocumentsUI/src/com/android/documentsui/dirlist/DirectoryFragment.java b/packages/DocumentsUI/src/com/android/documentsui/dirlist/DirectoryFragment.java
deleted file mode 100644
index db19881..0000000
--- a/packages/DocumentsUI/src/com/android/documentsui/dirlist/DirectoryFragment.java
+++ /dev/null
@@ -1,1711 +0,0 @@
-/*
- * 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.
- */
-
-package com.android.documentsui.dirlist;
-
-import static com.android.documentsui.Shared.DEBUG;
-import static com.android.documentsui.State.MODE_GRID;
-import static com.android.documentsui.State.MODE_LIST;
-import static com.android.documentsui.State.SORT_ORDER_UNKNOWN;
-import static com.android.documentsui.model.DocumentInfo.getCursorInt;
-import static com.android.documentsui.model.DocumentInfo.getCursorString;
-
-import android.annotation.IntDef;
-import android.annotation.StringRes;
-import android.app.Activity;
-import android.app.ActivityManager;
-import android.app.AlertDialog;
-import android.app.Fragment;
-import android.app.FragmentManager;
-import android.app.FragmentTransaction;
-import android.app.LoaderManager.LoaderCallbacks;
-import android.content.ClipData;
-import android.content.Context;
-import android.content.DialogInterface;
-import android.content.Intent;
-import android.content.Loader;
-import android.database.Cursor;
-import android.graphics.drawable.Drawable;
-import android.net.Uri;
-import android.os.AsyncTask;
-import android.os.Bundle;
-import android.os.Handler;
-import android.os.Parcelable;
-import android.provider.DocumentsContract;
-import android.provider.DocumentsContract.Document;
-import android.support.v13.view.DragStartHelper;
-import android.support.v4.widget.SwipeRefreshLayout;
-import android.support.v7.widget.GridLayoutManager;
-import android.support.v7.widget.GridLayoutManager.SpanSizeLookup;
-import android.support.v7.widget.RecyclerView;
-import android.support.v7.widget.RecyclerView.RecyclerListener;
-import android.support.v7.widget.RecyclerView.ViewHolder;
-import android.text.BidiFormatter;
-import android.text.TextUtils;
-import android.util.Log;
-import android.util.SparseArray;
-import android.view.ActionMode;
-import android.view.ContextMenu;
-import android.view.DragEvent;
-import android.view.HapticFeedbackConstants;
-import android.view.LayoutInflater;
-import android.view.Menu;
-import android.view.MenuInflater;
-import android.view.MenuItem;
-import android.view.MotionEvent;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.ImageView;
-import android.widget.TextView;
-import android.widget.Toolbar;
-
-import com.android.documentsui.BaseActivity;
-import com.android.documentsui.DirectoryLoader;
-import com.android.documentsui.DirectoryResult;
-import com.android.documentsui.DocumentsActivity;
-import com.android.documentsui.DocumentsApplication;
-import com.android.documentsui.Events.InputEvent;
-import com.android.documentsui.Events.MotionInputEvent;
-import com.android.documentsui.ItemDragListener;
-import com.android.documentsui.MenuManager;
-import com.android.documentsui.Menus;
-import com.android.documentsui.MessageBar;
-import com.android.documentsui.Metrics;
-import com.android.documentsui.MimePredicate;
-import com.android.documentsui.R;
-import com.android.documentsui.RecentsLoader;
-import com.android.documentsui.RetainedState;
-import com.android.documentsui.RootsCache;
-import com.android.documentsui.Shared;
-import com.android.documentsui.Snackbars;
-import com.android.documentsui.State;
-import com.android.documentsui.State.ViewMode;
-import com.android.documentsui.ThumbnailCache;
-import com.android.documentsui.clipping.DocumentClipper;
-import com.android.documentsui.clipping.UrisSupplier;
-import com.android.documentsui.dirlist.MultiSelectManager.Selection;
-import com.android.documentsui.dirlist.UserInputHandler.DocumentDetails;
-import com.android.documentsui.model.DocumentInfo;
-import com.android.documentsui.model.RootInfo;
-import com.android.documentsui.services.FileOperation;
-import com.android.documentsui.services.FileOperationService;
-import com.android.documentsui.services.FileOperationService.OpType;
-import com.android.documentsui.services.FileOperations;
-
-import java.io.IOException;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-import java.util.Objects;
-import java.util.function.Function;
-
-import javax.annotation.Nullable;
-
-/**
- * Display the documents inside a single directory.
- */
-public class DirectoryFragment extends Fragment
- implements DocumentsAdapter.Environment, LoaderCallbacks<DirectoryResult>,
- ItemDragListener.DragHost, SwipeRefreshLayout.OnRefreshListener {
-
- @IntDef(flag = true, value = {
- TYPE_NORMAL,
- TYPE_RECENT_OPEN
- })
- @Retention(RetentionPolicy.SOURCE)
- public @interface ResultType {}
- public static final int TYPE_NORMAL = 1;
- public static final int TYPE_RECENT_OPEN = 2;
-
- @IntDef(flag = true, value = {
- REQUEST_COPY_DESTINATION
- })
- @Retention(RetentionPolicy.SOURCE)
- public @interface RequestCode {}
- public static final int REQUEST_COPY_DESTINATION = 1;
-
- private static final String TAG = "DirectoryFragment";
- private static final int LOADER_ID = 42;
-
- private static final int CACHE_EVICT_LIMIT = 100;
- private static final int REFRESH_SPINNER_DISMISS_DELAY = 500;
-
- private Model mModel;
- private MultiSelectManager mSelectionMgr;
- private Model.UpdateListener mModelUpdateListener = new ModelUpdateListener();
- private UserInputHandler<InputEvent> mInputHandler;
- private SelectionModeListener mSelectionModeListener;
- private FocusManager mFocusManager;
-
- private IconHelper mIconHelper;
-
- private SwipeRefreshLayout mRefreshLayout;
- private View mEmptyView;
- private RecyclerView mRecView;
- private ListeningGestureDetector mGestureDetector;
-
- private String mStateKey;
-
- private int mLastSortOrder = SORT_ORDER_UNKNOWN;
- private DocumentsAdapter mAdapter;
- private FragmentTuner mTuner;
- private DocumentClipper mClipper;
- private GridLayoutManager mLayout;
- private int mColumnCount = 1; // This will get updated when layout changes.
-
- private LayoutInflater mInflater;
- private MessageBar mMessageBar;
- private View mProgressBar;
-
- // Directory fragment state is defined by: root, document, query, type, selection
- private @ResultType int mType = TYPE_NORMAL;
- private RootInfo mRoot;
- private DocumentInfo mDocument;
- private String mQuery = null;
- // Note, we use !null to indicate that selection was restored (from rotation).
- // So don't fiddle with this field unless you've got the bigger picture in mind.
- private @Nullable Selection mRestoredSelection = null;
- // Here we save the clip details of moveTo/copyTo actions when picker shows up.
- // This will be written to saved instance.
- private @Nullable FileOperation mPendingOperation;
- private boolean mSearchMode = false;
-
- private @Nullable BandController mBandController;
- private @Nullable ActionMode mActionMode;
-
- private DragScrollListener mOnDragListener;
- private MenuManager mMenuManager;
-
- @Override
- public View onCreateView(
- LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
- mInflater = inflater;
- final View view = inflater.inflate(R.layout.fragment_directory, container, false);
-
- mMessageBar = MessageBar.create(getChildFragmentManager());
- mProgressBar = view.findViewById(R.id.progressbar);
-
- mRefreshLayout = (SwipeRefreshLayout) view.findViewById(R.id.refresh_layout);
- mRefreshLayout.setOnRefreshListener(this);
-
- mEmptyView = view.findViewById(android.R.id.empty);
- mRecView = (RecyclerView) view.findViewById(R.id.dir_list);
- mRecView.setRecyclerListener(
- new RecyclerListener() {
- @Override
- public void onViewRecycled(ViewHolder holder) {
- cancelThumbnailTask(holder.itemView);
- }
- });
-
- mRecView.setItemAnimator(new DirectoryItemAnimator(getActivity()));
-
- mOnDragListener = DragScrollListener.create(
- getActivity(), new DirectoryDragListener(this), mRecView);
-
- // Make the recycler and the empty views responsive to drop events.
- mRecView.setOnDragListener(mOnDragListener);
- mEmptyView.setOnDragListener(mOnDragListener);
-
- return view;
- }
-
- @Override
- public void onDestroyView() {
- mSelectionMgr.clearSelection();
-
- // Cancel any outstanding thumbnail requests
- final int count = mRecView.getChildCount();
- for (int i = 0; i < count; i++) {
- final View view = mRecView.getChildAt(i);
- cancelThumbnailTask(view);
- }
-
- super.onDestroyView();
- }
-
- @Override
- public void onActivityCreated(Bundle savedInstanceState) {
- super.onActivityCreated(savedInstanceState);
-
- final Context context = getActivity();
- final State state = getDisplayState();
-
- // Read arguments when object created for the first time.
- // Restore state if fragment recreated.
- Bundle args = savedInstanceState == null ? getArguments() : savedInstanceState;
- mRoot = args.getParcelable(Shared.EXTRA_ROOT);
- mDocument = args.getParcelable(Shared.EXTRA_DOC);
- mStateKey = buildStateKey(mRoot, mDocument);
- mQuery = args.getString(Shared.EXTRA_QUERY);
- mType = args.getInt(Shared.EXTRA_TYPE);
- mSearchMode = args.getBoolean(Shared.EXTRA_SEARCH_MODE);
- mPendingOperation = args.getParcelable(FileOperationService.EXTRA_OPERATION);
-
- // Restore any selection we may have squirreled away in retained state.
- @Nullable RetainedState retained = getBaseActivity().getRetainedState();
- if (retained != null && retained.hasSelection()) {
- // We claim the selection for ourselves and null it out once used
- // so we don't have a rando selection hanging around in RetainedState.
- mRestoredSelection = retained.selection;
- retained.selection = null;
- }
-
- mIconHelper = new IconHelper(context, MODE_GRID);
-
- mAdapter = new SectionBreakDocumentsAdapterWrapper(
- this, new ModelBackedDocumentsAdapter(this, mIconHelper));
-
- mRecView.setAdapter(mAdapter);
-
- mLayout = new GridLayoutManager(getContext(), mColumnCount);
- SpanSizeLookup lookup = mAdapter.createSpanSizeLookup();
- if (lookup != null) {
- mLayout.setSpanSizeLookup(lookup);
- }
- mRecView.setLayoutManager(mLayout);
-
- // TODO: instead of inserting the view into the constructor, extract listener-creation code
- // and set the listener on the view after the fact. Then the view doesn't need to be passed
- // into the selection manager.
- mSelectionMgr = new MultiSelectManager(
- mAdapter,
- state.allowMultiple
- ? MultiSelectManager.MODE_MULTIPLE
- : MultiSelectManager.MODE_SINGLE);
-
- // Make sure this is done after the RecyclerView is set up.
- mFocusManager = new FocusManager(context, mRecView, mModel);
-
- mInputHandler = new UserInputHandler<>(
- mSelectionMgr,
- mFocusManager,
- new Function<MotionEvent, InputEvent>() {
- @Override
- public InputEvent apply(MotionEvent t) {
- return MotionInputEvent.obtain(t, mRecView);
- }
- },
- this::getTarget,
- this::canSelect,
- this::onRightClick,
- this::onActivate,
- (DocumentDetails ignored) -> {
- return onDeleteSelectedDocuments();
- });
-
- mGestureDetector =
- new ListeningGestureDetector(this.getContext(), mDragHelper, mInputHandler);
-
- mRecView.addOnItemTouchListener(mGestureDetector);
- mEmptyView.setOnTouchListener(mGestureDetector);
-
- if (state.allowMultiple) {
- mBandController = new BandController(mRecView, mAdapter, mSelectionMgr);
- }
-
- mSelectionModeListener = new SelectionModeListener();
- mSelectionMgr.addCallback(mSelectionModeListener);
-
- mModel = new Model();
- mModel.addUpdateListener(mAdapter);
- mModel.addUpdateListener(mModelUpdateListener);
-
- final BaseActivity activity = getBaseActivity();
- mTuner = activity.createFragmentTuner();
- mMenuManager = activity.getMenuManager();
- mClipper = DocumentsApplication.getDocumentClipper(getContext());
-
- final ActivityManager am = (ActivityManager) context.getSystemService(
- Context.ACTIVITY_SERVICE);
- boolean svelte = am.isLowRamDevice() && (mType == TYPE_RECENT_OPEN);
- mIconHelper.setThumbnailsEnabled(!svelte);
-
- // Kick off loader at least once
- getLoaderManager().restartLoader(LOADER_ID, null, this);
- }
-
- public void retainState(RetainedState state) {
- state.selection = mSelectionMgr.getSelection(new Selection());
- }
-
- @Override
- public void onSaveInstanceState(Bundle outState) {
- super.onSaveInstanceState(outState);
-
- outState.putInt(Shared.EXTRA_TYPE, mType);
- outState.putParcelable(Shared.EXTRA_ROOT, mRoot);
- outState.putParcelable(Shared.EXTRA_DOC, mDocument);
- outState.putString(Shared.EXTRA_QUERY, mQuery);
- outState.putBoolean(Shared.EXTRA_SEARCH_MODE, mSearchMode);
- outState.putParcelable(FileOperationService.EXTRA_OPERATION, mPendingOperation);
- }
-
- @Override
- public void onActivityResult(@RequestCode int requestCode, int resultCode, Intent data) {
- switch (requestCode) {
- case REQUEST_COPY_DESTINATION:
- handleCopyResult(resultCode, data);
- break;
- default:
- throw new UnsupportedOperationException("Unknown request code: " + requestCode);
- }
- }
-
- @Override
- public void onCreateContextMenu(ContextMenu menu,
- View v,
- ContextMenu.ContextMenuInfo menuInfo) {
- super.onCreateContextMenu(menu, v, menuInfo);
- MenuInflater inflater = getActivity().getMenuInflater();
- inflater.inflate(R.menu.context_menu, menu);
-
- menu.add(Menu.NONE, R.id.menu_create_dir, Menu.NONE, R.string.menu_create_dir);
- menu.add(Menu.NONE, R.id.menu_delete, Menu.NONE, R.string.menu_delete);
- menu.add(Menu.NONE, R.id.menu_rename, Menu.NONE, R.string.menu_rename);
-
- if (v == mRecView || v == mEmptyView) {
- mMenuManager.updateContextMenu(menu, null, getBaseActivity().getDirectoryDetails());
- } else {
- mMenuManager.updateContextMenu(menu, mSelectionModeListener,
- getBaseActivity().getDirectoryDetails());
- }
- }
-
- @Override
- public boolean onContextItemSelected(MenuItem item) {
- return handleMenuItemClick(item);
- }
-
- private void handleCopyResult(int resultCode, Intent data) {
-
- FileOperation operation = mPendingOperation;
- mPendingOperation = null;
-
- if (resultCode == Activity.RESULT_CANCELED || data == null) {
- // User pressed the back button or otherwise cancelled the destination pick. Don't
- // proceed with the copy.
- operation.dispose();
- return;
- }
-
- operation.setDestination(data.getParcelableExtra(Shared.EXTRA_STACK));
-
- BaseActivity activity = getBaseActivity();
- FileOperations.start(activity, operation, activity.fileOpCallback);
- }
-
- protected boolean onRightClick(InputEvent e) {
- if (e.getItemPosition() != RecyclerView.NO_POSITION) {
- final DocumentHolder doc = getTarget(e);
- if (!mSelectionMgr.getSelection().contains(doc.modelId)) {
- mSelectionMgr.replaceSelection(Collections.singleton(doc.modelId));
- }
-
- // We are registering for context menu here so long-press doesn't trigger this
- // floating context menu, and then quickly unregister right afterwards
- registerForContextMenu(doc.itemView);
- mRecView.showContextMenuForChild(doc.itemView,
- e.getX() - doc.itemView.getLeft(), e.getY() - doc.itemView.getTop());
- unregisterForContextMenu(doc.itemView);
- return true;
- }
-
- // If there was no corresponding item pos, that means user right-clicked on the blank
- // pane
- // We would want to show different options then, and not select any item
- // The blank pane could be the recyclerView or the emptyView, so we need to register
- // according to whichever one is visible
- if (mEmptyView.getVisibility() == View.VISIBLE) {
- registerForContextMenu(mEmptyView);
- mEmptyView.showContextMenu(e.getX(), e.getY());
- unregisterForContextMenu(mEmptyView);
- return true;
- }
-
- registerForContextMenu(mRecView);
- mRecView.showContextMenu(e.getX(), e.getY());
- unregisterForContextMenu(mRecView);
- return true;
- }
-
- private boolean handleViewItem(String id) {
- final Cursor cursor = mModel.getItem(id);
-
- if (cursor == null) {
- Log.w(TAG, "Can't view item. Can't obtain cursor for modeId" + id);
- return false;
- }
-
- final String docMimeType = getCursorString(cursor, Document.COLUMN_MIME_TYPE);
- final int docFlags = getCursorInt(cursor, Document.COLUMN_FLAGS);
- if (mTuner.isDocumentEnabled(docMimeType, docFlags)) {
- final DocumentInfo doc = DocumentInfo.fromDirectoryCursor(cursor);
- getBaseActivity().onDocumentPicked(doc, mModel);
- mSelectionMgr.clearSelection();
- return true;
- }
- return false;
- }
-
- @Override
- public void onStop() {
- super.onStop();
-
- // Remember last scroll location
- final SparseArray<Parcelable> container = new SparseArray<Parcelable>();
- getView().saveHierarchyState(container);
- final State state = getDisplayState();
- state.dirState.put(mStateKey, container);
- }
-
- public void onDisplayStateChanged() {
- updateDisplayState();
- }
-
- public void onSortOrderChanged() {
- // Sort order is implemented as a sorting wrapper around directory
- // results. So when sort order changes, we force a reload of the directory.
- getLoaderManager().restartLoader(LOADER_ID, null, this);
- }
-
- public void onViewModeChanged() {
- // Mode change is just visual change; no need to kick loader.
- updateDisplayState();
- }
-
- private void updateDisplayState() {
- State state = getDisplayState();
- updateLayout(state.derivedMode);
- mRecView.setAdapter(mAdapter);
- }
-
- /**
- * Updates the layout after the view mode switches.
- * @param mode The new view mode.
- */
- private void updateLayout(@ViewMode int mode) {
- mColumnCount = calculateColumnCount(mode);
- if (mLayout != null) {
- mLayout.setSpanCount(mColumnCount);
- }
-
- int pad = getDirectoryPadding(mode);
- mRecView.setPadding(pad, pad, pad, pad);
- mRecView.requestLayout();
- if (mBandController != null) {
- mBandController.handleLayoutChanged();
- }
- mIconHelper.setViewMode(mode);
- }
-
- private int calculateColumnCount(@ViewMode int mode) {
- if (mode == MODE_LIST) {
- // List mode is a "grid" with 1 column.
- return 1;
- }
-
- int cellWidth = getResources().getDimensionPixelSize(R.dimen.grid_width);
- int cellMargin = 2 * getResources().getDimensionPixelSize(R.dimen.grid_item_margin);
- int viewPadding = mRecView.getPaddingLeft() + mRecView.getPaddingRight();
-
- // RecyclerView sometimes gets a width of 0 (see b/27150284). Clamp so that we always lay
- // out the grid with at least 2 columns.
- int columnCount = Math.max(2,
- (mRecView.getWidth() - viewPadding) / (cellWidth + cellMargin));
-
- return columnCount;
- }
-
- private int getDirectoryPadding(@ViewMode int mode) {
- switch (mode) {
- case MODE_GRID:
- return getResources().getDimensionPixelSize(R.dimen.grid_container_padding);
- case MODE_LIST:
- return getResources().getDimensionPixelSize(R.dimen.list_container_padding);
- default:
- throw new IllegalArgumentException("Unsupported layout mode: " + mode);
- }
- }
-
- @Override
- public int getColumnCount() {
- return mColumnCount;
- }
-
- // Support method to replace getOwner().foo() with something
- // slightly less clumsy like: getOwner().foo().
- private BaseActivity getBaseActivity() {
- return (BaseActivity) getActivity();
- }
-
- /**
- * Manages the integration between our ActionMode and MultiSelectManager, initiating
- * ActionMode when there is a selection, canceling it when there is no selection,
- * and clearing selection when action mode is explicitly exited by the user.
- */
- private final class SelectionModeListener implements MultiSelectManager.Callback,
- ActionMode.Callback, MenuManager.SelectionDetails {
-
- private Selection mSelected = new Selection();
-
- // Partial files are files that haven't been fully downloaded.
- private int mPartialCount = 0;
- private int mDirectoryCount = 0;
- private int mNoDeleteCount = 0;
- private int mNoRenameCount = 0;
-
- private Menu mMenu;
-
- @Override
- public boolean onBeforeItemStateChange(String modelId, boolean selected) {
- if (selected) {
- final Cursor cursor = mModel.getItem(modelId);
- if (cursor == null) {
- Log.w(TAG, "Can't obtain cursor for modelId: " + modelId);
- return false;
- }
-
- final String docMimeType = getCursorString(cursor, Document.COLUMN_MIME_TYPE);
- final int docFlags = getCursorInt(cursor, Document.COLUMN_FLAGS);
- if (!mTuner.canSelectType(docMimeType, docFlags)) {
- return false;
- }
- return mTuner.canSelectType(docMimeType, docFlags);
- }
- return true;
- }
-
- @Override
- public void onItemStateChanged(String modelId, boolean selected) {
- final Cursor cursor = mModel.getItem(modelId);
- if (cursor == null) {
- Log.w(TAG, "Model returned null cursor for document: " + modelId
- + ". Ignoring state changed event.");
- return;
- }
-
- // TODO: Should this be happening in onSelectionChanged? Technically this callback is
- // triggered on "silent" selection updates (i.e. we might be reacting to unfinalized
- // selection changes here)
- final String mimeType = getCursorString(cursor, Document.COLUMN_MIME_TYPE);
- if (MimePredicate.isDirectoryType(mimeType)) {
- mDirectoryCount += selected ? 1 : -1;
- }
-
- final int docFlags = getCursorInt(cursor, Document.COLUMN_FLAGS);
- if ((docFlags & Document.FLAG_PARTIAL) != 0) {
- mPartialCount += selected ? 1 : -1;
- }
- if ((docFlags & Document.FLAG_SUPPORTS_DELETE) == 0) {
- mNoDeleteCount += selected ? 1 : -1;
- }
- if ((docFlags & Document.FLAG_SUPPORTS_RENAME) == 0) {
- mNoRenameCount += selected ? 1 : -1;
- }
- }
-
- @Override
- public void onSelectionChanged() {
- mSelectionMgr.getSelection(mSelected);
- if (mSelected.size() > 0) {
- if (DEBUG) Log.d(TAG, "Maybe starting action mode.");
- if (mActionMode == null) {
- if (DEBUG) Log.d(TAG, "Yeah. Starting action mode.");
- mActionMode = getActivity().startActionMode(this);
- }
- updateActionMenu();
- } else {
- if (DEBUG) Log.d(TAG, "Finishing action mode.");
- if (mActionMode != null) {
- mActionMode.finish();
- }
- }
-
- if (mActionMode != null) {
- assert(!mSelected.isEmpty());
- final String title = Shared.getQuantityString(getActivity(),
- R.plurals.elements_selected, mSelected.size());
- mActionMode.setTitle(title);
- mRecView.announceForAccessibility(title);
- }
- }
-
- // Called when the user exits the action mode
- @Override
- public void onDestroyActionMode(ActionMode mode) {
- if (DEBUG) Log.d(TAG, "Handling action mode destroyed.");
- mActionMode = null;
- // clear selection
- mSelectionMgr.clearSelection();
- mSelected.clear();
-
- mDirectoryCount = 0;
- mPartialCount = 0;
- mNoDeleteCount = 0;
- mNoRenameCount = 0;
-
- // Re-enable TalkBack for the toolbars, as they are no longer covered by action mode.
- final Toolbar toolbar = (Toolbar) getActivity().findViewById(R.id.toolbar);
- toolbar.setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_AUTO);
-
- // This toolbar is not present in the fixed_layout
- final Toolbar rootsToolbar = (Toolbar) getActivity().findViewById(R.id.roots_toolbar);
- if (rootsToolbar != null) {
- rootsToolbar.setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_AUTO);
- }
- }
-
- @Override
- public boolean onCreateActionMode(ActionMode mode, Menu menu) {
- if (mRestoredSelection != null) {
- // This is a careful little song and dance to avoid haptic feedback
- // when selection has been restored after rotation. We're
- // also responsible for cleaning up restored selection so the
- // object dones't unnecessarily hang around.
- mRestoredSelection = null;
- } else {
- mRecView.performHapticFeedback(HapticFeedbackConstants.LONG_PRESS);
- }
-
- int size = mSelectionMgr.getSelection().size();
- mode.getMenuInflater().inflate(R.menu.mode_directory, menu);
- mode.setTitle(TextUtils.formatSelectedCount(size));
-
- if (size > 0) {
- // Hide the toolbars if action mode is enabled, so TalkBack doesn't navigate to
- // these controls when using linear navigation.
- final Toolbar toolbar = (Toolbar) getActivity().findViewById(R.id.toolbar);
- toolbar.setImportantForAccessibility(
- View.IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS);
-
- // This toolbar is not present in the fixed_layout
- final Toolbar rootsToolbar = (Toolbar) getActivity().findViewById(
- R.id.roots_toolbar);
- if (rootsToolbar != null) {
- rootsToolbar.setImportantForAccessibility(
- View.IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS);
- }
- return true;
- }
-
- return false;
- }
-
- @Override
- public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
- mMenu = menu;
- updateActionMenu();
- return true;
- }
-
- @Override
- public boolean containsDirectories() {
- return mDirectoryCount > 0;
- }
-
- @Override
- public boolean containsPartialFiles() {
- return mPartialCount > 0;
- }
-
- @Override
- public boolean canDelete() {
- return mNoDeleteCount == 0;
- }
-
- @Override
- public boolean canRename() {
- return mNoRenameCount == 0 && mSelectionMgr.getSelection().size() == 1;
- }
-
- private void updateActionMenu() {
- assert(mMenu != null);
- mMenuManager.updateActionMenu(mMenu, this);
- Menus.disableHiddenItems(mMenu);
- }
-
- @Override
- public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
- return handleMenuItemClick(item);
- }
- }
-
- private boolean handleMenuItemClick(MenuItem item) {
- Selection selection = mSelectionMgr.getSelection(new Selection());
-
- switch (item.getItemId()) {
- case R.id.menu_open:
- openDocuments(selection);
- mActionMode.finish();
- return true;
-
- case R.id.menu_share:
- shareDocuments(selection);
- // TODO: Only finish selection if share action is completed.
- mActionMode.finish();
- return true;
-
- case R.id.menu_delete:
- // deleteDocuments will end action mode if the documents are deleted.
- // It won't end action mode if user cancels the delete.
- deleteDocuments(selection);
- return true;
-
- case R.id.menu_copy_to:
- transferDocuments(selection, FileOperationService.OPERATION_COPY);
- // TODO: Only finish selection mode if copy-to is not canceled.
- // Need to plum down into handling the way we do with deleteDocuments.
- mActionMode.finish();
- return true;
-
- case R.id.menu_move_to:
- // Exit selection mode first, so we avoid deselecting deleted documents.
- mActionMode.finish();
- transferDocuments(selection, FileOperationService.OPERATION_MOVE);
- return true;
-
- case R.id.menu_cut_to_clipboard:
- cutSelectedToClipboard();
- return true;
-
- case R.id.menu_copy_to_clipboard:
- copySelectedToClipboard();
- return true;
-
- case R.id.menu_paste_from_clipboard:
- pasteFromClipboard();
- return true;
-
- case R.id.menu_select_all:
- selectAllFiles();
- return true;
-
- case R.id.menu_rename:
- // Exit selection mode first, so we avoid deselecting deleted
- // (renamed) documents.
- mActionMode.finish();
- renameDocuments(selection);
- return true;
-
- default:
- // See if BaseActivity can handle this particular MenuItem
- if (!getBaseActivity().onOptionsItemSelected(item)) {
- if (DEBUG) Log.d(TAG, "Unhandled menu item selected: " + item);
- return false;
- }
- return true;
- }
- }
-
- public final boolean onBackPressed() {
- if (mSelectionMgr.hasSelection()) {
- if (DEBUG) Log.d(TAG, "Clearing selection on selection manager.");
- mSelectionMgr.clearSelection();
- return true;
- }
- return false;
- }
-
- private void cancelThumbnailTask(View view) {
- final ImageView iconThumb = (ImageView) view.findViewById(R.id.icon_thumb);
- if (iconThumb != null) {
- mIconHelper.stopLoading(iconThumb);
- }
- }
-
- private void openDocuments(final Selection selected) {
- Metrics.logUserAction(getContext(), Metrics.USER_ACTION_OPEN);
-
- new GetDocumentsTask() {
- @Override
- void onDocumentsReady(List<DocumentInfo> docs) {
- // TODO: Implement support in Files activity for opening multiple docs.
- BaseActivity.get(DirectoryFragment.this).onDocumentsPicked(docs);
- }
- }.execute(selected);
- }
-
- private void shareDocuments(final Selection selected) {
- Metrics.logUserAction(getContext(), Metrics.USER_ACTION_SHARE);
-
- new GetDocumentsTask() {
- @Override
- void onDocumentsReady(List<DocumentInfo> docs) {
- Intent intent;
-
- // Filter out directories and virtual files - those can't be shared.
- List<DocumentInfo> docsForSend = new ArrayList<>();
- for (DocumentInfo doc: docs) {
- if (!doc.isDirectory() && !doc.isVirtualDocument()) {
- docsForSend.add(doc);
- }
- }
-
- if (docsForSend.size() == 1) {
- final DocumentInfo doc = docsForSend.get(0);
-
- intent = new Intent(Intent.ACTION_SEND);
- intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
- intent.addCategory(Intent.CATEGORY_DEFAULT);
- intent.setType(doc.mimeType);
- intent.putExtra(Intent.EXTRA_STREAM, doc.derivedUri);
-
- } else if (docsForSend.size() > 1) {
- intent = new Intent(Intent.ACTION_SEND_MULTIPLE);
- intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
- intent.addCategory(Intent.CATEGORY_DEFAULT);
-
- final ArrayList<String> mimeTypes = new ArrayList<>();
- final ArrayList<Uri> uris = new ArrayList<>();
- for (DocumentInfo doc : docsForSend) {
- mimeTypes.add(doc.mimeType);
- uris.add(doc.derivedUri);
- }
-
- intent.setType(findCommonMimeType(mimeTypes));
- intent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, uris);
-
- } else {
- return;
- }
-
- intent = Intent.createChooser(intent, getActivity().getText(R.string.share_via));
- startActivity(intent);
- }
- }.execute(selected);
- }
-
- private String generateDeleteMessage(final List<DocumentInfo> docs) {
- String message;
- int dirsCount = 0;
-
- for (DocumentInfo doc : docs) {
- if (doc.isDirectory()) {
- ++dirsCount;
- }
- }
-
- if (docs.size() == 1) {
- // Deleteing 1 file xor 1 folder in cwd
-
- // Address b/28772371, where including user strings in message can result in
- // broken bidirectional support.
- String displayName = BidiFormatter.getInstance().unicodeWrap(docs.get(0).displayName);
- message = dirsCount == 0
- ? getActivity().getString(R.string.delete_filename_confirmation_message,
- displayName)
- : getActivity().getString(R.string.delete_foldername_confirmation_message,
- displayName);
- } else if (dirsCount == 0) {
- // Deleting only files in cwd
- message = Shared.getQuantityString(getActivity(),
- R.plurals.delete_files_confirmation_message, docs.size());
- } else if (dirsCount == docs.size()) {
- // Deleting only folders in cwd
- message = Shared.getQuantityString(getActivity(),
- R.plurals.delete_folders_confirmation_message, docs.size());
- } else {
- // Deleting mixed items (files and folders) in cwd
- message = Shared.getQuantityString(getActivity(),
- R.plurals.delete_items_confirmation_message, docs.size());
- }
- return message;
- }
-
- private boolean onDeleteSelectedDocuments() {
- if (mSelectionMgr.hasSelection()) {
- deleteDocuments(mSelectionMgr.getSelection(new Selection()));
- }
- return false;
- }
-
- private boolean onActivate(DocumentDetails doc) {
- // Toggle selection if we're in selection mode, othewise, view item.
- if (mSelectionMgr.hasSelection()) {
- mSelectionMgr.toggleSelection(doc.getModelId());
- } else {
- handleViewItem(doc.getModelId());
- }
- return true;
- }
-
-// private boolean onSelect(DocumentDetails doc) {
-// mSelectionMgr.toggleSelection(doc.getModelId());
-// mSelectionMgr.setSelectionRangeBegin(doc.getAdapterPosition());
-// return true;
-// }
-
- private void deleteDocuments(final Selection selected) {
- Metrics.logUserAction(getContext(), Metrics.USER_ACTION_DELETE);
-
- assert(!selected.isEmpty());
-
- final DocumentInfo srcParent = getDisplayState().stack.peek();
- new GetDocumentsTask() {
- @Override
- void onDocumentsReady(final List<DocumentInfo> docs) {
-
- TextView message =
- (TextView) mInflater.inflate(R.layout.dialog_delete_confirmation, null);
- message.setText(generateDeleteMessage(docs));
-
- // For now, we implement this dialog NOT
- // as a fragment (which can survive rotation and have its own state),
- // but as a simple runtime dialog. So rotating a device with an
- // active delete dialog...results in that dialog disappearing.
- // We can do better, but don't have cycles for it now.
- new AlertDialog.Builder(getActivity())
- .setView(message)
- .setPositiveButton(
- android.R.string.ok,
- new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int id) {
- // Finish selection mode first which clears selection so we
- // don't end up trying to deselect deleted documents.
- // This is done here, rather in the onActionItemClicked
- // so we can avoid de-selecting items in the case where
- // the user cancels the delete.
- if (mActionMode != null) {
- mActionMode.finish();
- } else {
- Log.w(TAG, "Action mode is null before deleting documents.");
- }
-
- UrisSupplier srcs;
- try {
- srcs = UrisSupplier.create(
- selected,
- mModel::getItemUri,
- getContext());
- } catch(IOException e) {
- throw new RuntimeException("Failed to create uri supplier.", e);
- }
-
- FileOperation operation = new FileOperation.Builder()
- .withOpType(FileOperationService.OPERATION_DELETE)
- .withDestination(getDisplayState().stack)
- .withSrcs(srcs)
- .withSrcParent(srcParent.derivedUri)
- .build();
-
- BaseActivity activity = getBaseActivity();
- FileOperations.start(activity, operation, activity.fileOpCallback);
- }
- })
- .setNegativeButton(android.R.string.cancel, null)
- .show();
- }
- }.execute(selected);
- }
-
- private void transferDocuments(final Selection selected, final @OpType int mode) {
- if(mode == FileOperationService.OPERATION_COPY) {
- Metrics.logUserAction(getContext(), Metrics.USER_ACTION_COPY_TO);
- } else if (mode == FileOperationService.OPERATION_MOVE) {
- Metrics.logUserAction(getContext(), Metrics.USER_ACTION_MOVE_TO);
- }
-
- // Pop up a dialog to pick a destination. This is inadequate but works for now.
- // TODO: Implement a picker that is to spec.
- final Intent intent = new Intent(
- Shared.ACTION_PICK_COPY_DESTINATION,
- Uri.EMPTY,
- getActivity(),
- DocumentsActivity.class);
-
- UrisSupplier srcs;
- try {
- srcs = UrisSupplier.create(selected, mModel::getItemUri, getContext());
- } catch(IOException e) {
- throw new RuntimeException("Failed to create uri supplier.", e);
- }
-
- Uri srcParent = getDisplayState().stack.peek().derivedUri;
- mPendingOperation = new FileOperation.Builder()
- .withOpType(mode)
- .withSrcParent(srcParent)
- .withSrcs(srcs)
- .build();
-
- // Relay any config overrides bits present in the original intent.
- Intent original = getActivity().getIntent();
- if (original != null && original.hasExtra(Shared.EXTRA_PRODUCTIVITY_MODE)) {
- intent.putExtra(
- Shared.EXTRA_PRODUCTIVITY_MODE,
- original.getBooleanExtra(Shared.EXTRA_PRODUCTIVITY_MODE, false));
- }
-
- // Set an appropriate title on the drawer when it is shown in the picker.
- // Coupled with the fact that we auto-open the drawer for copy/move operations
- // it should basically be the thing people see first.
- int drawerTitleId = mode == FileOperationService.OPERATION_MOVE
- ? R.string.menu_move : R.string.menu_copy;
- intent.putExtra(DocumentsContract.EXTRA_PROMPT, getResources().getString(drawerTitleId));
-
- new GetDocumentsTask() {
- @Override
- void onDocumentsReady(List<DocumentInfo> docs) {
- // Determine if there is a directory in the set of documents
- // to be copied? Why? Directory creation isn't supported by some roots
- // (like Downloads). This informs DocumentsActivity (the "picker")
- // to restrict available roots to just those with support.
- intent.putExtra(Shared.EXTRA_DIRECTORY_COPY, hasDirectory(docs));
- intent.putExtra(FileOperationService.EXTRA_OPERATION_TYPE, mode);
-
- // This just identifies the type of request...we'll check it
- // when we reveive a response.
- startActivityForResult(intent, REQUEST_COPY_DESTINATION);
- }
-
- }.execute(selected);
- }
-
- private static boolean hasDirectory(List<DocumentInfo> docs) {
- for (DocumentInfo info : docs) {
- if (Document.MIME_TYPE_DIR.equals(info.mimeType)) {
- return true;
- }
- }
- return false;
- }
-
- private void renameDocuments(Selection selected) {
- Metrics.logUserAction(getContext(), Metrics.USER_ACTION_RENAME);
-
- // Batch renaming not supported
- // Rename option is only available in menu when 1 document selected
- assert(selected.size() == 1);
-
- new GetDocumentsTask() {
- @Override
- void onDocumentsReady(List<DocumentInfo> docs) {
- RenameDocumentFragment.show(getFragmentManager(), docs.get(0));
- }
- }.execute(selected);
- }
-
- @Override
- public void initDocumentHolder(DocumentHolder holder) {
- holder.addKeyEventListener(mInputHandler);
- holder.itemView.setOnFocusChangeListener(mFocusManager);
- }
-
- @Override
- public void onBindDocumentHolder(DocumentHolder holder, Cursor cursor) {
- setupDragAndDropOnDocumentView(holder.itemView, cursor);
- }
-
- @Override
- public State getDisplayState() {
- return getBaseActivity().getDisplayState();
- }
-
- @Override
- public Model getModel() {
- return mModel;
- }
-
- @Override
- public boolean isDocumentEnabled(String docMimeType, int docFlags) {
- return mTuner.isDocumentEnabled(docMimeType, docFlags);
- }
-
- private void showEmptyDirectory() {
- showEmptyView(R.string.empty, R.drawable.cabinet);
- }
-
- private void showNoResults(RootInfo root) {
- CharSequence msg = getContext().getResources().getText(R.string.no_results);
- showEmptyView(String.format(String.valueOf(msg), root.title), R.drawable.cabinet);
- }
-
- private void showQueryError() {
- showEmptyView(R.string.query_error, R.drawable.hourglass);
- }
-
- private void showEmptyView(@StringRes int id, int drawable) {
- showEmptyView(getContext().getResources().getText(id), drawable);
- }
-
- private void showEmptyView(CharSequence msg, int drawable) {
- View content = mEmptyView.findViewById(R.id.content);
- TextView msgView = (TextView) mEmptyView.findViewById(R.id.message);
- ImageView imageView = (ImageView) mEmptyView.findViewById(R.id.artwork);
- msgView.setText(msg);
- imageView.setImageResource(drawable);
-
- mEmptyView.setVisibility(View.VISIBLE);
- mEmptyView.requestFocus();
- mRecView.setVisibility(View.GONE);
- }
-
- private void showDirectory() {
- mEmptyView.setVisibility(View.GONE);
- mRecView.setVisibility(View.VISIBLE);
- mRecView.requestFocus();
- }
-
- private String findCommonMimeType(List<String> mimeTypes) {
- String[] commonType = mimeTypes.get(0).split("/");
- if (commonType.length != 2) {
- return "*/*";
- }
-
- for (int i = 1; i < mimeTypes.size(); i++) {
- String[] type = mimeTypes.get(i).split("/");
- if (type.length != 2) continue;
-
- if (!commonType[1].equals(type[1])) {
- commonType[1] = "*";
- }
-
- if (!commonType[0].equals(type[0])) {
- commonType[0] = "*";
- commonType[1] = "*";
- break;
- }
- }
-
- return commonType[0] + "/" + commonType[1];
- }
-
- public void copySelectedToClipboard() {
- Metrics.logUserAction(getContext(), Metrics.USER_ACTION_COPY_CLIPBOARD);
-
- Selection selection = mSelectionMgr.getSelection(new Selection());
- if (selection.isEmpty()) {
- return;
- }
- mSelectionMgr.clearSelection();
-
- mClipper.clipDocumentsForCopy(mModel::getItemUri, selection);
-
- Snackbars.showDocumentsClipped(getActivity(), selection.size());
- }
-
- public void cutSelectedToClipboard() {
- Metrics.logUserAction(getContext(), Metrics.USER_ACTION_CUT_CLIPBOARD);
-
- Selection selection = mSelectionMgr.getSelection(new Selection());
- if (selection.isEmpty()) {
- return;
- }
- mSelectionMgr.clearSelection();
-
- mClipper.clipDocumentsForCut(mModel::getItemUri, selection, getDisplayState().stack.peek());
-
- Snackbars.showDocumentsClipped(getActivity(), selection.size());
- }
-
- public void pasteFromClipboard() {
- Metrics.logUserAction(getContext(), Metrics.USER_ACTION_PASTE_CLIPBOARD);
-
- BaseActivity activity = (BaseActivity) getActivity();
- DocumentInfo destination = activity.getCurrentDirectory();
- mClipper.copyFromClipboard(
- destination, activity.getDisplayState().stack, activity.fileOpCallback);
- getActivity().invalidateOptionsMenu();
- }
-
- public void selectAllFiles() {
- Metrics.logUserAction(getContext(), Metrics.USER_ACTION_SELECT_ALL);
-
- // Exclude disabled files
- List<String> enabled = new ArrayList<String>();
- for (String id : mAdapter.getModelIds()) {
- Cursor cursor = getModel().getItem(id);
- if (cursor == null) {
- Log.w(TAG, "Skipping selection. Can't obtain cursor for modeId: " + id);
- continue;
- }
- String docMimeType = getCursorString(cursor, Document.COLUMN_MIME_TYPE);
- int docFlags = getCursorInt(cursor, Document.COLUMN_FLAGS);
- if (isDocumentEnabled(docMimeType, docFlags)) {
- enabled.add(id);
- }
- }
-
- // Only select things currently visible in the adapter.
- boolean changed = mSelectionMgr.setItemsSelected(enabled, true);
- if (changed) {
- updateDisplayState();
- }
- }
-
- /**
- * Attempts to restore focus on the directory listing.
- */
- public void requestFocus() {
- mFocusManager.restoreLastFocus();
- }
-
- private void setupDragAndDropOnDocumentView(View view, Cursor cursor) {
- final String docMimeType = getCursorString(cursor, Document.COLUMN_MIME_TYPE);
- if (Document.MIME_TYPE_DIR.equals(docMimeType)) {
- // Make a directory item a drop target. Drop on non-directories and empty space
- // is handled at the list/grid view level.
- view.setOnDragListener(mOnDragListener);
- }
-
- if (mTuner.dragAndDropEnabled()) {
- // Make all items draggable.
- view.setOnLongClickListener(onLongClickListener);
- }
- }
-
- void dragStarted() {
- // When files are selected for dragging, ActionMode is started. This obscures the breadcrumb
- // with an ActionBar. In order to make drag and drop to the breadcrumb possible, we first
- // end ActionMode so the breadcrumb is visible to the user.
- if (mActionMode != null) {
- mActionMode.finish();
- }
- }
-
- void dragStopped(boolean result) {
- if (result) {
- mSelectionMgr.clearSelection();
- }
- }
-
- @Override
- public void runOnUiThread(Runnable runnable) {
- getActivity().runOnUiThread(runnable);
- }
-
- /**
- * {@inheritDoc}
- *
- * In DirectoryFragment, we spring loads the hovered folder.
- */
- @Override
- public void onViewHovered(View view) {
- BaseActivity activity = (BaseActivity) getActivity();
- if (getModelId(view) != null) {
- activity.springOpenDirectory(getDestination(view));
- }
-
- activity.setRootsDrawerOpen(false);
- }
-
- boolean handleDropEvent(View v, DragEvent event) {
- BaseActivity activity = (BaseActivity) getActivity();
- activity.setRootsDrawerOpen(false);
-
- ClipData clipData = event.getClipData();
- assert (clipData != null);
-
- assert(DocumentClipper.getOpType(clipData) == FileOperationService.OPERATION_COPY);
-
- // Don't copy from the cwd into the cwd. Note: this currently doesn't work for
- // multi-window drag, because localState isn't carried over from one process to
- // another.
- Object src = event.getLocalState();
- DocumentInfo dst = getDestination(v);
- if (Objects.equals(src, dst)) {
- if (DEBUG) Log.d(TAG, "Drop target same as source. Ignoring.");
- return false;
- }
-
- // Recognize multi-window drag and drop based on the fact that localState is not
- // carried between processes. It will stop working when the localsState behavior
- // is changed. The info about window should be passed in the localState then.
- // The localState could also be null for copying from Recents in single window
- // mode, but Recents doesn't offer this functionality (no directories).
- Metrics.logUserAction(getContext(),
- src == null ? Metrics.USER_ACTION_DRAG_N_DROP_MULTI_WINDOW
- : Metrics.USER_ACTION_DRAG_N_DROP);
-
- mClipper.copyFromClipData(dst, getDisplayState().stack, clipData, activity.fileOpCallback);
- return true;
- }
-
- private DocumentInfo getDestination(View v) {
- String id = getModelId(v);
- if (id != null) {
- Cursor dstCursor = mModel.getItem(id);
- if (dstCursor == null) {
- Log.w(TAG, "Invalid destination. Can't obtain cursor for modelId: " + id);
- return null;
- }
- return DocumentInfo.fromDirectoryCursor(dstCursor);
- }
-
- if (v == mRecView || v == mEmptyView) {
- return getDisplayState().stack.peek();
- }
-
- return null;
- }
-
- @Override
- public void setDropTargetHighlight(View v, boolean highlight) {
- // Note: use exact comparison - this code is searching for views which are children of
- // the RecyclerView instance in the UI.
- if (v.getParent() == mRecView) {
- RecyclerView.ViewHolder vh = mRecView.getChildViewHolder(v);
- if (vh instanceof DocumentHolder) {
- ((DocumentHolder) vh).setHighlighted(highlight);
- }
- }
- }
-
- private @Nullable DocumentHolder getTarget(InputEvent e) {
- View childView = mRecView.findChildViewUnder(e.getX(), e.getY());
- if (childView != null) {
- return (DocumentHolder) mRecView.getChildViewHolder(childView);
- } else {
- return null;
- }
- }
-
- /**
- * Gets the model ID for a given RecyclerView item.
- * @param view A View that is a document item view, or a child of a document item view.
- * @return The Model ID for the given document, or null if the given view is not associated with
- * a document item view.
- */
- protected @Nullable String getModelId(View view) {
- View itemView = mRecView.findContainingItemView(view);
- if (itemView != null) {
- RecyclerView.ViewHolder vh = mRecView.getChildViewHolder(itemView);
- if (vh instanceof DocumentHolder) {
- return ((DocumentHolder) vh).modelId;
- }
- }
- return null;
- }
-
- /**
- * Abstract task providing support for loading documents *off*
- * the main thread. And if it isn't obvious, creating a list
- * of documents (especially large lists) can be pretty expensive.
- */
- private abstract class GetDocumentsTask
- extends AsyncTask<Selection, Void, List<DocumentInfo>> {
- @Override
- protected final List<DocumentInfo> doInBackground(Selection... selected) {
- return mModel.getDocuments(selected[0]);
- }
-
- @Override
- protected final void onPostExecute(List<DocumentInfo> docs) {
- onDocumentsReady(docs);
- }
-
- abstract void onDocumentsReady(List<DocumentInfo> docs);
- }
-
- @Override
- public boolean isSelected(String modelId) {
- return mSelectionMgr.getSelection().contains(modelId);
- }
-
- private final class ModelUpdateListener implements Model.UpdateListener {
- @Override
- public void onModelUpdate(Model model) {
- if (model.info != null || model.error != null) {
- mMessageBar.setInfo(model.info);
- mMessageBar.setError(model.error);
- mMessageBar.show();
- }
-
- mProgressBar.setVisibility(model.isLoading() ? View.VISIBLE : View.GONE);
-
- if (model.isEmpty()) {
- if (mSearchMode) {
- showNoResults(getDisplayState().stack.root);
- } else {
- showEmptyDirectory();
- }
- } else {
- showDirectory();
- mAdapter.notifyDataSetChanged();
- }
-
- if (!model.isLoading()) {
- getBaseActivity().notifyDirectoryLoaded(
- model.doc != null ? model.doc.derivedUri : null);
- }
- }
-
- @Override
- public void onModelUpdateFailed(Exception e) {
- showQueryError();
- }
- }
-
- private Drawable getDragIcon(Selection selection) {
- if (selection.size() == 1) {
- DocumentInfo doc = getSingleSelectedDocument(selection);
- return mIconHelper.getDocumentIcon(getContext(), doc);
- }
- return getContext().getDrawable(com.android.internal.R.drawable.ic_doc_generic);
- }
-
- private String getDragTitle(Selection selection) {
- assert (!selection.isEmpty());
- if (selection.size() == 1) {
- DocumentInfo doc = getSingleSelectedDocument(selection);
- return doc.displayName;
- }
-
- return Shared.getQuantityString(getContext(), R.plurals.elements_dragged, selection.size());
- }
-
- private DocumentInfo getSingleSelectedDocument(Selection selection) {
- assert (selection.size() == 1);
- final List<DocumentInfo> docs = mModel.getDocuments(mSelectionMgr.getSelection());
- assert (docs.size() == 1);
- return docs.get(0);
- }
-
- private DragStartHelper.OnDragStartListener mOnDragStartListener =
- new DragStartHelper.OnDragStartListener() {
- @Override
- public boolean onDragStart(View v, DragStartHelper helper) {
- Selection selection = mSelectionMgr.getSelection();
-
- if (v == null) {
- Log.d(TAG, "Ignoring drag event, null view");
- return false;
- }
- if (!isSelected(getModelId(v))) {
- Log.d(TAG, "Ignoring drag event, unselected view.");
- return false;
- }
-
- // NOTE: Preparation of the ClipData object can require a lot of time
- // and ideally should be done in the background. Unfortunately
- // the current code layout and framework assumptions don't support
- // this. So for now, we could end up doing a bunch of i/o on main thread.
- v.startDragAndDrop(
- mClipper.getClipDataForDocuments(
- mModel::getItemUri,
- selection,
- FileOperationService.OPERATION_COPY),
- new DragShadowBuilder(
- getActivity(),
- getDragTitle(selection),
- getDragIcon(selection)),
- getDisplayState().stack.peek(),
- View.DRAG_FLAG_GLOBAL
- | View.DRAG_FLAG_GLOBAL_URI_READ
- | View.DRAG_FLAG_GLOBAL_URI_WRITE);
-
- return true;
- }
- };
-
-
- private DragStartHelper mDragHelper = new DragStartHelper(null, mOnDragStartListener);
-
- private View.OnLongClickListener onLongClickListener = new View.OnLongClickListener() {
- @Override
- public boolean onLongClick(View v) {
- return mDragHelper.onLongClick(v);
- }
- };
-
- private boolean canSelect(DocumentDetails doc) {
- return canSelect(doc.getModelId());
- }
-
- private boolean canSelect(String modelId) {
-
- // TODO: Combine this method with onBeforeItemStateChange, as both of them are almost
- // the same, and responsible for the same thing (whether to select or not).
- final Cursor cursor = mModel.getItem(modelId);
- if (cursor == null) {
- Log.w(TAG, "Couldn't obtain cursor for modelId: " + modelId);
- return false;
- }
-
- final String docMimeType = getCursorString(cursor, Document.COLUMN_MIME_TYPE);
- final int docFlags = getCursorInt(cursor, Document.COLUMN_FLAGS);
- return mTuner.canSelectType(docMimeType, docFlags);
- }
-
- public static void showDirectory(
- FragmentManager fm, RootInfo root, DocumentInfo doc, int anim) {
- create(fm, TYPE_NORMAL, root, doc, null, anim);
- }
-
- public static void showRecentsOpen(FragmentManager fm, int anim) {
- create(fm, TYPE_RECENT_OPEN, null, null, null, anim);
- }
-
- public static void reloadSearch(FragmentManager fm, RootInfo root, DocumentInfo doc,
- String query) {
- DirectoryFragment df = get(fm);
-
- df.mQuery = query;
- df.mRoot = root;
- df.mDocument = doc;
- df.mSearchMode = query != null;
- df.getLoaderManager().restartLoader(LOADER_ID, null, df);
- }
-
- public static void reload(FragmentManager fm, int type, RootInfo root, DocumentInfo doc,
- String query) {
- DirectoryFragment df = get(fm);
- df.mType = type;
- df.mQuery = query;
- df.mRoot = root;
- df.mDocument = doc;
- df.mSearchMode = query != null;
- df.getLoaderManager().restartLoader(LOADER_ID, null, df);
- }
-
- public static void create(FragmentManager fm, int type, RootInfo root, DocumentInfo doc,
- String query, int anim) {
- final Bundle args = new Bundle();
- args.putInt(Shared.EXTRA_TYPE, type);
- args.putParcelable(Shared.EXTRA_ROOT, root);
- args.putParcelable(Shared.EXTRA_DOC, doc);
- args.putString(Shared.EXTRA_QUERY, query);
- args.putParcelable(Shared.EXTRA_SELECTION, new Selection());
-
- final FragmentTransaction ft = fm.beginTransaction();
- AnimationView.setupAnimations(ft, anim, args);
-
- final DirectoryFragment fragment = new DirectoryFragment();
- fragment.setArguments(args);
-
- ft.replace(getFragmentId(), fragment);
- ft.commitAllowingStateLoss();
- }
-
- private static String buildStateKey(RootInfo root, DocumentInfo doc) {
- final StringBuilder builder = new StringBuilder();
- builder.append(root != null ? root.authority : "null").append(';');
- builder.append(root != null ? root.rootId : "null").append(';');
- builder.append(doc != null ? doc.documentId : "null");
- return builder.toString();
- }
-
- public static @Nullable DirectoryFragment get(FragmentManager fm) {
- // TODO: deal with multiple directories shown at once
- Fragment fragment = fm.findFragmentById(getFragmentId());
- return fragment instanceof DirectoryFragment
- ? (DirectoryFragment) fragment
- : null;
- }
-
- private static int getFragmentId() {
- return R.id.container_directory;
- }
-
- @Override
- public void onRefresh() {
- // Remove thumbnail cache. We do this not because we're worried about stale thumbnails as it
- // should be covered by last modified value we store in thumbnail cache, but rather to give
- // the user a greater sense that contents are being reloaded.
- ThumbnailCache cache = DocumentsApplication.getThumbnailCache(getContext());
- String[] ids = mModel.getModelIds();
- int numOfEvicts = Math.min(ids.length, CACHE_EVICT_LIMIT);
- for (int i = 0; i < numOfEvicts; ++i) {
- cache.removeUri(mModel.getItemUri(ids[i]));
- }
-
- // Trigger loading
- getLoaderManager().restartLoader(LOADER_ID, null, this);
- }
-
- @Override
- public Loader<DirectoryResult> onCreateLoader(int id, Bundle args) {
- Context context = getActivity();
- State state = getDisplayState();
-
- Uri contentsUri;
- switch (mType) {
- case TYPE_NORMAL:
- contentsUri = mSearchMode ? DocumentsContract.buildSearchDocumentsUri(
- mRoot.authority, mRoot.rootId, mQuery)
- : DocumentsContract.buildChildDocumentsUri(
- mDocument.authority, mDocument.documentId);
- if (mTuner.managedModeEnabled()) {
- contentsUri = DocumentsContract.setManageMode(contentsUri);
- }
- return new DirectoryLoader(
- context, mType, mRoot, mDocument, contentsUri, state.userSortOrder,
- mSearchMode);
- case TYPE_RECENT_OPEN:
- final RootsCache roots = DocumentsApplication.getRootsCache(context);
- return new RecentsLoader(context, roots, state);
-
- default:
- throw new IllegalStateException("Unknown type " + mType);
- }
- }
-
- @Override
- public void onLoadFinished(Loader<DirectoryResult> loader, DirectoryResult result) {
- if (!isAdded()) return;
-
- if (mSearchMode) {
- Metrics.logUserAction(getContext(), Metrics.USER_ACTION_SEARCH);
- }
-
- State state = getDisplayState();
-
- mAdapter.notifyDataSetChanged();
- mModel.update(result);
-
- state.derivedSortOrder = result.sortOrder;
-
- updateLayout(state.derivedMode);
-
- if (mRestoredSelection != null) {
- mSelectionMgr.restoreSelection(mRestoredSelection);
- // Note, we'll take care of cleaning up retained selection
- // in the selection handler where we already have some
- // specialized code to handle when selection was restored.
- }
-
- // Restore any previous instance state
- final SparseArray<Parcelable> container = state.dirState.remove(mStateKey);
- if (container != null && !getArguments().getBoolean(Shared.EXTRA_IGNORE_STATE, false)) {
- getView().restoreHierarchyState(container);
- } else if (mLastSortOrder != state.derivedSortOrder) {
- // The derived sort order takes the user sort order into account, but applies
- // directory-specific defaults when the user doesn't explicitly set the sort
- // order. Scroll to the top if the sort order actually changed.
- mRecView.smoothScrollToPosition(0);
- }
-
- mLastSortOrder = state.derivedSortOrder;
-
- mTuner.onModelLoaded(mModel, mType, mSearchMode);
-
- if (mRefreshLayout.isRefreshing()) {
- new Handler().postDelayed(
- () -> mRefreshLayout.setRefreshing(false),
- REFRESH_SPINNER_DISMISS_DELAY);
- }
- }
-
- @Override
- public void onLoaderReset(Loader<DirectoryResult> loader) {
- mModel.update(null);
-
- mRefreshLayout.setRefreshing(false);
- }
- }
diff --git a/packages/DocumentsUI/src/com/android/documentsui/dirlist/DirectoryItemAnimator.java b/packages/DocumentsUI/src/com/android/documentsui/dirlist/DirectoryItemAnimator.java
deleted file mode 100644
index 1135c21..0000000
--- a/packages/DocumentsUI/src/com/android/documentsui/dirlist/DirectoryItemAnimator.java
+++ /dev/null
@@ -1,193 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.documentsui.dirlist;
-
-import android.animation.Animator;
-import android.animation.ArgbEvaluator;
-import android.animation.ValueAnimator;
-import android.content.Context;
-import android.support.v4.util.ArrayMap;
-import android.support.v7.widget.DefaultItemAnimator;
-import android.support.v7.widget.RecyclerView;
-import android.util.TypedValue;
-
-import com.android.documentsui.R;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-
-/**
- * Performs change animations on Items in DirectoryFragment's RecyclerView. This class overrides
- * the way selection animations are normally performed - instead of cross fading the old Item with a
- * new Item, this class manually animates a background color change. This enables selected Items to
- * correctly maintain focus.
- */
-class DirectoryItemAnimator extends DefaultItemAnimator {
- private final List<ColorAnimation> mPendingAnimations = new ArrayList<>();
- private final Map<RecyclerView.ViewHolder, ColorAnimation> mRunningAnimations =
- new ArrayMap<>();
- private final Integer mDefaultColor;
- private final Integer mSelectedColor;
-
- public DirectoryItemAnimator(Context context) {
- mDefaultColor = context.getResources().getColor(R.color.item_doc_background);
- mSelectedColor = context.getResources().getColor(R.color.item_doc_background_selected);
- }
-
- @Override
- public void runPendingAnimations() {
- super.runPendingAnimations();
- for (ColorAnimation anim: mPendingAnimations) {
- anim.start();
- mRunningAnimations.put(anim.viewHolder, anim);
- }
- mPendingAnimations.clear();
- }
-
- @Override
- public void endAnimation(RecyclerView.ViewHolder vh) {
- super.endAnimation(vh);
-
- for (int i = mPendingAnimations.size() - 1; i >= 0; --i) {
- ColorAnimation anim = mPendingAnimations.get(i);
- if (anim.viewHolder == vh) {
- mPendingAnimations.remove(i);
- anim.end();
- }
- }
-
- ColorAnimation anim = mRunningAnimations.get(vh);
- if (anim != null) {
- anim.cancel();
- }
- }
-
- @Override
- public ItemHolderInfo recordPreLayoutInformation(
- RecyclerView.State state,
- RecyclerView.ViewHolder viewHolder,
- @AdapterChanges int changeFlags,
- List<Object> payloads) {
- ItemInfo info = (ItemInfo) super.recordPreLayoutInformation(state,
- viewHolder, changeFlags, payloads);
- info.isActivated = viewHolder.itemView.isActivated();
- return info;
- }
-
-
- @Override
- public ItemHolderInfo recordPostLayoutInformation(
- RecyclerView.State state, RecyclerView.ViewHolder viewHolder) {
- ItemInfo info = (ItemInfo) super.recordPostLayoutInformation(state,
- viewHolder);
- info.isActivated = viewHolder.itemView.isActivated();
- return info;
- }
-
- @Override
- public boolean animateChange(final RecyclerView.ViewHolder oldHolder,
- RecyclerView.ViewHolder newHolder, ItemHolderInfo preInfo,
- ItemHolderInfo postInfo) {
- if (oldHolder != newHolder) {
- return super.animateChange(oldHolder, newHolder, preInfo, postInfo);
- }
-
- ItemInfo pre = (ItemInfo)preInfo;
- ItemInfo post = (ItemInfo)postInfo;
-
- if (pre.isActivated == post.isActivated) {
- dispatchAnimationFinished(oldHolder);
- return false;
- } else {
- Integer startColor = pre.isActivated ? mSelectedColor : mDefaultColor;
- Integer endColor = post.isActivated ? mSelectedColor : mDefaultColor;
- oldHolder.itemView.setBackgroundColor(startColor);
- mPendingAnimations.add(new ColorAnimation(oldHolder, startColor, endColor));
- }
- return true;
- }
-
- @Override
- public ItemHolderInfo obtainHolderInfo() {
- return new ItemInfo();
- }
-
- @Override
- public boolean canReuseUpdatedViewHolder(RecyclerView.ViewHolder vh) {
- return true;
- }
-
- class ItemInfo extends DefaultItemAnimator.ItemHolderInfo {
- boolean isActivated;
- };
-
- /**
- * Animates changes in background color.
- */
- class ColorAnimation
- implements ValueAnimator.AnimatorUpdateListener, Animator.AnimatorListener {
- ValueAnimator mValueAnimator;
- final RecyclerView.ViewHolder viewHolder;
- int mEndColor;
-
- public ColorAnimation(RecyclerView.ViewHolder vh, int startColor, int endColor)
- {
- viewHolder = vh;
- mValueAnimator = ValueAnimator.ofObject(new ArgbEvaluator(), startColor, endColor);
- mValueAnimator.addUpdateListener(this);
- mValueAnimator.addListener(this);
-
- mEndColor = endColor;
- }
-
- public void start() {
- mValueAnimator.start();
- }
-
- public void cancel() {
- mValueAnimator.cancel();
- }
-
- public void end() {
- mValueAnimator.end();
- }
-
- @Override
- public void onAnimationUpdate(ValueAnimator animator) {
- viewHolder.itemView.setBackgroundColor((Integer)animator.getAnimatedValue());
- }
-
- @Override
- public void onAnimationEnd(Animator animator) {
- viewHolder.itemView.setBackgroundColor(mEndColor);
- mRunningAnimations.remove(viewHolder);
- dispatchAnimationFinished(viewHolder);
- }
-
- @Override
- public void onAnimationStart(Animator animation) {
- dispatchAnimationStarted(viewHolder);
- }
-
- @Override
- public void onAnimationCancel(Animator animation) {}
-
- @Override
- public void onAnimationRepeat(Animator animation) {}
- };
-};
diff --git a/packages/DocumentsUI/src/com/android/documentsui/dirlist/DocumentHolder.java b/packages/DocumentsUI/src/com/android/documentsui/dirlist/DocumentHolder.java
deleted file mode 100644
index c2b0bf2..0000000
--- a/packages/DocumentsUI/src/com/android/documentsui/dirlist/DocumentHolder.java
+++ /dev/null
@@ -1,181 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.documentsui.dirlist;
-
-import android.annotation.ColorInt;
-import android.content.Context;
-import android.database.Cursor;
-import android.graphics.Rect;
-import android.support.annotation.Nullable;
-import android.support.v7.widget.RecyclerView;
-import android.view.KeyEvent;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-
-import com.android.documentsui.Events.InputEvent;
-import com.android.documentsui.R;
-import com.android.documentsui.State;
-import com.android.documentsui.dirlist.UserInputHandler.DocumentDetails;
-
-public abstract class DocumentHolder
- extends RecyclerView.ViewHolder
- implements View.OnKeyListener,
- DocumentDetails {
-
- static final float DISABLED_ALPHA = 0.3f;
-
- @Deprecated // Public access is deprecated, use #getModelId.
- public @Nullable String modelId;
-
- final Context mContext;
- final @ColorInt int mDefaultBgColor;
- final @ColorInt int mSelectedBgColor;
-
- // See #addKeyEventListener for details on the need for this field.
- KeyboardEventListener mKeyEventListener;
-
- private View mSelectionHotspot;
-
-
- public DocumentHolder(Context context, ViewGroup parent, int layout) {
- this(context, inflateLayout(context, parent, layout));
- }
-
- public DocumentHolder(Context context, View item) {
- super(item);
-
- itemView.setOnKeyListener(this);
-
- mContext = context;
-
- mDefaultBgColor = context.getColor(R.color.item_doc_background);
- mSelectedBgColor = context.getColor(R.color.item_doc_background_selected);
-
- mSelectionHotspot = itemView.findViewById(R.id.icon_check);
- }
-
- /**
- * Binds the view to the given item data.
- * @param cursor
- * @param modelId
- * @param state
- */
- public abstract void bind(Cursor cursor, String modelId, State state);
-
- @Override
- public String getModelId() {
- return modelId;
- }
-
- /**
- * Makes the associated item view appear selected. Note that this merely affects the appearance
- * of the view, it doesn't actually select the item.
- * TODO: Use the DirectoryItemAnimator instead of manually controlling animation using a boolean
- * flag.
- *
- * @param selected
- * @param animate Whether or not to animate the change. Only selection changes initiated by the
- * selection manager should be animated. See
- * {@link ModelBackedDocumentsAdapter#onBindViewHolder(DocumentHolder, int, java.util.List)}
- */
- public void setSelected(boolean selected, boolean animate) {
- // Note: the animate param doesn't apply for this base implementation, because the
- // DirectoryItemAnimator takes care of it. It's required by subclasses, which perform their
- // own animation.
- itemView.setActivated(selected);
- itemView.setBackgroundColor(selected ? mSelectedBgColor : mDefaultBgColor);
- }
-
- /**
- * Highlights the associated item view.
- * @param highlighted
- */
- public void setHighlighted(boolean highlighted) {
- itemView.setBackgroundColor(highlighted ? mSelectedBgColor : mDefaultBgColor);
- }
-
- public void setEnabled(boolean enabled) {
- setEnabledRecursive(itemView, enabled);
- }
-
- @Override
- public boolean onKey(View v, int keyCode, KeyEvent event) {
- assert(mKeyEventListener != null);
- return mKeyEventListener.onKey(this, keyCode, event);
- }
-
- /**
- * Installs a delegate to receive keyboard input events. This arrangement is necessitated
- * by the fact that a single listener cannot listen to all keyboard events
- * on RecyclerView (our parent view). Not sure why this is, but have been
- * assured it is the case.
- *
- * <p>Ideally we'd not involve DocumentHolder in propagation of events like this.
- */
- public void addKeyEventListener(KeyboardEventListener listener) {
- assert(mKeyEventListener == null);
- mKeyEventListener = listener;
- }
-
- @Override
- public boolean isInSelectionHotspot(InputEvent event) {
- // Do everything in global coordinates - it makes things simpler.
- int[] coords = new int[2];
- mSelectionHotspot.getLocationOnScreen(coords);
- Rect rect = new Rect(coords[0], coords[1], coords[0] + mSelectionHotspot.getWidth(),
- coords[1] + mSelectionHotspot.getHeight());
-
- // If the tap occurred within the icon rect, consider it a selection.
- return rect.contains((int) event.getRawX(), (int) event.getRawY());
- }
-
- static void setEnabledRecursive(View itemView, boolean enabled) {
- if (itemView == null) return;
- if (itemView.isEnabled() == enabled) return;
- itemView.setEnabled(enabled);
-
- if (itemView instanceof ViewGroup) {
- final ViewGroup vg = (ViewGroup) itemView;
- for (int i = vg.getChildCount() - 1; i >= 0; i--) {
- setEnabledRecursive(vg.getChildAt(i), enabled);
- }
- }
- }
-
- private static View inflateLayout(Context context, ViewGroup parent, int layout) {
- final LayoutInflater inflater = LayoutInflater.from(context);
- return inflater.inflate(layout, parent, false);
- }
-
- /**
- * Implement this in order to be able to respond to events coming from DocumentHolders.
- * TODO: Make this bubble up logic events rather than having imperative commands.
- */
- interface KeyboardEventListener {
-
- /**
- * Handles key events on the document holder.
- *
- * @param doc The target DocumentHolder.
- * @param keyCode Key code for the event.
- * @param event KeyEvent for the event.
- * @return Whether the event was handled.
- */
- public boolean onKey(DocumentHolder doc, int keyCode, KeyEvent event);
- }
-}
diff --git a/packages/DocumentsUI/src/com/android/documentsui/dirlist/DocumentsAdapter.java b/packages/DocumentsUI/src/com/android/documentsui/dirlist/DocumentsAdapter.java
deleted file mode 100644
index 4b35447..0000000
--- a/packages/DocumentsUI/src/com/android/documentsui/dirlist/DocumentsAdapter.java
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.documentsui.dirlist;
-
-import static com.android.documentsui.model.DocumentInfo.getCursorString;
-
-import android.content.Context;
-import android.database.Cursor;
-import android.provider.DocumentsContract.Document;
-import android.support.v7.widget.GridLayoutManager;
-import android.support.v7.widget.RecyclerView;
-
-import com.android.documentsui.State;
-
-import java.util.List;
-
-/**
- * DocumentsAdapter provides glue between a directory Model, and RecylcerView. We've
- * abstracted this a bit in order to decompose some specialized support
- * for adding dummy layout objects (@see SectionBreakDocumentsAdapter). Handling of the
- * dummy layout objects was error prone when interspersed with the core mode / adapter code.
- *
- * @see ModelBackedDocumentsAdapter
- * @see SectionBreakDocumentsAdapter
- */
-abstract class DocumentsAdapter
- extends RecyclerView.Adapter<DocumentHolder>
- implements Model.UpdateListener {
-
- // Payloads for notifyItemChange to distinguish between selection and other events.
- static final String SELECTION_CHANGED_MARKER = "Selection-Changed";
-
- /**
- * Returns a list of model IDs of items currently in the adapter. Excludes items that are
- * currently hidden (see {@link #hide(String...)}).
- *
- * @return A list of Model IDs.
- */
- abstract List<String> getModelIds();
-
- /**
- * Triggers item-change notifications by stable ID (as opposed to position).
- * Passing an unrecognized ID will result in a warning in logcat, but no other error.
- */
- abstract void onItemSelectionChanged(String id);
-
- /**
- * @return The model ID of the item at the given adapter position.
- */
- abstract String getModelId(int position);
-
- /**
- * Returns a class that yields the span size for a particular element. This is
- * primarily useful in {@link SectionBreakDocumentsAdapterWrapper} where
- * we adjust sizes.
- */
- GridLayoutManager.SpanSizeLookup createSpanSizeLookup() {
- throw new UnsupportedOperationException();
- }
-
- static boolean isDirectory(Cursor cursor) {
- final String mimeType = getCursorString(cursor, Document.COLUMN_MIME_TYPE);
- return Document.MIME_TYPE_DIR.equals(mimeType);
- }
-
- boolean isDirectory(Model model, int position) {
- String modelId = getModelIds().get(position);
- Cursor cursor = model.getItem(modelId);
- return isDirectory(cursor);
- }
-
- /**
- * Environmental access for View adapter implementations.
- */
- interface Environment {
- Context getContext();
- int getColumnCount();
- State getDisplayState();
- boolean isSelected(String id);
- Model getModel();
- boolean isDocumentEnabled(String mimeType, int flags);
- void initDocumentHolder(DocumentHolder holder);
- void onBindDocumentHolder(DocumentHolder holder, Cursor cursor);
- }
-}
diff --git a/packages/DocumentsUI/src/com/android/documentsui/dirlist/DragScrollListener.java b/packages/DocumentsUI/src/com/android/documentsui/dirlist/DragScrollListener.java
deleted file mode 100644
index 898a4a2..0000000
--- a/packages/DocumentsUI/src/com/android/documentsui/dirlist/DragScrollListener.java
+++ /dev/null
@@ -1,167 +0,0 @@
-/*
- * Copyright (C) 2016 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.dirlist;
-
-import android.content.Context;
-import android.graphics.Point;
-import android.view.DragEvent;
-import android.view.View;
-import android.view.View.OnDragListener;
-
-import com.android.documentsui.ItemDragListener;
-import com.android.documentsui.ItemDragListener.DragHost;
-import com.android.documentsui.dirlist.ViewAutoScroller.ScrollActionDelegate;
-import com.android.documentsui.dirlist.ViewAutoScroller.ScrollDistanceDelegate;
-import com.android.documentsui.R;
-
-import java.util.function.BooleanSupplier;
-import java.util.function.IntSupplier;
-
-import javax.annotation.Nullable;
-
-/**
- * This class acts as a middle-man handler for potential auto-scrolling before passing the dragEvent
- * onto {@link DirectoryDragListener}.
- */
-class DragScrollListener implements OnDragListener {
-
- private final ItemDragListener<? extends DragHost> mDragHandler;
- private final IntSupplier mHeight;
- private final BooleanSupplier mCanScrollUp;
- private final BooleanSupplier mCanScrollDown;
- private final int mAutoScrollEdgeHeight;
- private final Runnable mDragScroller;
-
- private boolean mDragHappening;
- private @Nullable Point mCurrentPosition;
-
- private DragScrollListener(
- Context context,
- ItemDragListener<? extends DragHost> dragHandler,
- IntSupplier heightSupplier,
- BooleanSupplier scrollUpSupplier,
- BooleanSupplier scrollDownSupplier,
- ViewAutoScroller.ScrollActionDelegate actionDelegate) {
- mDragHandler = dragHandler;
- mAutoScrollEdgeHeight = (int) context.getResources()
- .getDimension(R.dimen.autoscroll_edge_height);
- mHeight = heightSupplier;
- mCanScrollUp = scrollUpSupplier;
- mCanScrollDown = scrollDownSupplier;
-
- ScrollDistanceDelegate distanceDelegate = new ScrollDistanceDelegate() {
- @Override
- public Point getCurrentPosition() {
- return mCurrentPosition;
- }
-
- @Override
- public int getViewHeight() {
- return mHeight.getAsInt();
- }
-
- @Override
- public boolean isActive() {
- return mDragHappening;
- }
- };
-
- mDragScroller = new ViewAutoScroller(
- mAutoScrollEdgeHeight, distanceDelegate, actionDelegate);
- }
-
- static DragScrollListener create(
- Context context, ItemDragListener<? extends DragHost> dragHandler, View scrollView) {
- ScrollActionDelegate actionDelegate = new ScrollActionDelegate() {
- @Override
- public void scrollBy(int dy) {
- scrollView.scrollBy(0, dy);
- }
-
- @Override
- public void runAtNextFrame(Runnable r) {
- scrollView.postOnAnimation(r);
-
- }
-
- @Override
- public void removeCallback(Runnable r) {
- scrollView.removeCallbacks(r);
- }
- };
- DragScrollListener listener = new DragScrollListener(
- context,
- dragHandler,
- scrollView::getHeight,
- () -> {
- return scrollView.canScrollVertically(-1);
- },
- () -> {
- return scrollView.canScrollVertically(1);
- },
- actionDelegate);
- return listener;
- }
-
- @Override
- public boolean onDrag(View v, DragEvent event) {
- boolean handled = false;
- switch (event.getAction()) {
- case DragEvent.ACTION_DRAG_STARTED:
- mDragHappening = true;
- break;
- case DragEvent.ACTION_DRAG_ENDED:
- mDragHappening = false;
- break;
- case DragEvent.ACTION_DRAG_ENTERED:
- handled = insideDragZone();
- break;
- case DragEvent.ACTION_DRAG_LOCATION:
- handled = handleLocationEvent(v, event.getX(), event.getY());
- break;
- default:
- break;
- }
-
- if (!handled) {
- handled = mDragHandler.onDrag(v, event);
- }
-
- return handled;
- }
-
- private boolean handleLocationEvent(View v, float x, float y) {
- mCurrentPosition = new Point(Math.round(v.getX() + x), Math.round(v.getY() + y));
- if (insideDragZone()) {
- mDragScroller.run();
- return true;
- }
- return false;
- }
-
- private boolean insideDragZone() {
- if (mCurrentPosition == null) {
- return false;
- }
-
- boolean shouldScrollUp = mCurrentPosition.y < mAutoScrollEdgeHeight
- && mCanScrollUp.getAsBoolean();
- boolean shouldScrollDown = mCurrentPosition.y > mHeight.getAsInt() - mAutoScrollEdgeHeight
- && mCanScrollDown.getAsBoolean();
- return shouldScrollUp || shouldScrollDown;
- }
-}
\ No newline at end of file
diff --git a/packages/DocumentsUI/src/com/android/documentsui/dirlist/DragShadowBuilder.java b/packages/DocumentsUI/src/com/android/documentsui/dirlist/DragShadowBuilder.java
deleted file mode 100644
index c7d7a64..0000000
--- a/packages/DocumentsUI/src/com/android/documentsui/dirlist/DragShadowBuilder.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * Copyright (C) 2016 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.dirlist;
-
-import android.content.Context;
-import android.graphics.Canvas;
-import android.graphics.Point;
-import android.graphics.Rect;
-import android.graphics.drawable.Drawable;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.widget.ImageView;
-import android.widget.TextView;
-
-import com.android.documentsui.R;
-
-final class DragShadowBuilder extends View.DragShadowBuilder {
-
- private final View mShadowView;
- private final TextView mTitle;
- private final ImageView mIcon;
- private final int mWidth;
- private final int mHeight;
-
- public DragShadowBuilder(Context context, String title, Drawable icon) {
- mWidth = context.getResources().getDimensionPixelSize(R.dimen.drag_shadow_width);
- mHeight= context.getResources().getDimensionPixelSize(R.dimen.drag_shadow_height);
-
- mShadowView = LayoutInflater.from(context).inflate(R.layout.drag_shadow_layout, null);
- mTitle = (TextView) mShadowView.findViewById(android.R.id.title);
- mIcon = (ImageView) mShadowView.findViewById(android.R.id.icon);
-
- mTitle.setText(title);
- mIcon.setImageDrawable(icon);
- }
-
- @Override
- public void onProvideShadowMetrics(
- Point shadowSize, Point shadowTouchPoint) {
- shadowSize.set(mWidth, mHeight);
- shadowTouchPoint.set(mWidth, mHeight);
- }
-
- @Override
- public void onDrawShadow(Canvas canvas) {
- Rect r = canvas.getClipBounds();
- // Calling measure is necessary in order for all child views to get correctly laid out.
- mShadowView.measure(
- View.MeasureSpec.makeMeasureSpec(r.right- r.left, View.MeasureSpec.EXACTLY),
- View.MeasureSpec.makeMeasureSpec(r.top- r.bottom, View.MeasureSpec.EXACTLY));
- mShadowView.layout(r.left, r.top, r.right, r.bottom);
- mShadowView.draw(canvas);
- }
-}
diff --git a/packages/DocumentsUI/src/com/android/documentsui/dirlist/FocusHandler.java b/packages/DocumentsUI/src/com/android/documentsui/dirlist/FocusHandler.java
deleted file mode 100644
index ba26d65..0000000
--- a/packages/DocumentsUI/src/com/android/documentsui/dirlist/FocusHandler.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (C) 2016 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.dirlist;
-
-import android.view.KeyEvent;
-import android.view.View;
-
-/**
- * A class that handles navigation and focus within the DirectoryFragment.
- */
-interface FocusHandler extends View.OnFocusChangeListener {
-
- /**
- * Handles navigation (setting focus, adjusting selection if needed) arising from incoming key
- * events.
- *
- * @param doc The DocumentHolder receiving the key event.
- * @param keyCode
- * @param event
- * @return Whether the event was handled.
- */
- boolean handleKey(DocumentHolder doc, int keyCode, KeyEvent event);
-
- @Override
- void onFocusChange(View v, boolean hasFocus);
-
- /**
- * Requests focus on the item that last had focus. Scrolls to that item if necessary.
- */
- void restoreLastFocus();
-
- /**
- * @return The adapter position of the last focused item.
- */
- int getFocusPosition();
-
-}
diff --git a/packages/DocumentsUI/src/com/android/documentsui/dirlist/FocusManager.java b/packages/DocumentsUI/src/com/android/documentsui/dirlist/FocusManager.java
deleted file mode 100644
index 1be2f65..0000000
--- a/packages/DocumentsUI/src/com/android/documentsui/dirlist/FocusManager.java
+++ /dev/null
@@ -1,550 +0,0 @@
-/*
- * Copyright (C) 2016 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.dirlist;
-
-import static com.android.documentsui.model.DocumentInfo.getCursorString;
-
-import android.annotation.Nullable;
-import android.content.Context;
-import android.database.Cursor;
-import android.os.Handler;
-import android.os.Looper;
-import android.os.SystemClock;
-import android.provider.DocumentsContract.Document;
-import android.support.v7.widget.GridLayoutManager;
-import android.support.v7.widget.RecyclerView;
-import android.text.Editable;
-import android.text.Spannable;
-import android.text.method.KeyListener;
-import android.text.method.TextKeyListener;
-import android.text.method.TextKeyListener.Capitalize;
-import android.text.style.BackgroundColorSpan;
-import android.util.Log;
-import android.view.KeyEvent;
-import android.view.View;
-import android.widget.TextView;
-
-import com.android.documentsui.Events;
-import com.android.documentsui.R;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Timer;
-import java.util.TimerTask;
-
-/**
- * A class that handles navigation and focus within the DirectoryFragment.
- */
-final class FocusManager implements FocusHandler {
- private static final String TAG = "FocusManager";
-
- private RecyclerView mView;
- private DocumentsAdapter mAdapter;
- private GridLayoutManager mLayout;
-
- private TitleSearchHelper mSearchHelper;
- private Model mModel;
-
- private int mLastFocusPosition = RecyclerView.NO_POSITION;
-
- public FocusManager(Context context, RecyclerView view, Model model) {
- mView = view;
- mAdapter = (DocumentsAdapter) view.getAdapter();
- mLayout = (GridLayoutManager) view.getLayoutManager();
- mModel = model;
-
- mSearchHelper = new TitleSearchHelper(context);
- }
-
- @Override
- public boolean handleKey(DocumentHolder doc, int keyCode, KeyEvent event) {
- // Search helper gets first crack, for doing type-to-focus.
- if (mSearchHelper.handleKey(doc, keyCode, event)) {
- return true;
- }
-
- // Translate space/shift-space into PgDn/PgUp
- if (keyCode == KeyEvent.KEYCODE_SPACE) {
- if (event.isShiftPressed()) {
- keyCode = KeyEvent.KEYCODE_PAGE_UP;
- } else {
- keyCode = KeyEvent.KEYCODE_PAGE_DOWN;
- }
- }
-
- if (Events.isNavigationKeyCode(keyCode)) {
- // Find the target item and focus it.
- int endPos = findTargetPosition(doc.itemView, keyCode, event);
-
- if (endPos != RecyclerView.NO_POSITION) {
- focusItem(endPos);
- }
- // Swallow all navigation keystrokes. Otherwise they go to the app's global
- // key-handler, which will route them back to the DF and cause focus to be reset.
- return true;
- }
- return false;
- }
-
- @Override
- public void onFocusChange(View v, boolean hasFocus) {
- // Remember focus events on items.
- if (hasFocus && v.getParent() == mView) {
- mLastFocusPosition = mView.getChildAdapterPosition(v);
- }
- }
-
- @Override
- public void restoreLastFocus() {
- if (mAdapter.getItemCount() == 0) {
- // Nothing to focus.
- return;
- }
-
- if (mLastFocusPosition != RecyclerView.NO_POSITION) {
- // The system takes care of situations when a view is no longer on screen, etc,
- focusItem(mLastFocusPosition);
- } else {
- // Focus the first visible item
- focusItem(mLayout.findFirstVisibleItemPosition());
- }
- }
-
- @Override
- public int getFocusPosition() {
- return mLastFocusPosition;
- }
-
- /**
- * Finds the destination position where the focus should land for a given navigation event.
- *
- * @param view The view that received the event.
- * @param keyCode The key code for the event.
- * @param event
- * @return The adapter position of the destination item. Could be RecyclerView.NO_POSITION.
- */
- private int findTargetPosition(View view, int keyCode, KeyEvent event) {
- switch (keyCode) {
- case KeyEvent.KEYCODE_MOVE_HOME:
- return 0;
- case KeyEvent.KEYCODE_MOVE_END:
- return mAdapter.getItemCount() - 1;
- case KeyEvent.KEYCODE_PAGE_UP:
- case KeyEvent.KEYCODE_PAGE_DOWN:
- return findPagedTargetPosition(view, keyCode, event);
- }
-
- // Find a navigation target based on the arrow key that the user pressed.
- int searchDir = -1;
- switch (keyCode) {
- case KeyEvent.KEYCODE_DPAD_UP:
- searchDir = View.FOCUS_UP;
- break;
- case KeyEvent.KEYCODE_DPAD_DOWN:
- searchDir = View.FOCUS_DOWN;
- break;
- }
-
- if (inGridMode()) {
- int currentPosition = mView.getChildAdapterPosition(view);
- // Left and right arrow keys only work in grid mode.
- switch (keyCode) {
- case KeyEvent.KEYCODE_DPAD_LEFT:
- if (currentPosition > 0) {
- // Stop backward focus search at the first item, otherwise focus will wrap
- // around to the last visible item.
- searchDir = View.FOCUS_BACKWARD;
- }
- break;
- case KeyEvent.KEYCODE_DPAD_RIGHT:
- if (currentPosition < mAdapter.getItemCount() - 1) {
- // Stop forward focus search at the last item, otherwise focus will wrap
- // around to the first visible item.
- searchDir = View.FOCUS_FORWARD;
- }
- break;
- }
- }
-
- if (searchDir != -1) {
- // Focus search behaves badly if the parent RecyclerView is focused. However, focusable
- // shouldn't be unset on RecyclerView, otherwise focus isn't properly restored after
- // events that cause a UI rebuild (like rotating the device). Compromise: turn focusable
- // off while performing the focus search.
- // TODO: Revisit this when RV focus issues are resolved.
- mView.setFocusable(false);
- View targetView = view.focusSearch(searchDir);
- mView.setFocusable(true);
- // TargetView can be null, for example, if the user pressed <down> at the bottom
- // of the list.
- if (targetView != null) {
- // Ignore navigation targets that aren't items in the RecyclerView.
- if (targetView.getParent() == mView) {
- return mView.getChildAdapterPosition(targetView);
- }
- }
- }
-
- return RecyclerView.NO_POSITION;
- }
-
- /**
- * Given a PgUp/PgDn event and the current view, find the position of the target view.
- * This returns:
- * <li>The position of the topmost (or bottom-most) visible item, if the current item is not
- * the top- or bottom-most visible item.
- * <li>The position of an item that is one page's worth of items up (or down) if the current
- * item is the top- or bottom-most visible item.
- * <li>The first (or last) item, if paging up (or down) would go past those limits.
- * @param view The view that received the key event.
- * @param keyCode Must be KEYCODE_PAGE_UP or KEYCODE_PAGE_DOWN.
- * @param event
- * @return The adapter position of the target item.
- */
- private int findPagedTargetPosition(View view, int keyCode, KeyEvent event) {
- int first = mLayout.findFirstVisibleItemPosition();
- int last = mLayout.findLastVisibleItemPosition();
- int current = mView.getChildAdapterPosition(view);
- int pageSize = last - first + 1;
-
- if (keyCode == KeyEvent.KEYCODE_PAGE_UP) {
- if (current > first) {
- // If the current item isn't the first item, target the first item.
- return first;
- } else {
- // If the current item is the first item, target the item one page up.
- int target = current - pageSize;
- return target < 0 ? 0 : target;
- }
- }
-
- if (keyCode == KeyEvent.KEYCODE_PAGE_DOWN) {
- if (current < last) {
- // If the current item isn't the last item, target the last item.
- return last;
- } else {
- // If the current item is the last item, target the item one page down.
- int target = current + pageSize;
- int max = mAdapter.getItemCount() - 1;
- return target < max ? target : max;
- }
- }
-
- throw new IllegalArgumentException("Unsupported keyCode: " + keyCode);
- }
-
- /**
- * Requests focus for the item in the given adapter position, scrolling the RecyclerView if
- * necessary.
- *
- * @param pos
- */
- private void focusItem(final int pos) {
- focusItem(pos, null);
- }
-
- /**
- * Requests focus for the item in the given adapter position, scrolling the RecyclerView if
- * necessary.
- *
- * @param pos
- * @param callback A callback to call after the given item has been focused.
- */
- private void focusItem(final int pos, @Nullable final FocusCallback callback) {
- // If the item is already in view, focus it; otherwise, scroll to it and focus it.
- RecyclerView.ViewHolder vh = mView.findViewHolderForAdapterPosition(pos);
- if (vh != null) {
- if (vh.itemView.requestFocus() && callback != null) {
- callback.onFocus(vh.itemView);
- }
- } else {
- // Set a one-time listener to request focus when the scroll has completed.
- mView.addOnScrollListener(
- new RecyclerView.OnScrollListener() {
- @Override
- public void onScrollStateChanged(RecyclerView view, int newState) {
- if (newState == RecyclerView.SCROLL_STATE_IDLE) {
- // When scrolling stops, find the item and focus it.
- RecyclerView.ViewHolder vh =
- view.findViewHolderForAdapterPosition(pos);
- if (vh != null) {
- if (vh.itemView.requestFocus() && callback != null) {
- callback.onFocus(vh.itemView);
- }
- } else {
- // This might happen in weird corner cases, e.g. if the user is
- // scrolling while a delete operation is in progress. In that
- // case, just don't attempt to focus the missing item.
- Log.w(TAG, "Unable to focus position " + pos + " after scroll");
- }
- view.removeOnScrollListener(this);
- }
- }
- });
- mView.smoothScrollToPosition(pos);
- }
- }
-
- /**
- * @return Whether the layout manager is currently in a grid-configuration.
- */
- private boolean inGridMode() {
- return mLayout.getSpanCount() > 1;
- }
-
- private interface FocusCallback {
- public void onFocus(View view);
- }
-
- /**
- * A helper class for handling type-to-focus. Instantiate this class, and pass it KeyEvents via
- * the {@link #handleKey(DocumentHolder, int, KeyEvent)} method. The class internally will build
- * up a string from individual key events, and perform searching based on that string. When an
- * item is found that matches the search term, that item will be focused. This class also
- * highlights instances of the search term found in the view.
- */
- private class TitleSearchHelper {
- static private final int SEARCH_TIMEOUT = 500; // ms
-
- private final KeyListener mTextListener = new TextKeyListener(Capitalize.NONE, false);
- private final Editable mSearchString = Editable.Factory.getInstance().newEditable("");
- private final Highlighter mHighlighter = new Highlighter();
- private final BackgroundColorSpan mSpan;
-
- private List<String> mIndex;
- private boolean mActive;
- private Timer mTimer;
- private KeyEvent mLastEvent;
- private Handler mUiRunner;
-
- public TitleSearchHelper(Context context) {
- mSpan = new BackgroundColorSpan(context.getColor(R.color.accent_dark));
- // Handler for running things on the main UI thread. Needed for updating the UI from a
- // timer (see #activate, below).
- mUiRunner = new Handler(Looper.getMainLooper());
- }
-
- /**
- * Handles alphanumeric keystrokes for type-to-focus. This method builds a search term out
- * of individual key events, and then performs a search for the given string.
- *
- * @param doc The document holder receiving the key event.
- * @param keyCode
- * @param event
- * @return Whether the event was handled.
- */
- public boolean handleKey(DocumentHolder doc, int keyCode, KeyEvent event) {
- switch (keyCode) {
- case KeyEvent.KEYCODE_ESCAPE:
- case KeyEvent.KEYCODE_ENTER:
- if (mActive) {
- // These keys end any active searches.
- endSearch();
- return true;
- } else {
- // Don't handle these key events if there is no active search.
- return false;
- }
- case KeyEvent.KEYCODE_SPACE:
- // This allows users to search for files with spaces in their names, but ignores
- // spacebar events when a text search is not active. Ignoring the spacebar
- // event is necessary because other handlers (see FocusManager#handleKey) also
- // listen for and handle it.
- if (!mActive) {
- return false;
- }
- }
-
- // Navigation keys also end active searches.
- if (Events.isNavigationKeyCode(keyCode)) {
- endSearch();
- // Don't handle the keycode, so navigation still occurs.
- return false;
- }
-
- // Build up the search string, and perform the search.
- boolean handled = mTextListener.onKeyDown(doc.itemView, mSearchString, keyCode, event);
-
- // Delete is processed by the text listener, but not "handled". Check separately for it.
- if (keyCode == KeyEvent.KEYCODE_DEL) {
- handled = true;
- }
-
- if (handled) {
- mLastEvent = event;
- if (mSearchString.length() == 0) {
- // Don't perform empty searches.
- return false;
- }
- search();
- }
-
- return handled;
- }
-
- /**
- * Activates the search helper, which changes its key handling and updates the search index
- * and highlights if necessary. Call this each time the search term is updated.
- */
- private void search() {
- if (!mActive) {
- // The model listener invalidates the search index when the model changes.
- mModel.addUpdateListener(mModelListener);
-
- // Used to keep the current search alive until the timeout expires. If the user
- // presses another key within that time, that keystroke is added to the current
- // search. Otherwise, the current search ends, and subsequent keystrokes start a new
- // search.
- mTimer = new Timer();
- mActive = true;
- }
-
- // If the search index was invalidated, rebuild it
- if (mIndex == null) {
- buildIndex();
- }
-
- // Search for the current search term.
- // Perform case-insensitive search.
- String searchString = mSearchString.toString().toLowerCase();
- for (int pos = 0; pos < mIndex.size(); pos++) {
- String title = mIndex.get(pos);
- if (title != null && title.startsWith(searchString)) {
- focusItem(pos, new FocusCallback() {
- @Override
- public void onFocus(View view) {
- mHighlighter.applyHighlight(view);
- // Using a timer repeat period of SEARCH_TIMEOUT/2 means the amount of
- // time between the last keystroke and a search expiring is actually
- // between 500 and 750 ms. A smaller timer period results in less
- // variability but does more polling.
- mTimer.schedule(new TimeoutTask(), 0, SEARCH_TIMEOUT / 2);
- }
- });
- break;
- }
- }
- }
-
- /**
- * Ends the current search (see {@link #search()}.
- */
- private void endSearch() {
- if (mActive) {
- mModel.removeUpdateListener(mModelListener);
- mTimer.cancel();
- }
-
- mHighlighter.removeHighlight();
-
- mIndex = null;
- mSearchString.clear();
- mActive = false;
- }
-
- /**
- * Builds a search index for finding items by title. Queries the model and adapter, so both
- * must be set up before calling this method.
- */
- private void buildIndex() {
- int itemCount = mAdapter.getItemCount();
- List<String> index = new ArrayList<>(itemCount);
- for (int i = 0; i < itemCount; i++) {
- String modelId = mAdapter.getModelId(i);
- Cursor cursor = mModel.getItem(modelId);
- if (modelId != null && cursor != null) {
- String title = getCursorString(cursor, Document.COLUMN_DISPLAY_NAME);
- // Perform case-insensitive search.
- index.add(title.toLowerCase());
- } else {
- index.add("");
- }
- }
- mIndex = index;
- }
-
- private Model.UpdateListener mModelListener = new Model.UpdateListener() {
- @Override
- public void onModelUpdate(Model model) {
- // Invalidate the search index when the model updates.
- mIndex = null;
- }
-
- @Override
- public void onModelUpdateFailed(Exception e) {
- // Invalidate the search index when the model updates.
- mIndex = null;
- }
- };
-
- private class TimeoutTask extends TimerTask {
- @Override
- public void run() {
- long last = mLastEvent.getEventTime();
- long now = SystemClock.uptimeMillis();
- if ((now - last) > SEARCH_TIMEOUT) {
- // endSearch must run on the main thread because it does UI work
- mUiRunner.post(new Runnable() {
- @Override
- public void run() {
- endSearch();
- }
- });
- }
- }
- };
-
- private class Highlighter {
- private Spannable mCurrentHighlight;
-
- /**
- * Applies title highlights to the given view. The view must have a title field that is a
- * spannable text field. If this condition is not met, this function does nothing.
- *
- * @param view
- */
- private void applyHighlight(View view) {
- TextView titleView = (TextView) view.findViewById(android.R.id.title);
- if (titleView == null) {
- return;
- }
-
- CharSequence tmpText = titleView.getText();
- if (tmpText instanceof Spannable) {
- if (mCurrentHighlight != null) {
- mCurrentHighlight.removeSpan(mSpan);
- }
- mCurrentHighlight = (Spannable) tmpText;
- mCurrentHighlight.setSpan(
- mSpan, 0, mSearchString.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
- }
- }
-
- /**
- * Removes title highlights from the given view. The view must have a title field that is a
- * spannable text field. If this condition is not met, this function does nothing.
- *
- * @param view
- */
- private void removeHighlight() {
- if (mCurrentHighlight != null) {
- mCurrentHighlight.removeSpan(mSpan);
- }
- }
- };
- }
-}
diff --git a/packages/DocumentsUI/src/com/android/documentsui/dirlist/FragmentTuner.java b/packages/DocumentsUI/src/com/android/documentsui/dirlist/FragmentTuner.java
deleted file mode 100644
index 5201089..0000000
--- a/packages/DocumentsUI/src/com/android/documentsui/dirlist/FragmentTuner.java
+++ /dev/null
@@ -1,203 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.documentsui.dirlist;
-
-import static com.android.documentsui.State.ACTION_CREATE;
-import static com.android.documentsui.State.ACTION_GET_CONTENT;
-import static com.android.documentsui.State.ACTION_OPEN;
-import static com.android.documentsui.State.ACTION_OPEN_TREE;
-import static com.android.documentsui.State.ACTION_PICK_COPY_DESTINATION;
-
-import android.content.Context;
-import android.provider.DocumentsContract.Document;
-
-import com.android.documentsui.BaseActivity;
-import com.android.documentsui.MimePredicate;
-import com.android.documentsui.State;
-import com.android.documentsui.dirlist.DirectoryFragment.ResultType;
-
-/**
- * Providers support for specializing the DirectoryFragment to the "host" Activity.
- * Feel free to expand the role of this class to handle other specializations.
- */
-public abstract class FragmentTuner {
-
- final Context mContext;
- final State mState;
-
- public FragmentTuner(Context context, State state) {
- mContext = context;
- mState = state;
- }
-
- // Subtly different from isDocumentEnabled. The reason may be illuminated as follows.
- // A folder is enabled such that it may be double clicked, even in settings
- // when the folder itself cannot be selected. This may also be true of container types.
- public boolean canSelectType(String docMimeType, int docFlags) {
- return true;
- }
-
- public boolean isDocumentEnabled(String docMimeType, int docFlags) {
- return true;
- }
-
- /**
- * When managed mode is enabled, active downloads will be visible in the UI.
- * Presumably this should only be true when in the downloads directory.
- */
- boolean managedModeEnabled() {
- return false;
- }
-
- /**
- * Whether drag n' drop is allowed in this context
- */
- boolean dragAndDropEnabled() {
- return false;
- }
-
- abstract void onModelLoaded(Model model, @ResultType int resultType, boolean isSearch);
-
- /**
- * Provides support for Platform specific specializations of DirectoryFragment.
- */
- public static final class DocumentsTuner extends FragmentTuner {
-
- // We use this to keep track of whether a model has been previously loaded or not so we can
- // open the drawer on empty directories on first launch
- private boolean mModelPreviousLoaded;
-
- public DocumentsTuner(Context context, State state) {
- super(context, state);
- }
-
- @Override
- public boolean canSelectType(String docMimeType, int docFlags) {
- if (!isDocumentEnabled(docMimeType, docFlags)) {
- return false;
- }
-
- if (MimePredicate.isDirectoryType(docMimeType)) {
- return false;
- }
-
- if (mState.action == ACTION_OPEN_TREE
- || mState.action == ACTION_PICK_COPY_DESTINATION) {
- // In this case nothing *ever* is selectable...the expected user behavior is
- // they navigate *into* a folder, then click a confirmation button indicating
- // that the current directory is the directory they are picking.
- return false;
- }
-
- return true;
- }
-
- @Override
- public boolean isDocumentEnabled(String mimeType, int docFlags) {
- // Directories are always enabled.
- if (MimePredicate.isDirectoryType(mimeType)) {
- return true;
- }
-
- switch (mState.action) {
- case ACTION_CREATE:
- // Read-only files are disabled when creating.
- if ((docFlags & Document.FLAG_SUPPORTS_WRITE) == 0) {
- return false;
- }
- case ACTION_OPEN:
- case ACTION_GET_CONTENT:
- final boolean isVirtual = (docFlags & Document.FLAG_VIRTUAL_DOCUMENT) != 0;
- if (isVirtual && mState.openableOnly) {
- return false;
- }
- }
-
- return MimePredicate.mimeMatches(mState.acceptMimes, mimeType);
- }
-
- @Override
- void onModelLoaded(Model model, @ResultType int resultType, boolean isSearch) {
- boolean showDrawer = false;
-
- if (MimePredicate.mimeMatches(MimePredicate.VISUAL_MIMES, mState.acceptMimes)) {
- showDrawer = false;
- }
- if (mState.external && mState.action == ACTION_GET_CONTENT) {
- showDrawer = true;
- }
- if (mState.action == ACTION_PICK_COPY_DESTINATION) {
- showDrawer = true;
- }
-
- // When launched into empty root, open drawer.
- if (model.isEmpty()) {
- showDrawer = true;
- }
-
- if (showDrawer && !mState.hasInitialLocationChanged() && !isSearch
- && !mModelPreviousLoaded) {
- // This noops on layouts without drawer, so no need to guard.
- ((BaseActivity) mContext).setRootsDrawerOpen(true);
- }
- mModelPreviousLoaded = true;
- }
- }
-
- /**
- * Provides support for Files activity specific specializations of DirectoryFragment.
- */
- public static final class FilesTuner extends FragmentTuner {
-
- // We use this to keep track of whether a model has been previously loaded or not so we can
- // open the drawer on empty directories on first launch
- private boolean mModelPreviousLoaded;
-
- public FilesTuner(Context context, State state) {
- super(context, state);
- }
-
-
-
- @Override
- void onModelLoaded(Model model, @ResultType int resultType, boolean isSearch) {
- // When launched into empty root, open drawer.
- if (model.isEmpty() && !mState.hasInitialLocationChanged() && !isSearch
- && !mModelPreviousLoaded) {
- // This noops on layouts without drawer, so no need to guard.
- ((BaseActivity) mContext).setRootsDrawerOpen(true);
- }
- mModelPreviousLoaded = true;
- }
-
- @Override
- public boolean managedModeEnabled() {
- // When in downloads top level directory, we also show active downloads.
- // And while we don't allow folders in Downloads, we do allow Zip files in
- // downloads that themselves can be opened and viewed like directories.
- // This method helps us understand when to kick in on those special behaviors.
- return mState.stack.root != null
- && mState.stack.root.isDownloads()
- && mState.stack.size() == 1;
- }
-
- @Override
- public boolean dragAndDropEnabled() {
- return true;
- }
- }
-}
diff --git a/packages/DocumentsUI/src/com/android/documentsui/dirlist/GridDirectoryHolder.java b/packages/DocumentsUI/src/com/android/documentsui/dirlist/GridDirectoryHolder.java
deleted file mode 100644
index ce5bcb1..0000000
--- a/packages/DocumentsUI/src/com/android/documentsui/dirlist/GridDirectoryHolder.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.documentsui.dirlist;
-
-import static com.android.documentsui.model.DocumentInfo.getCursorString;
-
-import android.content.Context;
-import android.database.Cursor;
-import android.provider.DocumentsContract.Document;
-import android.view.ViewGroup;
-import android.widget.ImageView;
-import android.widget.TextView;
-
-import com.android.documentsui.R;
-import com.android.documentsui.State;
-
-final class GridDirectoryHolder extends DocumentHolder {
- final TextView mTitle;
- private ImageView mIconCheck;
- private ImageView mIconMime;
-
- public GridDirectoryHolder(Context context, ViewGroup parent) {
- super(context, parent, R.layout.item_dir_grid);
-
- mTitle = (TextView) itemView.findViewById(android.R.id.title);
- mIconMime = (ImageView) itemView.findViewById(R.id.icon_mime_sm);
- mIconCheck = (ImageView) itemView.findViewById(R.id.icon_check);
- }
-
- @Override
- public void setSelected(boolean selected, boolean animate) {
- super.setSelected(selected, animate);
- float checkAlpha = selected ? 1f : 0f;
-
- if (animate) {
- mIconCheck.animate().alpha(checkAlpha).start();
- mIconMime.animate().alpha(1f - checkAlpha).start();
- } else {
- mIconCheck.setAlpha(checkAlpha);
- mIconMime.setAlpha(1f - checkAlpha);
- }
- }
-
- /**
- * Bind this view to the given document for display.
- * @param cursor Pointing to the item to be bound.
- * @param modelId The model ID of the item.
- * @param state Current display state.
- */
- public void bind(Cursor cursor, String modelId, State state) {
- assert(cursor != null);
-
- this.modelId = modelId;
-
- final String docDisplayName = getCursorString(cursor, Document.COLUMN_DISPLAY_NAME);
- mTitle.setText(docDisplayName, TextView.BufferType.SPANNABLE);
-
- }
-}
diff --git a/packages/DocumentsUI/src/com/android/documentsui/dirlist/GridDocumentHolder.java b/packages/DocumentsUI/src/com/android/documentsui/dirlist/GridDocumentHolder.java
deleted file mode 100644
index 7ba4bdd..0000000
--- a/packages/DocumentsUI/src/com/android/documentsui/dirlist/GridDocumentHolder.java
+++ /dev/null
@@ -1,161 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.documentsui.dirlist;
-
-import static com.android.documentsui.model.DocumentInfo.getCursorInt;
-import static com.android.documentsui.model.DocumentInfo.getCursorLong;
-import static com.android.documentsui.model.DocumentInfo.getCursorString;
-
-import android.annotation.ColorInt;
-import android.content.Context;
-import android.database.Cursor;
-import android.net.Uri;
-import android.provider.DocumentsContract;
-import android.provider.DocumentsContract.Document;
-import android.text.format.Formatter;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.ImageView;
-import android.widget.TextView;
-
-import com.android.documentsui.R;
-import com.android.documentsui.RootCursorWrapper;
-import com.android.documentsui.Shared;
-import com.android.documentsui.State;
-
-final class GridDocumentHolder extends DocumentHolder {
-
- private static boolean mHideTitles;
-
- final TextView mTitle;
- final TextView mDate;
- final TextView mSize;
- final ImageView mIconMimeLg;
- final ImageView mIconMimeSm;
- final ImageView mIconThumb;
- final ImageView mIconCheck;
- final IconHelper mIconHelper;
-
- private final @ColorInt int mDisabledBgColor;
-
- public GridDocumentHolder(Context context, ViewGroup parent, IconHelper iconHelper) {
- super(context, parent, R.layout.item_doc_grid);
-
- mDisabledBgColor = context.getColor(R.color.item_doc_background_disabled);
-
- mTitle = (TextView) itemView.findViewById(android.R.id.title);
- mDate = (TextView) itemView.findViewById(R.id.date);
- mSize = (TextView) itemView.findViewById(R.id.size);
- mIconMimeLg = (ImageView) itemView.findViewById(R.id.icon_mime_lg);
- mIconMimeSm = (ImageView) itemView.findViewById(R.id.icon_mime_sm);
- mIconThumb = (ImageView) itemView.findViewById(R.id.icon_thumb);
- mIconCheck = (ImageView) itemView.findViewById(R.id.icon_check);
-
- mIconHelper = iconHelper;
- }
-
- @Override
- public void setSelected(boolean selected, boolean animate) {
- // We always want to make sure our check box disappears if we're not selected,
- // even if the item is disabled. This is because this object can be reused
- // and this method will be called to setup initial state.
- float checkAlpha = selected ? 1f : 0f;
- if (animate) {
- mIconCheck.animate().alpha(checkAlpha).start();
- } else {
- mIconCheck.setAlpha(checkAlpha);
- }
-
- // But it should be an error to be set to selected && be disabled.
- if (!itemView.isEnabled()) {
- assert(!selected);
- return;
- }
-
- super.setSelected(selected, animate);
-
- if (animate) {
- mIconMimeSm.animate().alpha(1f - checkAlpha).start();
- } else {
- mIconMimeSm.setAlpha(1f - checkAlpha);
- }
- }
-
- public void setEnabled(boolean enabled) {
- super.setEnabled(enabled);
-
- // Text colors enabled/disabled is handle via a color set.
- itemView.setBackgroundColor(enabled ? mDefaultBgColor : mDisabledBgColor);
- float imgAlpha = enabled ? 1f : DISABLED_ALPHA;
-
- mIconMimeLg.setAlpha(imgAlpha);
- mIconMimeSm.setAlpha(imgAlpha);
- mIconThumb.setAlpha(imgAlpha);
- }
-
- /**
- * Bind this view to the given document for display.
- * @param cursor Pointing to the item to be bound.
- * @param modelId The model ID of the item.
- * @param state Current display state.
- */
- public void bind(Cursor cursor, String modelId, State state) {
- assert(cursor != null);
-
- this.modelId = modelId;
-
- final String docAuthority = getCursorString(cursor, RootCursorWrapper.COLUMN_AUTHORITY);
- final String docId = getCursorString(cursor, Document.COLUMN_DOCUMENT_ID);
- final String docMimeType = getCursorString(cursor, Document.COLUMN_MIME_TYPE);
- final String docDisplayName = getCursorString(cursor, Document.COLUMN_DISPLAY_NAME);
- final long docLastModified = getCursorLong(cursor, Document.COLUMN_LAST_MODIFIED);
- final int docIcon = getCursorInt(cursor, Document.COLUMN_ICON);
- final int docFlags = getCursorInt(cursor, Document.COLUMN_FLAGS);
- final long docSize = getCursorLong(cursor, Document.COLUMN_SIZE);
-
- mIconHelper.stopLoading(mIconThumb);
-
- mIconMimeLg.animate().cancel();
- mIconMimeLg.setAlpha(1f);
- mIconThumb.animate().cancel();
- mIconThumb.setAlpha(0f);
-
- final Uri uri = DocumentsContract.buildDocumentUri(docAuthority, docId);
- mIconHelper.load(uri, docMimeType, docFlags, docIcon, docLastModified, mIconThumb,
- mIconMimeLg, mIconMimeSm);
-
- if (mHideTitles) {
- mTitle.setVisibility(View.GONE);
- } else {
- mTitle.setText(docDisplayName, TextView.BufferType.SPANNABLE);
- mTitle.setVisibility(View.VISIBLE);
- }
-
- if (docLastModified == -1) {
- mDate.setText(null);
- } else {
- mDate.setText(Shared.formatTime(mContext, docLastModified));
- }
-
- if (!state.showSize || Document.MIME_TYPE_DIR.equals(docMimeType) || docSize == -1) {
- mSize.setVisibility(View.GONE);
- } else {
- mSize.setVisibility(View.VISIBLE);
- mSize.setText(Formatter.formatFileSize(mContext, docSize));
- }
- }
-}
diff --git a/packages/DocumentsUI/src/com/android/documentsui/dirlist/IconHelper.java b/packages/DocumentsUI/src/com/android/documentsui/dirlist/IconHelper.java
deleted file mode 100644
index ec72314..0000000
--- a/packages/DocumentsUI/src/com/android/documentsui/dirlist/IconHelper.java
+++ /dev/null
@@ -1,313 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.documentsui.dirlist;
-
-import static com.android.documentsui.Shared.DEBUG;
-import static com.android.documentsui.State.MODE_GRID;
-import static com.android.documentsui.State.MODE_LIST;
-
-import android.content.ContentProviderClient;
-import android.content.ContentResolver;
-import android.content.Context;
-import android.graphics.Bitmap;
-import android.graphics.Point;
-import android.graphics.drawable.Drawable;
-import android.net.Uri;
-import android.os.AsyncTask;
-import android.os.CancellationSignal;
-import android.os.OperationCanceledException;
-import android.provider.DocumentsContract;
-import android.provider.DocumentsContract.Document;
-import android.support.annotation.Nullable;
-import android.util.Log;
-import android.view.View;
-import android.widget.ImageView;
-
-import com.android.documentsui.DocumentsApplication;
-import com.android.documentsui.IconUtils;
-import com.android.documentsui.MimePredicate;
-import com.android.documentsui.ProviderExecutor;
-import com.android.documentsui.ProviderExecutor.Preemptable;
-import com.android.documentsui.R;
-import com.android.documentsui.State;
-import com.android.documentsui.State.ViewMode;
-import com.android.documentsui.ThumbnailCache;
-import com.android.documentsui.ThumbnailCache.Result;
-import com.android.documentsui.model.DocumentInfo;
-
-import java.util.function.BiConsumer;
-
-/**
- * A class to assist with loading and managing the Images (i.e. thumbnails and icons) associated
- * with items in the directory listing.
- */
-public class IconHelper {
- private static final String TAG = "IconHelper";
-
- // Two animations applied to image views. The first is used to switch mime icon and thumbnail.
- // The second is used when we need to update thumbnail.
- private static final BiConsumer<View, View> ANIM_FADE_IN = (mime, thumb) -> {
- float alpha = mime.getAlpha();
- mime.animate().alpha(0f).start();
- thumb.setAlpha(0f);
- thumb.animate().alpha(alpha).start();
- };
- private static final BiConsumer<View, View> ANIM_NO_OP = (mime, thumb) -> {};
-
- private final Context mContext;
- private final ThumbnailCache mThumbnailCache;
-
- // The display mode (MODE_GRID, MODE_LIST, etc).
- private int mMode;
- private Point mCurrentSize;
- private boolean mThumbnailsEnabled = true;
-
- /**
- * @param context
- * @param mode MODE_GRID or MODE_LIST
- */
- public IconHelper(Context context, int mode) {
- mContext = context;
- setViewMode(mode);
- mThumbnailCache = DocumentsApplication.getThumbnailCache(context);
- }
-
- /**
- * Enables or disables thumbnails. When thumbnails are disabled, mime icons (or custom icons, if
- * specified by the document) are used instead.
- *
- * @param enabled
- */
- public void setThumbnailsEnabled(boolean enabled) {
- mThumbnailsEnabled = enabled;
- }
-
- /**
- * Sets the current display mode. This affects the thumbnail sizes that are loaded.
- *
- * @param mode See {@link State.MODE_LIST} and {@link State.MODE_GRID}.
- */
- public void setViewMode(@ViewMode int mode) {
- mMode = mode;
- int thumbSize = getThumbSize(mode);
- mCurrentSize = new Point(thumbSize, thumbSize);
- }
-
- private int getThumbSize(int mode) {
- int thumbSize;
- switch (mode) {
- case MODE_GRID:
- thumbSize = mContext.getResources().getDimensionPixelSize(R.dimen.grid_width);
- break;
- case MODE_LIST:
- thumbSize = mContext.getResources().getDimensionPixelSize(
- R.dimen.list_item_thumbnail_size);
- break;
- default:
- throw new IllegalArgumentException("Unsupported layout mode: " + mode);
- }
- return thumbSize;
- }
-
- /**
- * Cancels any ongoing load operations associated with the given ImageView.
- *
- * @param icon
- */
- public void stopLoading(ImageView icon) {
- final LoaderTask oldTask = (LoaderTask) icon.getTag();
- if (oldTask != null) {
- oldTask.preempt();
- icon.setTag(null);
- }
- }
-
- /** Internal task for loading thumbnails asynchronously. */
- private static class LoaderTask
- extends AsyncTask<Uri, Void, Bitmap>
- implements Preemptable {
- private final Uri mUri;
- private final ImageView mIconMime;
- private final ImageView mIconThumb;
- private final Point mThumbSize;
- private final long mLastModified;
-
- // A callback to apply animation to image views after the thumbnail is loaded.
- private final BiConsumer<View, View> mImageAnimator;
-
- private final CancellationSignal mSignal;
-
- public LoaderTask(Uri uri, ImageView iconMime, ImageView iconThumb,
- Point thumbSize, long lastModified, BiConsumer<View, View> animator) {
- mUri = uri;
- mIconMime = iconMime;
- mIconThumb = iconThumb;
- mThumbSize = thumbSize;
- mImageAnimator = animator;
- mLastModified = lastModified;
- mSignal = new CancellationSignal();
- if (DEBUG) Log.d(TAG, "Starting icon loader task for " + mUri);
- }
-
- @Override
- public void preempt() {
- if (DEBUG) Log.d(TAG, "Icon loader task for " + mUri + " was cancelled.");
- cancel(false);
- mSignal.cancel();
- }
-
- @Override
- protected Bitmap doInBackground(Uri... params) {
- if (isCancelled()) {
- return null;
- }
-
- final Context context = mIconThumb.getContext();
- final ContentResolver resolver = context.getContentResolver();
-
- ContentProviderClient client = null;
- Bitmap result = null;
- try {
- client = DocumentsApplication.acquireUnstableProviderOrThrow(
- resolver, mUri.getAuthority());
- result = DocumentsContract.getDocumentThumbnail(client, mUri, mThumbSize, mSignal);
- if (result != null) {
- final ThumbnailCache cache = DocumentsApplication.getThumbnailCache(context);
- cache.putThumbnail(mUri, mThumbSize, result, mLastModified);
- }
- } catch (Exception e) {
- if (!(e instanceof OperationCanceledException)) {
- Log.w(TAG, "Failed to load thumbnail for " + mUri + ": " + e);
- }
- } finally {
- ContentProviderClient.releaseQuietly(client);
- }
- return result;
- }
-
- @Override
- protected void onPostExecute(Bitmap result) {
- if (DEBUG) Log.d(TAG, "Loader task for " + mUri + " completed");
-
- if (mIconThumb.getTag() == this && result != null) {
- mIconThumb.setTag(null);
- mIconThumb.setImageBitmap(result);
-
- mImageAnimator.accept(mIconMime, mIconThumb);
- }
- }
- }
-
- /**
- * Load thumbnails for a directory list item.
- *
- * @param uri The URI for the file being represented.
- * @param mimeType The mime type of the file being represented.
- * @param docFlags Flags for the file being represented.
- * @param docIcon Custom icon (if any) for the file being requested.
- * @param docLastModified the last modified value of the file being requested.
- * @param iconThumb The itemview's thumbnail icon.
- * @param iconMime The itemview's mime icon. Hidden when iconThumb is shown.
- * @param subIconMime The second itemview's mime icon. Always visible.
- * @return
- */
- public void load(Uri uri, String mimeType, int docFlags, int docIcon, long docLastModified,
- ImageView iconThumb, ImageView iconMime, @Nullable ImageView subIconMime) {
- boolean loadedThumbnail = false;
-
- final String docAuthority = uri.getAuthority();
-
- final boolean supportsThumbnail = (docFlags & Document.FLAG_SUPPORTS_THUMBNAIL) != 0;
- final boolean allowThumbnail = (mMode == MODE_GRID)
- || MimePredicate.mimeMatches(MimePredicate.VISUAL_MIMES, mimeType);
- final boolean showThumbnail = supportsThumbnail && allowThumbnail && mThumbnailsEnabled;
- if (showThumbnail) {
- loadedThumbnail =
- loadThumbnail(uri, docAuthority, docLastModified, iconThumb, iconMime);
- }
-
- final Drawable mimeIcon = getDocumentIcon(mContext, docAuthority,
- DocumentsContract.getDocumentId(uri), mimeType, docIcon);
- if (subIconMime != null) {
- setMimeIcon(subIconMime, mimeIcon);
- }
-
- if (loadedThumbnail) {
- hideImageView(iconMime);
- } else {
- // Add a mime icon if the thumbnail is not shown.
- setMimeIcon(iconMime, mimeIcon);
- hideImageView(iconThumb);
- }
- }
-
- private boolean loadThumbnail(Uri uri, String docAuthority, long docLastModified,
- ImageView iconThumb, ImageView iconMime) {
- final Result result = mThumbnailCache.getThumbnail(uri, mCurrentSize);
-
- try {
- final Bitmap cachedThumbnail = result.getThumbnail();
- iconThumb.setImageBitmap(cachedThumbnail);
-
- boolean stale = (docLastModified > result.getLastModified());
- if (DEBUG) Log.d(TAG,
- String.format("Load thumbnail for %s, got result %d and stale %b.",
- uri.toString(), result.getStatus(), stale));
- if (!result.isExactHit() || stale) {
- final BiConsumer<View, View> animator =
- (cachedThumbnail == null ? ANIM_FADE_IN : ANIM_NO_OP);
- final LoaderTask task = new LoaderTask(uri, iconMime, iconThumb, mCurrentSize,
- docLastModified, animator);
-
- iconThumb.setTag(task);
-
- ProviderExecutor.forAuthority(docAuthority).execute(task);
- }
-
- return result.isHit();
- } finally {
- result.recycle();
- }
- }
-
- private void setMimeIcon(ImageView view, Drawable icon) {
- view.setImageDrawable(icon);
- view.setAlpha(1f);
- }
-
- private void hideImageView(ImageView view) {
- view.setImageDrawable(null);
- view.setAlpha(0f);
- }
-
- private Drawable getDocumentIcon(
- Context context, String authority, String id, String mimeType, int icon) {
- if (icon != 0) {
- return IconUtils.loadPackageIcon(context, authority, icon);
- } else {
- return IconUtils.loadMimeIcon(context, mimeType, authority, id, mMode);
- }
- }
-
- /**
- * Returns a mime icon or package icon for a {@link DocumentInfo}.
- */
- public Drawable getDocumentIcon(Context context, DocumentInfo doc) {
- return getDocumentIcon(
- context, doc.authority, doc.documentId, doc.mimeType, doc.icon);
- }
-}
diff --git a/packages/DocumentsUI/src/com/android/documentsui/dirlist/ListDocumentHolder.java b/packages/DocumentsUI/src/com/android/documentsui/dirlist/ListDocumentHolder.java
deleted file mode 100644
index e88be0c..0000000
--- a/packages/DocumentsUI/src/com/android/documentsui/dirlist/ListDocumentHolder.java
+++ /dev/null
@@ -1,177 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.documentsui.dirlist;
-
-import static com.android.documentsui.model.DocumentInfo.getCursorInt;
-import static com.android.documentsui.model.DocumentInfo.getCursorLong;
-import static com.android.documentsui.model.DocumentInfo.getCursorString;
-
-import android.content.Context;
-import android.database.Cursor;
-import android.net.Uri;
-import android.provider.DocumentsContract;
-import android.provider.DocumentsContract.Document;
-import android.text.format.Formatter;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.ImageView;
-import android.widget.LinearLayout;
-import android.widget.TextView;
-
-import com.android.documentsui.R;
-import com.android.documentsui.RootCursorWrapper;
-import com.android.documentsui.Shared;
-import com.android.documentsui.State;
-
-final class ListDocumentHolder extends DocumentHolder {
- final TextView mTitle;
- final LinearLayout mDetails; // Container of date/size/summary
- final TextView mDate;
- final TextView mSize;
- final TextView mSummary;
- final ImageView mIconMime;
- final ImageView mIconThumb;
- final ImageView mIconCheck;
- final IconHelper mIconHelper;
-
- public ListDocumentHolder(Context context, ViewGroup parent, IconHelper iconHelper) {
- super(context, parent, R.layout.item_doc_list);
-
- mTitle = (TextView) itemView.findViewById(android.R.id.title);
- mDate = (TextView) itemView.findViewById(R.id.date);
- mSize = (TextView) itemView.findViewById(R.id.size);
- mSummary = (TextView) itemView.findViewById(android.R.id.summary);
- mIconMime = (ImageView) itemView.findViewById(R.id.icon_mime);
- mIconThumb = (ImageView) itemView.findViewById(R.id.icon_thumb);
- mIconCheck = (ImageView) itemView.findViewById(R.id.icon_check);
- // Warning: mDetails view doesn't exists in layout-sw720dp-land layout
- mDetails = (LinearLayout) itemView.findViewById(R.id.line2);
-
- mIconHelper = iconHelper;
- }
-
- @Override
- public void setSelected(boolean selected, boolean animate) {
- // We always want to make sure our check box disappears if we're not selected,
- // even if the item is disabled. But it should be an error (see assert below)
- // to be set to selected && be disabled.
- float checkAlpha = selected ? 1f : 0f;
- if (animate) {
- mIconCheck.animate().alpha(checkAlpha).start();
- } else {
- mIconCheck.setAlpha(checkAlpha);
- }
-
- if (!itemView.isEnabled()) {
- assert(!selected);
- return;
- }
-
- super.setSelected(selected, animate);
-
- if (animate) {
- mIconMime.animate().alpha(1f - checkAlpha).start();
- mIconThumb.animate().alpha(1f - checkAlpha).start();
- } else {
- mIconMime.setAlpha(1f - checkAlpha);
- mIconThumb.setAlpha(1f - checkAlpha);
- }
- }
-
- @Override
- public void setEnabled(boolean enabled) {
- super.setEnabled(enabled);
-
- // Text colors enabled/disabled is handle via a color set.
- final float imgAlpha = enabled ? 1f : DISABLED_ALPHA;
- mIconMime.setAlpha(imgAlpha);
- mIconThumb.setAlpha(imgAlpha);
- }
-
- /**
- * Bind this view to the given document for display.
- * @param cursor Pointing to the item to be bound.
- * @param modelId The model ID of the item.
- * @param state Current display state.
- */
- @Override
- public void bind(Cursor cursor, String modelId, State state) {
- assert(cursor != null);
-
- this.modelId = modelId;
-
- final String docAuthority = getCursorString(cursor, RootCursorWrapper.COLUMN_AUTHORITY);
- final String docId = getCursorString(cursor, Document.COLUMN_DOCUMENT_ID);
- final String docMimeType = getCursorString(cursor, Document.COLUMN_MIME_TYPE);
- final String docDisplayName = getCursorString(cursor, Document.COLUMN_DISPLAY_NAME);
- final long docLastModified = getCursorLong(cursor, Document.COLUMN_LAST_MODIFIED);
- final int docIcon = getCursorInt(cursor, Document.COLUMN_ICON);
- final int docFlags = getCursorInt(cursor, Document.COLUMN_FLAGS);
- final String docSummary = getCursorString(cursor, Document.COLUMN_SUMMARY);
- final long docSize = getCursorLong(cursor, Document.COLUMN_SIZE);
- final boolean isDirectory = Document.MIME_TYPE_DIR.equals(docMimeType);
-
- mIconHelper.stopLoading(mIconThumb);
-
- mIconMime.animate().cancel();
- mIconMime.setAlpha(1f);
- mIconThumb.animate().cancel();
- mIconThumb.setAlpha(0f);
-
- final Uri uri = DocumentsContract.buildDocumentUri(docAuthority, docId);
- mIconHelper.load(uri, docMimeType, docFlags, docIcon, docLastModified, mIconThumb,
- mIconMime, null);
-
- mTitle.setText(docDisplayName, TextView.BufferType.SPANNABLE);
- mTitle.setVisibility(View.VISIBLE);
-
-
- boolean hasDetails = false;
- if (isDirectory) {
- // Note, we don't show any details for any directory...ever.
- hasDetails = false;
- } else {
- if (docSummary != null) {
- hasDetails = true;
- mSummary.setText(docSummary);
- mSummary.setVisibility(View.VISIBLE);
- } else {
- mSummary.setVisibility(View.INVISIBLE);
- }
-
- if (docLastModified > 0) {
- hasDetails = true;
- mDate.setText(Shared.formatTime(mContext, docLastModified));
- } else {
- mDate.setText(null);
- }
-
- if (state.showSize && docSize > -1) {
- hasDetails = true;
- mSize.setVisibility(View.VISIBLE);
- mSize.setText(Formatter.formatFileSize(mContext, docSize));
- } else {
- mSize.setVisibility(View.GONE);
- }
- }
-
- // mDetails view doesn't exists in layout-sw720dp-land layout
- if (mDetails != null) {
- mDetails.setVisibility(hasDetails ? View.VISIBLE : View.GONE);
- }
- }
-}
diff --git a/packages/DocumentsUI/src/com/android/documentsui/dirlist/ListeningGestureDetector.java b/packages/DocumentsUI/src/com/android/documentsui/dirlist/ListeningGestureDetector.java
deleted file mode 100644
index 85ff6ed..0000000
--- a/packages/DocumentsUI/src/com/android/documentsui/dirlist/ListeningGestureDetector.java
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
- * Copyright (C) 2016 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.dirlist;
-
-import android.content.Context;
-import android.support.v13.view.DragStartHelper;
-import android.support.v7.widget.RecyclerView;
-import android.support.v7.widget.RecyclerView.OnItemTouchListener;
-import android.view.GestureDetector;
-import android.view.MotionEvent;
-import android.view.View;
-import android.view.View.OnTouchListener;
-
-import com.android.documentsui.Events;
-
-// Previously we listened to events with one class, only to bounce them forward
-// to GestureDetector. We're still doing that here, but with a single class
-// that reduces overall complexity in our glue code.
-final class ListeningGestureDetector extends GestureDetector
- implements OnItemTouchListener, OnTouchListener {
-
- private DragStartHelper mDragHelper;
- private UserInputHandler mInputHandler;
-
- public ListeningGestureDetector(
- Context context, DragStartHelper dragHelper, UserInputHandler handler) {
- super(context, handler);
- mDragHelper = dragHelper;
- mInputHandler = handler;
- setOnDoubleTapListener(handler);
- }
-
- @Override
- public boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e) {
- // TODO: If possible, move this into UserInputHandler.
- if (e.getAction() == MotionEvent.ACTION_DOWN && Events.isMouseEvent(e)) {
- mInputHandler.setLastButtonState(e.getButtonState());
- }
-
- // Detect drag events. When a drag is detected, intercept the rest of the gesture.
- View itemView = rv.findChildViewUnder(e.getX(), e.getY());
- if (itemView != null && mDragHelper.onTouch(itemView, e)) {
- return true;
- }
- // Forward unhandled events to the GestureDetector.
- onTouchEvent(e);
-
- return false;
- }
-
- @Override
- public void onTouchEvent(RecyclerView rv, MotionEvent e) {
- View itemView = rv.findChildViewUnder(e.getX(), e.getY());
- mDragHelper.onTouch(itemView, e);
- // Note: even though this event is being handled as part of a drag gesture, continue
- // forwarding to the GestureDetector. The detector needs to see the entire cluster of
- // events in order to properly interpret gestures.
- onTouchEvent(e);
- }
-
- @Override
- public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) {}
-
- // For mEmptyView right-click context menu
- @Override
- public boolean onTouch(View v, MotionEvent event) {
- if (event.getButtonState() == MotionEvent.BUTTON_SECONDARY) {
- return mInputHandler.onSingleRightClickUp(event);
- }
- return false;
- }
-}
\ No newline at end of file
diff --git a/packages/DocumentsUI/src/com/android/documentsui/dirlist/Model.java b/packages/DocumentsUI/src/com/android/documentsui/dirlist/Model.java
deleted file mode 100644
index 5c15228..0000000
--- a/packages/DocumentsUI/src/com/android/documentsui/dirlist/Model.java
+++ /dev/null
@@ -1,440 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.documentsui.dirlist;
-
-import static com.android.documentsui.Shared.DEBUG;
-import static com.android.documentsui.State.SORT_ORDER_DISPLAY_NAME;
-import static com.android.documentsui.State.SORT_ORDER_LAST_MODIFIED;
-import static com.android.documentsui.State.SORT_ORDER_SIZE;
-import static com.android.documentsui.model.DocumentInfo.getCursorLong;
-import static com.android.documentsui.model.DocumentInfo.getCursorString;
-
-import android.database.Cursor;
-import android.database.MergeCursor;
-import android.net.Uri;
-import android.os.Bundle;
-import android.provider.DocumentsContract;
-import android.provider.DocumentsContract.Document;
-import android.support.annotation.Nullable;
-import android.support.annotation.VisibleForTesting;
-import android.util.Log;
-
-import com.android.documentsui.DirectoryResult;
-import com.android.documentsui.RootCursorWrapper;
-import com.android.documentsui.Shared;
-import com.android.documentsui.dirlist.MultiSelectManager.Selection;
-import com.android.documentsui.model.DocumentInfo;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-/**
- * The data model for the current loaded directory.
- */
-@VisibleForTesting
-public class Model {
- private static final String TAG = "Model";
-
- private boolean mIsLoading;
- private List<UpdateListener> mUpdateListeners = new ArrayList<>();
- @Nullable private Cursor mCursor;
- private int mCursorCount;
- /** Maps Model ID to cursor positions, for looking up items by Model ID. */
- private Map<String, Integer> mPositions = new HashMap<>();
- /**
- * A sorted array of model IDs for the files currently in the Model. Sort order is determined
- * by {@link #mSortOrder}
- */
- private String mIds[] = new String[0];
- private int mSortOrder = SORT_ORDER_DISPLAY_NAME;
-
- @Nullable String info;
- @Nullable String error;
- @Nullable DocumentInfo doc;
-
- private void notifyUpdateListeners() {
- for (UpdateListener listener: mUpdateListeners) {
- listener.onModelUpdate(this);
- }
- }
-
- private void notifyUpdateListeners(Exception e) {
- for (UpdateListener listener: mUpdateListeners) {
- listener.onModelUpdateFailed(e);
- }
- }
-
- void update(DirectoryResult result) {
- if (DEBUG) Log.i(TAG, "Updating model with new result set.");
-
- if (result == null) {
- mCursor = null;
- mCursorCount = 0;
- mIds = new String[0];
- mPositions.clear();
- info = null;
- error = null;
- doc = null;
- mIsLoading = false;
- notifyUpdateListeners();
- return;
- }
-
- if (result.exception != null) {
- Log.e(TAG, "Error while loading directory contents", result.exception);
- notifyUpdateListeners(result.exception);
- return;
- }
-
- mCursor = result.cursor;
- mCursorCount = mCursor.getCount();
- mSortOrder = result.sortOrder;
- doc = result.doc;
-
- updateModelData();
-
- final Bundle extras = mCursor.getExtras();
- if (extras != null) {
- info = extras.getString(DocumentsContract.EXTRA_INFO);
- error = extras.getString(DocumentsContract.EXTRA_ERROR);
- mIsLoading = extras.getBoolean(DocumentsContract.EXTRA_LOADING, false);
- }
-
- notifyUpdateListeners();
- }
-
- @VisibleForTesting
- int getItemCount() {
- return mCursorCount;
- }
-
- /**
- * Scan over the incoming cursor data, generate Model IDs for each row, and sort the IDs
- * according to the current sort order.
- */
- private void updateModelData() {
- int[] positions = new int[mCursorCount];
- mIds = new String[mCursorCount];
- boolean[] isDirs = new boolean[mCursorCount];
- String[] displayNames = null;
- long[] longValues = null;
-
- switch (mSortOrder) {
- case SORT_ORDER_DISPLAY_NAME:
- displayNames = new String[mCursorCount];
- break;
- case SORT_ORDER_LAST_MODIFIED:
- case SORT_ORDER_SIZE:
- longValues = new long[mCursorCount];
- break;
- }
-
- String mimeType;
-
- mCursor.moveToPosition(-1);
- for (int pos = 0; pos < mCursorCount; ++pos) {
- if (!mCursor.moveToNext()) {
- Log.e(TAG, "Fail to move cursor to next pos: " + pos);
- return;
- }
- positions[pos] = pos;
-
- // Generates a Model ID for a cursor entry that refers to a document. The Model ID is a
- // unique string that can be used to identify the document referred to by the cursor.
- // If the cursor is a merged cursor over multiple authorities, then prefix the ids
- // with the authority to avoid collisions.
- if (mCursor instanceof MergeCursor) {
- mIds[pos] = getCursorString(mCursor, RootCursorWrapper.COLUMN_AUTHORITY) + "|" +
- getCursorString(mCursor, Document.COLUMN_DOCUMENT_ID);
- } else {
- mIds[pos] = getCursorString(mCursor, Document.COLUMN_DOCUMENT_ID);
- }
-
- mimeType = getCursorString(mCursor, Document.COLUMN_MIME_TYPE);
- isDirs[pos] = Document.MIME_TYPE_DIR.equals(mimeType);
-
- switch(mSortOrder) {
- case SORT_ORDER_DISPLAY_NAME:
- final String displayName = getCursorString(
- mCursor, Document.COLUMN_DISPLAY_NAME);
- displayNames[pos] = displayName;
- break;
- case SORT_ORDER_LAST_MODIFIED:
- longValues[pos] = getLastModified(mCursor);
- break;
- case SORT_ORDER_SIZE:
- longValues[pos] = getCursorLong(mCursor, Document.COLUMN_SIZE);
- break;
- }
- }
-
- switch (mSortOrder) {
- case SORT_ORDER_DISPLAY_NAME:
- binarySort(displayNames, isDirs, positions, mIds);
- break;
- case SORT_ORDER_LAST_MODIFIED:
- case SORT_ORDER_SIZE:
- binarySort(longValues, isDirs, positions, mIds);
- break;
- }
-
- // Populate the positions.
- mPositions.clear();
- for (int i = 0; i < mCursorCount; ++i) {
- mPositions.put(mIds[i], positions[i]);
- }
- }
-
- /**
- * Sorts model data. Takes three columns of index-corresponded data. The first column is the
- * sort key. Rows are sorted in ascending alphabetical order on the sort key.
- * Directories are always shown first. This code is based on TimSort.binarySort().
- *
- * @param sortKey Data is sorted in ascending alphabetical order.
- * @param isDirs Array saying whether an item is a directory or not.
- * @param positions Cursor positions to be sorted.
- * @param ids Model IDs to be sorted.
- */
- private static void binarySort(String[] sortKey, boolean[] isDirs, int[] positions, String[] ids) {
- final int count = positions.length;
- for (int start = 1; start < count; start++) {
- final int pivotPosition = positions[start];
- final String pivotValue = sortKey[start];
- final boolean pivotIsDir = isDirs[start];
- final String pivotId = ids[start];
-
- int left = 0;
- int right = start;
-
- while (left < right) {
- int mid = (left + right) >>> 1;
-
- // Directories always go in front.
- int compare = 0;
- final boolean rhsIsDir = isDirs[mid];
- if (pivotIsDir && !rhsIsDir) {
- compare = -1;
- } else if (!pivotIsDir && rhsIsDir) {
- compare = 1;
- } else {
- final String lhs = pivotValue;
- final String rhs = sortKey[mid];
- compare = Shared.compareToIgnoreCaseNullable(lhs, rhs);
- }
-
- if (compare < 0) {
- right = mid;
- } else {
- left = mid + 1;
- }
- }
-
- int n = start - left;
- switch (n) {
- case 2:
- positions[left + 2] = positions[left + 1];
- sortKey[left + 2] = sortKey[left + 1];
- isDirs[left + 2] = isDirs[left + 1];
- ids[left + 2] = ids[left + 1];
- case 1:
- positions[left + 1] = positions[left];
- sortKey[left + 1] = sortKey[left];
- isDirs[left + 1] = isDirs[left];
- ids[left + 1] = ids[left];
- break;
- default:
- System.arraycopy(positions, left, positions, left + 1, n);
- System.arraycopy(sortKey, left, sortKey, left + 1, n);
- System.arraycopy(isDirs, left, isDirs, left + 1, n);
- System.arraycopy(ids, left, ids, left + 1, n);
- }
-
- positions[left] = pivotPosition;
- sortKey[left] = pivotValue;
- isDirs[left] = pivotIsDir;
- ids[left] = pivotId;
- }
- }
-
- /**
- * Sorts model data. Takes four columns of index-corresponded data. The first column is the sort
- * key, and the second is an array of mime types. The rows are first bucketed by mime type
- * (directories vs documents) and then each bucket is sorted independently in descending
- * numerical order on the sort key. This code is based on TimSort.binarySort().
- *
- * @param sortKey Data is sorted in descending numerical order.
- * @param isDirs Array saying whether an item is a directory or not.
- * @param positions Cursor positions to be sorted.
- * @param ids Model IDs to be sorted.
- */
- private static void binarySort(
- long[] sortKey, boolean[] isDirs, int[] positions, String[] ids) {
- final int count = positions.length;
- for (int start = 1; start < count; start++) {
- final int pivotPosition = positions[start];
- final long pivotValue = sortKey[start];
- final boolean pivotIsDir = isDirs[start];
- final String pivotId = ids[start];
-
- int left = 0;
- int right = start;
-
- while (left < right) {
- int mid = ((left + right) >>> 1);
-
- // Directories always go in front.
- int compare = 0;
- final boolean rhsIsDir = isDirs[mid];
- if (pivotIsDir && !rhsIsDir) {
- compare = -1;
- } else if (!pivotIsDir && rhsIsDir) {
- compare = 1;
- } else {
- final long lhs = pivotValue;
- final long rhs = sortKey[mid];
- // Sort in descending numerical order. This matches legacy behaviour, which
- // yields largest or most recent items on top.
- compare = -Long.compare(lhs, rhs);
- }
-
- // If numerical comparison yields a tie, use document ID as a tie breaker. This
- // will yield stable results even if incoming items are continually shuffling and
- // have identical numerical sort keys. One common example of this scenario is seen
- // when sorting a set of active downloads by mod time.
- if (compare == 0) {
- compare = pivotId.compareTo(ids[mid]);
- }
-
- if (compare < 0) {
- right = mid;
- } else {
- left = mid + 1;
- }
- }
-
- int n = start - left;
- switch (n) {
- case 2:
- positions[left + 2] = positions[left + 1];
- sortKey[left + 2] = sortKey[left + 1];
- isDirs[left + 2] = isDirs[left + 1];
- ids[left + 2] = ids[left + 1];
- case 1:
- positions[left + 1] = positions[left];
- sortKey[left + 1] = sortKey[left];
- isDirs[left + 1] = isDirs[left];
- ids[left + 1] = ids[left];
- break;
- default:
- System.arraycopy(positions, left, positions, left + 1, n);
- System.arraycopy(sortKey, left, sortKey, left + 1, n);
- System.arraycopy(isDirs, left, isDirs, left + 1, n);
- System.arraycopy(ids, left, ids, left + 1, n);
- }
-
- positions[left] = pivotPosition;
- sortKey[left] = pivotValue;
- isDirs[left] = pivotIsDir;
- ids[left] = pivotId;
- }
- }
-
- /**
- * @return Timestamp for the given document. Some docs (e.g. active downloads) have a null
- * timestamp - these will be replaced with MAX_LONG so that such files get sorted to the top
- * when sorting by date.
- */
- long getLastModified(Cursor cursor) {
- long l = getCursorLong(mCursor, Document.COLUMN_LAST_MODIFIED);
- return (l == -1) ? Long.MAX_VALUE : l;
- }
-
- public @Nullable Cursor getItem(String modelId) {
- Integer pos = mPositions.get(modelId);
- if (pos == null) {
- if (DEBUG) Log.d(TAG, "Unabled to find cursor position for modelId: " + modelId);
- return null;
- }
-
- if (!mCursor.moveToPosition(pos)) {
- if (DEBUG) Log.d(TAG,
- "Unabled to move cursor to position " + pos + " for modelId: " + modelId);
- return null;
- }
-
- return mCursor;
- }
-
- boolean isEmpty() {
- return mCursorCount == 0;
- }
-
- boolean isLoading() {
- return mIsLoading;
- }
-
- List<DocumentInfo> getDocuments(Selection selection) {
- final int size = (selection != null) ? selection.size() : 0;
-
- final List<DocumentInfo> docs = new ArrayList<>(size);
- // NOTE: That as this now iterates over only final (non-provisional) selection.
- for (String modelId: selection) {
- final Cursor cursor = getItem(modelId);
- if (cursor == null) {
- Log.w(TAG, "Skipping document. Unabled to obtain cursor for modelId: " + modelId);
- continue;
- }
- docs.add(DocumentInfo.fromDirectoryCursor(cursor));
- }
- return docs;
- }
-
- public Uri getItemUri(String modelId) {
- final Cursor cursor = getItem(modelId);
- return DocumentInfo.getUri(cursor);
- }
-
- void addUpdateListener(UpdateListener listener) {
- mUpdateListeners.add(listener);
- }
-
- void removeUpdateListener(UpdateListener listener) {
- mUpdateListeners.remove(listener);
- }
-
- static interface UpdateListener {
- /**
- * Called when a successful update has occurred.
- */
- void onModelUpdate(Model model);
-
- /**
- * Called when an update has been attempted but failed.
- */
- void onModelUpdateFailed(Exception e);
- }
-
- /**
- * @return An ordered array of model IDs representing the documents in the model. It is sorted
- * according to the current sort order, which was set by the last model update.
- */
- public String[] getModelIds() {
- return mIds;
- }
-}
diff --git a/packages/DocumentsUI/src/com/android/documentsui/dirlist/ModelBackedDocumentsAdapter.java b/packages/DocumentsUI/src/com/android/documentsui/dirlist/ModelBackedDocumentsAdapter.java
deleted file mode 100644
index 2c1a221..0000000
--- a/packages/DocumentsUI/src/com/android/documentsui/dirlist/ModelBackedDocumentsAdapter.java
+++ /dev/null
@@ -1,188 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.documentsui.dirlist;
-
-import static com.android.documentsui.Shared.DEBUG;
-import static com.android.documentsui.State.MODE_GRID;
-import static com.android.documentsui.State.MODE_LIST;
-import static com.android.documentsui.model.DocumentInfo.getCursorInt;
-import static com.android.documentsui.model.DocumentInfo.getCursorString;
-
-import android.database.Cursor;
-import android.provider.DocumentsContract.Document;
-import android.util.Log;
-import android.view.ViewGroup;
-
-import com.android.documentsui.State;
-
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
-/**
- * Adapts from dirlist.Model to something RecyclerView understands.
- */
-final class ModelBackedDocumentsAdapter extends DocumentsAdapter {
-
- private static final String TAG = "ModelBackedDocuments";
- public static final int ITEM_TYPE_DOCUMENT = 1;
- public static final int ITEM_TYPE_DIRECTORY = 2;
-
- // Provides access to information needed when creating and view holders. This
- // isn't an ideal pattern (more transitive dependency stuff) but good enough for now.
- private final Environment mEnv;
- private final IconHelper mIconHelper; // a transitive dependency of the holders.
-
- /**
- * An ordered list of model IDs. This is the data structure that determines what shows up in
- * the UI, and where.
- */
- private List<String> mModelIds = new ArrayList<>();
-
- // List of files that have been deleted. Some transient directory updates
- // may happen while files are being deleted. During this time we don't
- // want once-hidden files to be re-shown. We only remove
- // items from this list when we get a model update where the model
- // does not contain a corresponding id. This ensures hidden entries
- // don't momentarily re-appear if we get intermediate updates from
- // the file system.
- private Set<String> mHiddenIds = new HashSet<>();
-
- public ModelBackedDocumentsAdapter(Environment env, IconHelper iconHelper) {
- mEnv = env;
- mIconHelper = iconHelper;
- }
-
- @Override
- public DocumentHolder onCreateViewHolder(ViewGroup parent, int viewType) {
- DocumentHolder holder = null;
- final State state = mEnv.getDisplayState();
- switch (state.derivedMode) {
- case MODE_GRID:
- switch (viewType) {
- case ITEM_TYPE_DIRECTORY:
- holder = new GridDirectoryHolder(mEnv.getContext(), parent);
- break;
- case ITEM_TYPE_DOCUMENT:
- holder = new GridDocumentHolder(mEnv.getContext(), parent, mIconHelper);
- break;
- default:
- throw new IllegalStateException("Unsupported layout type.");
- }
- break;
- case MODE_LIST:
- holder = new ListDocumentHolder(mEnv.getContext(), parent, mIconHelper);
- break;
- default:
- throw new IllegalStateException("Unsupported layout mode.");
- }
-
- mEnv.initDocumentHolder(holder);
- return holder;
- }
-
- @Override
- public void onBindViewHolder(DocumentHolder holder, int position, List<Object> payload) {
- if (payload.contains(SELECTION_CHANGED_MARKER)) {
- final boolean selected = mEnv.isSelected(mModelIds.get(position));
- holder.setSelected(selected, true);
- } else {
- onBindViewHolder(holder, position);
- }
- }
-
- @Override
- public void onBindViewHolder(DocumentHolder holder, int position) {
- String modelId = mModelIds.get(position);
- Cursor cursor = mEnv.getModel().getItem(modelId);
- holder.bind(cursor, modelId, mEnv.getDisplayState());
-
- final String docMimeType = getCursorString(cursor, Document.COLUMN_MIME_TYPE);
- final int docFlags = getCursorInt(cursor, Document.COLUMN_FLAGS);
-
- boolean enabled = mEnv.isDocumentEnabled(docMimeType, docFlags);
- boolean selected = mEnv.isSelected(modelId);
- if (!enabled) {
- assert(!selected);
- }
- holder.setEnabled(enabled);
- holder.setSelected(mEnv.isSelected(modelId), false);
-
- mEnv.onBindDocumentHolder(holder, cursor);
- }
-
- @Override
- public int getItemCount() {
- return mModelIds.size();
- }
-
- @Override
- public void onModelUpdate(Model model) {
- if (DEBUG && mHiddenIds.size() > 0) {
- Log.d(TAG, "Updating model with hidden ids: " + mHiddenIds);
- }
-
- String[] modelIds = model.getModelIds();
- mModelIds = new ArrayList<>(modelIds.length);
- for (String id : modelIds) {
- if (!mHiddenIds.contains(id)) {
- mModelIds.add(id);
- } else {
- if (DEBUG) Log.d(TAG, "Omitting hidden id from model during update: " + id);
- }
- }
-
- // Finally remove any hidden ids that aren't present in the model.
- // This assumes that model updates represent a complete set of files.
- mHiddenIds.retainAll(mModelIds);
- }
-
- @Override
- public void onModelUpdateFailed(Exception e) {
- Log.w(TAG, "Model update failed.", e);
- mModelIds.clear();
- }
-
- @Override
- public String getModelId(int adapterPosition) {
- return mModelIds.get(adapterPosition);
- }
-
- @Override
- public List<String> getModelIds() {
- return mModelIds;
- }
-
- @Override
- public int getItemViewType(int position) {
- return isDirectory(mEnv.getModel(), position)
- ? ITEM_TYPE_DIRECTORY
- : ITEM_TYPE_DOCUMENT;
- }
-
- @Override
- public void onItemSelectionChanged(String id) {
- int position = mModelIds.indexOf(id);
-
- if (position >= 0) {
- notifyItemChanged(position, SELECTION_CHANGED_MARKER);
- } else {
- Log.w(TAG, "Item change notification received for unknown item: " + id);
- }
- }
-}
diff --git a/packages/DocumentsUI/src/com/android/documentsui/dirlist/MultiSelectManager.java b/packages/DocumentsUI/src/com/android/documentsui/dirlist/MultiSelectManager.java
deleted file mode 100644
index 9c0b967..0000000
--- a/packages/DocumentsUI/src/com/android/documentsui/dirlist/MultiSelectManager.java
+++ /dev/null
@@ -1,821 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.documentsui.dirlist;
-
-import static com.android.documentsui.Shared.DEBUG;
-
-import android.annotation.IntDef;
-import android.os.Parcel;
-import android.os.Parcelable;
-import android.support.annotation.VisibleForTesting;
-import android.support.v7.widget.RecyclerView;
-import android.util.Log;
-
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import javax.annotation.Nullable;
-
-/**
- * MultiSelectManager provides support traditional multi-item selection support to RecyclerView.
- * Additionally it can be configured to restrict selection to a single element, @see
- * #setSelectMode.
- */
-public final class MultiSelectManager {
-
- @IntDef(flag = true, value = {
- MODE_MULTIPLE,
- MODE_SINGLE
- })
- @Retention(RetentionPolicy.SOURCE)
- public @interface SelectionMode {}
- public static final int MODE_MULTIPLE = 0;
- public static final int MODE_SINGLE = 1;
-
- private static final String TAG = "MultiSelectManager";
-
- private final Selection mSelection = new Selection();
-
- private final DocumentsAdapter mAdapter;
- private final List<MultiSelectManager.Callback> mCallbacks = new ArrayList<>(1);
-
- private @Nullable Range mRanger;
- private boolean mSingleSelect;
-
- public MultiSelectManager(DocumentsAdapter adapter, @SelectionMode int mode) {
-
- assert(adapter != null);
-
- mAdapter = adapter;
-
- mSingleSelect = mode == MODE_SINGLE;
- mAdapter.registerAdapterDataObserver(
- new RecyclerView.AdapterDataObserver() {
-
- private List<String> mModelIds;
-
- @Override
- public void onChanged() {
- mModelIds = mAdapter.getModelIds();
-
- // Update the selection to remove any disappeared IDs.
- mSelection.cancelProvisionalSelection();
- mSelection.intersect(mModelIds);
- }
-
- @Override
- public void onItemRangeChanged(
- int startPosition, int itemCount, Object payload) {
- // No change in position. Ignoring.
- }
-
- @Override
- public void onItemRangeInserted(int startPosition, int itemCount) {
- mSelection.cancelProvisionalSelection();
- }
-
- @Override
- public void onItemRangeRemoved(int startPosition, int itemCount) {
- assert(startPosition >= 0);
- assert(itemCount > 0);
-
- mSelection.cancelProvisionalSelection();
- // Remove any disappeared IDs from the selection.
- mSelection.intersect(mModelIds);
- }
-
- @Override
- public void onItemRangeMoved(int fromPosition, int toPosition, int itemCount) {
- throw new UnsupportedOperationException();
- }
- });
- }
-
- void bindContoller(BandController controller) {
- // Provides BandController with access to private mSelection state.
- controller.bindSelection(mSelection);
- }
-
- /**
- * Adds {@code callback} such that it will be notified when {@code MultiSelectManager}
- * events occur.
- *
- * @param callback
- */
- public void addCallback(MultiSelectManager.Callback callback) {
- mCallbacks.add(callback);
- }
-
- public boolean hasSelection() {
- return !mSelection.isEmpty();
- }
-
- /**
- * Returns a Selection object that provides a live view
- * on the current selection.
- *
- * @see #getSelection(Selection) on how to get a snapshot
- * of the selection that will not reflect future changes
- * to selection.
- *
- * @return The current selection.
- */
- public Selection getSelection() {
- return mSelection;
- }
-
- /**
- * Updates {@code dest} to reflect the current selection.
- * @param dest
- *
- * @return The Selection instance passed in, for convenience.
- */
- public Selection getSelection(Selection dest) {
- dest.copyFrom(mSelection);
- return dest;
- }
-
- public void replaceSelection(Iterable<String> ids) {
- clearSelection();
- setItemsSelected(ids, true);
- }
-
- /**
- * Returns an unordered array of selected positions, including any
- * provisional selection currently in effect.
- */
- public void restoreSelection(Selection other) {
- setItemsSelected(other.mSelection, true);
- // NOTE: We intentionally don't restore provisional selection. It's provisional.
- }
-
- /**
- * Sets the selected state of the specified items. Note that the callback will NOT
- * be consulted to see if an item can be selected.
- *
- * @param ids
- * @param selected
- * @return
- */
- public boolean setItemsSelected(Iterable<String> ids, boolean selected) {
- boolean changed = false;
- for (String id: ids) {
- boolean itemChanged = selected ? mSelection.add(id) : mSelection.remove(id);
- if (itemChanged) {
- notifyItemStateChanged(id, selected);
- }
- changed |= itemChanged;
- }
- notifySelectionChanged();
- return changed;
- }
-
- /**
- * Clears the selection and notifies (even if nothing changes).
- */
- public void clearSelection() {
- clearSelectionQuietly();
- notifySelectionChanged();
- }
-
- /**
- * Clears the selection, without notifying selection listeners. UI elements still need to be
- * notified about state changes so that they can update their appearance.
- */
- private void clearSelectionQuietly() {
- mRanger = null;
-
- if (!hasSelection()) {
- return;
- }
-
- Selection oldSelection = getSelection(new Selection());
- mSelection.clear();
-
- for (String id: oldSelection.mSelection) {
- notifyItemStateChanged(id, false);
- }
- for (String id: oldSelection.mProvisionalSelection) {
- notifyItemStateChanged(id, false);
- }
- }
-
- void snapSelection(int position) {
- mRanger.snapSelection(position);
-
- // We're being lazy here notifying even when something might not have changed.
- // To make this more correct, we'd need to update the Ranger class to return
- // information about what has changed.
- notifySelectionChanged();
- }
-
- /**
- * Toggles selection on the item with the given model ID.
- *
- * @param modelId
- */
- public void toggleSelection(String modelId) {
- assert(modelId != null);
-
- boolean changed = false;
- if (mSelection.contains(modelId)) {
- changed = attemptDeselect(modelId);
- } else {
- changed = attemptSelect(modelId);
- }
-
- if (changed) {
- notifySelectionChanged();
- }
- }
-
- /**
- * Starts a range selection. If a range selection is already active, this will start a new range
- * selection (which will reset the range anchor).
- *
- * @param pos The anchor position for the selection range.
- */
- void startRangeSelection(int pos) {
- attemptSelect(mAdapter.getModelId(pos));
- setSelectionRangeBegin(pos);
- }
-
- /**
- * Sets the end point for the current range selection, started by a call to
- * {@link #startRangeSelection(int)}. This function should only be called when a range selection
- * is active (see {@link #isRangeSelectionActive()}. Items in the range [anchor, end] will be
- * selected.
- *
- * @param pos The new end position for the selection range.
- */
- void snapRangeSelection(int pos) {
- if (!isRangeSelectionActive()) {
- throw new IllegalStateException("Range start point not set.");
- }
-
- mRanger.snapSelection(pos);
- notifySelectionChanged();
- }
-
- /**
- * Stops an in-progress range selection.
- */
- void endRangeSelection() {
- mRanger = null;
- }
-
- /**
- * @return Whether or not there is a current range selection active.
- */
- boolean isRangeSelectionActive() {
- return mRanger != null;
- }
-
- /**
- * Sets the magic location at which a selection range begins (the selection anchor). This value
- * is consulted when determining how to extend, and modify selection ranges. Calling this when a
- * range selection is active will reset the range selection.
- *
- * @throws IllegalStateException if {@code position} is not already be selected
- * @param position
- */
- void setSelectionRangeBegin(int position) {
- if (position == RecyclerView.NO_POSITION) {
- return;
- }
-
- if (mSelection.contains(mAdapter.getModelId(position))) {
- mRanger = new Range(position);
- }
- }
-
- /**
- * Try to set selection state for all elements in range. Not that callbacks can cancel selection
- * of specific items, so some or even all items may not reflect the desired state after the
- * update is complete.
- *
- * @param begin Adapter position for range start (inclusive).
- * @param end Adapter position for range end (inclusive).
- * @param selected New selection state.
- */
- private void updateRange(int begin, int end, boolean selected) {
- assert(end >= begin);
- for (int i = begin; i <= end; i++) {
- String id = mAdapter.getModelId(i);
- if (id == null) {
- continue;
- }
-
- if (selected) {
- boolean canSelect = notifyBeforeItemStateChange(id, true);
- if (canSelect) {
- if (mSingleSelect && hasSelection()) {
- clearSelectionQuietly();
- }
- selectAndNotify(id);
- }
- } else {
- attemptDeselect(id);
- }
- }
- }
-
- /**
- * @param modelId
- * @return True if the update was applied.
- */
- private boolean selectAndNotify(String modelId) {
- boolean changed = mSelection.add(modelId);
- if (changed) {
- notifyItemStateChanged(modelId, true);
- }
- return changed;
- }
-
- /**
- * @param id
- * @return True if the update was applied.
- */
- private boolean attemptDeselect(String id) {
- assert(id != null);
- if (notifyBeforeItemStateChange(id, false)) {
- mSelection.remove(id);
- notifyItemStateChanged(id, false);
- if (DEBUG) Log.d(TAG, "Selection after deselect: " + mSelection);
- return true;
- } else {
- if (DEBUG) Log.d(TAG, "Select cancelled by listener.");
- return false;
- }
- }
-
- /**
- * @param id
- * @return True if the update was applied.
- */
- private boolean attemptSelect(String id) {
- assert(id != null);
- boolean canSelect = notifyBeforeItemStateChange(id, true);
- if (!canSelect) {
- return false;
- }
- if (mSingleSelect && hasSelection()) {
- clearSelectionQuietly();
- }
-
- selectAndNotify(id);
- return true;
- }
-
- boolean notifyBeforeItemStateChange(String id, boolean nextState) {
- int lastListener = mCallbacks.size() - 1;
- for (int i = lastListener; i > -1; i--) {
- if (!mCallbacks.get(i).onBeforeItemStateChange(id, nextState)) {
- return false;
- }
- }
- return true;
- }
-
- /**
- * Notifies registered listeners when the selection status of a single item
- * (identified by {@code position}) changes.
- */
- void notifyItemStateChanged(String id, boolean selected) {
- assert(id != null);
- int lastListener = mCallbacks.size() - 1;
- for (int i = lastListener; i > -1; i--) {
- mCallbacks.get(i).onItemStateChanged(id, selected);
- }
- mAdapter.onItemSelectionChanged(id);
- }
-
- /**
- * Notifies registered listeners when the selection has changed. This
- * notification should be sent only once a full series of changes
- * is complete, e.g. clearingSelection, or updating the single
- * selection from one item to another.
- */
- void notifySelectionChanged() {
- int lastListener = mCallbacks.size() - 1;
- for (int i = lastListener; i > -1; i--) {
- mCallbacks.get(i).onSelectionChanged();
- }
- }
-
- /**
- * Class providing support for managing range selections.
- */
- private final class Range {
- private static final int UNDEFINED = -1;
-
- final int mBegin;
- int mEnd = UNDEFINED;
-
- public Range(int begin) {
- if (DEBUG) Log.d(TAG, "New Ranger created beginning @ " + begin);
- mBegin = begin;
- }
-
- private void snapSelection(int position) {
- assert(mRanger != null);
- assert(position != RecyclerView.NO_POSITION);
-
- if (mEnd == UNDEFINED || mEnd == mBegin) {
- // Reset mEnd so it can be established in establishRange.
- mEnd = UNDEFINED;
- establishRange(position);
- } else {
- reviseRange(position);
- }
- }
-
- private void establishRange(int position) {
- assert(mRanger.mEnd == UNDEFINED);
-
- if (position == mBegin) {
- mEnd = position;
- }
-
- if (position > mBegin) {
- updateRange(mBegin + 1, position, true);
- } else if (position < mBegin) {
- updateRange(position, mBegin - 1, true);
- }
-
- mEnd = position;
- }
-
- private void reviseRange(int position) {
- assert(mEnd != UNDEFINED);
- assert(mBegin != mEnd);
-
- if (position == mEnd) {
- if (DEBUG) Log.i(TAG, "Skipping no-op revision click on mEndRange.");
- }
-
- if (mEnd > mBegin) {
- reviseAscendingRange(position);
- } else if (mEnd < mBegin) {
- reviseDescendingRange(position);
- }
- // the "else" case is covered by checkState at beginning of method.
-
- mEnd = position;
- }
-
- /**
- * Updates an existing ascending seleciton.
- * @param position
- */
- private void reviseAscendingRange(int position) {
- // Reducing or reversing the range....
- if (position < mEnd) {
- if (position < mBegin) {
- updateRange(mBegin + 1, mEnd, false);
- updateRange(position, mBegin -1, true);
- } else {
- updateRange(position + 1, mEnd, false);
- }
- }
-
- // Extending the range...
- else if (position > mEnd) {
- updateRange(mEnd + 1, position, true);
- }
- }
-
- private void reviseDescendingRange(int position) {
- // Reducing or reversing the range....
- if (position > mEnd) {
- if (position > mBegin) {
- updateRange(mEnd, mBegin - 1, false);
- updateRange(mBegin + 1, position, true);
- } else {
- updateRange(mEnd, position - 1, false);
- }
- }
-
- // Extending the range...
- else if (position < mEnd) {
- updateRange(position, mEnd - 1, true);
- }
- }
- }
-
- /**
- * Object representing the current selection. Provides read only access
- * public access, and private write access.
- */
- public static final class Selection implements Iterable<String>, Parcelable {
-
- // This class tracks selected items by managing two sets: the saved selection, and the total
- // selection. Saved selections are those which have been completed by tapping an item or by
- // completing a band select operation. Provisional selections are selections which have been
- // temporarily created by an in-progress band select operation (once the user releases the
- // mouse button during a band select operation, the selected items become saved). The total
- // selection is the combination of both the saved selection and the provisional
- // selection. Tracking both separately is necessary to ensure that saved selections do not
- // become deselected when they are removed from the provisional selection; for example, if
- // item A is tapped (and selected), then an in-progress band select covers A then uncovers
- // A, A should still be selected as it has been saved. To ensure this behavior, the saved
- // selection must be tracked separately.
- private final Set<String> mSelection;
- private final Set<String> mProvisionalSelection;
- private String mDirectoryKey;
-
- public Selection() {
- mSelection = new HashSet<String>();
- mProvisionalSelection = new HashSet<String>();
- }
-
- /**
- * Used by CREATOR.
- */
- private Selection(String directoryKey, Set<String> selection) {
- mDirectoryKey = directoryKey;
- mSelection = selection;
- mProvisionalSelection = new HashSet<String>();
- }
-
- /**
- * @param id
- * @return true if the position is currently selected.
- */
- public boolean contains(@Nullable String id) {
- return mSelection.contains(id) || mProvisionalSelection.contains(id);
- }
-
- /**
- * Returns an {@link Iterator} that iterators over the selection, *excluding*
- * any provisional selection.
- *
- * {@inheritDoc}
- */
- @Override
- public Iterator<String> iterator() {
- return mSelection.iterator();
- }
-
- /**
- * @return size of the selection including both final and provisional selected items.
- */
- public int size() {
- return mSelection.size() + mProvisionalSelection.size();
- }
-
- /**
- * @return true if the selection is empty.
- */
- public boolean isEmpty() {
- return mSelection.isEmpty() && mProvisionalSelection.isEmpty();
- }
-
- /**
- * Sets the provisional selection, which is a temporary selection that can be saved,
- * canceled, or adjusted at a later time. When a new provision selection is applied, the old
- * one (if it exists) is abandoned.
- * @return Map of ids added or removed. Added ids have a value of true, removed are false.
- */
- @VisibleForTesting
- protected Map<String, Boolean> setProvisionalSelection(Set<String> newSelection) {
- Map<String, Boolean> delta = new HashMap<>();
-
- for (String id: mProvisionalSelection) {
- // Mark each item that used to be in the selection but is unsaved and not in the new
- // provisional selection.
- if (!newSelection.contains(id) && !mSelection.contains(id)) {
- delta.put(id, false);
- }
- }
-
- for (String id: mSelection) {
- // Mark each item that used to be in the selection but is unsaved and not in the new
- // provisional selection.
- if (!newSelection.contains(id)) {
- delta.put(id, false);
- }
- }
-
- for (String id: newSelection) {
- // Mark each item that was not previously in the selection but is in the new
- // provisional selection.
- if (!mSelection.contains(id) && !mProvisionalSelection.contains(id)) {
- delta.put(id, true);
- }
- }
-
- // Now, iterate through the changes and actually add/remove them to/from the current
- // selection. This could not be done in the previous loops because changing the size of
- // the selection mid-iteration changes iteration order erroneously.
- for (Map.Entry<String, Boolean> entry: delta.entrySet()) {
- String id = entry.getKey();
- if (entry.getValue()) {
- mProvisionalSelection.add(id);
- } else {
- mProvisionalSelection.remove(id);
- }
- }
-
- return delta;
- }
-
- /**
- * Saves the existing provisional selection. Once the provisional selection is saved,
- * subsequent provisional selections which are different from this existing one cannot
- * cause items in this existing provisional selection to become deselected.
- */
- @VisibleForTesting
- protected void applyProvisionalSelection() {
- mSelection.addAll(mProvisionalSelection);
- mProvisionalSelection.clear();
- }
-
- /**
- * Abandons the existing provisional selection so that all items provisionally selected are
- * now deselected.
- */
- @VisibleForTesting
- void cancelProvisionalSelection() {
- mProvisionalSelection.clear();
- }
-
- /** @hide */
- @VisibleForTesting
- boolean add(String id) {
- if (!mSelection.contains(id)) {
- mSelection.add(id);
- return true;
- }
- return false;
- }
-
- /** @hide */
- @VisibleForTesting
- boolean remove(String id) {
- if (mSelection.contains(id)) {
- mSelection.remove(id);
- return true;
- }
- return false;
- }
-
- public void clear() {
- mSelection.clear();
- }
-
- /**
- * Trims this selection to be the intersection of itself with the set of given IDs.
- */
- public void intersect(Collection<String> ids) {
- mSelection.retainAll(ids);
- mProvisionalSelection.retainAll(ids);
- }
-
- @VisibleForTesting
- void copyFrom(Selection source) {
- mSelection.clear();
- mSelection.addAll(source.mSelection);
-
- mProvisionalSelection.clear();
- mProvisionalSelection.addAll(source.mProvisionalSelection);
- }
-
- @Override
- public String toString() {
- if (size() <= 0) {
- return "size=0, items=[]";
- }
-
- StringBuilder buffer = new StringBuilder(size() * 28);
- buffer.append("Selection{")
- .append("applied{size=" + mSelection.size())
- .append(", entries=" + mSelection)
- .append("}, provisional{size=" + mProvisionalSelection.size())
- .append(", entries=" + mProvisionalSelection)
- .append("}}");
- return buffer.toString();
- }
-
- @Override
- public int hashCode() {
- return mSelection.hashCode() ^ mProvisionalSelection.hashCode();
- }
-
- @Override
- public boolean equals(Object that) {
- if (this == that) {
- return true;
- }
-
- if (!(that instanceof Selection)) {
- return false;
- }
-
- return mSelection.equals(((Selection) that).mSelection) &&
- mProvisionalSelection.equals(((Selection) that).mProvisionalSelection);
- }
-
- /**
- * Sets the state key for this selection, which allows us to match selections
- * to particular states (of DirectoryFragment). Basically this lets us avoid
- * loading a persisted selection in the wrong directory.
- */
- public void setDirectoryKey(String key) {
- mDirectoryKey = key;
- }
-
- /**
- * Sets the state key for this selection, which allows us to match selections
- * to particular states (of DirectoryFragment). Basically this lets us avoid
- * loading a persisted selection in the wrong directory.
- */
- public boolean hasDirectoryKey(String key) {
- return key.equals(mDirectoryKey);
- }
-
- @Override
- public int describeContents() {
- return 0;
- }
-
- @Override
- public void writeToParcel(Parcel dest, int flags) {
- dest.writeString(mDirectoryKey);
- dest.writeStringList(new ArrayList<>(mSelection));
- // We don't include provisional selection since it is
- // typically coupled to some other runtime state (like a band).
- }
-
- public static final ClassLoaderCreator<Selection> CREATOR =
- new ClassLoaderCreator<Selection>() {
- @Override
- public Selection createFromParcel(Parcel in) {
- return createFromParcel(in, null);
- }
-
- @Override
- public Selection createFromParcel(Parcel in, ClassLoader loader) {
- String directoryKey = in.readString();
-
- ArrayList<String> selected = new ArrayList<>();
- in.readStringList(selected);
-
- return new Selection(directoryKey, new HashSet<String>(selected));
- }
-
- @Override
- public Selection[] newArray(int size) {
- return new Selection[size];
- }
- };
- }
-
- public interface Callback {
- /**
- * Called when an item is selected or unselected while in selection mode.
- *
- * @param position Adapter position of the item that was checked or unchecked
- * @param selected <code>true</code> if the item is now selected, <code>false</code>
- * if the item is now unselected.
- */
- public void onItemStateChanged(String id, boolean selected);
-
- /**
- * Called prior to an item changing state. Callbacks can cancel
- * the change at {@code position} by returning {@code false}.
- *
- * @param id Adapter position of the item that was checked or unchecked
- * @param selected <code>true</code> if the item is to be selected, <code>false</code>
- * if the item is to be unselected.
- */
- public boolean onBeforeItemStateChange(String id, boolean selected);
-
- /**
- * Called immediately after completion of any set of changes.
- */
- public void onSelectionChanged();
- }
-}
diff --git a/packages/DocumentsUI/src/com/android/documentsui/dirlist/RenameDocumentFragment.java b/packages/DocumentsUI/src/com/android/documentsui/dirlist/RenameDocumentFragment.java
deleted file mode 100644
index 73aa366..0000000
--- a/packages/DocumentsUI/src/com/android/documentsui/dirlist/RenameDocumentFragment.java
+++ /dev/null
@@ -1,241 +0,0 @@
-/*
- * Copyright (C) 2016 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.dirlist;
-
-import static com.android.documentsui.Shared.TAG;
-
-import android.app.AlertDialog;
-import android.app.Dialog;
-import android.app.DialogFragment;
-import android.app.FragmentManager;
-import android.content.ContentProviderClient;
-import android.content.ContentResolver;
-import android.content.Context;
-import android.content.DialogInterface;
-import android.content.DialogInterface.OnClickListener;
-import android.net.Uri;
-import android.os.AsyncTask;
-import android.os.Bundle;
-import android.provider.DocumentsContract;
-import android.support.annotation.Nullable;
-import android.support.design.widget.Snackbar;
-import android.util.Log;
-import android.view.KeyEvent;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.inputmethod.EditorInfo;
-import android.widget.EditText;
-import android.widget.TextView;
-import android.widget.TextView.OnEditorActionListener;
-
-import com.android.documentsui.BaseActivity;
-import com.android.documentsui.DocumentsApplication;
-import com.android.documentsui.Metrics;
-import com.android.documentsui.R;
-import com.android.documentsui.Shared;
-import com.android.documentsui.Snackbars;
-import com.android.documentsui.model.DocumentInfo;
-
-/**
- * Dialog to rename file or directory.
- */
-public class RenameDocumentFragment extends DialogFragment {
- private static final String TAG_RENAME_DOCUMENT = "rename_document";
- private DocumentInfo mDocument;
- private EditText mEditText;
-
- public static void show(FragmentManager fm, DocumentInfo document) {
- final RenameDocumentFragment dialog = new RenameDocumentFragment();
- dialog.mDocument = document;
- dialog.show(fm, TAG_RENAME_DOCUMENT);
- }
-
- /**
- * Creates the dialog UI.
- * @param savedInstanceState
- * @return
- */
- @Override
- public Dialog onCreateDialog(Bundle savedInstanceState) {
- Context context = getActivity();
- AlertDialog.Builder builder = new AlertDialog.Builder(context);
- LayoutInflater dialogInflater = LayoutInflater.from(builder.getContext());
- View view = dialogInflater.inflate(R.layout.dialog_file_name, null, false);
-
- mEditText = (EditText) view.findViewById(android.R.id.text1);
- builder.setTitle(R.string.menu_rename);
- builder.setView(view);
-
- builder.setPositiveButton(
- android.R.string.ok,
- new OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int which) {
- renameDocuments(mEditText.getText().toString());
- }
- });
-
- builder.setNegativeButton(android.R.string.cancel, null);
-
- final AlertDialog dialog = builder.create();
-
- // Workaround for the problem - virtual keyboard doesn't show on the phone.
- Shared.ensureKeyboardPresent(context, dialog);
-
- mEditText.setOnEditorActionListener(
- new OnEditorActionListener() {
- @Override
- public boolean onEditorAction(
- TextView view, int actionId, @Nullable KeyEvent event) {
- if ((actionId == EditorInfo.IME_ACTION_DONE) || (event != null
- && event.getKeyCode() == KeyEvent.KEYCODE_ENTER
- && event.hasNoModifiers())) {
- renameDocuments(mEditText.getText().toString());
- dialog.dismiss();
- return true;
- }
- return false;
- }
- });
- return dialog;
- }
-
- /**
- * Sets/Restores the data.
- * @param savedInstanceState
- * @return
- */
- @Override
- public void onActivityCreated(Bundle savedInstanceState) {
- super.onActivityCreated(savedInstanceState);
-
- if(savedInstanceState == null) {
- // Fragment created for the first time, we set the text.
- // mDocument value was set in show
- mEditText.setText(mDocument.displayName);
- }
- else {
- // Fragment restored, text was restored automatically.
- // mDocument value needs to be restored.
- mDocument = savedInstanceState.getParcelable(Shared.EXTRA_DOC);
- }
- // Do selection in both cases, because we cleared it.
- selectFileName(mEditText);
- }
-
- @Override
- public void onSaveInstanceState(Bundle outState) {
- // Clear selection before storing state and restore it manually,
- // because otherwise after rotation selection is displayed with cut/copy menu visible :/
- clearFileNameSelection(mEditText);
-
- super.onSaveInstanceState(outState);
-
- outState.putParcelable(Shared.EXTRA_DOC, mDocument);
- }
-
- /**
- * Validates if string is a proper document name.
- * Checks if string is not empty. More rules might be added later.
- * @param docName string representing document name
- * @returns true if string is a valid name.
- **/
- private boolean isValidDocumentName(String docName) {
- return !docName.isEmpty();
- }
-
- /**
- * Fills text field with the file name and selects the name without extension.
- *
- * @param editText text field to be filled
- */
- private void selectFileName(EditText editText) {
- String text = editText.getText().toString();
- int separatorIndex = text.indexOf(".");
- editText.setSelection(0,
- (separatorIndex == -1 || mDocument.isDirectory()) ? text.length() : separatorIndex);
- }
-
- /**
- * Clears selection in text field.
- *
- * @param editText text field to be cleared.
- */
- private void clearFileNameSelection(EditText editText) {
- editText.setSelection(0, 0);
- }
-
- private void renameDocuments(String newDisplayName) {
- BaseActivity activity = (BaseActivity) getActivity();
-
- if (isValidDocumentName(newDisplayName)) {
- new RenameDocumentsTask(activity, newDisplayName).execute(mDocument);
- } else {
- Log.w(TAG, "Failed to rename file - invalid name:" + newDisplayName);
- Snackbars.makeSnackbar(getActivity(), R.string.rename_error,
- Snackbar.LENGTH_SHORT).show();
- }
-
- }
-
- private class RenameDocumentsTask extends AsyncTask<DocumentInfo, Void, DocumentInfo> {
- private final BaseActivity mActivity;
- private final String mNewDisplayName;
-
- public RenameDocumentsTask(BaseActivity activity, String newDisplayName) {
- mActivity = activity;
- mNewDisplayName = newDisplayName;
- }
-
- @Override
- protected void onPreExecute() {
- mActivity.setPending(true);
- }
-
- @Override
- protected DocumentInfo doInBackground(DocumentInfo... document) {
- assert(document.length == 1);
- final ContentResolver resolver = mActivity.getContentResolver();
- ContentProviderClient client = null;
-
- try {
- client = DocumentsApplication.acquireUnstableProviderOrThrow(
- resolver, document[0].derivedUri.getAuthority());
- Uri newUri = DocumentsContract.renameDocument(
- client, document[0].derivedUri, mNewDisplayName);
- return DocumentInfo.fromUri(resolver, newUri);
- } catch (Exception e) {
- Log.w(TAG, "Failed to rename file", e);
- return null;
- } finally {
- ContentProviderClient.releaseQuietly(client);
- }
- }
-
- @Override
- protected void onPostExecute(DocumentInfo result) {
- if (result != null) {
- Metrics.logRenameFileOperation(getContext());
- } else {
- Snackbars.makeSnackbar(mActivity, R.string.rename_error, Snackbar.LENGTH_SHORT)
- .show();
- Metrics.logRenameFileError(getContext());
- }
- mActivity.setPending(false);
- }
- }
-}
diff --git a/packages/DocumentsUI/src/com/android/documentsui/dirlist/SectionBreakDocumentsAdapterWrapper.java b/packages/DocumentsUI/src/com/android/documentsui/dirlist/SectionBreakDocumentsAdapterWrapper.java
deleted file mode 100644
index 55a6de7..0000000
--- a/packages/DocumentsUI/src/com/android/documentsui/dirlist/SectionBreakDocumentsAdapterWrapper.java
+++ /dev/null
@@ -1,243 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.documentsui.dirlist;
-
-import android.content.Context;
-import android.database.Cursor;
-import android.support.v7.widget.GridLayoutManager;
-import android.support.v7.widget.RecyclerView.AdapterDataObserver;
-import android.view.ViewGroup;
-import android.widget.Space;
-
-import com.android.documentsui.R;
-import com.android.documentsui.State;
-
-import java.util.List;
-
-/**
- * Adapter wrapper that inserts a sort of line break item between directories and regular files.
- * Only needs to be used in GRID mode...at this time.
- */
-final class SectionBreakDocumentsAdapterWrapper extends DocumentsAdapter {
-
- private static final String TAG = "SectionBreakDocumentsAdapterWrapper";
- private static final int ITEM_TYPE_SECTION_BREAK = Integer.MAX_VALUE;
-
- private final Environment mEnv;
- private final DocumentsAdapter mDelegate;
-
- private int mBreakPosition = -1;
-
- SectionBreakDocumentsAdapterWrapper(Environment environment, DocumentsAdapter delegate) {
- mEnv = environment;
- mDelegate = delegate;
-
- // Relay events published by our delegate to our listeners (presumably RecyclerView)
- // with adjusted positions.
- mDelegate.registerAdapterDataObserver(new EventRelay());
- }
-
- public GridLayoutManager.SpanSizeLookup createSpanSizeLookup() {
- return new GridLayoutManager.SpanSizeLookup() {
- @Override
- public int getSpanSize(int position) {
- // Make layout whitespace span the grid. This has the effect of breaking
- // grid rows whenever layout whitespace is encountered.
- if (getItemViewType(position) == ITEM_TYPE_SECTION_BREAK) {
- return mEnv.getColumnCount();
- } else {
- return 1;
- }
- }
- };
- }
-
- @Override
- public DocumentHolder onCreateViewHolder(ViewGroup parent, int viewType) {
- if (viewType == ITEM_TYPE_SECTION_BREAK) {
- return new EmptyDocumentHolder(mEnv.getContext());
- } else {
- return mDelegate.createViewHolder(parent, viewType);
- }
- }
-
- @Override
- public void onBindViewHolder(DocumentHolder holder, int p, List<Object> payload) {
- if (holder.getItemViewType() != ITEM_TYPE_SECTION_BREAK) {
- mDelegate.onBindViewHolder(holder, toDelegatePosition(p), payload);
- } else {
- ((EmptyDocumentHolder)holder).bind(mEnv.getDisplayState());
- }
- }
-
- @Override
- public void onBindViewHolder(DocumentHolder holder, int p) {
- if (holder.getItemViewType() != ITEM_TYPE_SECTION_BREAK) {
- mDelegate.onBindViewHolder(holder, toDelegatePosition(p));
- } else {
- ((EmptyDocumentHolder)holder).bind(mEnv.getDisplayState());
- }
- }
-
- @Override
- public int getItemCount() {
- return mBreakPosition == -1
- ? mDelegate.getItemCount()
- : mDelegate.getItemCount() + 1;
- }
-
- @Override
- public void onModelUpdate(Model model) {
- mDelegate.onModelUpdate(model);
- mBreakPosition = -1;
-
- // Walk down the list of IDs till we encounter something that's not a directory, and
- // insert a whitespace element - this introduces a visual break in the grid between
- // folders and documents.
- // TODO: This code makes assumptions about the model, namely, that it performs a
- // bucketed sort where directories will always be ordered before other files. CBB.
- List<String> modelIds = mDelegate.getModelIds();
- for (int i = 0; i < modelIds.size(); i++) {
- if (!isDirectory(model, i)) {
- // If the break is the first thing in the list, then there are actually no
- // directories. In that case, don't insert a break at all.
- if (i > 0) {
- mBreakPosition = i;
- }
- break;
- }
- }
- }
-
- @Override
- public void onModelUpdateFailed(Exception e) {
- mDelegate.onModelUpdateFailed(e);
- }
-
- @Override
- public int getItemViewType(int p) {
- if (p == mBreakPosition) {
- return ITEM_TYPE_SECTION_BREAK;
- } else {
- return mDelegate.getItemViewType(toDelegatePosition(p));
- }
- }
-
- /**
- * Returns the position of an item in the delegate, adjusting
- * values that are greater than the break position.
- *
- * @param p Position within the view
- * @return Position within the delegate
- */
- private int toDelegatePosition(int p) {
- return (mBreakPosition != -1 && p > mBreakPosition) ? p - 1 : p;
- }
-
- /**
- * Returns the position of an item in the view, adjusting
- * values that are greater than the break position.
- *
- * @param p Position within the delegate
- * @return Position within the view
- */
- private int toViewPosition(int p) {
- // If position is greater than or equal to the break, increase by one.
- return (mBreakPosition != -1 && p >= mBreakPosition) ? p + 1 : p;
- }
-
- @Override
- List<String> getModelIds() {
- return mDelegate.getModelIds();
- }
-
- @Override
- String getModelId(int p) {
- return (p == mBreakPosition) ? null : mDelegate.getModelId(toDelegatePosition(p));
- }
-
- @Override
- public void onItemSelectionChanged(String id) {
- mDelegate.onItemSelectionChanged(id);
- }
-
- // Listener we add to our delegate. This allows us to relay events published
- // by the delegate to our listeners (presumably RecyclerView) with adjusted positions.
- private final class EventRelay extends AdapterDataObserver {
- public void onChanged() {
- throw new UnsupportedOperationException();
- }
-
- public void onItemRangeChanged(int positionStart, int itemCount) {
- throw new UnsupportedOperationException();
- }
-
- public void onItemRangeChanged(int positionStart, int itemCount, Object payload) {
- assert(itemCount == 1);
- notifyItemRangeChanged(toViewPosition(positionStart), itemCount, payload);
- }
-
- public void onItemRangeInserted(int positionStart, int itemCount) {
- assert(itemCount == 1);
- if (positionStart < mBreakPosition) {
- mBreakPosition++;
- }
- notifyItemRangeInserted(toViewPosition(positionStart), itemCount);
- }
-
- public void onItemRangeRemoved(int positionStart, int itemCount) {
- assert(itemCount == 1);
- if (positionStart < mBreakPosition) {
- mBreakPosition--;
- }
- notifyItemRangeRemoved(toViewPosition(positionStart), itemCount);
- }
-
- public void onItemRangeMoved(int fromPosition, int toPosition, int itemCount) {
- throw new UnsupportedOperationException();
- }
- }
-
- /**
- * The most elegant transparent blank box that spans N rows ever conceived.
- */
- private static final class EmptyDocumentHolder extends DocumentHolder {
- final int mVisibleHeight;
-
- public EmptyDocumentHolder(Context context) {
- super(context, new Space(context));
-
- // Per UX spec, this puts a bigger gap between the folders and documents in the grid.
- mVisibleHeight = context.getResources().getDimensionPixelSize(
- R.dimen.grid_item_margin);
- }
-
- public void bind(State state) {
- bind(null, null, state);
- }
-
- @Override
- public void bind(Cursor cursor, String modelId, State state) {
- if (state.derivedMode == State.MODE_GRID) {
- itemView.setMinimumHeight(mVisibleHeight);
- } else {
- itemView.setMinimumHeight(0);
- }
- return;
- }
- }
-}
diff --git a/packages/DocumentsUI/src/com/android/documentsui/dirlist/TouchSwipeRefreshLayout.java b/packages/DocumentsUI/src/com/android/documentsui/dirlist/TouchSwipeRefreshLayout.java
deleted file mode 100644
index 32bb5b1..0000000
--- a/packages/DocumentsUI/src/com/android/documentsui/dirlist/TouchSwipeRefreshLayout.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Copyright (C) 2016 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.dirlist;
-
-import android.content.Context;
-import android.content.res.TypedArray;
-import android.support.annotation.ColorRes;
-import android.support.v4.widget.SwipeRefreshLayout;
-import android.util.AttributeSet;
-import android.view.MotionEvent;
-
-import com.android.documentsui.Events;
-
-/**
- * A {@link SwipeRefreshLayout} that only refresh on touch events.
- */
-public class TouchSwipeRefreshLayout extends SwipeRefreshLayout {
-
- private static final int[] COLOR_RES = new int[] { android.R.attr.colorAccent };
- private static int COLOR_ACCENT_INDEX = 0;
-
- public TouchSwipeRefreshLayout(Context context) {
- this(context, null);
- }
-
- public TouchSwipeRefreshLayout(Context context, AttributeSet attrs) {
- super(context, attrs);
-
- TypedArray a = context.obtainStyledAttributes(COLOR_RES);
- @ColorRes int colorId = a.getResourceId(COLOR_ACCENT_INDEX, -1);
- a.recycle();
- setColorSchemeResources(colorId);
- }
-
- @Override
- public boolean onInterceptTouchEvent(MotionEvent e) {
- return Events.isMouseEvent(e) ? false : super.onInterceptTouchEvent(e);
- }
-}
diff --git a/packages/DocumentsUI/src/com/android/documentsui/dirlist/UserInputHandler.java b/packages/DocumentsUI/src/com/android/documentsui/dirlist/UserInputHandler.java
deleted file mode 100644
index 07b0cd8..0000000
--- a/packages/DocumentsUI/src/com/android/documentsui/dirlist/UserInputHandler.java
+++ /dev/null
@@ -1,423 +0,0 @@
-/*
- * Copyright (C) 2016 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.dirlist;
-
-import static com.android.documentsui.Shared.DEBUG;
-
-import android.support.annotation.VisibleForTesting;
-import android.util.Log;
-import android.view.GestureDetector;
-import android.view.KeyEvent;
-import android.view.MotionEvent;
-
-import com.android.documentsui.Events;
-import com.android.documentsui.Events.InputEvent;
-import com.android.documentsui.dirlist.DocumentHolder.KeyboardEventListener;
-
-import java.util.function.Function;
-import java.util.function.Predicate;
-
-/**
- * Grand unified-ish gesture/event listener for items in the directory list.
- */
-public final class UserInputHandler<T extends InputEvent>
- extends GestureDetector.SimpleOnGestureListener
- implements KeyboardEventListener {
-
- private static final String TAG = "UserInputHandler";
-
- private final MultiSelectManager mSelectionMgr;
- private final FocusHandler mFocusHandler;
- private final Function<MotionEvent, T> mEventConverter;
- private final Function<T, DocumentDetails> mDocFinder;
- private final Predicate<DocumentDetails> mSelectable;
- private final EventHandler mRightClickHandler;
- private final DocumentHandler mActivateHandler;
- private final DocumentHandler mDeleteHandler;
- private final TouchInputDelegate mTouchDelegate;
- private final MouseInputDelegate mMouseDelegate;
- private final KeyInputHandler mKeyListener;
-
- public UserInputHandler(
- MultiSelectManager selectionMgr,
- FocusHandler focusHandler,
- Function<MotionEvent, T> eventConverter,
- Function<T, DocumentDetails> docFinder,
- Predicate<DocumentDetails> selectable,
- EventHandler rightClickHandler,
- DocumentHandler activateHandler,
- DocumentHandler deleteHandler) {
-
- mSelectionMgr = selectionMgr;
- mFocusHandler = focusHandler;
- mEventConverter = eventConverter;
- mDocFinder = docFinder;
- mSelectable = selectable;
- mRightClickHandler = rightClickHandler;
- mActivateHandler = activateHandler;
- mDeleteHandler = deleteHandler;
-
- mTouchDelegate = new TouchInputDelegate();
- mMouseDelegate = new MouseInputDelegate();
- mKeyListener = new KeyInputHandler();
- }
-
- @Override
- public boolean onSingleTapUp(MotionEvent e) {
- try (T event = mEventConverter.apply(e)) {
- return onSingleTapUp(event);
- }
- }
-
- @VisibleForTesting
- boolean onSingleTapUp(T event) {
- return event.isMouseEvent()
- ? mMouseDelegate.onSingleTapUp(event)
- : mTouchDelegate.onSingleTapUp(event);
- }
-
- @Override
- public boolean onSingleTapConfirmed(MotionEvent e) {
- try (T event = mEventConverter.apply(e)) {
- return onSingleTapConfirmed(event);
- }
- }
-
- @VisibleForTesting
- boolean onSingleTapConfirmed(T event) {
- return event.isMouseEvent()
- ? mMouseDelegate.onSingleTapConfirmed(event)
- : mTouchDelegate.onSingleTapConfirmed(event);
- }
-
- @Override
- public boolean onDoubleTap(MotionEvent e) {
- try (T event = mEventConverter.apply(e)) {
- return onDoubleTap(event);
- }
- }
-
- @VisibleForTesting
- boolean onDoubleTap(T event) {
- return event.isMouseEvent()
- ? mMouseDelegate.onDoubleTap(event)
- : mTouchDelegate.onDoubleTap(event);
- }
-
- @Override
- public void onLongPress(MotionEvent e) {
- try (T event = mEventConverter.apply(e)) {
- onLongPress(event);
- }
- }
-
- @VisibleForTesting
- void onLongPress(T event) {
- if (event.isMouseEvent()) {
- mMouseDelegate.onLongPress(event);
- }
- mTouchDelegate.onLongPress(event);
- }
-
- public boolean onSingleRightClickUp(MotionEvent e) {
- try (T event = mEventConverter.apply(e)) {
- return mMouseDelegate.onSingleRightClickUp(event);
- }
- }
-
- @Override
- public boolean onKey(DocumentHolder doc, int keyCode, KeyEvent event) {
- return mKeyListener.onKey(doc, keyCode, event);
- }
-
- // TODO: Isolate this hack...see if we can't get this solved at the platform level.
- public void setLastButtonState(int state) {
- mMouseDelegate.setLastButtonState(state);
- }
-
- private boolean activateDocument(DocumentDetails doc) {
- return mActivateHandler.accept(doc);
- }
-
- private boolean selectDocument(DocumentDetails doc) {
- assert(doc != null);
- mSelectionMgr.toggleSelection(doc.getModelId());
- mSelectionMgr.setSelectionRangeBegin(doc.getAdapterPosition());
- return true;
- }
-
- boolean isRangeExtension(T event) {
- return event.isShiftKeyDown() && mSelectionMgr.isRangeSelectionActive();
- }
-
- private void extendSelectionRange(T event) {
- mSelectionMgr.snapSelection(event.getItemPosition());
- }
-
- private final class TouchInputDelegate {
-
- boolean onSingleTapUp(T event) {
- if (!event.isOverItem()) {
- if (DEBUG) Log.d(TAG, "Tap on non-item. Clearing selection.");
- mSelectionMgr.clearSelection();
- return false;
- }
-
- if (mSelectionMgr.hasSelection()) {
- if (isRangeExtension(event)) {
- mSelectionMgr.snapSelection(event.getItemPosition());
- } else {
- selectDocument(mDocFinder.apply(event));
- }
- return true;
- }
-
- // Give the DocumentHolder a crack at the event.
- DocumentDetails doc = mDocFinder.apply(event);
- if (doc != null) {
- // Touch events select if they occur in the selection hotspot,
- // otherwise they activate.
- return doc.isInSelectionHotspot(event)
- ? selectDocument(doc)
- : activateDocument(doc);
- }
-
- return false;
- }
-
- boolean onSingleTapConfirmed(T event) {
- return false;
- }
-
- boolean onDoubleTap(T event) {
- return false;
- }
-
- final void onLongPress(T event) {
- if (!event.isOverItem()) {
- return;
- }
-
- if (isRangeExtension(event)) {
- extendSelectionRange(event);
- } else {
- selectDocument(mDocFinder.apply(event));
- }
- }
- }
-
- private final class MouseInputDelegate {
-
- // From the RecyclerView, we get two events sent to
- // ListeningGestureDetector#onInterceptTouchEvent on a mouse click; we first get an
- // ACTION_DOWN Event for clicking on the mouse, and then an ACTION_UP event from releasing
- // the mouse click. ACTION_UP event doesn't have information regarding the button (primary
- // vs. secondary), so we have to save that somewhere first from ACTION_DOWN, and then reuse
- // it later. The ACTION_DOWN event doesn't get forwarded to UserInputListener,
- // so we have open up a public set method to set it.
- private int mLastButtonState = -1;
-
- // true when the previous event has consumed a right click motion event
- private boolean mAteRightClick;
-
- // The event has been handled in onSingleTapUp
- private boolean mHandledTapUp;
-
- boolean onSingleTapUp(T event) {
- if (eatRightClick()) {
- return onSingleRightClickUp(event);
- }
-
- if (!event.isOverItem()) {
- mSelectionMgr.clearSelection();
- return false;
- }
-
- if (mSelectionMgr.hasSelection()) {
- if (isRangeExtension(event)) {
- extendSelectionRange(event);
- } else {
- selectDocument(mDocFinder.apply(event));
- }
- mHandledTapUp = true;
- return true;
- }
-
- // We'll toggle selection in onSingleTapConfirmed
- // This avoids flickering on/off action mode when an item is double clicked.
- if (!mSelectionMgr.hasSelection()) {
- return false;
- }
-
- DocumentDetails doc = mDocFinder.apply(event);
- if (doc == null) {
- return false;
- }
-
- mHandledTapUp = true;
- return selectDocument(doc);
- }
-
- boolean onSingleTapConfirmed(T event) {
- if (mAteRightClick) {
- mAteRightClick = false;
- return false;
- }
- if (mHandledTapUp) {
- mHandledTapUp = false;
- return false;
- }
-
- if (mSelectionMgr.hasSelection()) {
- return false; // should have been handled by onSingleTapUp.
- }
-
- DocumentDetails doc = mDocFinder.apply(event);
- if (doc == null) {
- return false;
- }
-
- return selectDocument(doc);
- }
-
- boolean onDoubleTap(T event) {
- mHandledTapUp = false;
- DocumentDetails doc = mDocFinder.apply(event);
- if (doc != null) {
- return mSelectionMgr.hasSelection()
- ? selectDocument(doc)
- : activateDocument(doc);
- }
- return false;
- }
-
- final void onLongPress(T event) {
- if (!event.isOverItem()) {
- return;
- }
-
- if (isRangeExtension(event)) {
- extendSelectionRange(event);
- } else {
- selectDocument(mDocFinder.apply(event));
- }
- }
-
- private boolean onSingleRightClickUp(T event) {
- return mRightClickHandler.apply(event);
- }
-
- // hack alert from here through end of class.
- private void setLastButtonState(int state) {
- mLastButtonState = state;
- }
-
- private boolean eatRightClick() {
- if (mLastButtonState == MotionEvent.BUTTON_SECONDARY) {
- mLastButtonState = -1;
- mAteRightClick = true;
- return true;
- }
- return false;
- }
- }
-
- private final class KeyInputHandler {
- // TODO: Refactor FocusManager to depend only on DocumentDetails so we can eliminate
- // difficult to test dependency on DocumentHolder.
-
- boolean onKey(DocumentHolder doc, int keyCode, KeyEvent event) {
- // Only handle key-down events. This is simpler, consistent with most other UIs, and
- // enables the handling of repeated key events from holding down a key.
- if (event.getAction() != KeyEvent.ACTION_DOWN) {
- return false;
- }
-
- // Ignore tab key events. Those should be handled by the top-level key handler.
- if (keyCode == KeyEvent.KEYCODE_TAB) {
- return false;
- }
-
- if (mFocusHandler.handleKey(doc, keyCode, event)) {
- // Handle range selection adjustments. Extending the selection will adjust the
- // bounds of the in-progress range selection. Each time an unshifted navigation
- // event is received, the range selection is restarted.
- if (shouldExtendSelection(doc, event)) {
- if (!mSelectionMgr.isRangeSelectionActive()) {
- // Start a range selection if one isn't active
- mSelectionMgr.startRangeSelection(doc.getAdapterPosition());
- }
- mSelectionMgr.snapRangeSelection(mFocusHandler.getFocusPosition());
- } else {
- mSelectionMgr.endRangeSelection();
- }
- return true;
- }
-
- // Handle enter key events
- switch (keyCode) {
- case KeyEvent.KEYCODE_ENTER:
- if (event.isShiftPressed()) {
- selectDocument(doc);
- }
- // For non-shifted enter keypresses, fall through.
- case KeyEvent.KEYCODE_DPAD_CENTER:
- case KeyEvent.KEYCODE_BUTTON_A:
- return activateDocument(doc);
- case KeyEvent.KEYCODE_FORWARD_DEL:
- // This has to be handled here instead of in a keyboard shortcut, because
- // keyboard shortcuts all have to be modified with the 'Ctrl' key.
- if (mSelectionMgr.hasSelection()) {
- mDeleteHandler.accept(doc);
- }
- // Always handle the key, even if there was nothing to delete. This is a
- // precaution to prevent other handlers from potentially picking up the event
- // and triggering extra behaviors.
- return true;
- }
-
- return false;
- }
-
- private boolean shouldExtendSelection(DocumentDetails doc, KeyEvent event) {
- if (!Events.isNavigationKeyCode(event.getKeyCode()) || !event.isShiftPressed()) {
- return false;
- }
-
- return mSelectable.test(doc);
- }
- }
-
- /**
- * Class providing limited access to document view info.
- */
- public interface DocumentDetails {
- String getModelId();
- int getAdapterPosition();
- boolean isInSelectionHotspot(InputEvent event);
- }
-
- @FunctionalInterface
- interface EventHandler {
- boolean apply(InputEvent event);
- }
-
- @FunctionalInterface
- interface DocumentHandler {
- boolean accept(DocumentDetails doc);
- }
-}
diff --git a/packages/DocumentsUI/src/com/android/documentsui/dirlist/ViewAutoScroller.java b/packages/DocumentsUI/src/com/android/documentsui/dirlist/ViewAutoScroller.java
deleted file mode 100644
index 5ef68ca..0000000
--- a/packages/DocumentsUI/src/com/android/documentsui/dirlist/ViewAutoScroller.java
+++ /dev/null
@@ -1,193 +0,0 @@
-/*
- * Copyright (C) 2016 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.dirlist;
-
-import android.graphics.Point;
-import android.support.annotation.VisibleForTesting;
-
-import java.util.function.IntSupplier;
-import java.util.function.LongSupplier;
-
-/**
- * Provides auto-scrolling upon request when user's interaction with the application
- * introduces a natural intent to scroll. Used by {@link BandController} and
- * {@link DragScrollListener} to allow auto scrolling when user either does band selection, or
- * attempting to drag and drop files to somewhere off the current screen.
- */
-public final class ViewAutoScroller implements Runnable {
- public static final int NOT_SET = -1;
- /**
- * The number of milliseconds of scrolling at which scroll speed continues to increase.
- * At first, the scroll starts slowly; then, the rate of scrolling increases until it
- * reaches its maximum value at after this many milliseconds.
- */
- private static final long SCROLL_ACCELERATION_LIMIT_TIME_MS = 2000;
-
- // Top and bottom inner buffer such that user's cursor does not have to be exactly off screen
- // for auto scrolling to begin
- private final int mTopBottomThreshold;
- private final ScrollDistanceDelegate mCalcDelegate;
- private final ScrollActionDelegate mUiDelegate;
- private final LongSupplier mCurrentTime;
-
- private long mScrollStartTime = NOT_SET;
-
- public ViewAutoScroller(
- int topBottomThreshold,
- ScrollDistanceDelegate calcDelegate,
- ScrollActionDelegate uiDelegate) {
- this(topBottomThreshold, calcDelegate, uiDelegate, System::currentTimeMillis);
- }
-
- @VisibleForTesting
- ViewAutoScroller(
- int topBottomThreshold,
- ScrollDistanceDelegate calcDelegate,
- ScrollActionDelegate uiDelegate,
- LongSupplier clock) {
- mTopBottomThreshold = topBottomThreshold;
- mCalcDelegate = calcDelegate;
- mUiDelegate = uiDelegate;
- mCurrentTime = clock;
- }
-
- /**
- * Attempts to smooth-scroll the view at the given UI frame. Application should be
- * responsible to do any clean up (such as unsubscribing scrollListeners) after the run has
- * finished, and re-run this method on the next UI frame if applicable.
- */
- @Override
- public void run() {
- // Compute the number of pixels the pointer's y-coordinate is past the view.
- // Negative values mean the pointer is at or before the top of the view, and
- // positive values mean that the pointer is at or after the bottom of the view. Note
- // that top/bottom threshold is added here so that the view still scrolls when the
- // pointer are in these buffer pixels.
- int pixelsPastView = 0;
-
- if (mCalcDelegate.getCurrentPosition().y <= mTopBottomThreshold) {
- pixelsPastView = mCalcDelegate.getCurrentPosition().y - mTopBottomThreshold;
- } else if (mCalcDelegate.getCurrentPosition().y >= mCalcDelegate.getViewHeight()
- - mTopBottomThreshold) {
- pixelsPastView = mCalcDelegate.getCurrentPosition().y - mCalcDelegate.getViewHeight()
- + mTopBottomThreshold;
- }
-
- if (!mCalcDelegate.isActive() || pixelsPastView == 0) {
- // If the operation that started the scrolling is no longer inactive, or if it is active
- // but not at the edge of the view, no scrolling is necessary.
- mScrollStartTime = NOT_SET;
- return;
- }
-
- if (mScrollStartTime == NOT_SET) {
- // If the pointer was previously not at the edge of the view but now is, set the
- // start time for the scroll.
- mScrollStartTime = mCurrentTime.getAsLong();
- }
-
- // Compute the number of pixels to scroll, and scroll that many pixels.
- final int numPixels = computeScrollDistance(
- pixelsPastView, mCurrentTime.getAsLong() - mScrollStartTime);
- mUiDelegate.scrollBy(numPixels);
-
- // Remove callback to this, and then properly run at next frame again
- mUiDelegate.removeCallback(this);
- mUiDelegate.runAtNextFrame(this);
- }
-
- /**
- * Computes the number of pixels to scroll based on how far the pointer is past the end
- * of the view and how long it has been there. Roughly based on ItemTouchHelper's
- * algorithm for computing the number of pixels to scroll when an item is dragged to the
- * end of a view.
- * @param pixelsPastView
- * @param scrollDuration
- * @return
- */
- public int computeScrollDistance(int pixelsPastView, long scrollDuration) {
- final int maxScrollStep = mCalcDelegate.getViewHeight();
- final int direction = (int) Math.signum(pixelsPastView);
- final int absPastView = Math.abs(pixelsPastView);
-
- // Calculate the ratio of how far out of the view the pointer currently resides to
- // the entire height of the view.
- final float outOfBoundsRatio = Math.min(
- 1.0f, (float) absPastView / mCalcDelegate.getViewHeight());
- // Interpolate this ratio and use it to compute the maximum scroll that should be
- // possible for this step.
- final float cappedScrollStep =
- direction * maxScrollStep * smoothOutOfBoundsRatio(outOfBoundsRatio);
-
- // Likewise, calculate the ratio of the time spent in the scroll to the limit.
- final float timeRatio = Math.min(
- 1.0f, (float) scrollDuration / SCROLL_ACCELERATION_LIMIT_TIME_MS);
- // Interpolate this ratio and use it to compute the final number of pixels to
- // scroll.
- final int numPixels = (int) (cappedScrollStep * smoothTimeRatio(timeRatio));
-
- // If the final number of pixels to scroll ends up being 0, the view should still
- // scroll at least one pixel.
- return numPixels != 0 ? numPixels : direction;
- }
-
- /**
- * Interpolates the given out of bounds ratio on a curve which starts at (0,0) and ends
- * at (1,1) and quickly approaches 1 near the start of that interval. This ensures that
- * drags that are at the edge or barely past the edge of the view still cause sufficient
- * scrolling. The equation y=(x-1)^5+1 is used, but this could also be tweaked if
- * needed.
- * @param ratio A ratio which is in the range [0, 1].
- * @return A "smoothed" value, also in the range [0, 1].
- */
- private float smoothOutOfBoundsRatio(float ratio) {
- return (float) Math.pow(ratio - 1.0f, 5) + 1.0f;
- }
-
- /**
- * Interpolates the given time ratio on a curve which starts at (0,0) and ends at (1,1)
- * and stays close to 0 for most input values except those very close to 1. This ensures
- * that scrolls start out very slowly but speed up drastically after the scroll has been
- * in progress close to SCROLL_ACCELERATION_LIMIT_TIME_MS. The equation y=x^5 is used,
- * but this could also be tweaked if needed.
- * @param ratio A ratio which is in the range [0, 1].
- * @return A "smoothed" value, also in the range [0, 1].
- */
- private float smoothTimeRatio(float ratio) {
- return (float) Math.pow(ratio, 5);
- }
-
- /**
- * Used by {@link run} to properly calculate the proper amount of pixels to scroll given time
- * passed since scroll started, and to properly scroll / proper listener clean up if necessary.
- */
- interface ScrollDistanceDelegate {
- public Point getCurrentPosition();
- public int getViewHeight();
- public boolean isActive();
- }
-
- /**
- * Used by {@link run} to do UI tasks, such as scrolling and rerunning at next UI cycle.
- */
- interface ScrollActionDelegate {
- public void scrollBy(int dy);
- public void runAtNextFrame(Runnable r);
- public void removeCallback(Runnable r);
- }
-}
\ No newline at end of file
diff --git a/packages/DocumentsUI/src/com/android/documentsui/model/DocumentInfo.java b/packages/DocumentsUI/src/com/android/documentsui/model/DocumentInfo.java
deleted file mode 100644
index b54c9bb..0000000
--- a/packages/DocumentsUI/src/com/android/documentsui/model/DocumentInfo.java
+++ /dev/null
@@ -1,347 +0,0 @@
-/*
- * 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.
- */
-
-package com.android.documentsui.model;
-
-import android.content.ContentProviderClient;
-import android.content.ContentResolver;
-import android.database.Cursor;
-import android.net.Uri;
-import android.os.Parcel;
-import android.os.Parcelable;
-import android.provider.DocumentsContract;
-import android.provider.DocumentsContract.Document;
-import android.provider.DocumentsProvider;
-import android.support.annotation.VisibleForTesting;
-
-import com.android.documentsui.DocumentsApplication;
-import com.android.documentsui.RootCursorWrapper;
-
-import java.io.DataInputStream;
-import java.io.DataOutputStream;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.net.ProtocolException;
-import java.util.Arrays;
-import java.util.Objects;
-import java.util.Set;
-
-import libcore.io.IoUtils;
-
-/**
- * Representation of a {@link Document}.
- */
-public class DocumentInfo implements Durable, Parcelable {
- private static final int VERSION_INIT = 1;
- private static final int VERSION_SPLIT_URI = 2;
-
- public String authority;
- public String documentId;
- public String mimeType;
- public String displayName;
- public long lastModified;
- public int flags;
- public String summary;
- public long size;
- public int icon;
-
- /** Derived fields that aren't persisted */
- public Uri derivedUri;
-
- public DocumentInfo() {
- reset();
- }
-
- @Override
- public void reset() {
- authority = null;
- documentId = null;
- mimeType = null;
- displayName = null;
- lastModified = -1;
- flags = 0;
- summary = null;
- size = -1;
- icon = 0;
- derivedUri = null;
- }
-
- @Override
- public void read(DataInputStream in) throws IOException {
- final int version = in.readInt();
- switch (version) {
- case VERSION_INIT:
- throw new ProtocolException("Ignored upgrade");
- case VERSION_SPLIT_URI:
- authority = DurableUtils.readNullableString(in);
- documentId = DurableUtils.readNullableString(in);
- mimeType = DurableUtils.readNullableString(in);
- displayName = DurableUtils.readNullableString(in);
- lastModified = in.readLong();
- flags = in.readInt();
- summary = DurableUtils.readNullableString(in);
- size = in.readLong();
- icon = in.readInt();
- deriveFields();
- break;
- default:
- throw new ProtocolException("Unknown version " + version);
- }
- }
-
- @Override
- public void write(DataOutputStream out) throws IOException {
- out.writeInt(VERSION_SPLIT_URI);
- DurableUtils.writeNullableString(out, authority);
- DurableUtils.writeNullableString(out, documentId);
- DurableUtils.writeNullableString(out, mimeType);
- DurableUtils.writeNullableString(out, displayName);
- out.writeLong(lastModified);
- out.writeInt(flags);
- DurableUtils.writeNullableString(out, summary);
- out.writeLong(size);
- out.writeInt(icon);
- }
-
- @Override
- public int describeContents() {
- return 0;
- }
-
- @Override
- public void writeToParcel(Parcel dest, int flags) {
- DurableUtils.writeToParcel(dest, this);
- }
-
- public static final Creator<DocumentInfo> CREATOR = new Creator<DocumentInfo>() {
- @Override
- public DocumentInfo createFromParcel(Parcel in) {
- final DocumentInfo doc = new DocumentInfo();
- DurableUtils.readFromParcel(in, doc);
- return doc;
- }
-
- @Override
- public DocumentInfo[] newArray(int size) {
- return new DocumentInfo[size];
- }
- };
-
- public static DocumentInfo fromDirectoryCursor(Cursor cursor) {
- assert(cursor != null);
- final String authority = getCursorString(cursor, RootCursorWrapper.COLUMN_AUTHORITY);
- return fromCursor(cursor, authority);
- }
-
- public static DocumentInfo fromCursor(Cursor cursor, String authority) {
- assert(cursor != null);
- final DocumentInfo info = new DocumentInfo();
- info.updateFromCursor(cursor, authority);
- return info;
- }
-
- public void updateFromCursor(Cursor cursor, String authority) {
- this.authority = authority;
- this.documentId = getCursorString(cursor, Document.COLUMN_DOCUMENT_ID);
- this.mimeType = getCursorString(cursor, Document.COLUMN_MIME_TYPE);
- this.displayName = getCursorString(cursor, Document.COLUMN_DISPLAY_NAME);
- this.lastModified = getCursorLong(cursor, Document.COLUMN_LAST_MODIFIED);
- this.flags = getCursorInt(cursor, Document.COLUMN_FLAGS);
- this.summary = getCursorString(cursor, Document.COLUMN_SUMMARY);
- this.size = getCursorLong(cursor, Document.COLUMN_SIZE);
- this.icon = getCursorInt(cursor, Document.COLUMN_ICON);
- this.deriveFields();
- }
-
- public static DocumentInfo fromUri(ContentResolver resolver, Uri uri)
- throws FileNotFoundException {
- final DocumentInfo info = new DocumentInfo();
- info.updateFromUri(resolver, uri);
- return info;
- }
-
- /**
- * Update a possibly stale restored document against a live
- * {@link DocumentsProvider}.
- */
- public void updateSelf(ContentResolver resolver) throws FileNotFoundException {
- updateFromUri(resolver, derivedUri);
- }
-
- public void updateFromUri(ContentResolver resolver, Uri uri) throws FileNotFoundException {
- ContentProviderClient client = null;
- Cursor cursor = null;
- try {
- client = DocumentsApplication.acquireUnstableProviderOrThrow(
- resolver, uri.getAuthority());
- cursor = client.query(uri, null, null, null, null);
- if (!cursor.moveToFirst()) {
- throw new FileNotFoundException("Missing details for " + uri);
- }
- updateFromCursor(cursor, uri.getAuthority());
- } catch (Throwable t) {
- throw asFileNotFoundException(t);
- } finally {
- IoUtils.closeQuietly(cursor);
- ContentProviderClient.releaseQuietly(client);
- }
- }
-
- @VisibleForTesting
- void deriveFields() {
- derivedUri = DocumentsContract.buildDocumentUri(authority, documentId);
- }
-
- @Override
- public String toString() {
- return "Document{"
- + "docId=" + documentId
- + ", name=" + displayName
- + ", isContainer=" + isContainer()
- + ", isDirectory=" + isDirectory()
- + ", isArchive=" + isArchive()
- + ", isPartial=" + isPartial()
- + ", isVirtualDocument=" + isVirtualDocument()
- + ", isDeleteSupported=" + isDeleteSupported()
- + ", isCreateSupported=" + isCreateSupported()
- + ", isRenameSupported=" + isRenameSupported()
- + "}";
- }
-
- public boolean isCreateSupported() {
- return (flags & Document.FLAG_DIR_SUPPORTS_CREATE) != 0;
- }
-
- public boolean isThumbnailSupported() {
- return (flags & Document.FLAG_SUPPORTS_THUMBNAIL) != 0;
- }
-
- public boolean isDirectory() {
- return Document.MIME_TYPE_DIR.equals(mimeType);
- }
-
- public boolean isGridPreferred() {
- return (flags & Document.FLAG_DIR_PREFERS_GRID) != 0;
- }
-
- public boolean isDeleteSupported() {
- return (flags & Document.FLAG_SUPPORTS_DELETE) != 0;
- }
-
- public boolean isRemoveSupported() {
- return (flags & Document.FLAG_SUPPORTS_REMOVE) != 0;
- }
-
- public boolean isRenameSupported() {
- return (flags & Document.FLAG_SUPPORTS_RENAME) != 0;
- }
-
- public boolean isArchive() {
- return (flags & Document.FLAG_ARCHIVE) != 0;
- }
-
- public boolean isPartial() {
- return (flags & Document.FLAG_PARTIAL) != 0;
- }
-
- public boolean isContainer() {
- return isDirectory() || isArchive();
- }
-
- public boolean isVirtualDocument() {
- return (flags & Document.FLAG_VIRTUAL_DOCUMENT) != 0;
- }
-
- @Override
- public int hashCode() {
- return derivedUri.hashCode() + mimeType.hashCode();
- }
-
- @Override
- public boolean equals(Object o) {
- if (o == null) {
- return false;
- }
-
- if (this == o) {
- return true;
- }
-
- if (o instanceof DocumentInfo) {
- DocumentInfo other = (DocumentInfo) o;
- // Uri + mime type should be totally unique.
- return Objects.equals(derivedUri, other.derivedUri)
- && Objects.equals(mimeType, other.mimeType);
- }
-
- return false;
- }
-
- public static String getCursorString(Cursor cursor, String columnName) {
- final int index = cursor.getColumnIndex(columnName);
- return (index != -1) ? cursor.getString(index) : null;
- }
-
- /**
- * Missing or null values are returned as -1.
- */
- public static long getCursorLong(Cursor cursor, String columnName) {
- final int index = cursor.getColumnIndex(columnName);
- if (index == -1) return -1;
- final String value = cursor.getString(index);
- if (value == null) return -1;
- try {
- return Long.parseLong(value);
- } catch (NumberFormatException e) {
- return -1;
- }
- }
-
- /**
- * Missing or null values are returned as 0.
- */
- public static int getCursorInt(Cursor cursor, String columnName) {
- final int index = cursor.getColumnIndex(columnName);
- return (index != -1) ? cursor.getInt(index) : 0;
- }
-
- public static FileNotFoundException asFileNotFoundException(Throwable t)
- throws FileNotFoundException {
- if (t instanceof FileNotFoundException) {
- throw (FileNotFoundException) t;
- }
- final FileNotFoundException fnfe = new FileNotFoundException(t.getMessage());
- fnfe.initCause(t);
- throw fnfe;
- }
-
- public static Uri getUri(Cursor cursor) {
- return DocumentsContract.buildDocumentUri(
- getCursorString(cursor, RootCursorWrapper.COLUMN_AUTHORITY),
- getCursorString(cursor, Document.COLUMN_DOCUMENT_ID));
- }
-
- public static void addMimeTypes(ContentResolver resolver, Uri uri, Set<String> mimeTypes) {
- assert(uri != null);
- if ("content".equals(uri.getScheme())) {
- mimeTypes.add(resolver.getType(uri));
- final String[] streamTypes = resolver.getStreamTypes(uri, "*/*");
- if (streamTypes != null) {
- mimeTypes.addAll(Arrays.asList(streamTypes));
- }
- }
- }
-}
diff --git a/packages/DocumentsUI/src/com/android/documentsui/model/DocumentStack.java b/packages/DocumentsUI/src/com/android/documentsui/model/DocumentStack.java
deleted file mode 100644
index ae7e820..0000000
--- a/packages/DocumentsUI/src/com/android/documentsui/model/DocumentStack.java
+++ /dev/null
@@ -1,191 +0,0 @@
-/*
- * 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.
- */
-
-package com.android.documentsui.model;
-
-import android.content.ContentResolver;
-import android.os.Parcel;
-import android.os.Parcelable;
-import android.provider.DocumentsProvider;
-
-import java.io.DataInputStream;
-import java.io.DataOutputStream;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.net.ProtocolException;
-import java.util.Collection;
-import java.util.LinkedList;
-
-/**
- * Representation of a stack of {@link DocumentInfo}, usually the result of a
- * user-driven traversal.
- */
-public class DocumentStack extends LinkedList<DocumentInfo> implements Durable, Parcelable {
- private static final int VERSION_INIT = 1;
- private static final int VERSION_ADD_ROOT = 2;
-
- public RootInfo root;
-
- public DocumentStack() {};
-
- /**
- * Creates an instance, and pushes all docs to it in the same order as they're passed as
- * parameters, i.e. the last document will be at the top of the stack.
- */
- public DocumentStack(RootInfo root, DocumentInfo... docs) {
- for (DocumentInfo doc : docs) {
- push(doc);
- }
-
- this.root = root;
- }
-
- /**
- * Makes a new copy, and pushes all docs to the new copy in the same order as they're passed
- * as parameters, i.e. the last document will be at the top of the stack.
- */
- public DocumentStack(DocumentStack src, DocumentInfo... docs) {
- super(src);
- for (DocumentInfo doc : docs) {
- push(doc);
- }
-
- root = src.root;
- }
-
- public String getTitle() {
- if (size() == 1 && root != null) {
- return root.title;
- } else if (size() > 1) {
- return peek().displayName;
- } else {
- return null;
- }
- }
-
- public boolean isRecents() {
- return size() == 0;
- }
-
- public void updateRoot(Collection<RootInfo> matchingRoots) throws FileNotFoundException {
- for (RootInfo root : matchingRoots) {
- if (root.equals(this.root)) {
- this.root = root;
- return;
- }
- }
- throw new FileNotFoundException("Failed to find matching root for " + root);
- }
-
- /**
- * Update a possibly stale restored stack against a live
- * {@link DocumentsProvider}.
- */
- public void updateDocuments(ContentResolver resolver) throws FileNotFoundException {
- for (DocumentInfo info : this) {
- info.updateSelf(resolver);
- }
- }
-
- /**
- * Build key that uniquely identifies this stack. It omits most of the raw
- * details included in {@link #write(DataOutputStream)}, since they change
- * too regularly to be used as a key.
- */
- public String buildKey() {
- final StringBuilder builder = new StringBuilder();
- if (root != null) {
- builder.append(root.authority).append('#');
- builder.append(root.rootId).append('#');
- } else {
- builder.append("[null]").append('#');
- }
- for (DocumentInfo doc : this) {
- builder.append(doc.documentId).append('#');
- }
- return builder.toString();
- }
-
- @Override
- public void reset() {
- clear();
- root = null;
- }
-
- @Override
- public void read(DataInputStream in) throws IOException {
- final int version = in.readInt();
- switch (version) {
- case VERSION_INIT:
- throw new ProtocolException("Ignored upgrade");
- case VERSION_ADD_ROOT:
- if (in.readBoolean()) {
- root = new RootInfo();
- root.read(in);
- }
- final int size = in.readInt();
- for (int i = 0; i < size; i++) {
- final DocumentInfo doc = new DocumentInfo();
- doc.read(in);
- add(doc);
- }
- break;
- default:
- throw new ProtocolException("Unknown version " + version);
- }
- }
-
- @Override
- public void write(DataOutputStream out) throws IOException {
- out.writeInt(VERSION_ADD_ROOT);
- if (root != null) {
- out.writeBoolean(true);
- root.write(out);
- } else {
- out.writeBoolean(false);
- }
- final int size = size();
- out.writeInt(size);
- for (int i = 0; i < size; i++) {
- final DocumentInfo doc = get(i);
- doc.write(out);
- }
- }
-
- @Override
- public int describeContents() {
- return 0;
- }
-
- @Override
- public void writeToParcel(Parcel dest, int flags) {
- DurableUtils.writeToParcel(dest, this);
- }
-
- public static final Creator<DocumentStack> CREATOR = new Creator<DocumentStack>() {
- @Override
- public DocumentStack createFromParcel(Parcel in) {
- final DocumentStack stack = new DocumentStack();
- DurableUtils.readFromParcel(in, stack);
- return stack;
- }
-
- @Override
- public DocumentStack[] newArray(int size) {
- return new DocumentStack[size];
- }
- };
-}
diff --git a/packages/DocumentsUI/src/com/android/documentsui/model/Durable.java b/packages/DocumentsUI/src/com/android/documentsui/model/Durable.java
deleted file mode 100644
index 01633ed..0000000
--- a/packages/DocumentsUI/src/com/android/documentsui/model/Durable.java
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * 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.
- */
-
-package com.android.documentsui.model;
-
-import java.io.DataInputStream;
-import java.io.DataOutputStream;
-import java.io.IOException;
-
-public interface Durable {
- public void reset();
- public void read(DataInputStream in) throws IOException;
- public void write(DataOutputStream out) throws IOException;
-}
diff --git a/packages/DocumentsUI/src/com/android/documentsui/model/DurableUtils.java b/packages/DocumentsUI/src/com/android/documentsui/model/DurableUtils.java
deleted file mode 100644
index e21dd49..0000000
--- a/packages/DocumentsUI/src/com/android/documentsui/model/DurableUtils.java
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
- * 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.
- */
-
-package com.android.documentsui.model;
-
-import static com.android.documentsui.Shared.TAG;
-
-import android.os.BadParcelableException;
-import android.os.Parcel;
-import android.util.Log;
-
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.DataInputStream;
-import java.io.DataOutputStream;
-import java.io.IOException;
-
-public class DurableUtils {
- public static <D extends Durable> byte[] writeToArray(D d) throws IOException {
- final ByteArrayOutputStream out = new ByteArrayOutputStream();
- d.write(new DataOutputStream(out));
- return out.toByteArray();
- }
-
- public static <D extends Durable> D readFromArray(byte[] data, D d) throws IOException {
- if (data == null) throw new IOException("Missing data");
- final ByteArrayInputStream in = new ByteArrayInputStream(data);
- d.reset();
- try {
- d.read(new DataInputStream(in));
- } catch (IOException e) {
- d.reset();
- throw e;
- }
- return d;
- }
-
- public static <D extends Durable> byte[] writeToArrayOrNull(D d) {
- try {
- return writeToArray(d);
- } catch (IOException e) {
- Log.w(TAG, "Failed to write", e);
- return null;
- }
- }
-
- public static <D extends Durable> D readFromArrayOrNull(byte[] data, D d) {
- try {
- return readFromArray(data, d);
- } catch (IOException e) {
- Log.w(TAG, "Failed to read", e);
- return null;
- }
- }
-
- public static <D extends Durable> void writeToParcel(Parcel parcel, D d) {
- try {
- parcel.writeByteArray(writeToArray(d));
- } catch (IOException e) {
- throw new BadParcelableException(e);
- }
- }
-
- public static <D extends Durable> D readFromParcel(Parcel parcel, D d) {
- try {
- return readFromArray(parcel.createByteArray(), d);
- } catch (IOException e) {
- throw new BadParcelableException(e);
- }
- }
-
- public static void writeNullableString(DataOutputStream out, String value) throws IOException {
- if (value != null) {
- out.write(1);
- out.writeUTF(value);
- } else {
- out.write(0);
- }
- }
-
- public static String readNullableString(DataInputStream in) throws IOException {
- if (in.read() != 0) {
- return in.readUTF();
- } else {
- return null;
- }
- }
-}
diff --git a/packages/DocumentsUI/src/com/android/documentsui/model/RootInfo.java b/packages/DocumentsUI/src/com/android/documentsui/model/RootInfo.java
deleted file mode 100644
index e062dfb..0000000
--- a/packages/DocumentsUI/src/com/android/documentsui/model/RootInfo.java
+++ /dev/null
@@ -1,419 +0,0 @@
-/*
- * 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.
- */
-
-package com.android.documentsui.model;
-
-import static com.android.documentsui.Shared.DEBUG;
-import static com.android.documentsui.Shared.compareToIgnoreCaseNullable;
-import static com.android.documentsui.model.DocumentInfo.getCursorInt;
-import static com.android.documentsui.model.DocumentInfo.getCursorLong;
-import static com.android.documentsui.model.DocumentInfo.getCursorString;
-
-import android.annotation.IntDef;
-import android.annotation.Nullable;
-import android.content.Context;
-import android.database.Cursor;
-import android.graphics.drawable.Drawable;
-import android.net.Uri;
-import android.os.Parcel;
-import android.os.Parcelable;
-import android.provider.DocumentsContract;
-import android.provider.DocumentsContract.Root;
-import android.text.TextUtils;
-import android.util.Log;
-
-import com.android.documentsui.IconUtils;
-import com.android.documentsui.R;
-
-import java.io.DataInputStream;
-import java.io.DataOutputStream;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.net.ProtocolException;
-import java.util.Objects;
-
-/**
- * Representation of a {@link Root}.
- */
-public class RootInfo implements Durable, Parcelable, Comparable<RootInfo> {
-
- private static final String TAG = "RootInfo";
- private static final int VERSION_INIT = 1;
- private static final int VERSION_DROP_TYPE = 2;
-
- // The values of these constants determine the sort order of various roots in the RootsFragment.
- @IntDef(flag = false, value = {
- TYPE_IMAGES,
- TYPE_VIDEO,
- TYPE_AUDIO,
- TYPE_RECENTS,
- TYPE_DOWNLOADS,
- TYPE_LOCAL,
- TYPE_MTP,
- TYPE_SD,
- TYPE_USB,
- TYPE_OTHER
- })
- @Retention(RetentionPolicy.SOURCE)
- public @interface RootType {}
- public static final int TYPE_IMAGES = 1;
- public static final int TYPE_VIDEO = 2;
- public static final int TYPE_AUDIO = 3;
- public static final int TYPE_RECENTS = 4;
- public static final int TYPE_DOWNLOADS = 5;
- public static final int TYPE_LOCAL = 6;
- public static final int TYPE_MTP = 7;
- public static final int TYPE_SD = 8;
- public static final int TYPE_USB = 9;
- public static final int TYPE_OTHER = 10;
-
- public String authority;
- public String rootId;
- public int flags;
- public int icon;
- public String title;
- public String summary;
- public String documentId;
- public long availableBytes;
- public String mimeTypes;
-
- /** Derived fields that aren't persisted */
- public String[] derivedMimeTypes;
- public int derivedIcon;
- public @RootType int derivedType;
- // Currently, we are not persisting this and we should be asking Provider whether a Root
- // is in the process of eject. Provider does not have this available yet.
- public transient boolean ejecting;
-
- public RootInfo() {
- reset();
- }
-
- @Override
- public void reset() {
- authority = null;
- rootId = null;
- flags = 0;
- icon = 0;
- title = null;
- summary = null;
- documentId = null;
- availableBytes = -1;
- mimeTypes = null;
- ejecting = false;
-
- derivedMimeTypes = null;
- derivedIcon = 0;
- derivedType = 0;
- }
-
- @Override
- public void read(DataInputStream in) throws IOException {
- final int version = in.readInt();
- switch (version) {
- case VERSION_DROP_TYPE:
- authority = DurableUtils.readNullableString(in);
- rootId = DurableUtils.readNullableString(in);
- flags = in.readInt();
- icon = in.readInt();
- title = DurableUtils.readNullableString(in);
- summary = DurableUtils.readNullableString(in);
- documentId = DurableUtils.readNullableString(in);
- availableBytes = in.readLong();
- mimeTypes = DurableUtils.readNullableString(in);
- deriveFields();
- break;
- default:
- throw new ProtocolException("Unknown version " + version);
- }
- }
-
- @Override
- public void write(DataOutputStream out) throws IOException {
- out.writeInt(VERSION_DROP_TYPE);
- DurableUtils.writeNullableString(out, authority);
- DurableUtils.writeNullableString(out, rootId);
- out.writeInt(flags);
- out.writeInt(icon);
- DurableUtils.writeNullableString(out, title);
- DurableUtils.writeNullableString(out, summary);
- DurableUtils.writeNullableString(out, documentId);
- out.writeLong(availableBytes);
- DurableUtils.writeNullableString(out, mimeTypes);
- }
-
- @Override
- public int describeContents() {
- return 0;
- }
-
- @Override
- public void writeToParcel(Parcel dest, int flags) {
- DurableUtils.writeToParcel(dest, this);
- }
-
- public static final Creator<RootInfo> CREATOR = new Creator<RootInfo>() {
- @Override
- public RootInfo createFromParcel(Parcel in) {
- final RootInfo root = new RootInfo();
- DurableUtils.readFromParcel(in, root);
- return root;
- }
-
- @Override
- public RootInfo[] newArray(int size) {
- return new RootInfo[size];
- }
- };
-
- public static RootInfo fromRootsCursor(String authority, Cursor cursor) {
- final RootInfo root = new RootInfo();
- root.authority = authority;
- root.rootId = getCursorString(cursor, Root.COLUMN_ROOT_ID);
- root.flags = getCursorInt(cursor, Root.COLUMN_FLAGS);
- root.icon = getCursorInt(cursor, Root.COLUMN_ICON);
- root.title = getCursorString(cursor, Root.COLUMN_TITLE);
- root.summary = getCursorString(cursor, Root.COLUMN_SUMMARY);
- root.documentId = getCursorString(cursor, Root.COLUMN_DOCUMENT_ID);
- root.availableBytes = getCursorLong(cursor, Root.COLUMN_AVAILABLE_BYTES);
- root.mimeTypes = getCursorString(cursor, Root.COLUMN_MIME_TYPES);
- root.deriveFields();
- return root;
- }
-
- private void deriveFields() {
- derivedMimeTypes = (mimeTypes != null) ? mimeTypes.split("\n") : null;
-
- if (isHome()) {
- derivedType = TYPE_LOCAL;
- derivedIcon = R.drawable.ic_root_documents;
- } else if (isMtp()) {
- derivedType = TYPE_MTP;
- derivedIcon = R.drawable.ic_usb_storage;
- } else if (isUsb()) {
- derivedType = TYPE_USB;
- derivedIcon = R.drawable.ic_usb_storage;
- } else if (isSd()) {
- derivedType = TYPE_SD;
- derivedIcon = R.drawable.ic_sd_storage;
- } else if (isExternalStorage()) {
- derivedType = TYPE_LOCAL;
- derivedIcon = R.drawable.ic_root_smartphone;
- } else if (isDownloads()) {
- derivedType = TYPE_DOWNLOADS;
- derivedIcon = R.drawable.ic_root_download;
- } else if (isImages()) {
- derivedType = TYPE_IMAGES;
- derivedIcon = com.android.internal.R.drawable.ic_doc_image;
- } else if (isVideos()) {
- derivedType = TYPE_VIDEO;
- derivedIcon = com.android.internal.R.drawable.ic_doc_video;
- } else if (isAudio()) {
- derivedType = TYPE_AUDIO;
- derivedIcon = com.android.internal.R.drawable.ic_doc_audio;
- } else if (isRecents()) {
- derivedType = TYPE_RECENTS;
- } else {
- derivedType = TYPE_OTHER;
- }
-
- if (DEBUG) Log.d(TAG, "Finished deriving fields: " + this);
- }
-
- public Uri getUri() {
- return DocumentsContract.buildRootUri(authority, rootId);
- }
-
- public boolean isRecents() {
- return authority == null && rootId == null;
- }
-
- public boolean isHome() {
- // Note that "home" is the expected root id for the auto-created
- // user home directory on external storage. The "home" value should
- // match ExternalStorageProvider.ROOT_ID_HOME.
- return isExternalStorage() && "home".equals(rootId);
- }
-
- public boolean isExternalStorage() {
- return "com.android.externalstorage.documents".equals(authority);
- }
-
- public boolean isDownloads() {
- return "com.android.providers.downloads.documents".equals(authority);
- }
-
- public boolean isImages() {
- return "com.android.providers.media.documents".equals(authority)
- && "images_root".equals(rootId);
- }
-
- public boolean isVideos() {
- return "com.android.providers.media.documents".equals(authority)
- && "videos_root".equals(rootId);
- }
-
- public boolean isAudio() {
- return "com.android.providers.media.documents".equals(authority)
- && "audio_root".equals(rootId);
- }
-
- public boolean isMtp() {
- return "com.android.mtp.documents".equals(authority);
- }
-
- public boolean isLibrary() {
- return derivedType == TYPE_IMAGES
- || derivedType == TYPE_VIDEO
- || derivedType == TYPE_AUDIO
- || derivedType == TYPE_RECENTS;
- }
-
- public boolean hasSettings() {
- return (flags & Root.FLAG_HAS_SETTINGS) != 0;
- }
-
- public boolean supportsChildren() {
- return (flags & Root.FLAG_SUPPORTS_IS_CHILD) != 0;
- }
-
- public boolean supportsCreate() {
- return (flags & Root.FLAG_SUPPORTS_CREATE) != 0;
- }
-
- public boolean supportsRecents() {
- return (flags & Root.FLAG_SUPPORTS_RECENTS) != 0;
- }
-
- public boolean supportsSearch() {
- return (flags & Root.FLAG_SUPPORTS_SEARCH) != 0;
- }
-
- public boolean supportsEject() {
- return (flags & Root.FLAG_SUPPORTS_EJECT) != 0;
- }
-
- public boolean isAdvanced() {
- return (flags & Root.FLAG_ADVANCED) != 0;
- }
-
- public boolean isLocalOnly() {
- return (flags & Root.FLAG_LOCAL_ONLY) != 0;
- }
-
- public boolean isEmpty() {
- return (flags & Root.FLAG_EMPTY) != 0;
- }
-
- public boolean isSd() {
- return (flags & Root.FLAG_REMOVABLE_SD) != 0;
- }
-
- public boolean isUsb() {
- return (flags & Root.FLAG_REMOVABLE_USB) != 0;
- }
-
- public Drawable loadIcon(Context context) {
- if (derivedIcon != 0) {
- return context.getDrawable(derivedIcon);
- } else {
- return IconUtils.loadPackageIcon(context, authority, icon);
- }
- }
-
- public Drawable loadDrawerIcon(Context context) {
- if (derivedIcon != 0) {
- return IconUtils.applyTintColor(context, derivedIcon, R.color.item_root_icon);
- } else {
- return IconUtils.loadPackageIcon(context, authority, icon);
- }
- }
-
- public Drawable loadEjectIcon(Context context) {
- return IconUtils.applyTintColor(context, R.drawable.ic_eject, R.color.item_eject_icon);
- }
-
- /**
- * Gets the {@link DocumentInfo} of the root folder of this root.
- */
- public @Nullable DocumentInfo getRootDocumentBlocking(Context context) {
- try {
- final Uri uri = DocumentsContract.buildDocumentUri(authority, documentId);
- return DocumentInfo.fromUri(context.getContentResolver(), uri);
- } catch (FileNotFoundException e) {
- Log.w(TAG, "Failed to find root", e);
- return null;
- }
- }
-
- @Override
- public boolean equals(Object o) {
- if (o == null) {
- return false;
- }
-
- if (this == o) {
- return true;
- }
-
- if (o instanceof RootInfo) {
- RootInfo other = (RootInfo) o;
- return Objects.equals(authority, other.authority)
- && Objects.equals(rootId, other.rootId);
- }
-
- return false;
- }
-
- @Override
- public int hashCode() {
- return Objects.hash(authority, rootId);
- }
-
- @Override
- public int compareTo(RootInfo other) {
- // Sort by root type, then title, then summary.
- int score = derivedType - other.derivedType;
- if (score != 0) {
- return score;
- }
-
- score = compareToIgnoreCaseNullable(title, other.title);
- if (score != 0) {
- return score;
- }
-
- return compareToIgnoreCaseNullable(summary, other.summary);
- }
-
- @Override
- public String toString() {
- return "Root{"
- + "authority=" + authority
- + ", rootId=" + rootId
- + ", title=" + title
- + ", isUsb=" + isUsb()
- + ", isSd=" + isSd()
- + ", isMtp=" + isMtp()
- + "}";
- }
-
- public String getDirectoryString() {
- return !TextUtils.isEmpty(summary) ? summary : title;
- }
-}
diff --git a/packages/DocumentsUI/src/com/android/documentsui/services/CopyJob.java b/packages/DocumentsUI/src/com/android/documentsui/services/CopyJob.java
deleted file mode 100644
index 8eabbe4..0000000
--- a/packages/DocumentsUI/src/com/android/documentsui/services/CopyJob.java
+++ /dev/null
@@ -1,727 +0,0 @@
-/*
- * Copyright (C) 2016 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.services;
-
-import static android.os.SystemClock.elapsedRealtime;
-import static android.provider.DocumentsContract.buildChildDocumentsUri;
-import static android.provider.DocumentsContract.buildDocumentUri;
-import static android.provider.DocumentsContract.getDocumentId;
-import static android.provider.DocumentsContract.isChildDocument;
-
-import static com.android.documentsui.OperationDialogFragment.DIALOG_TYPE_CONVERTED;
-import static com.android.documentsui.Shared.DEBUG;
-import static com.android.documentsui.model.DocumentInfo.getCursorLong;
-import static com.android.documentsui.model.DocumentInfo.getCursorString;
-import static com.android.documentsui.services.FileOperationService.EXTRA_DIALOG_TYPE;
-import static com.android.documentsui.services.FileOperationService.EXTRA_OPERATION_TYPE;
-import static com.android.documentsui.services.FileOperationService.EXTRA_SRC_LIST;
-import static com.android.documentsui.services.FileOperationService.OPERATION_COPY;
-
-import android.annotation.StringRes;
-import android.app.Notification;
-import android.app.Notification.Builder;
-import android.app.PendingIntent;
-import android.content.ContentProviderClient;
-import android.content.ContentResolver;
-import android.content.Context;
-import android.content.Intent;
-import android.content.res.AssetFileDescriptor;
-import android.database.Cursor;
-import android.net.Uri;
-import android.os.CancellationSignal;
-import android.os.ParcelFileDescriptor;
-import android.os.RemoteException;
-import android.provider.DocumentsContract;
-import android.provider.DocumentsContract.Document;
-import android.text.format.DateUtils;
-import android.util.Log;
-import android.webkit.MimeTypeMap;
-
-import com.android.documentsui.DocumentsApplication;
-import com.android.documentsui.Metrics;
-import com.android.documentsui.R;
-import com.android.documentsui.RootsCache;
-import com.android.documentsui.clipping.UrisSupplier;
-import com.android.documentsui.model.DocumentInfo;
-import com.android.documentsui.model.DocumentStack;
-import com.android.documentsui.model.RootInfo;
-import com.android.documentsui.services.FileOperationService.OpType;
-
-import libcore.io.IoUtils;
-
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.io.InputStream;
-import java.text.NumberFormat;
-import java.util.ArrayList;
-import java.util.List;
-
-class CopyJob extends Job {
-
- private static final String TAG = "CopyJob";
-
- final List<DocumentInfo> mSrcs;
- final ArrayList<DocumentInfo> convertedFiles = new ArrayList<>();
-
- private long mStartTime = -1;
-
- private long mBatchSize;
- private volatile long mBytesCopied;
- // Speed estimation
- private long mBytesCopiedSample;
- private long mSampleTime;
- private long mSpeed;
- private long mRemainingTime;
-
- /**
- * @see @link {@link Job} constructor for most param descriptions.
- */
- CopyJob(Context service, Listener listener, String id, DocumentStack destination,
- UrisSupplier srcs) {
- this(service, listener, id, OPERATION_COPY, destination, srcs);
- }
-
- CopyJob(Context service, Listener listener, String id, @OpType int opType,
- DocumentStack destination, UrisSupplier srcs) {
- super(service, listener, id, opType, destination, srcs);
-
- assert(srcs.getItemCount() > 0);
-
- // delay the initialization of it to setUp() because it may be IO extensive.
- mSrcs = new ArrayList<>(srcs.getItemCount());
- }
-
- @Override
- Builder createProgressBuilder() {
- return super.createProgressBuilder(
- service.getString(R.string.copy_notification_title),
- R.drawable.ic_menu_copy,
- service.getString(android.R.string.cancel),
- R.drawable.ic_cab_cancel);
- }
-
- @Override
- public Notification getSetupNotification() {
- return getSetupNotification(service.getString(R.string.copy_preparing));
- }
-
- Notification getProgressNotification(@StringRes int msgId) {
- updateRemainingTimeEstimate();
-
- if (mBatchSize >= 0) {
- double completed = (double) this.mBytesCopied / mBatchSize;
- mProgressBuilder.setProgress(100, (int) (completed * 100), false);
- mProgressBuilder.setSubText(
- NumberFormat.getPercentInstance().format(completed));
- } else {
- // If the total file size failed to compute on some files, then show
- // an indeterminate spinner. CopyJob would most likely fail on those
- // files while copying, but would continue with another files.
- // Also, if the total size is 0 bytes, show an indeterminate spinner.
- mProgressBuilder.setProgress(0, 0, true);
- }
-
- if (mRemainingTime > 0) {
- mProgressBuilder.setContentText(service.getString(msgId,
- DateUtils.formatDuration(mRemainingTime)));
- } else {
- mProgressBuilder.setContentText(null);
- }
-
- return mProgressBuilder.build();
- }
-
- @Override
- public Notification getProgressNotification() {
- return getProgressNotification(R.string.copy_remaining);
- }
-
- void onBytesCopied(long numBytes) {
- this.mBytesCopied += numBytes;
- }
-
- /**
- * Generates an estimate of the remaining time in the copy.
- */
- private void updateRemainingTimeEstimate() {
- long elapsedTime = elapsedRealtime() - mStartTime;
-
- // mBytesCopied is modified in worker thread, but this method is called in monitor thread,
- // so take a snapshot of mBytesCopied to make sure the updated estimate is consistent.
- final long bytesCopied = mBytesCopied;
- final long sampleDuration = Math.max(elapsedTime - mSampleTime, 1L); // avoid dividing 0
- final long sampleSpeed = ((bytesCopied - mBytesCopiedSample) * 1000) / sampleDuration;
- if (mSpeed == 0) {
- mSpeed = sampleSpeed;
- } else {
- mSpeed = ((3 * mSpeed) + sampleSpeed) / 4;
- }
-
- if (mSampleTime > 0 && mSpeed > 0) {
- mRemainingTime = ((mBatchSize - bytesCopied) * 1000) / mSpeed;
- } else {
- mRemainingTime = 0;
- }
-
- mSampleTime = elapsedTime;
- mBytesCopiedSample = bytesCopied;
- }
-
- @Override
- Notification getFailureNotification() {
- return getFailureNotification(
- R.plurals.copy_error_notification_title, R.drawable.ic_menu_copy);
- }
-
- @Override
- Notification getWarningNotification() {
- final Intent navigateIntent = buildNavigateIntent(INTENT_TAG_WARNING);
- navigateIntent.putExtra(EXTRA_DIALOG_TYPE, DIALOG_TYPE_CONVERTED);
- navigateIntent.putExtra(EXTRA_OPERATION_TYPE, operationType);
-
- navigateIntent.putParcelableArrayListExtra(EXTRA_SRC_LIST, convertedFiles);
-
- // TODO: Consider adding a dialog on tapping the notification with a list of
- // converted files.
- final Notification.Builder warningBuilder = new Notification.Builder(service)
- .setContentTitle(service.getResources().getString(
- R.string.notification_copy_files_converted_title))
- .setContentText(service.getString(
- R.string.notification_touch_for_details))
- .setContentIntent(PendingIntent.getActivity(appContext, 0, navigateIntent,
- PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_ONE_SHOT))
- .setCategory(Notification.CATEGORY_ERROR)
- .setSmallIcon(R.drawable.ic_menu_copy)
- .setAutoCancel(true);
- return warningBuilder.build();
- }
-
- @Override
- boolean setUp() {
- try {
- buildDocumentList();
- } catch (ResourceException e) {
- Log.e(TAG, "Failed to get the list of docs.", e);
- return false;
- }
-
- // Check if user has canceled this task.
- if (isCanceled()) {
- return false;
- }
-
- try {
- mBatchSize = calculateSize(mSrcs);
- } catch (ResourceException e) {
- Log.w(TAG, "Failed to calculate total size. Copying without progress.", e);
- mBatchSize = -1;
- }
-
- // Check if user has canceled this task. We should check it again here as user cancels
- // tasks in main thread, but this is running in a worker thread. calculateSize() may
- // take a long time during which user can cancel this task, and we don't want to waste
- // resources doing useless large chunk of work.
- if (isCanceled()) {
- return false;
- }
-
- return checkSpace();
- }
-
- @Override
- void start() {
- mStartTime = elapsedRealtime();
- DocumentInfo srcInfo;
- DocumentInfo dstInfo = stack.peek();
- for (int i = 0; i < mSrcs.size() && !isCanceled(); ++i) {
- srcInfo = mSrcs.get(i);
-
- if (DEBUG) Log.d(TAG,
- "Copying " + srcInfo.displayName + " (" + srcInfo.derivedUri + ")"
- + " to " + dstInfo.displayName + " (" + dstInfo.derivedUri + ")");
-
- try {
- if (dstInfo.equals(srcInfo) || isDescendentOf(srcInfo, dstInfo)) {
- Log.e(TAG, "Skipping recursive copy of " + srcInfo.derivedUri);
- onFileFailed(srcInfo);
- } else {
- processDocument(srcInfo, null, dstInfo);
- }
- } catch (ResourceException e) {
- Log.e(TAG, "Failed to copy " + srcInfo.derivedUri, e);
- onFileFailed(srcInfo);
- }
- }
- Metrics.logFileOperation(service, operationType, mSrcs, dstInfo);
- }
-
- private void buildDocumentList() throws ResourceException {
- try {
- final ContentResolver resolver = appContext.getContentResolver();
- final Iterable<Uri> uris = srcs.getUris(appContext);
-
- int docProcessed = 0;
- for (Uri uri : uris) {
- DocumentInfo doc = DocumentInfo.fromUri(resolver, uri);
- if (canCopy(doc, stack.root)) {
- mSrcs.add(doc);
- } else {
- onFileFailed(doc);
- }
- ++docProcessed;
-
- if (isCanceled()) {
- return;
- }
- }
-
- // If docProcessed is different than the count claimed by UrisSupplier, add the number
- // to failedFileCount.
- failedFileCount += (srcs.getItemCount() - docProcessed);
- } catch(IOException e) {
- failedFileCount += srcs.getItemCount();
- throw new ResourceException("Failed to open the list of docs to copy.", e);
- }
- }
-
- private static boolean canCopy(DocumentInfo doc, RootInfo root) {
- // Can't copy folders to downloads, because we don't show folders there.
- return !root.isDownloads() || !doc.isDirectory();
- }
-
- /**
- * Checks whether the destination folder has enough space to take all source files.
- * @return true if the root has enough space or doesn't provide free space info; otherwise false
- */
- boolean checkSpace() {
- return checkSpace(mBatchSize);
- }
-
- /**
- * Checks whether the destination folder has enough space to take files of batchSize
- * @param batchSize the total size of files
- * @return true if the root has enough space or doesn't provide free space info; otherwise false
- */
- final boolean checkSpace(long batchSize) {
- // Default to be true because if batchSize or available space is invalid, we still let the
- // copy start anyway.
- boolean result = true;
- if (batchSize >= 0) {
- RootsCache cache = DocumentsApplication.getRootsCache(appContext);
-
- // Query root info here instead of using stack.root because the number there may be
- // stale.
- RootInfo root = cache.getRootOneshot(stack.root.authority, stack.root.rootId, true);
- if (root.availableBytes >= 0) {
- result = (batchSize <= root.availableBytes);
- } else {
- Log.w(TAG, root.toString() + " doesn't provide available bytes.");
- }
- }
-
- if (!result) {
- failedFileCount += mSrcs.size();
- failedFiles.addAll(mSrcs);
- }
-
- return result;
- }
-
- @Override
- boolean hasWarnings() {
- return !convertedFiles.isEmpty();
- }
-
- /**
- * Logs progress on the current copy operation. Displays/Updates the progress notification.
- *
- * @param bytesCopied
- */
- private void makeCopyProgress(long bytesCopied) {
- onBytesCopied(bytesCopied);
- }
-
- /**
- * Copies a the given document to the given location.
- *
- * @param src DocumentInfos for the documents to copy.
- * @param srcParent DocumentInfo for the parent of the document to process.
- * @param dstDirInfo The destination directory.
- * @throws ResourceException
- *
- * TODO: Stop passing srcParent, as it's not used for copy, but for move only.
- */
- void processDocument(DocumentInfo src, DocumentInfo srcParent,
- DocumentInfo dstDirInfo) throws ResourceException {
-
- // TODO: When optimized copy kicks in, we'll not making any progress updates.
- // For now. Local storage isn't using optimized copy.
-
- // When copying within the same provider, try to use optimized copying.
- // If not supported, then fallback to byte-by-byte copy/move.
- if (src.authority.equals(dstDirInfo.authority)) {
- if ((src.flags & Document.FLAG_SUPPORTS_COPY) != 0) {
- try {
- if (DocumentsContract.copyDocument(getClient(src), src.derivedUri,
- dstDirInfo.derivedUri) != null) {
- return;
- }
- } catch (RemoteException | RuntimeException e) {
- Log.e(TAG, "Provider side copy failed for: " + src.derivedUri
- + " due to an exception.", e);
- }
-
- // If optimized copy fails, then fallback to byte-by-byte copy.
- if (DEBUG) Log.d(TAG, "Fallback to byte-by-byte copy for: " + src.derivedUri);
- }
- }
-
- // If we couldn't do an optimized copy...we fall back to vanilla byte copy.
- byteCopyDocument(src, dstDirInfo);
- }
-
- void byteCopyDocument(DocumentInfo src, DocumentInfo dest) throws ResourceException {
- final String dstMimeType;
- final String dstDisplayName;
-
- if (DEBUG) Log.d(TAG, "Doing byte copy of document: " + src);
- // If the file is virtual, but can be converted to another format, then try to copy it
- // as such format. Also, append an extension for the target mime type (if known).
- if (src.isVirtualDocument()) {
- String[] streamTypes = null;
- try {
- streamTypes = getContentResolver().getStreamTypes(src.derivedUri, "*/*");
- } catch (RuntimeException e) {
- throw new ResourceException(
- "Failed to obtain streamable types for %s due to an exception.",
- src.derivedUri, e);
- }
- if (streamTypes != null && streamTypes.length > 0) {
- dstMimeType = streamTypes[0];
- final String extension = MimeTypeMap.getSingleton().
- getExtensionFromMimeType(dstMimeType);
- dstDisplayName = src.displayName +
- (extension != null ? "." + extension : src.displayName);
- } else {
- throw new ResourceException("Cannot copy virtual file %s. No streamable formats "
- + "available.", src.derivedUri);
- }
- } else {
- dstMimeType = src.mimeType;
- dstDisplayName = src.displayName;
- }
-
- // Create the target document (either a file or a directory), then copy recursively the
- // contents (bytes or children).
- Uri dstUri = null;
- try {
- dstUri = DocumentsContract.createDocument(
- getClient(dest), dest.derivedUri, dstMimeType, dstDisplayName);
- } catch (RemoteException | RuntimeException e) {
- throw new ResourceException(
- "Couldn't create destination document " + dstDisplayName + " in directory %s "
- + "due to an exception.", dest.derivedUri, e);
- }
- if (dstUri == null) {
- // If this is a directory, the entire subdir will not be copied over.
- throw new ResourceException(
- "Couldn't create destination document " + dstDisplayName + " in directory %s.",
- dest.derivedUri);
- }
-
- DocumentInfo dstInfo = null;
- try {
- dstInfo = DocumentInfo.fromUri(getContentResolver(), dstUri);
- } catch (FileNotFoundException | RuntimeException e) {
- throw new ResourceException("Could not load DocumentInfo for newly created file %s.",
- dstUri);
- }
-
- if (Document.MIME_TYPE_DIR.equals(src.mimeType)) {
- copyDirectoryHelper(src, dstInfo);
- } else {
- copyFileHelper(src, dstInfo, dest, dstMimeType);
- }
- }
-
- /**
- * Handles recursion into a directory and copying its contents. Note that in linux terms, this
- * does the equivalent of "cp src/* dst", not "cp -r src dst".
- *
- * @param srcDir Info of the directory to copy from. The routine will copy the directory's
- * contents, not the directory itself.
- * @param destDir Info of the directory to copy to. Must be created beforehand.
- * @throws ResourceException
- */
- private void copyDirectoryHelper(DocumentInfo srcDir, DocumentInfo destDir)
- throws ResourceException {
- // Recurse into directories. Copy children into the new subdirectory.
- final String queryColumns[] = new String[] {
- Document.COLUMN_DISPLAY_NAME,
- Document.COLUMN_DOCUMENT_ID,
- Document.COLUMN_MIME_TYPE,
- Document.COLUMN_SIZE,
- Document.COLUMN_FLAGS
- };
- Cursor cursor = null;
- boolean success = true;
- // Iterate over srcs in the directory; copy to the destination directory.
- final Uri queryUri = buildChildDocumentsUri(srcDir.authority, srcDir.documentId);
- try {
- try {
- cursor = getClient(srcDir).query(queryUri, queryColumns, null, null, null);
- } catch (RemoteException | RuntimeException e) {
- throw new ResourceException("Failed to query children of %s due to an exception.",
- srcDir.derivedUri, e);
- }
-
- DocumentInfo src;
- while (cursor.moveToNext() && !isCanceled()) {
- try {
- src = DocumentInfo.fromCursor(cursor, srcDir.authority);
- processDocument(src, srcDir, destDir);
- } catch (RuntimeException e) {
- Log.e(TAG, String.format(
- "Failed to recursively process a file %s due to an exception.",
- srcDir.derivedUri.toString()), e);
- success = false;
- }
- }
- } catch (RuntimeException e) {
- Log.e(TAG, String.format(
- "Failed to copy a file %s to %s. ",
- srcDir.derivedUri.toString(), destDir.derivedUri.toString()), e);
- success = false;
- } finally {
- IoUtils.closeQuietly(cursor);
- }
-
- if (!success) {
- throw new RuntimeException("Some files failed to copy during a recursive "
- + "directory copy.");
- }
- }
-
- /**
- * Handles copying a single file.
- *
- * @param src Info of the file to copy from.
- * @param dest Info of the *file* to copy to. Must be created beforehand.
- * @param destParent Info of the parent of the destination.
- * @param mimeType Mime type for the target. Can be different than source for virtual files.
- * @throws ResourceException
- */
- private void copyFileHelper(DocumentInfo src, DocumentInfo dest, DocumentInfo destParent,
- String mimeType) throws ResourceException {
- CancellationSignal canceller = new CancellationSignal();
- AssetFileDescriptor srcFileAsAsset = null;
- ParcelFileDescriptor srcFile = null;
- ParcelFileDescriptor dstFile = null;
- InputStream in = null;
- ParcelFileDescriptor.AutoCloseOutputStream out = null;
- boolean success = false;
-
- try {
- // If the file is virtual, but can be converted to another format, then try to copy it
- // as such format.
- if (src.isVirtualDocument()) {
- try {
- srcFileAsAsset = getClient(src).openTypedAssetFileDescriptor(
- src.derivedUri, mimeType, null, canceller);
- } catch (FileNotFoundException | RemoteException | RuntimeException e) {
- throw new ResourceException("Failed to open a file as asset for %s due to an "
- + "exception.", src.derivedUri, e);
- }
- srcFile = srcFileAsAsset.getParcelFileDescriptor();
- try {
- in = new AssetFileDescriptor.AutoCloseInputStream(srcFileAsAsset);
- } catch (IOException e) {
- throw new ResourceException("Failed to open a file input stream for %s due "
- + "an exception.", src.derivedUri, e);
- }
- } else {
- try {
- srcFile = getClient(src).openFile(src.derivedUri, "r", canceller);
- } catch (FileNotFoundException | RemoteException | RuntimeException e) {
- throw new ResourceException(
- "Failed to open a file for %s due to an exception.", src.derivedUri, e);
- }
- in = new ParcelFileDescriptor.AutoCloseInputStream(srcFile);
- }
-
- try {
- dstFile = getClient(dest).openFile(dest.derivedUri, "w", canceller);
- } catch (FileNotFoundException | RemoteException | RuntimeException e) {
- throw new ResourceException("Failed to open the destination file %s for writing "
- + "due to an exception.", dest.derivedUri, e);
- }
- out = new ParcelFileDescriptor.AutoCloseOutputStream(dstFile);
-
- byte[] buffer = new byte[32 * 1024];
- int len;
- try {
- while ((len = in.read(buffer)) != -1) {
- if (isCanceled()) {
- if (DEBUG) Log.d(TAG, "Canceled copy mid-copy of: " + src.derivedUri);
- return;
- }
- out.write(buffer, 0, len);
- makeCopyProgress(len);
- }
-
- // Need to invoke IoUtils.close explicitly to avoid from ignoring errors at flush.
- IoUtils.close(dstFile.getFileDescriptor());
- srcFile.checkError();
- } catch (IOException e) {
- throw new ResourceException(
- "Failed to copy bytes from %s to %s due to an IO exception.",
- src.derivedUri, dest.derivedUri, e);
- }
-
- if (src.isVirtualDocument()) {
- convertedFiles.add(src);
- }
-
- success = true;
- } finally {
- if (!success) {
- if (dstFile != null) {
- try {
- dstFile.closeWithError("Error copying bytes.");
- } catch (IOException closeError) {
- Log.w(TAG, "Error closing destination.", closeError);
- }
- }
-
- if (DEBUG) Log.d(TAG, "Cleaning up failed operation leftovers.");
- canceller.cancel();
- try {
- deleteDocument(dest, destParent);
- } catch (ResourceException e) {
- Log.w(TAG, "Failed to cleanup after copy error: " + src.derivedUri, e);
- }
- }
-
- // This also ensures the file descriptors are closed.
- IoUtils.closeQuietly(in);
- IoUtils.closeQuietly(out);
- }
- }
-
- /**
- * Calculates the cumulative size of all the documents in the list. Directories are recursed
- * into and totaled up.
- *
- * @param srcs
- * @return Size in bytes.
- * @throws ResourceException
- */
- private long calculateSize(List<DocumentInfo> srcs) throws ResourceException {
- long result = 0;
-
- for (DocumentInfo src : srcs) {
- if (src.isDirectory()) {
- // Directories need to be recursed into.
- try {
- result += calculateFileSizesRecursively(getClient(src), src.derivedUri);
- } catch (RemoteException e) {
- throw new ResourceException("Failed to obtain the client for %s.",
- src.derivedUri, e);
- }
- } else {
- result += src.size;
- }
-
- if (isCanceled()) {
- return result;
- }
- }
- return result;
- }
-
- /**
- * Calculates (recursively) the cumulative size of all the files under the given directory.
- *
- * @throws ResourceException
- */
- long calculateFileSizesRecursively(
- ContentProviderClient client, Uri uri) throws ResourceException {
- final String authority = uri.getAuthority();
- final Uri queryUri = buildChildDocumentsUri(authority, getDocumentId(uri));
- final String queryColumns[] = new String[] {
- Document.COLUMN_DOCUMENT_ID,
- Document.COLUMN_MIME_TYPE,
- Document.COLUMN_SIZE
- };
-
- long result = 0;
- Cursor cursor = null;
- try {
- cursor = client.query(queryUri, queryColumns, null, null, null);
- while (cursor.moveToNext() && !isCanceled()) {
- if (Document.MIME_TYPE_DIR.equals(
- getCursorString(cursor, Document.COLUMN_MIME_TYPE))) {
- // Recurse into directories.
- final Uri dirUri = buildDocumentUri(authority,
- getCursorString(cursor, Document.COLUMN_DOCUMENT_ID));
- result += calculateFileSizesRecursively(client, dirUri);
- } else {
- // This may return -1 if the size isn't defined. Ignore those cases.
- long size = getCursorLong(cursor, Document.COLUMN_SIZE);
- result += size > 0 ? size : 0;
- }
- }
- } catch (RemoteException | RuntimeException e) {
- throw new ResourceException(
- "Failed to calculate size for %s due to an exception.", uri, e);
- } finally {
- IoUtils.closeQuietly(cursor);
- }
-
- return result;
- }
-
- /**
- * Returns true if {@code doc} is a descendant of {@code parentDoc}.
- * @throws ResourceException
- */
- boolean isDescendentOf(DocumentInfo doc, DocumentInfo parent)
- throws ResourceException {
- if (parent.isDirectory() && doc.authority.equals(parent.authority)) {
- try {
- return isChildDocument(getClient(doc), doc.derivedUri, parent.derivedUri);
- } catch (RemoteException | RuntimeException e) {
- throw new ResourceException(
- "Failed to check if %s is a child of %s due to an exception.",
- doc.derivedUri, parent.derivedUri, e);
- }
- }
- return false;
- }
-
- @Override
- public String toString() {
- return new StringBuilder()
- .append("CopyJob")
- .append("{")
- .append("id=" + id)
- .append(", docs=" + srcs)
- .append(", destination=" + stack)
- .append("}")
- .toString();
- }
-}
diff --git a/packages/DocumentsUI/src/com/android/documentsui/services/DeleteJob.java b/packages/DocumentsUI/src/com/android/documentsui/services/DeleteJob.java
deleted file mode 100644
index 5a36818..0000000
--- a/packages/DocumentsUI/src/com/android/documentsui/services/DeleteJob.java
+++ /dev/null
@@ -1,146 +0,0 @@
-/*
- * Copyright (C) 2016 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.services;
-
-import static com.android.documentsui.Shared.DEBUG;
-import static com.android.documentsui.services.FileOperationService.OPERATION_DELETE;
-
-import android.app.Notification;
-import android.app.Notification.Builder;
-import android.content.ContentResolver;
-import android.content.Context;
-import android.net.Uri;
-import android.util.Log;
-
-import com.android.documentsui.clipping.UrisSupplier;
-import com.android.documentsui.Metrics;
-import com.android.documentsui.R;
-import com.android.documentsui.model.DocumentInfo;
-import com.android.documentsui.model.DocumentStack;
-
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.List;
-
-final class DeleteJob extends Job {
-
- private static final String TAG = "DeleteJob";
-
- private volatile int mDocsProcessed = 0;
-
- Uri mSrcParent;
- /**
- * Moves files to a destination identified by {@code destination}.
- * Performs most work by delegating to CopyJob, then deleting
- * a file after it has been copied.
- *
- * @see @link {@link Job} constructor for most param descriptions.
- */
- DeleteJob(Context service, Listener listener, String id, Uri srcParent, DocumentStack stack,
- UrisSupplier srcs) {
- super(service, listener, id, OPERATION_DELETE, stack, srcs);
- mSrcParent = srcParent;
- }
-
- @Override
- Builder createProgressBuilder() {
- return super.createProgressBuilder(
- service.getString(R.string.delete_notification_title),
- R.drawable.ic_menu_delete,
- service.getString(android.R.string.cancel),
- R.drawable.ic_cab_cancel);
- }
-
- @Override
- public Notification getSetupNotification() {
- return getSetupNotification(service.getString(R.string.delete_preparing));
- }
-
- @Override
- public Notification getProgressNotification() {
- mProgressBuilder.setProgress(srcs.getItemCount(), mDocsProcessed, false);
- String format = service.getString(R.string.delete_progress);
- mProgressBuilder.setSubText(String.format(format, mDocsProcessed, srcs.getItemCount()));
-
- mProgressBuilder.setContentText(null);
-
- return mProgressBuilder.build();
- }
-
- @Override
- Notification getFailureNotification() {
- return getFailureNotification(
- R.plurals.delete_error_notification_title, R.drawable.ic_menu_delete);
- }
-
- @Override
- Notification getWarningNotification() {
- throw new UnsupportedOperationException();
- }
-
- @Override
- void start() {
- try {
- final List<DocumentInfo> srcs = new ArrayList<>(this.srcs.getItemCount());
-
- final Iterable<Uri> uris = this.srcs.getUris(appContext);
-
- final ContentResolver resolver = appContext.getContentResolver();
- final DocumentInfo srcParent = DocumentInfo.fromUri(resolver, mSrcParent);
- for (Uri uri : uris) {
- DocumentInfo doc = DocumentInfo.fromUri(resolver, uri);
- srcs.add(doc);
-
- if (DEBUG) Log.d(TAG, "Deleting document @ " + doc.derivedUri);
- try {
- deleteDocument(doc, srcParent);
-
- if (isCanceled()) {
- // Canceled, dump the rest of the work. Deleted docs are not recoverable.
- return;
- }
- } catch (ResourceException e) {
- Log.e(TAG, "Failed to delete document @ " + doc.derivedUri, e);
- onFileFailed(doc);
- }
-
- ++mDocsProcessed;
- }
-
- // If mDocProcessed is different than the count claimed by UrisSupplier, add the number
- // to failedFileCount.
- failedFileCount += (this.srcs.getItemCount() - mDocsProcessed);
- Metrics.logFileOperation(service, operationType, srcs, null);
- } catch(IOException e) {
- Log.e(TAG, "Failed to get list of docs or parent source.", e);
- failedFileCount += srcs.getItemCount();
- }
- }
-
- @Override
- public String toString() {
- return new StringBuilder()
- .append("DeleteJob")
- .append("{")
- .append("id=" + id)
- .append(", docs=" + srcs)
- .append(", srcParent=" + mSrcParent)
- .append(", location=" + stack)
- .append("}")
- .toString();
- }
-}
diff --git a/packages/DocumentsUI/src/com/android/documentsui/services/FileOperation.java b/packages/DocumentsUI/src/com/android/documentsui/services/FileOperation.java
deleted file mode 100644
index 43c3bd7..0000000
--- a/packages/DocumentsUI/src/com/android/documentsui/services/FileOperation.java
+++ /dev/null
@@ -1,240 +0,0 @@
-/*
- * Copyright (C) 2016 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.services;
-
-import static com.android.documentsui.services.FileOperationService.OPERATION_COPY;
-import static com.android.documentsui.services.FileOperationService.OPERATION_DELETE;
-import static com.android.documentsui.services.FileOperationService.OPERATION_MOVE;
-import static com.android.documentsui.services.FileOperationService.OPERATION_UNKNOWN;
-
-import android.content.Context;
-import android.net.Uri;
-import android.os.Parcel;
-import android.os.Parcelable;
-import android.support.annotation.VisibleForTesting;
-
-import com.android.documentsui.clipping.UrisSupplier;
-import com.android.documentsui.model.DocumentStack;
-import com.android.documentsui.services.FileOperationService.OpType;
-
-/**
- * FileOperation describes a file operation, such as move/copy/delete etc.
- */
-public abstract class FileOperation implements Parcelable {
- private final @OpType int mOpType;
-
- private final UrisSupplier mSrcs;
- private DocumentStack mDestination;
-
- @VisibleForTesting
- FileOperation(@OpType int opType, UrisSupplier srcs, DocumentStack destination) {
- assert(opType != OPERATION_UNKNOWN);
- assert(srcs.getItemCount() > 0);
-
- mOpType = opType;
- mSrcs = srcs;
- mDestination = destination;
- }
-
- @Override
- public int describeContents() {
- return 0;
- }
-
- public @OpType int getOpType() {
- return mOpType;
- }
-
- public UrisSupplier getSrc() {
- return mSrcs;
- }
-
- public DocumentStack getDestination() {
- return mDestination;
- }
-
- public void setDestination(DocumentStack destination) {
- mDestination = destination;
- }
-
- public void dispose() {
- mSrcs.dispose();
- }
-
- abstract Job createJob(Context service, Job.Listener listener, String id);
-
- private void appendInfoTo(StringBuilder builder) {
- builder.append("opType=").append(mOpType);
- builder.append(", srcs=").append(mSrcs.toString());
- builder.append(", destination=").append(mDestination.toString());
- }
-
- @Override
- public void writeToParcel(Parcel out, int flag) {
- out.writeInt(mOpType);
- out.writeParcelable(mSrcs, flag);
- out.writeParcelable(mDestination, flag);
- }
-
- private FileOperation(Parcel in) {
- mOpType = in.readInt();
- mSrcs = in.readParcelable(FileOperation.class.getClassLoader());
- mDestination = in.readParcelable(FileOperation.class.getClassLoader());
- }
-
- public static class CopyOperation extends FileOperation {
- private CopyOperation(UrisSupplier srcs, DocumentStack destination) {
- super(OPERATION_COPY, srcs, destination);
- }
-
- @Override
- public String toString() {
- StringBuilder builder = new StringBuilder();
-
- builder.append("CopyOperation{");
- super.appendInfoTo(builder);
- builder.append("}");
-
- return builder.toString();
- }
-
- CopyJob createJob(Context service, Job.Listener listener, String id) {
- return new CopyJob(service, listener, id, getDestination(), getSrc());
- }
-
- private CopyOperation(Parcel in) {
- super(in);
- }
-
- public static final Parcelable.Creator<CopyOperation> CREATOR =
- new Parcelable.Creator<CopyOperation>() {
-
- @Override
- public CopyOperation createFromParcel(Parcel source) {
- return new CopyOperation(source);
- }
-
- @Override
- public CopyOperation[] newArray(int size) {
- return new CopyOperation[size];
- }
- };
- }
-
- public static class MoveDeleteOperation extends FileOperation {
- private final Uri mSrcParent;
-
- private MoveDeleteOperation(
- @OpType int opType, UrisSupplier srcs, Uri srcParent, DocumentStack destination) {
- super(opType, srcs, destination);
-
- assert(srcParent != null);
- mSrcParent = srcParent;
- }
-
- @Override
- Job createJob(Context service, Job.Listener listener, String id) {
- switch(getOpType()) {
- case OPERATION_MOVE:
- return new MoveJob(
- service, listener, id, mSrcParent, getDestination(), getSrc());
- case OPERATION_DELETE:
- return new DeleteJob(
- service, listener, id, mSrcParent, getDestination(), getSrc());
- default:
- throw new UnsupportedOperationException("Unsupported op type: " + getOpType());
- }
- }
-
- @Override
- public String toString() {
- StringBuilder builder = new StringBuilder();
-
- builder.append("MoveDeleteOperation{");
- super.appendInfoTo(builder);
- builder.append(", srcParent=").append(mSrcParent.toString());
- builder.append("}");
-
- return builder.toString();
- }
-
- @Override
- public void writeToParcel(Parcel out, int flag) {
- super.writeToParcel(out, flag);
- out.writeParcelable(mSrcParent, flag);
- }
-
- private MoveDeleteOperation(Parcel in) {
- super(in);
- mSrcParent = in.readParcelable(null);
- }
-
- public static final Parcelable.Creator<MoveDeleteOperation> CREATOR =
- new Parcelable.Creator<MoveDeleteOperation>() {
-
-
- @Override
- public MoveDeleteOperation createFromParcel(Parcel source) {
- return new MoveDeleteOperation(source);
- }
-
- @Override
- public MoveDeleteOperation[] newArray(int size) {
- return new MoveDeleteOperation[size];
- }
- };
- }
-
- public static class Builder {
- private @OpType int mOpType;
- private Uri mSrcParent;
- private UrisSupplier mSrcs;
- private DocumentStack mDestination;
-
- public Builder withOpType(@OpType int opType) {
- mOpType = opType;
- return this;
- }
-
- public Builder withSrcParent(Uri srcParent) {
- mSrcParent = srcParent;
- return this;
- }
-
- public Builder withSrcs(UrisSupplier srcs) {
- mSrcs = srcs;
- return this;
- }
-
- public Builder withDestination(DocumentStack destination) {
- mDestination = destination;
- return this;
- }
-
- public FileOperation build() {
- switch (mOpType) {
- case OPERATION_COPY:
- return new CopyOperation(mSrcs, mDestination);
- case OPERATION_MOVE:
- case OPERATION_DELETE:
- return new MoveDeleteOperation(mOpType, mSrcs, mSrcParent, mDestination);
- default:
- throw new UnsupportedOperationException("Unsupported op type: " + mOpType);
- }
- }
- }
-}
diff --git a/packages/DocumentsUI/src/com/android/documentsui/services/FileOperationService.java b/packages/DocumentsUI/src/com/android/documentsui/services/FileOperationService.java
deleted file mode 100644
index b61c1c9..0000000
--- a/packages/DocumentsUI/src/com/android/documentsui/services/FileOperationService.java
+++ /dev/null
@@ -1,372 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.documentsui.services;
-
-import static com.android.documentsui.Shared.DEBUG;
-
-import android.annotation.IntDef;
-import android.app.NotificationManager;
-import android.app.Service;
-import android.content.Intent;
-import android.os.Handler;
-import android.os.IBinder;
-import android.os.PowerManager;
-import android.support.annotation.VisibleForTesting;
-import android.util.Log;
-
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
-import java.util.concurrent.Future;
-
-import javax.annotation.concurrent.GuardedBy;
-
-public class FileOperationService extends Service implements Job.Listener {
-
- private static final int POOL_SIZE = 2; // "pool size", not *max* "pool size".
- private static final int NOTIFICATION_ID_PROGRESS = 0;
- private static final int NOTIFICATION_ID_FAILURE = 1;
- private static final int NOTIFICATION_ID_WARNING = 2;
-
- public static final String TAG = "FileOperationService";
-
- // Extra used for OperationDialogFragment, Notifications and picking copy destination.
- public static final String EXTRA_OPERATION_TYPE = "com.android.documentsui.OPERATION_TYPE";
-
- // Extras used for OperationDialogFragment...
- public static final String EXTRA_DIALOG_TYPE = "com.android.documentsui.DIALOG_TYPE";
- public static final String EXTRA_SRC_LIST = "com.android.documentsui.SRC_LIST";
-
- // Extras used to start or cancel a file operation...
- public static final String EXTRA_JOB_ID = "com.android.documentsui.JOB_ID";
- public static final String EXTRA_OPERATION = "com.android.documentsui.OPERATION";
- public static final String EXTRA_CANCEL = "com.android.documentsui.CANCEL";
-
- @IntDef(flag = true, value = {
- OPERATION_UNKNOWN,
- OPERATION_COPY,
- OPERATION_MOVE,
- OPERATION_DELETE
- })
- @Retention(RetentionPolicy.SOURCE)
- public @interface OpType {}
- public static final int OPERATION_UNKNOWN = -1;
- public static final int OPERATION_COPY = 1;
- public static final int OPERATION_MOVE = 2;
- public static final int OPERATION_DELETE = 3;
-
- // TODO: Move it to a shared file when more operations are implemented.
- public static final int FAILURE_COPY = 1;
-
- // The executor and job factory are visible for testing and non-final
- // so we'll have a way to inject test doubles from the test. It's
- // a sub-optimal arrangement.
- @VisibleForTesting ExecutorService executor;
-
- // Use a separate thread pool to prioritize deletions.
- @VisibleForTesting ExecutorService deletionExecutor;
-
- // Use a handler to schedule monitor tasks.
- @VisibleForTesting Handler handler;
-
- private PowerManager mPowerManager;
- private PowerManager.WakeLock mWakeLock; // the wake lock, if held.
- private NotificationManager mNotificationManager;
-
- @GuardedBy("mRunning")
- private final Map<String, JobRecord> mRunning = new HashMap<>();
-
- private int mLastServiceId;
-
- @Override
- public void onCreate() {
- // Allow tests to pre-set these with test doubles.
- if (executor == null) {
- executor = Executors.newFixedThreadPool(POOL_SIZE);
- }
-
- if (deletionExecutor == null) {
- deletionExecutor = Executors.newCachedThreadPool();
- }
-
- if (handler == null) {
- // Monitor tasks are small enough to schedule them on main thread.
- handler = new Handler();
- }
-
- if (DEBUG) Log.d(TAG, "Created.");
- mPowerManager = getSystemService(PowerManager.class);
- mNotificationManager = getSystemService(NotificationManager.class);
- }
-
- @Override
- public void onDestroy() {
- if (DEBUG) Log.d(TAG, "Shutting down executor.");
-
- List<Runnable> unfinishedCopies = executor.shutdownNow();
- List<Runnable> unfinishedDeletions = deletionExecutor.shutdownNow();
- List<Runnable> unfinished =
- new ArrayList<>(unfinishedCopies.size() + unfinishedDeletions.size());
- unfinished.addAll(unfinishedCopies);
- unfinished.addAll(unfinishedDeletions);
- if (!unfinished.isEmpty()) {
- Log.w(TAG, "Shutting down, but executor reports running jobs: " + unfinished);
- }
-
- executor = null;
- deletionExecutor = null;
- handler = null;
-
- if (DEBUG) Log.d(TAG, "Destroyed.");
- }
-
- @Override
- public int onStartCommand(Intent intent, int flags, int serviceId) {
- // TODO: Ensure we're not being called with retry or redeliver.
- // checkArgument(flags == 0); // retry and redeliver are not supported.
-
- String jobId = intent.getStringExtra(EXTRA_JOB_ID);
- assert(jobId != null);
-
- if (DEBUG) Log.d(TAG, "onStartCommand: " + jobId + " with serviceId " + serviceId);
-
- if (intent.hasExtra(EXTRA_CANCEL)) {
- handleCancel(intent);
- } else {
- FileOperation operation = intent.getParcelableExtra(EXTRA_OPERATION);
- handleOperation(jobId, operation);
- }
-
- // Track the service supplied id so we can stop the service once we're out of work to do.
- mLastServiceId = serviceId;
-
- return START_NOT_STICKY;
- }
-
- private void handleOperation(String jobId, FileOperation operation) {
- synchronized (mRunning) {
- if (mWakeLock == null) {
- mWakeLock = mPowerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, TAG);
- }
-
- if (mRunning.containsKey(jobId)) {
- Log.w(TAG, "Duplicate job id: " + jobId
- + ". Ignoring job request for operation: " + operation + ".");
- return;
- }
-
- Job job = operation.createJob(this, this, jobId);
-
- if (job == null) {
- return;
- }
-
- mWakeLock.acquire();
-
- assert (job != null);
- if (DEBUG) Log.d(TAG, "Scheduling job " + job.id + ".");
- Future<?> future = getExecutorService(operation.getOpType()).submit(job);
- mRunning.put(jobId, new JobRecord(job, future));
- }
- }
-
- /**
- * Cancels the operation corresponding to job id, identified in "EXTRA_JOB_ID".
- *
- * @param intent The cancellation intent.
- */
- private void handleCancel(Intent intent) {
- assert(intent.hasExtra(EXTRA_CANCEL));
- assert(intent.getStringExtra(EXTRA_JOB_ID) != null);
-
- String jobId = intent.getStringExtra(EXTRA_JOB_ID);
-
- if (DEBUG) Log.d(TAG, "handleCancel: " + jobId);
-
- synchronized (mRunning) {
- // Do nothing if the cancelled ID doesn't match the current job ID. This prevents racey
- // cancellation requests from affecting unrelated copy jobs. However, if the current job ID
- // is null, the service most likely crashed and was revived by the incoming cancel intent.
- // In that case, always allow the cancellation to proceed.
- JobRecord record = mRunning.get(jobId);
- if (record != null) {
- record.job.cancel();
- }
- }
-
- // Dismiss the progress notification here rather than in the copy loop. This preserves
- // interactivity for the user in case the copy loop is stalled.
- // Try to cancel it even if we don't have a job id...in case there is some sad
- // orphan notification.
- mNotificationManager.cancel(jobId, NOTIFICATION_ID_PROGRESS);
-
- // TODO: Guarantee the job is being finalized
- }
-
- private ExecutorService getExecutorService(@OpType int operationType) {
- switch (operationType) {
- case OPERATION_COPY:
- case OPERATION_MOVE:
- return executor;
- case OPERATION_DELETE:
- return deletionExecutor;
- default:
- throw new UnsupportedOperationException();
- }
- }
-
- @GuardedBy("mRunning")
- private void deleteJob(Job job) {
- if (DEBUG) Log.d(TAG, "deleteJob: " + job.id);
-
- JobRecord record = mRunning.remove(job.id);
- assert(record != null);
- record.job.cleanup();
-
- if (mRunning.isEmpty()) {
- shutdown();
- }
- }
-
- /**
- * Most likely shuts down. Won't shut down if service has a pending
- * message. Thread pool is deal with in onDestroy.
- */
- private void shutdown() {
- if (DEBUG) Log.d(TAG, "Shutting down. Last serviceId was " + mLastServiceId);
- mWakeLock.release();
- mWakeLock = null;
-
- // Turns out, for us, stopSelfResult always returns false in tests,
- // so we can't guard executor shutdown. For this reason we move
- // executor shutdown to #onDestroy.
- boolean gonnaStop = stopSelfResult(mLastServiceId);
- if (DEBUG) Log.d(TAG, "Stopping service: " + gonnaStop);
- if (!gonnaStop) {
- Log.w(TAG, "Service should be stopping, but reports otherwise.");
- }
- }
-
- @VisibleForTesting
- boolean holdsWakeLock() {
- return mWakeLock != null && mWakeLock.isHeld();
- }
-
- @Override
- public void onStart(Job job) {
- if (DEBUG) Log.d(TAG, "onStart: " + job.id);
-
- // Show start up notification
- mNotificationManager.notify(
- job.id, NOTIFICATION_ID_PROGRESS, job.getSetupNotification());
-
- // Set up related monitor
- JobMonitor monitor = new JobMonitor(job, mNotificationManager, handler);
- monitor.start();
- }
-
- @Override
- public void onFinished(Job job) {
- assert(job.isFinished());
- if (DEBUG) Log.d(TAG, "onFinished: " + job.id);
-
- // Use the same thread of monitors to tackle notifications to avoid race conditions.
- // Otherwise we may fail to dismiss progress notification.
- handler.post(() -> {
- // Dismiss the ongoing copy notification when the copy is done.
- mNotificationManager.cancel(job.id, NOTIFICATION_ID_PROGRESS);
-
- if (job.hasFailures()) {
- Log.e(TAG, "Job failed on files: " + job.failedFileCount + ".");
- mNotificationManager.notify(
- job.id, NOTIFICATION_ID_FAILURE, job.getFailureNotification());
- }
-
- if (job.hasWarnings()) {
- if (DEBUG) Log.d(TAG, "Job finished with warnings.");
- mNotificationManager.notify(
- job.id, NOTIFICATION_ID_WARNING, job.getWarningNotification());
- }
- });
-
- synchronized (mRunning) {
- deleteJob(job);
- }
- }
-
- private static final class JobRecord {
- private final Job job;
- private final Future<?> future;
-
- public JobRecord(Job job, Future<?> future) {
- this.job = job;
- this.future = future;
- }
- }
-
- /**
- * A class used to periodically polls state of a job.
- *
- * <p>It's possible that jobs hang because underlying document providers stop responding. We
- * still need to update notifications if jobs hang, so instead of jobs pushing their states,
- * we poll states of jobs.
- */
- private static final class JobMonitor implements Runnable {
- private static final long PROGRESS_INTERVAL_MILLIS = 500L;
-
- private final Job mJob;
- private final NotificationManager mNotificationManager;
- private final Handler mHandler;
-
- private JobMonitor(Job job, NotificationManager notificationManager, Handler handler) {
- mJob = job;
- mNotificationManager = notificationManager;
- mHandler = handler;
- }
-
- private void start() {
- mHandler.post(this);
- }
-
- @Override
- public void run() {
- if (mJob.isFinished()) {
- // Finish notification is already shown. Progress notification is removed.
- // Just finish itself.
- return;
- }
-
- // Only job in set up state has progress bar
- if (mJob.getState() == Job.STATE_SET_UP) {
- mNotificationManager.notify(
- mJob.id, NOTIFICATION_ID_PROGRESS, mJob.getProgressNotification());
- }
-
- mHandler.postDelayed(this, PROGRESS_INTERVAL_MILLIS);
- }
- }
-
- @Override
- public IBinder onBind(Intent intent) {
- return null; // Boilerplate. See super#onBind
- }
-}
diff --git a/packages/DocumentsUI/src/com/android/documentsui/services/FileOperations.java b/packages/DocumentsUI/src/com/android/documentsui/services/FileOperations.java
deleted file mode 100644
index 01956a1..0000000
--- a/packages/DocumentsUI/src/com/android/documentsui/services/FileOperations.java
+++ /dev/null
@@ -1,139 +0,0 @@
-/*
- * Copyright (C) 2016 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.services;
-
-import static android.os.SystemClock.elapsedRealtime;
-
-import static com.android.documentsui.Shared.DEBUG;
-import static com.android.documentsui.services.FileOperationService.EXTRA_CANCEL;
-import static com.android.documentsui.services.FileOperationService.EXTRA_JOB_ID;
-import static com.android.documentsui.services.FileOperationService.EXTRA_OPERATION;
-
-import android.annotation.IntDef;
-import android.app.Activity;
-import android.content.Context;
-import android.content.Intent;
-import android.support.annotation.VisibleForTesting;
-import android.util.Log;
-
-import com.android.documentsui.services.FileOperationService.OpType;
-
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-
-/**
- * Helper functions for starting various file operations.
- */
-public final class FileOperations {
-
- private static final String TAG = "FileOperations";
-
- private static final IdBuilder idBuilder = new IdBuilder();
-
- private FileOperations() {}
-
- public static String createJobId() {
- return idBuilder.getNext();
- }
-
- /**
- * Tries to start the activity. Returns the job id.
- */
- public static String start(Context context, FileOperation operation, Callback callback) {
-
- if (DEBUG) Log.d(TAG, "Handling generic 'start' call.");
-
- String jobId = createJobId();
- Intent intent = createBaseIntent(context, jobId, operation);
-
- callback.onOperationResult(Callback.STATUS_ACCEPTED, operation.getOpType(),
- operation.getSrc().getItemCount());
-
- context.startService(intent);
-
- return jobId;
- }
-
- @VisibleForTesting
- public static void cancel(Activity activity, String jobId) {
- if (DEBUG) Log.d(TAG, "Attempting to canceling operation: " + jobId);
-
- Intent intent = new Intent(activity, FileOperationService.class);
- intent.putExtra(EXTRA_CANCEL, true);
- intent.putExtra(EXTRA_JOB_ID, jobId);
-
- activity.startService(intent);
- }
-
- /**
- * Starts the service for an operation.
- *
- * @param jobId A unique jobid for this job.
- * Use {@link #createJobId} if you don't have one handy.
- * @return Id of the job.
- */
- public static Intent createBaseIntent(
- Context context, String jobId, FileOperation operation) {
-
- Intent intent = new Intent(context, FileOperationService.class);
- intent.putExtra(EXTRA_JOB_ID, jobId);
- intent.putExtra(EXTRA_OPERATION, operation);
-
- return intent;
- }
-
- private static final class IdBuilder {
-
- // Remember last job time so we can guard against collisions.
- private long mLastJobTime;
-
- // If we detect a collision, use subId to make distinct.
- private int mSubId;
-
- public synchronized String getNext() {
- long time = elapsedRealtime();
- if (time == mLastJobTime) {
- mSubId++;
- } else {
- mSubId = 0;
- }
- mLastJobTime = time;
- return String.valueOf(mLastJobTime) + "-" + String.valueOf(mSubId);
- }
- }
-
- /**
- * A functional callback called when the file operation starts or fails to start.
- */
- @FunctionalInterface
- public interface Callback {
- @Retention(RetentionPolicy.SOURCE)
- @IntDef({STATUS_ACCEPTED, STATUS_REJECTED})
- @interface Status {}
- static final int STATUS_ACCEPTED = 0;
- static final int STATUS_REJECTED = 1;
-
- /**
- * Performs operation when the file operation starts or fails to start.
- *
- * @param status {@link Status} of this operation
- * @param opType file operation type {@link OpType}.
- * @param docCount number of documents operated.
- */
- void onOperationResult(@Status int status, @OpType int opType, int docCount);
- }
-}
diff --git a/packages/DocumentsUI/src/com/android/documentsui/services/Job.java b/packages/DocumentsUI/src/com/android/documentsui/services/Job.java
deleted file mode 100644
index 14ae66e..0000000
--- a/packages/DocumentsUI/src/com/android/documentsui/services/Job.java
+++ /dev/null
@@ -1,334 +0,0 @@
-/*
- * Copyright (C) 2016 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.services;
-
-import static com.android.documentsui.DocumentsApplication.acquireUnstableProviderOrThrow;
-import static com.android.documentsui.services.FileOperationService.EXTRA_CANCEL;
-import static com.android.documentsui.services.FileOperationService.EXTRA_DIALOG_TYPE;
-import static com.android.documentsui.services.FileOperationService.EXTRA_JOB_ID;
-import static com.android.documentsui.services.FileOperationService.EXTRA_OPERATION_TYPE;
-import static com.android.documentsui.services.FileOperationService.EXTRA_SRC_LIST;
-import static com.android.documentsui.services.FileOperationService.OPERATION_UNKNOWN;
-
-import android.annotation.DrawableRes;
-import android.annotation.IntDef;
-import android.annotation.PluralsRes;
-import android.app.Notification;
-import android.app.Notification.Builder;
-import android.app.PendingIntent;
-import android.content.ContentProviderClient;
-import android.content.ContentResolver;
-import android.content.Context;
-import android.content.Intent;
-import android.net.Uri;
-import android.os.Parcelable;
-import android.os.RemoteException;
-import android.provider.DocumentsContract;
-import android.util.Log;
-
-import com.android.documentsui.clipping.UrisSupplier;
-import com.android.documentsui.FilesActivity;
-import com.android.documentsui.Metrics;
-import com.android.documentsui.OperationDialogFragment;
-import com.android.documentsui.R;
-import com.android.documentsui.Shared;
-import com.android.documentsui.model.DocumentInfo;
-import com.android.documentsui.model.DocumentStack;
-import com.android.documentsui.services.FileOperationService.OpType;
-
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * A mashup of work item and ui progress update factory. Used by {@link FileOperationService}
- * to do work and show progress relating to this work.
- */
-abstract public class Job implements Runnable {
- private static final String TAG = "Job";
-
- @Retention(RetentionPolicy.SOURCE)
- @IntDef({STATE_CREATED, STATE_STARTED, STATE_SET_UP, STATE_COMPLETED, STATE_CANCELED})
- @interface State {}
- static final int STATE_CREATED = 0;
- static final int STATE_STARTED = 1;
- static final int STATE_SET_UP = 2;
- static final int STATE_COMPLETED = 3;
- /**
- * A job is in canceled state as long as {@link #cancel()} is called on it, even after it is
- * completed.
- */
- static final int STATE_CANCELED = 4;
-
- static final String INTENT_TAG_WARNING = "warning";
- static final String INTENT_TAG_FAILURE = "failure";
- static final String INTENT_TAG_PROGRESS = "progress";
- static final String INTENT_TAG_CANCEL = "cancel";
-
- final Context service;
- final Context appContext;
- final Listener listener;
-
- final @OpType int operationType;
- final String id;
- final DocumentStack stack;
- final UrisSupplier srcs;
-
- int failedFileCount = 0;
- final ArrayList<DocumentInfo> failedFiles = new ArrayList<>();
- final Notification.Builder mProgressBuilder;
-
- private final Map<String, ContentProviderClient> mClients = new HashMap<>();
- private volatile @State int mState = STATE_CREATED;
-
- /**
- * A simple progressable job, much like an AsyncTask, but with support
- * for providing various related notification, progress and navigation information.
- * @param service The service context in which this job is running.
- * @param listener
- * @param id Arbitrary string ID
- * @param stack The documents stack context relating to this request. This is the
- * destination in the Files app where the user will be take when the
- * navigation intent is invoked (presumably from notification).
- * @param srcs the list of docs to operate on
- */
- Job(Context service, Listener listener, String id,
- @OpType int opType, DocumentStack stack, UrisSupplier srcs) {
-
- assert(opType != OPERATION_UNKNOWN);
-
- this.service = service;
- this.appContext = service.getApplicationContext();
- this.listener = listener;
- this.operationType = opType;
-
- this.id = id;
- this.stack = stack;
- this.srcs = srcs;
-
- mProgressBuilder = createProgressBuilder();
- }
-
- @Override
- public final void run() {
- if (isCanceled()) {
- // Canceled before running
- return;
- }
-
- mState = STATE_STARTED;
- listener.onStart(this);
- try {
- boolean result = setUp();
- if (result && !isCanceled()) {
- mState = STATE_SET_UP;
- start();
- }
- } catch (RuntimeException e) {
- // No exceptions should be thrown here, as all calls to the provider must be
- // handled within Job implementations. However, just in case catch them here.
- Log.e(TAG, "Operation failed due to an unhandled runtime exception.", e);
- Metrics.logFileOperationErrors(service, operationType, failedFiles);
- } finally {
- mState = (mState == STATE_STARTED || mState == STATE_SET_UP) ? STATE_COMPLETED : mState;
- listener.onFinished(this);
-
- // NOTE: If this details is a JumboClipDetails, and it's still referred in primary clip
- // at this point, user won't be able to paste it to anywhere else because the underlying
- srcs.dispose();
- }
- }
-
- boolean setUp() {
- return true;
- }
- abstract void start();
-
- abstract Notification getSetupNotification();
- abstract Notification getProgressNotification();
- abstract Notification getFailureNotification();
-
- abstract Notification getWarningNotification();
-
- Uri getDataUriForIntent(String tag) {
- return Uri.parse(String.format("data,%s-%s", tag, id));
- }
-
- ContentProviderClient getClient(DocumentInfo doc) throws RemoteException {
- ContentProviderClient client = mClients.get(doc.authority);
- if (client == null) {
- // Acquire content providers.
- client = acquireUnstableProviderOrThrow(
- getContentResolver(),
- doc.authority);
-
- mClients.put(doc.authority, client);
- }
-
- assert(client != null);
- return client;
- }
-
- final void cleanup() {
- for (ContentProviderClient client : mClients.values()) {
- ContentProviderClient.releaseQuietly(client);
- }
- }
-
- final @State int getState() {
- return mState;
- }
-
- final void cancel() {
- mState = STATE_CANCELED;
- Metrics.logFileOperationCancelled(service, operationType);
- }
-
- final boolean isCanceled() {
- return mState == STATE_CANCELED;
- }
-
- final boolean isFinished() {
- return mState == STATE_CANCELED || mState == STATE_COMPLETED;
- }
-
- final ContentResolver getContentResolver() {
- return service.getContentResolver();
- }
-
- void onFileFailed(DocumentInfo file) {
- ++failedFileCount;
- failedFiles.add(file);
- }
-
- final boolean hasFailures() {
- return failedFileCount > 0;
- }
-
- boolean hasWarnings() {
- return false;
- }
-
- final void deleteDocument(DocumentInfo doc, DocumentInfo parent) throws ResourceException {
- try {
- if (doc.isRemoveSupported()) {
- DocumentsContract.removeDocument(getClient(doc), doc.derivedUri, parent.derivedUri);
- } else if (doc.isDeleteSupported()) {
- DocumentsContract.deleteDocument(getClient(doc), doc.derivedUri);
- } else {
- throw new ResourceException("Unable to delete source document as the file is " +
- "not deletable nor removable: %s.", doc.derivedUri);
- }
- } catch (RemoteException | RuntimeException e) {
- throw new ResourceException("Failed to delete file %s due to an exception.",
- doc.derivedUri, e);
- }
- }
-
- Notification getSetupNotification(String content) {
- mProgressBuilder.setProgress(0, 0, true)
- .setContentText(content);
- return mProgressBuilder.build();
- }
-
- Notification getFailureNotification(@PluralsRes int titleId, @DrawableRes int icon) {
- final Intent navigateIntent = buildNavigateIntent(INTENT_TAG_FAILURE);
- navigateIntent.putExtra(EXTRA_DIALOG_TYPE, OperationDialogFragment.DIALOG_TYPE_FAILURE);
- navigateIntent.putExtra(EXTRA_OPERATION_TYPE, operationType);
- navigateIntent.putParcelableArrayListExtra(EXTRA_SRC_LIST, failedFiles);
-
- final Notification.Builder errorBuilder = new Notification.Builder(service)
- .setContentTitle(service.getResources().getQuantityString(titleId,
- failedFileCount, failedFileCount))
- .setContentText(service.getString(R.string.notification_touch_for_details))
- .setContentIntent(PendingIntent.getActivity(appContext, 0, navigateIntent,
- PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_ONE_SHOT))
- .setCategory(Notification.CATEGORY_ERROR)
- .setSmallIcon(icon)
- .setAutoCancel(true);
-
- return errorBuilder.build();
- }
-
- abstract Builder createProgressBuilder();
-
- final Builder createProgressBuilder(
- String title, @DrawableRes int icon,
- String actionTitle, @DrawableRes int actionIcon) {
- Notification.Builder progressBuilder = new Notification.Builder(service)
- .setContentTitle(title)
- .setContentIntent(
- PendingIntent.getActivity(appContext, 0,
- buildNavigateIntent(INTENT_TAG_PROGRESS), 0))
- .setCategory(Notification.CATEGORY_PROGRESS)
- .setSmallIcon(icon)
- .setOngoing(true);
-
- final Intent cancelIntent = createCancelIntent();
-
- progressBuilder.addAction(
- actionIcon,
- actionTitle,
- PendingIntent.getService(
- service,
- 0,
- cancelIntent,
- PendingIntent.FLAG_ONE_SHOT | PendingIntent.FLAG_CANCEL_CURRENT));
-
- return progressBuilder;
- }
-
- /**
- * Creates an intent for navigating back to the destination directory.
- */
- Intent buildNavigateIntent(String tag) {
- Intent intent = new Intent(service, FilesActivity.class);
- intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
- intent.setAction(DocumentsContract.ACTION_BROWSE);
- intent.setData(getDataUriForIntent(tag));
- intent.putExtra(Shared.EXTRA_STACK, (Parcelable) stack);
- return intent;
- }
-
- Intent createCancelIntent() {
- final Intent cancelIntent = new Intent(service, FileOperationService.class);
- cancelIntent.setData(getDataUriForIntent(INTENT_TAG_CANCEL));
- cancelIntent.putExtra(EXTRA_CANCEL, true);
- cancelIntent.putExtra(EXTRA_JOB_ID, id);
- return cancelIntent;
- }
-
- @Override
- public String toString() {
- return new StringBuilder()
- .append("Job")
- .append("{")
- .append("id=" + id)
- .append("}")
- .toString();
- }
-
- /**
- * Listener interface employed by the service that owns us as well as tests.
- */
- interface Listener {
- void onStart(Job job);
- void onFinished(Job job);
- }
-}
diff --git a/packages/DocumentsUI/src/com/android/documentsui/services/MoveJob.java b/packages/DocumentsUI/src/com/android/documentsui/services/MoveJob.java
deleted file mode 100644
index ab0fae1..0000000
--- a/packages/DocumentsUI/src/com/android/documentsui/services/MoveJob.java
+++ /dev/null
@@ -1,181 +0,0 @@
-/*
- * Copyright (C) 2016 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.services;
-
-import static com.android.documentsui.Shared.DEBUG;
-import static com.android.documentsui.services.FileOperationService.OPERATION_MOVE;
-
-import android.app.Notification;
-import android.app.Notification.Builder;
-import android.content.ContentResolver;
-import android.content.Context;
-import android.net.Uri;
-import android.os.RemoteException;
-import android.provider.DocumentsContract;
-import android.provider.DocumentsContract.Document;
-import android.util.Log;
-
-import com.android.documentsui.R;
-import com.android.documentsui.clipping.UrisSupplier;
-import com.android.documentsui.model.DocumentInfo;
-import com.android.documentsui.model.DocumentStack;
-
-import java.io.FileNotFoundException;
-
-// TODO: Stop extending CopyJob.
-final class MoveJob extends CopyJob {
-
- private static final String TAG = "MoveJob";
-
- Uri mSrcParentUri;
- DocumentInfo mSrcParent;
-
- /**
- * Moves files to a destination identified by {@code destination}.
- * Performs most work by delegating to CopyJob, then deleting
- * a file after it has been copied.
- *
- * @see @link {@link Job} constructor for most param descriptions.
- */
- MoveJob(Context service, Listener listener,
- String id, Uri srcParent, DocumentStack destination, UrisSupplier srcs) {
- super(service, listener, id, OPERATION_MOVE, destination, srcs);
- mSrcParentUri = srcParent;
- }
-
- @Override
- Builder createProgressBuilder() {
- return super.createProgressBuilder(
- service.getString(R.string.move_notification_title),
- R.drawable.ic_menu_copy,
- service.getString(android.R.string.cancel),
- R.drawable.ic_cab_cancel);
- }
-
- @Override
- public Notification getSetupNotification() {
- return getSetupNotification(service.getString(R.string.move_preparing));
- }
-
- @Override
- public Notification getProgressNotification() {
- return getProgressNotification(R.string.copy_remaining);
- }
-
- @Override
- Notification getFailureNotification() {
- return getFailureNotification(
- R.plurals.move_error_notification_title, R.drawable.ic_menu_copy);
- }
-
- @Override
- public boolean setUp() {
- final ContentResolver resolver = appContext.getContentResolver();
- try {
- mSrcParent = DocumentInfo.fromUri(resolver, mSrcParentUri);
- } catch(FileNotFoundException e) {
- Log.e(TAG, "Failed to create srcParent.", e);
- failedFileCount += srcs.getItemCount();
- return false;
- }
-
- return super.setUp();
- }
-
- /**
- * {@inheritDoc}
- *
- * Only check space for moves across authorities. For now we don't know if the doc in
- * {@link #mSrcs} is in the same root of destination, and if it's optimized move in the same
- * root it should succeed regardless of free space, but it's for sure a failure if there is no
- * enough free space if docs are moved from another authority.
- */
- @Override
- boolean checkSpace() {
- long size = 0;
- for (DocumentInfo src : mSrcs) {
- if (!src.authority.equals(stack.root.authority)) {
- if (src.isDirectory()) {
- try {
- size += calculateFileSizesRecursively(getClient(src), src.derivedUri);
- } catch (RemoteException|ResourceException e) {
- Log.w(TAG, "Failed to obtain client for %s" + src.derivedUri + ".", e);
-
- // Failed to calculate size, but move may still succeed.
- return true;
- }
- } else {
- size += src.size;
- }
- }
- }
-
- return checkSpace(size);
- }
-
- void processDocument(DocumentInfo src, DocumentInfo srcParent, DocumentInfo dest)
- throws ResourceException {
-
- // TODO: When optimized move kicks in, we're not making any progress updates. FIX IT!
-
- // When moving within the same provider, try to use optimized moving.
- // If not supported, then fallback to byte-by-byte copy/move.
- if (src.authority.equals(dest.authority)) {
- if ((src.flags & Document.FLAG_SUPPORTS_MOVE) != 0) {
- try {
- if (DocumentsContract.moveDocument(getClient(src), src.derivedUri,
- srcParent != null ? srcParent.derivedUri : mSrcParent.derivedUri,
- dest.derivedUri) != null) {
- return;
- }
- } catch (RemoteException | RuntimeException e) {
- Log.e(TAG, "Provider side move failed for: " + src.derivedUri
- + " due to an exception: ", e);
- }
- // If optimized move fails, then fallback to byte-by-byte copy.
- if (DEBUG) Log.d(TAG, "Fallback to byte-by-byte move for: " + src.derivedUri);
- }
- }
-
- // Moving virtual files by bytes is not supported. This is because, it would involve
- // conversion, and the source file should not be deleted in such case (as it's a different
- // file).
- if (src.isVirtualDocument()) {
- throw new ResourceException("Cannot move virtual file %s byte by byte.",
- src.derivedUri);
- }
-
- // If we couldn't do an optimized copy...we fall back to vanilla byte copy.
- byteCopyDocument(src, dest);
-
- // Remove the source document.
- deleteDocument(src, srcParent);
- }
-
- @Override
- public String toString() {
- return new StringBuilder()
- .append("MoveJob")
- .append("{")
- .append("id=" + id)
- .append(", srcs=" + mSrcs)
- .append(", srcParent=" + mSrcParent)
- .append(", destination=" + stack)
- .append("}")
- .toString();
- }
-}
diff --git a/packages/DocumentsUI/src/com/android/documentsui/services/ResourceException.java b/packages/DocumentsUI/src/com/android/documentsui/services/ResourceException.java
deleted file mode 100644
index 7d3d91a..0000000
--- a/packages/DocumentsUI/src/com/android/documentsui/services/ResourceException.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright (C) 2016 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.services;
-
-import android.net.Uri;
-
-public class ResourceException extends Exception {
- public ResourceException(String message, Exception e) {
- super(message, e);
- }
-
- public ResourceException(String message, Uri uri1, Exception e) {
- super(String.format(message, uri1.toString()), e);
- }
-
- public ResourceException(String message, Uri uri1, Uri uri2, Exception e) {
- super(String.format(message, uri1.toString(), uri2.toString()), e);
- }
-
- public ResourceException(String message) {
- super(message);
- }
-
- public ResourceException(String message, Uri uri1) {
- super(String.format(message, uri1.toString()));
- }
-
- public ResourceException(String message, Uri uri1, Uri uri2) {
- super(message.format(uri1.toString(), uri2.toString()));
- }
-}
diff --git a/packages/DocumentsUI/tests/Android.mk b/packages/DocumentsUI/tests/Android.mk
deleted file mode 100644
index febc542..0000000
--- a/packages/DocumentsUI/tests/Android.mk
+++ /dev/null
@@ -1,20 +0,0 @@
-
-LOCAL_PATH := $(call my-dir)
-include $(CLEAR_VARS)
-
-LOCAL_MODULE_TAGS := tests
-#LOCAL_SDK_VERSION := current
-
-LOCAL_SRC_FILES := $(call all-java-files-under, src)
-
-LOCAL_JAVA_LIBRARIES := android.test.runner
-LOCAL_STATIC_JAVA_LIBRARIES := mockito-target ub-uiautomator espresso-core guava
-LOCAL_JARJAR_RULES := $(LOCAL_PATH)/jarjar-rules.txt
-
-LOCAL_PACKAGE_NAME := DocumentsUITests
-LOCAL_INSTRUMENTATION_FOR := DocumentsUI
-
-LOCAL_CERTIFICATE := platform
-
-include $(BUILD_PACKAGE)
-
diff --git a/packages/DocumentsUI/tests/AndroidManifest.xml b/packages/DocumentsUI/tests/AndroidManifest.xml
deleted file mode 100644
index 0b76766..0000000
--- a/packages/DocumentsUI/tests/AndroidManifest.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
- package="com.android.documentsui.tests">
-
- <uses-permission android:name="android.permission.INTERNET" />
-
- <application>
- <uses-library android:name="android.test.runner" />
- <provider
- android:name="com.android.documentsui.StubProvider"
- android:authorities="com.android.documentsui.stubprovider"
- android:exported="true"
- android:grantUriPermissions="true"
- android:permission="android.permission.MANAGE_DOCUMENTS"
- android:enabled="true">
- <intent-filter>
- <action android:name="android.content.action.DOCUMENTS_PROVIDER" />
- </intent-filter>
- </provider>
- </application>
-
- <instrumentation android:name="android.support.test.runner.AndroidJUnitRunner"
- android:targetPackage="com.android.documentsui"
- android:label="Tests for DocumentsUI" />
-
-</manifest>
diff --git a/packages/DocumentsUI/tests/jarjar-rules.txt b/packages/DocumentsUI/tests/jarjar-rules.txt
deleted file mode 100644
index 360b69b..0000000
--- a/packages/DocumentsUI/tests/jarjar-rules.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-rule com.google.common.** docsui.@0
-rule android.support.annotation.** docsui.@0
diff --git a/packages/DocumentsUI/tests/src/com/android/documentsui/ActivityTest.java b/packages/DocumentsUI/tests/src/com/android/documentsui/ActivityTest.java
deleted file mode 100644
index 1400fe6..0000000
--- a/packages/DocumentsUI/tests/src/com/android/documentsui/ActivityTest.java
+++ /dev/null
@@ -1,176 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.documentsui;
-
-import static com.android.documentsui.StubProvider.DEFAULT_AUTHORITY;
-import static com.android.documentsui.StubProvider.ROOT_0_ID;
-import static com.android.documentsui.StubProvider.ROOT_1_ID;
-
-import android.app.Activity;
-import android.content.ContentProviderClient;
-import android.content.ContentResolver;
-import android.content.Context;
-import android.content.Intent;
-import android.os.RemoteException;
-import android.provider.DocumentsContract.Document;
-import android.support.test.uiautomator.Configurator;
-import android.support.test.uiautomator.UiDevice;
-import android.support.test.uiautomator.UiObjectNotFoundException;
-import android.test.ActivityInstrumentationTestCase2;
-import android.view.MotionEvent;
-
-import com.android.documentsui.bots.Bots;
-import com.android.documentsui.bots.UiBot;
-import com.android.documentsui.model.RootInfo;
-
-import javax.annotation.Nullable;
-
-/**
- * Provides basic test environment for UI tests:
- * - Launches activity
- * - Creates and gives access to test root directories and test files
- * - Cleans up the test environment
- */
-public abstract class ActivityTest<T extends Activity> extends ActivityInstrumentationTestCase2<T> {
-
- static final int TIMEOUT = 5000;
-
- // Testing files. For custom ones, override initTestFiles().
- public static final String dirName1 = "Dir1";
- public static final String childDir1 = "ChildDir1";
- public static final String fileName1 = "file1.log";
- public static final String fileName2 = "file12.png";
- public static final String fileName3 = "anotherFile0.log";
- public static final String fileName4 = "poodles.text";
- public static final String fileNameNoRename = "NO_RENAMEfile.txt";
-
- public Bots bots;
- public UiDevice device;
- public Context context;
-
- public RootInfo rootDir0;
- public RootInfo rootDir1;
- ContentResolver mResolver;
- DocumentsProviderHelper mDocsHelper;
- ContentProviderClient mClient;
-
- public ActivityTest(Class<T> activityClass) {
- super(activityClass);
- }
-
- /*
- * Returns the root that will be opened within the activity.
- * By default tests are started with one of the test roots.
- * Override the method if you want to open different root on start.
- * @return Root that will be opened. Return null if you want to open activity's default root.
- */
- protected @Nullable RootInfo getInitialRoot() {
- return rootDir0;
- }
-
- /**
- * Returns the authority of the testing provider begin used.
- * By default it's StubProvider's authority.
- * @return Authority of the provider.
- */
- protected String getTestingProviderAuthority() {
- return DEFAULT_AUTHORITY;
- }
-
- /**
- * Resolves testing roots.
- */
- protected void setupTestingRoots() throws RemoteException {
- rootDir0 = mDocsHelper.getRoot(ROOT_0_ID);
- rootDir1 = mDocsHelper.getRoot(ROOT_1_ID);
- }
-
- @Override
- public void setUp() throws Exception {
- device = UiDevice.getInstance(getInstrumentation());
- // NOTE: Must be the "target" context, else security checks in content provider will fail.
- context = getInstrumentation().getTargetContext();
-
- bots = new Bots(device, context, TIMEOUT);
-
- Configurator.getInstance().setToolType(MotionEvent.TOOL_TYPE_MOUSE);
-
- mResolver = context.getContentResolver();
- mClient = mResolver.acquireUnstableContentProviderClient(getTestingProviderAuthority());
- mDocsHelper = new DocumentsProviderHelper(getTestingProviderAuthority(), mClient);
-
- device.setOrientationNatural();
- setupTestingRoots();
-
- launchActivity();
- resetStorage();
-
- // Since at the launch of activity, ROOT_0 and ROOT_1 have no files, drawer will
- // automatically open for phone devices. Espresso register click() as (x, y) MotionEvents,
- // so if a drawer is on top of a file we want to select, it will actually click the drawer.
- // Thus to start a clean state, we always try to close first.
- bots.roots.closeDrawer();
- }
-
- @Override
- public void tearDown() throws Exception {
- device.unfreezeRotation();
- mClient.release();
- super.tearDown();
- }
-
- void launchActivity() {
- final Intent intent = context.getPackageManager().getLaunchIntentForPackage(
- UiBot.TARGET_PKG);
- intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
- if (getInitialRoot() != null) {
- intent.setData(getInitialRoot().getUri());
- }
- setActivityIntent(intent);
- getActivity(); // Launch the activity.
- }
-
- void resetStorage() throws RemoteException {
- mClient.call("clear", null, null);
- device.waitForIdle();
- }
-
- void initTestFiles() throws RemoteException {
- mDocsHelper.createFolder(rootDir0, dirName1);
- mDocsHelper.createDocument(rootDir0, "text/plain", fileName1);
- mDocsHelper.createDocument(rootDir0, "image/png", fileName2);
- mDocsHelper.createDocumentWithFlags(rootDir0.documentId, "text/plain", fileNameNoRename,
- Document.FLAG_SUPPORTS_WRITE);
-
- mDocsHelper.createDocument(rootDir1, "text/plain", fileName3);
- mDocsHelper.createDocument(rootDir1, "text/plain", fileName4);
- }
-
- void assertDefaultContentOfTestDir0() throws UiObjectNotFoundException {
- bots.directory.waitForDocument(fileName1);
- bots.directory.waitForDocument(fileName2);
- bots.directory.waitForDocument(dirName1);
- bots.directory.waitForDocument(fileNameNoRename);
- bots.directory.assertDocumentsCount(4);
- }
-
- void assertDefaultContentOfTestDir1() throws UiObjectNotFoundException {
- bots.directory.waitForDocument(fileName3);
- bots.directory.waitForDocument(fileName4);
- bots.directory.assertDocumentsCount(2);
- }
-}
diff --git a/packages/DocumentsUI/tests/src/com/android/documentsui/DocumentsMenuManagerTest.java b/packages/DocumentsUI/tests/src/com/android/documentsui/DocumentsMenuManagerTest.java
deleted file mode 100644
index ec03173..0000000
--- a/packages/DocumentsUI/tests/src/com/android/documentsui/DocumentsMenuManagerTest.java
+++ /dev/null
@@ -1,246 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.documentsui;
-
-import static com.android.documentsui.State.ACTION_CREATE;
-import static com.android.documentsui.State.ACTION_OPEN;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-
-import android.provider.DocumentsContract.Root;
-import android.support.test.filters.SmallTest;
-import android.support.test.runner.AndroidJUnit4;
-
-import com.android.documentsui.model.RootInfo;
-import com.android.documentsui.testing.TestDirectoryDetails;
-import com.android.documentsui.testing.TestMenu;
-import com.android.documentsui.testing.TestMenuItem;
-import com.android.documentsui.testing.TestSearchViewManager;
-import com.android.documentsui.testing.TestSelectionDetails;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-@RunWith(AndroidJUnit4.class)
-@SmallTest
-public final class DocumentsMenuManagerTest {
-
- private TestMenu testMenu;
- private TestMenuItem open;
- private TestMenuItem share;
- private TestMenuItem delete;
- private TestMenuItem rename;
- private TestMenuItem selectAll;
- private TestMenuItem createDir;
- private TestMenuItem fileSize;
- private TestMenuItem grid;
- private TestMenuItem list;
- private TestMenuItem cut;
- private TestMenuItem copy;
- private TestMenuItem paste;
- private TestMenuItem sort;
- private TestMenuItem sortSize;
- private TestMenuItem advanced;
- private TestMenuItem settings;
- private TestMenuItem eject;
-
- private TestSelectionDetails selectionDetails;
- private TestDirectoryDetails directoryDetails;
- private TestSearchViewManager testSearchManager;
- private State state = new State();
- private RootInfo testRootInfo;
-
- @Before
- public void setUp() {
- testMenu = TestMenu.create();
- open = testMenu.findItem(R.id.menu_open);
- share = testMenu.findItem(R.id.menu_share);
- delete = testMenu.findItem(R.id.menu_delete);
- rename = testMenu.findItem(R.id.menu_rename);
- selectAll = testMenu.findItem(R.id.menu_select_all);
- createDir = testMenu.findItem(R.id.menu_create_dir);
- fileSize = testMenu.findItem(R.id.menu_file_size);
- grid = testMenu.findItem(R.id.menu_grid);
- list = testMenu.findItem(R.id.menu_list);
- cut = testMenu.findItem(R.id.menu_cut_to_clipboard);
- copy = testMenu.findItem(R.id.menu_copy_to_clipboard);
- paste = testMenu.findItem(R.id.menu_paste_from_clipboard);
- sort = testMenu.findItem(R.id.menu_sort);
- sortSize = testMenu.findItem(R.id.menu_sort_size);
- advanced = testMenu.findItem(R.id.menu_advanced);
- settings = testMenu.findItem(R.id.menu_settings);
- eject = testMenu.findItem(R.id.menu_eject_root);
-
- selectionDetails = new TestSelectionDetails();
- directoryDetails = new TestDirectoryDetails();
- testSearchManager = new TestSearchViewManager();
- testRootInfo = new RootInfo();
- state.action = ACTION_CREATE;
- state.allowMultiple = true;
- }
-
- @Test
- public void testActionMenu() {
- DocumentsMenuManager mgr = new DocumentsMenuManager(testSearchManager, state);
- mgr.updateActionMenu(testMenu, selectionDetails);
-
- open.assertInvisible();
- delete.assertInvisible();
- share.assertInvisible();
- rename.assertInvisible();
- selectAll.assertVisible();
- }
-
- @Test
- public void testActionMenu_openAction() {
- state.action = ACTION_OPEN;
- DocumentsMenuManager mgr = new DocumentsMenuManager(testSearchManager, state);
- mgr.updateActionMenu(testMenu, selectionDetails);
-
- open.assertVisible();
- }
-
-
- @Test
- public void testActionMenu_notAllowMultiple() {
- state.allowMultiple = false;
- DocumentsMenuManager mgr = new DocumentsMenuManager(testSearchManager, state);
- mgr.updateActionMenu(testMenu, selectionDetails);
-
- selectAll.assertInvisible();
- }
-
- @Test
- public void testOptionMenu() {
- DocumentsMenuManager mgr = new DocumentsMenuManager(testSearchManager, state);
- mgr.updateOptionMenu(testMenu, directoryDetails);
-
- sort.assertEnabled();
- sortSize.assertInvisible();
- advanced.assertInvisible();
- advanced.assertTitle(R.string.menu_advanced_show);
- createDir.assertDisabled();
- fileSize.assertInvisible();
- assertTrue(testSearchManager.showMenuCalled());
- }
-
- @Test
- public void testOptionMenu_hideSize() {
- state.showSize = true;
- DocumentsMenuManager mgr = new DocumentsMenuManager(testSearchManager, state);
- mgr.updateOptionMenu(testMenu, directoryDetails);
-
- sortSize.assertVisible();
- }
-
- @Test
- public void testOptionMenu_notPicking() {
- state.action = ACTION_OPEN;
- state.derivedMode = State.MODE_LIST;
- DocumentsMenuManager mgr = new DocumentsMenuManager(testSearchManager, state);
- mgr.updateOptionMenu(testMenu, directoryDetails);
-
- createDir.assertInvisible();
- grid.assertVisible();
- list.assertInvisible();
- assertFalse(testSearchManager.showMenuCalled());
- }
-
- @Test
- public void testOptionMenu_canCreateDirectory() {
- directoryDetails.canCreateDirectory = true;
- DocumentsMenuManager mgr = new DocumentsMenuManager(testSearchManager, state);
- mgr.updateOptionMenu(testMenu, directoryDetails);
-
- createDir.assertEnabled();
- }
-
- @Test
- public void testOptionMenu_showAdvanced() {
- state.showAdvanced = true;
- state.showAdvancedOption = true;
- DocumentsMenuManager mgr = new DocumentsMenuManager(testSearchManager, state);
- mgr.updateOptionMenu(testMenu, directoryDetails);
-
- advanced.assertVisible();
- advanced.assertTitle(R.string.menu_advanced_hide);
- }
-
- @Test
- public void testOptionMenu_inRecents() {
- directoryDetails.isInRecents = true;
- DocumentsMenuManager mgr = new DocumentsMenuManager(testSearchManager, state);
- mgr.updateOptionMenu(testMenu, directoryDetails);
-
- sort.assertDisabled();
- grid.assertInvisible();
- list.assertInvisible();
- }
-
- @Test
- public void testContextMenu_NoSelection() {
- DocumentsMenuManager mgr = new DocumentsMenuManager(testSearchManager, state);
- mgr.updateContextMenu(testMenu, null, directoryDetails);
- cut.assertVisible();
- copy.assertVisible();
- cut.assertDisabled();
- copy.assertDisabled();
- paste.assertVisible();
- createDir.assertVisible();
- delete.assertVisible();
- }
-
- @Test
- public void testContextMenu_Selection() {
- DocumentsMenuManager mgr = new DocumentsMenuManager(testSearchManager, state);
- mgr.updateContextMenu(testMenu, selectionDetails, directoryDetails);
- cut.assertVisible();
- copy.assertVisible();
- paste.assertVisible();
- rename.assertInvisible();
- createDir.assertVisible();
- delete.assertVisible();
- }
-
- @Test
- public void testRootContextMenu() {
- DocumentsMenuManager mgr = new DocumentsMenuManager(testSearchManager, state);
- mgr.updateRootContextMenu(testMenu, testRootInfo);
-
- eject.assertInvisible();
- settings.assertInvisible();
- }
-
- @Test
- public void testRootContextMenu_hasRootSettings() {
- testRootInfo.flags = Root.FLAG_HAS_SETTINGS;
- DocumentsMenuManager mgr = new DocumentsMenuManager(testSearchManager, state);
- mgr.updateRootContextMenu(testMenu, testRootInfo);
-
- settings.assertInvisible();
- }
-
- @Test
- public void testRootContextMenu_canEject() {
- testRootInfo.flags = Root.FLAG_SUPPORTS_EJECT;
- DocumentsMenuManager mgr = new DocumentsMenuManager(testSearchManager, state);
- mgr.updateRootContextMenu(testMenu, testRootInfo);
-
- eject.assertInvisible();
- }
-}
diff --git a/packages/DocumentsUI/tests/src/com/android/documentsui/DocumentsProviderHelper.java b/packages/DocumentsUI/tests/src/com/android/documentsui/DocumentsProviderHelper.java
deleted file mode 100644
index 16ed2d9..0000000
--- a/packages/DocumentsUI/tests/src/com/android/documentsui/DocumentsProviderHelper.java
+++ /dev/null
@@ -1,306 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.documentsui;
-
-import static android.provider.DocumentsContract.buildChildDocumentsUri;
-import static android.provider.DocumentsContract.buildDocumentUri;
-import static android.provider.DocumentsContract.buildRootsUri;
-import static com.android.documentsui.model.DocumentInfo.getCursorString;
-import static com.android.internal.util.Preconditions.checkArgument;
-import static junit.framework.Assert.assertEquals;
-import static junit.framework.Assert.assertNotNull;
-import static junit.framework.Assert.fail;
-
-import android.content.ContentProviderClient;
-import android.database.Cursor;
-import android.net.Uri;
-import android.os.Bundle;
-import android.os.ParcelFileDescriptor;
-import android.os.ParcelFileDescriptor.AutoCloseInputStream;
-import android.os.ParcelFileDescriptor.AutoCloseOutputStream;
-import android.os.RemoteException;
-import android.provider.DocumentsContract;
-import android.provider.DocumentsContract.Document;
-import android.provider.DocumentsContract.Root;
-import android.support.annotation.Nullable;
-import android.test.MoreAsserts;
-import android.text.TextUtils;
-
-import com.android.documentsui.model.DocumentInfo;
-import com.android.documentsui.model.RootInfo;
-
-import com.google.android.collect.Lists;
-
-import libcore.io.IoUtils;
-import libcore.io.Streams;
-
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Provides support for creation of documents in a test settings.
- */
-public class DocumentsProviderHelper {
-
- private final String mAuthority;
- private final ContentProviderClient mClient;
-
- public DocumentsProviderHelper(String authority, ContentProviderClient client) {
- checkArgument(!TextUtils.isEmpty(authority));
- mAuthority = authority;
- mClient = client;
- }
-
- public RootInfo getRoot(String documentId) throws RemoteException {
- final Uri rootsUri = buildRootsUri(mAuthority);
- Cursor cursor = null;
- try {
- cursor = mClient.query(rootsUri, null, null, null, null);
- while (cursor.moveToNext()) {
- if (documentId.equals(getCursorString(cursor, Root.COLUMN_ROOT_ID))) {
- return RootInfo.fromRootsCursor(mAuthority, cursor);
- }
- }
- throw new IllegalArgumentException("Can't find matching root for id=" + documentId);
- } catch (Exception e) {
- throw new RuntimeException("Can't load root for id=" + documentId , e);
- } finally {
- IoUtils.closeQuietly(cursor);
- }
- }
-
- public Uri createDocument(Uri parentUri, String mimeType, String name) {
- if (name.contains("/")) {
- throw new IllegalArgumentException("Name and mimetype probably interposed.");
- }
- try {
- Uri uri = DocumentsContract.createDocument(mClient, parentUri, mimeType, name);
- return uri;
- } catch (RemoteException e) {
- throw new RuntimeException("Couldn't create document: " + name + " with mimetype "
- + mimeType, e);
- }
- }
-
- public Uri createDocument(String parentId, String mimeType, String name) {
- Uri parentUri = buildDocumentUri(mAuthority, parentId);
- return createDocument(parentUri, mimeType, name);
- }
-
- public Uri createDocument(RootInfo root, String mimeType, String name) {
- return createDocument(root.documentId, mimeType, name);
- }
-
- public Uri createDocumentWithFlags(String documentId, String mimeType, String name, int flags,
- String... streamTypes)
- throws RemoteException {
- Bundle in = new Bundle();
- in.putInt(StubProvider.EXTRA_FLAGS, flags);
- in.putString(StubProvider.EXTRA_PARENT_ID, documentId);
- in.putString(Document.COLUMN_MIME_TYPE, mimeType);
- in.putString(Document.COLUMN_DISPLAY_NAME, name);
- in.putStringArrayList(StubProvider.EXTRA_STREAM_TYPES, Lists.newArrayList(streamTypes));
-
- Bundle out = mClient.call("createDocumentWithFlags", null, in);
- Uri uri = out.getParcelable(DocumentsContract.EXTRA_URI);
- return uri;
- }
-
- public Uri createFolder(Uri parentUri, String name) {
- return createDocument(parentUri, Document.MIME_TYPE_DIR, name);
- }
-
- public Uri createFolder(String parentId, String name) {
- Uri parentUri = buildDocumentUri(mAuthority, parentId);
- return createDocument(parentUri, Document.MIME_TYPE_DIR, name);
- }
-
- public Uri createFolder(RootInfo root, String name) {
- return createDocument(root, Document.MIME_TYPE_DIR, name);
- }
-
- public void writeDocument(Uri documentUri, byte[] contents)
- throws RemoteException, IOException {
- ParcelFileDescriptor file = mClient.openFile(documentUri, "w", null);
- try (AutoCloseOutputStream out = new AutoCloseOutputStream(file)) {
- out.write(contents, 0, contents.length);
- }
- }
-
- public byte[] readDocument(Uri documentUri) throws RemoteException, IOException {
- ParcelFileDescriptor file = mClient.openFile(documentUri, "r", null);
- byte[] buf = null;
- try (AutoCloseInputStream in = new AutoCloseInputStream(file)) {
- buf = Streams.readFully(in);
- }
- return buf;
- }
-
- public void assertChildCount(Uri parentUri, int expected) throws Exception {
- List<DocumentInfo> children = listChildren(parentUri);
- assertEquals("Incorrect file count after copy", expected, children.size());
- }
-
- public void assertChildCount(String parentId, int expected) throws Exception {
- List<DocumentInfo> children = listChildren(parentId);
- assertEquals("Incorrect file count after copy", expected, children.size());
- }
-
- public void assertChildCount(RootInfo root, int expected) throws Exception {
- assertChildCount(root.documentId, expected);
- }
-
- public void assertHasFile(Uri parentUri, String name) throws Exception {
- List<DocumentInfo> children = listChildren(parentUri);
- for (DocumentInfo child : children) {
- if (name.equals(child.displayName) && !child.isDirectory()) {
- return;
- }
- }
- fail("Could not find file named=" + name + " in children " + children);
- }
-
- public void assertHasFile(String parentId, String name) throws Exception {
- Uri parentUri = buildDocumentUri(mAuthority, parentId);
- assertHasFile(parentUri, name);
- }
-
- public void assertHasFile(RootInfo root, String name) throws Exception {
- assertHasFile(root.documentId, name);
- }
-
- public void assertHasDirectory(Uri parentUri, String name) throws Exception {
- List<DocumentInfo> children = listChildren(parentUri);
- for (DocumentInfo child : children) {
- if (name.equals(child.displayName) && child.isDirectory()) {
- return;
- }
- }
- fail("Could not find name=" + name + " in children " + children);
- }
-
- public void assertHasDirectory(String parentId, String name) throws Exception {
- Uri parentUri = buildDocumentUri(mAuthority, parentId);
- assertHasDirectory(parentUri, name);
- }
-
- public void assertHasDirectory(RootInfo root, String name) throws Exception {
- assertHasDirectory(root.documentId, name);
- }
-
- public void assertDoesNotExist(Uri parentUri, String name) throws Exception {
- List<DocumentInfo> children = listChildren(parentUri);
- for (DocumentInfo child : children) {
- if (name.equals(child.displayName)) {
- fail("Found name=" + name + " in children " + children);
- }
- }
- }
-
- public void assertDoesNotExist(String parentId, String name) throws Exception {
- Uri parentUri = buildDocumentUri(mAuthority, parentId);
- assertDoesNotExist(parentUri, name);
- }
-
- public void assertDoesNotExist(RootInfo root, String name) throws Exception {
- assertDoesNotExist(root.getUri(), name);
- }
-
- public @Nullable DocumentInfo findFile(String parentId, String name)
- throws Exception {
- List<DocumentInfo> children = listChildren(parentId);
- for (DocumentInfo child : children) {
- if (name.equals(child.displayName)) {
- return child;
- }
- }
- return null;
- }
-
- public DocumentInfo findDocument(String parentId, String name) throws Exception {
- List<DocumentInfo> children = listChildren(parentId);
- for (DocumentInfo child : children) {
- if (name.equals(child.displayName)) {
- return child;
- }
- }
- return null;
- }
-
- public DocumentInfo findDocument(Uri parentUri, String name) throws Exception {
- List<DocumentInfo> children = listChildren(parentUri);
- for (DocumentInfo child : children) {
- if (name.equals(child.displayName)) {
- return child;
- }
- }
- return null;
- }
-
- public List<DocumentInfo> listChildren(Uri parentUri) throws Exception {
- String id = DocumentsContract.getDocumentId(parentUri);
- return listChildren(id);
- }
-
- public List<DocumentInfo> listChildren(String documentId) throws Exception {
- Uri uri = buildChildDocumentsUri(mAuthority, documentId);
- List<DocumentInfo> children = new ArrayList<>();
- try (Cursor cursor = mClient.query(uri, null, null, null, null, null)) {
- Cursor wrapper = new RootCursorWrapper(mAuthority, "totally-fake", cursor, 100);
- while (wrapper.moveToNext()) {
- children.add(DocumentInfo.fromDirectoryCursor(wrapper));
- }
- }
- return children;
- }
-
- public void assertFileContents(Uri documentUri, byte[] expected) throws Exception {
- MoreAsserts.assertEquals(
- "Copied file contents differ",
- expected, readDocument(documentUri));
- }
-
- public void assertFileContents(String parentId, String fileName, byte[] expected)
- throws Exception {
- DocumentInfo file = findFile(parentId, fileName);
- assertNotNull(file);
- assertFileContents(file.derivedUri, expected);
- }
-
- /**
- * A helper method for StubProvider only. Won't work with other providers.
- * @throws RemoteException
- */
- public Uri createVirtualFile(
- RootInfo root, String path, String mimeType, byte[] content, String... streamTypes)
- throws RemoteException {
-
- Bundle args = new Bundle();
- args.putString(StubProvider.EXTRA_ROOT, root.rootId);
- args.putString(StubProvider.EXTRA_PATH, path);
- args.putString(Document.COLUMN_MIME_TYPE, mimeType);
- args.putStringArrayList(StubProvider.EXTRA_STREAM_TYPES, Lists.newArrayList(streamTypes));
- args.putByteArray(StubProvider.EXTRA_CONTENT, content);
-
- Bundle result = mClient.call("createVirtualFile", null, args);
- String documentId = result.getString(Document.COLUMN_DOCUMENT_ID);
-
- return DocumentsContract.buildDocumentUri(mAuthority, documentId);
- }
-
-}
diff --git a/packages/DocumentsUI/tests/src/com/android/documentsui/FileManagementUiTest.java b/packages/DocumentsUI/tests/src/com/android/documentsui/FileManagementUiTest.java
deleted file mode 100644
index 44f417d..0000000
--- a/packages/DocumentsUI/tests/src/com/android/documentsui/FileManagementUiTest.java
+++ /dev/null
@@ -1,120 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.documentsui;
-
-import static com.android.documentsui.StubProvider.ROOT_0_ID;
-import static com.android.documentsui.StubProvider.ROOT_1_ID;
-
-import android.net.Uri;
-import android.os.RemoteException;
-import android.support.test.filters.Suppress;
-import android.test.suitebuilder.annotation.LargeTest;
-import android.view.KeyEvent;
-
-@LargeTest
-public class FileManagementUiTest extends ActivityTest<FilesActivity> {
-
- public FileManagementUiTest() {
- super(FilesActivity.class);
- }
-
- @Override
- public void setUp() throws Exception {
- super.setUp();
- initTestFiles();
- }
-
- @Override
- public void initTestFiles() throws RemoteException {
- Uri uri = mDocsHelper.createFolder(rootDir0, dirName1);
- mDocsHelper.createFolder(uri, childDir1);
-
- mDocsHelper.createDocument(rootDir0, "text/plain", "file0.log");
- mDocsHelper.createDocument(rootDir0, "image/png", "file1.png");
- mDocsHelper.createDocument(rootDir0, "text/csv", "file2.csv");
-
- mDocsHelper.createDocument(rootDir1, "text/plain", "anotherFile0.log");
- mDocsHelper.createDocument(rootDir1, "text/plain", "poodles.text");
- }
-
- @Suppress
- public void testCreateDirectory() throws Exception {
- bots.main.openOverflowMenu();
- device.waitForIdle();
-
- bots.main.clickToolbarOverflowItem("New folder");
- device.waitForIdle();
-
- bots.main.setDialogText("Kung Fu Panda");
- device.waitForIdle();
-
- bots.keyboard.pressEnter();
-
- bots.directory.waitForDocument("Kung Fu Panda");
- }
-
- public void testKeyboard_CutDocument() throws Exception {
- bots.directory.clickDocument("file1.png");
- device.waitForIdle();
- bots.keyboard.pressKey(KeyEvent.KEYCODE_X, KeyEvent.META_CTRL_ON);
-
- device.waitForIdle();
-
- bots.roots.openRoot(ROOT_1_ID);
- bots.keyboard.pressKey(KeyEvent.KEYCODE_V, KeyEvent.META_CTRL_ON);
-
- bots.directory.waitForDocument("file1.png");
- bots.directory.assertDocumentsPresent("file1.png");
-
- bots.roots.openRoot(ROOT_0_ID);
- bots.directory.assertDocumentsAbsent("file1.png");
- }
-
- public void testKeyboard_CopyDocument() throws Exception {
- bots.directory.clickDocument("file1.png");
- device.waitForIdle();
- bots.keyboard.pressKey(KeyEvent.KEYCODE_C, KeyEvent.META_CTRL_ON);
-
- device.waitForIdle();
-
- bots.roots.openRoot(ROOT_1_ID);
- bots.keyboard.pressKey(KeyEvent.KEYCODE_V, KeyEvent.META_CTRL_ON);
-
- bots.directory.waitForDocument("file1.png");
-
- bots.roots.openRoot(ROOT_0_ID);
- bots.directory.waitForDocument("file1.png");
- }
-
- public void testDeleteDocument_Cancel_ThenOK() throws Exception {
- bots.directory.clickDocument("file1.png");
- device.waitForIdle();
- bots.main.clickToolbarItem(R.id.menu_delete);
-
- bots.main.clickDialogCancelButton();
-
- bots.directory.waitForDocument("file1.png");
-
- device.waitForIdle();
- bots.main.clickToolbarItem(R.id.menu_delete);
-
- bots.main.clickDialogOkButton();
- device.waitForIdle();
-
- bots.directory.assertDocumentsAbsent("file1.png");
- }
-}
diff --git a/packages/DocumentsUI/tests/src/com/android/documentsui/FilesActivityDefaultsUiTest.java b/packages/DocumentsUI/tests/src/com/android/documentsui/FilesActivityDefaultsUiTest.java
deleted file mode 100644
index d0ec9d7..0000000
--- a/packages/DocumentsUI/tests/src/com/android/documentsui/FilesActivityDefaultsUiTest.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.documentsui;
-
-import static com.android.documentsui.StubProvider.ROOT_0_ID;
-import static com.android.documentsui.StubProvider.ROOT_1_ID;
-
-import android.content.Intent;
-import android.provider.DocumentsContract;
-import android.test.suitebuilder.annotation.LargeTest;
-
-import com.android.documentsui.model.RootInfo;
-
-@LargeTest
-public class FilesActivityDefaultsUiTest extends ActivityTest<FilesActivity> {
-
- public FilesActivityDefaultsUiTest() {
- super(FilesActivity.class);
- }
-
- @Override
- protected RootInfo getInitialRoot() {
- return null; // test the default, unaffected state of the app.
- }
-
- public void testDefaultDirectory() throws Exception {
- device.waitForIdle();
-
- // Separate logic for "Documents" root, which presence depends on the config setting
- if (docsRootEnabled()) {
- bots.main.assertWindowTitle("Documents");
- } else {
- bots.main.assertWindowTitle("Downloads");
- }
- }
-
- public void testDefaultRoots() throws Exception {
- device.waitForIdle();
-
- // Should also have Drive, but that requires pre-configuration of devices
- // We omit for now.
- bots.roots.assertRootsPresent(
- "Images",
- "Videos",
- "Audio",
- "Downloads",
- ROOT_0_ID,
- ROOT_1_ID);
-
- // Separate logic for "Documents" root, which presence depends on the config setting
- if (docsRootEnabled()) {
- bots.roots.assertRootsPresent("Documents");
- } else {
- bots.roots.assertRootsAbsent("Documents");
- }
- }
-
- private boolean docsRootEnabled() {
- return Shared.shouldShowDocumentsRoot(context, new Intent(DocumentsContract.ACTION_BROWSE));
- }
-}
diff --git a/packages/DocumentsUI/tests/src/com/android/documentsui/FilesActivityUiTest.java b/packages/DocumentsUI/tests/src/com/android/documentsui/FilesActivityUiTest.java
deleted file mode 100644
index 1b47705..0000000
--- a/packages/DocumentsUI/tests/src/com/android/documentsui/FilesActivityUiTest.java
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.documentsui;
-
-import android.net.Uri;
-import android.os.RemoteException;
-import android.test.suitebuilder.annotation.LargeTest;
-
-@LargeTest
-public class FilesActivityUiTest extends ActivityTest<FilesActivity> {
-
- public FilesActivityUiTest() {
- super(FilesActivity.class);
- }
-
- @Override
- public void setUp() throws Exception {
- super.setUp();
- initTestFiles();
- }
-
- @Override
- public void initTestFiles() throws RemoteException {
- Uri uri = mDocsHelper.createFolder(rootDir0, dirName1);
- mDocsHelper.createFolder(uri, childDir1);
-
- mDocsHelper.createDocument(rootDir0, "text/plain", "file0.log");
- mDocsHelper.createDocument(rootDir0, "image/png", "file1.png");
- mDocsHelper.createDocument(rootDir0, "text/csv", "file2.csv");
-
- mDocsHelper.createDocument(rootDir1, "text/plain", "anotherFile0.log");
- mDocsHelper.createDocument(rootDir1, "text/plain", "poodles.text");
- }
-
- public void testFilesListed() throws Exception {
- bots.directory.assertDocumentsPresent("file0.log", "file1.png", "file2.csv");
- }
-
- public void testRootClick_SetsWindowTitle() throws Exception {
- bots.roots.openRoot("Images");
- bots.main.assertWindowTitle("Images");
- }
-
- public void testFilesList_LiveUpdate() throws Exception {
- mDocsHelper.createDocument(rootDir0, "yummers/sandwich", "Ham & Cheese.sandwich");
-
- bots.directory.waitForDocument("Ham & Cheese.sandwich");
- bots.directory.assertDocumentsPresent(
- "file0.log", "file1.png", "file2.csv", "Ham & Cheese.sandwich");
- }
-
- public void testNavigateByBreadcrumb() throws Exception {
- bots.directory.openDocument(dirName1);
- bots.directory.waitForDocument(childDir1); // wait for known content
- bots.directory.assertDocumentsPresent(childDir1);
-
- bots.breadcrumb.revealAsNeeded();
- device.waitForIdle();
- bots.breadcrumb.assertItemsPresent(dirName1, "TEST_ROOT_0");
-
- bots.breadcrumb.clickItem("TEST_ROOT_0");
- bots.directory.waitForDocument(dirName1);
- }
-}
diff --git a/packages/DocumentsUI/tests/src/com/android/documentsui/FilesMenuManagerTest.java b/packages/DocumentsUI/tests/src/com/android/documentsui/FilesMenuManagerTest.java
deleted file mode 100644
index 3644abc..0000000
--- a/packages/DocumentsUI/tests/src/com/android/documentsui/FilesMenuManagerTest.java
+++ /dev/null
@@ -1,286 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.documentsui;
-
-import static org.junit.Assert.assertTrue;
-
-import android.provider.DocumentsContract.Root;
-import android.support.test.filters.SmallTest;
-import android.support.test.runner.AndroidJUnit4;
-
-import com.android.documentsui.model.RootInfo;
-import com.android.documentsui.testing.TestDirectoryDetails;
-import com.android.documentsui.testing.TestMenu;
-import com.android.documentsui.testing.TestMenuItem;
-import com.android.documentsui.testing.TestSearchViewManager;
-import com.android.documentsui.testing.TestSelectionDetails;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-
-@RunWith(AndroidJUnit4.class)
-@SmallTest
-public final class FilesMenuManagerTest {
-
- private TestMenu testMenu;
- private TestMenuItem rename;
- private TestMenuItem moveTo;
- private TestMenuItem copyTo;
- private TestMenuItem share;
- private TestMenuItem delete;
- private TestMenuItem createDir;
- private TestMenuItem fileSize;
- private TestMenuItem settings;
- private TestMenuItem newWindow;
- private TestMenuItem cut;
- private TestMenuItem copy;
- private TestMenuItem paste;
- private TestMenuItem sort;
- private TestMenuItem sortSize;
- private TestMenuItem advanced;
- private TestMenuItem eject;
- private TestSelectionDetails selectionDetails;
- private TestDirectoryDetails directoryDetails;
- private TestSearchViewManager testSearchManager;
- private RootInfo testRootInfo;
- private State state = new State();
-
- @Before
- public void setUp() {
- testMenu = TestMenu.create();
- rename = testMenu.findItem(R.id.menu_rename);
- moveTo = testMenu.findItem(R.id.menu_move_to);
- copyTo = testMenu.findItem(R.id.menu_copy_to);
- share = testMenu.findItem(R.id.menu_share);
- delete = testMenu.findItem(R.id.menu_delete);
- createDir = testMenu.findItem(R.id.menu_create_dir);
- fileSize = testMenu.findItem(R.id.menu_file_size);
- settings = testMenu.findItem(R.id.menu_settings);
- newWindow = testMenu.findItem(R.id.menu_new_window);
- cut = testMenu.findItem(R.id.menu_cut_to_clipboard);
- copy = testMenu.findItem(R.id.menu_copy_to_clipboard);
- paste = testMenu.findItem(R.id.menu_paste_from_clipboard);
- sort = testMenu.findItem(R.id.menu_sort);
- sortSize = testMenu.findItem(R.id.menu_sort_size);
- advanced = testMenu.findItem(R.id.menu_advanced);
- eject = testMenu.findItem(R.id.menu_eject_root);
-
- // These items by default are visible
- testMenu.findItem(R.id.menu_select_all).setVisible(true);
- testMenu.findItem(R.id.menu_list).setVisible(true);
- testMenu.findItem(R.id.menu_file_size).setVisible(true);
-
- selectionDetails = new TestSelectionDetails();
- directoryDetails = new TestDirectoryDetails();
- testSearchManager = new TestSearchViewManager();
- testRootInfo = new RootInfo();
- }
-
- @Test
- public void testActionMenu() {
- selectionDetails.canDelete = true;
- selectionDetails.canRename = true;
-
- FilesMenuManager mgr = new FilesMenuManager(testSearchManager, state);
- mgr.updateActionMenu(testMenu, selectionDetails);
-
- rename.assertEnabled();
- delete.assertVisible();
- share.assertVisible();
- copyTo.assertEnabled();
- moveTo.assertEnabled();
- }
-
- @Test
- public void testActionMenu_containsPartial() {
- selectionDetails.containPartial = true;
- FilesMenuManager mgr = new FilesMenuManager(testSearchManager, state);
- mgr.updateActionMenu(testMenu, selectionDetails);
-
- rename.assertDisabled();
- share.assertInvisible();
- copyTo.assertDisabled();
- moveTo.assertDisabled();
- }
-
- @Test
- public void testActionMenu_cantRename() {
- selectionDetails.canRename = false;
- FilesMenuManager mgr = new FilesMenuManager(testSearchManager, state);
- mgr.updateActionMenu(testMenu, selectionDetails);
-
- rename.assertDisabled();
- }
-
- @Test
- public void testActionMenu_cantDelete() {
- selectionDetails.canDelete = false;
- FilesMenuManager mgr = new FilesMenuManager(testSearchManager, state);
- mgr.updateActionMenu(testMenu, selectionDetails);
-
- delete.assertInvisible();
- // We shouldn't be able to move files if we can't delete them
- moveTo.assertDisabled();
- }
-
- @Test
- public void testActionMenu_containsDirectory() {
- selectionDetails.containDirectories = true;
- FilesMenuManager mgr = new FilesMenuManager(testSearchManager, state);
- mgr.updateActionMenu(testMenu, selectionDetails);
-
- // We can't share directories
- share.assertInvisible();
- }
-
- @Test
- public void testOptionMenu() {
- FilesMenuManager mgr = new FilesMenuManager(testSearchManager, state);
- mgr.updateOptionMenu(testMenu, directoryDetails);
-
- sort.assertEnabled();
- sortSize.assertInvisible();
- advanced.assertInvisible();
- advanced.assertTitle(R.string.menu_advanced_show);
- createDir.assertDisabled();
- fileSize.assertVisible();
- assertTrue(testSearchManager.updateMenuCalled());
- }
-
- @Test
- public void testOptionMenu_hideSize() {
- state.showSize = true;
- FilesMenuManager mgr = new FilesMenuManager(testSearchManager, state);
- mgr.updateOptionMenu(testMenu, directoryDetails);
-
- sortSize.assertVisible();
- }
-
- @Test
- public void testOptionMenu_showAdvanced() {
- state.showAdvanced = true;
- state.showAdvancedOption = true;
- FilesMenuManager mgr = new FilesMenuManager(testSearchManager, state);
- mgr.updateOptionMenu(testMenu, directoryDetails);
-
- advanced.assertVisible();
- advanced.assertTitle(R.string.menu_advanced_hide);
- }
-
- @Test
- public void testOptionMenu_inRecents() {
- directoryDetails.isInRecents = true;
- FilesMenuManager mgr = new FilesMenuManager(testSearchManager, state);
- mgr.updateOptionMenu(testMenu, directoryDetails);
-
- sort.assertDisabled();
- }
-
- @Test
- public void testOptionMenu_canCreateDirectory() {
- directoryDetails.canCreateDirectory = true;
- FilesMenuManager mgr = new FilesMenuManager(testSearchManager, state);
- mgr.updateOptionMenu(testMenu, directoryDetails);
-
- createDir.assertEnabled();
- }
-
- @Test
- public void testOptionMenu_hasRootSettings() {
- directoryDetails.hasRootSettings = true;
- FilesMenuManager mgr = new FilesMenuManager(testSearchManager, state);
- mgr.updateOptionMenu(testMenu, directoryDetails);
-
- settings.assertVisible();
- }
-
- @Test
- public void testOptionMenu_shouldShowFancyFeatures() {
- directoryDetails.shouldShowFancyFeatures = true;
- FilesMenuManager mgr = new FilesMenuManager(testSearchManager, state);
- mgr.updateOptionMenu(testMenu, directoryDetails);
-
- newWindow.assertVisible();
- }
-
- @Test
- public void testContextMenu_NoSelection() {
- FilesMenuManager mgr = new FilesMenuManager(testSearchManager, state);
- mgr.updateContextMenu(testMenu, null, directoryDetails);
- cut.assertVisible();
- copy.assertVisible();
- cut.assertDisabled();
- copy.assertDisabled();
- paste.assertVisible();
- createDir.assertVisible();
- delete.assertVisible();
- }
-
- @Test
- public void testContextMenu_Selection() {
- FilesMenuManager mgr = new FilesMenuManager(testSearchManager, state);
- mgr.updateContextMenu(testMenu, selectionDetails, directoryDetails);
- cut.assertVisible();
- copy.assertVisible();
- paste.assertVisible();
- rename.assertVisible();
- createDir.assertVisible();
- delete.assertVisible();
- }
-
- @Test
- public void testRootContextMenu() {
- FilesMenuManager mgr = new FilesMenuManager(testSearchManager, state);
- mgr.updateRootContextMenu(testMenu, testRootInfo);
-
- eject.assertVisible();
- eject.assertDisabled();
-
- settings.assertVisible();
- settings.assertDisabled();
- }
-
- @Test
- public void testRootContextMenu_hasRootSettings() {
- testRootInfo.flags = Root.FLAG_HAS_SETTINGS;
- FilesMenuManager mgr = new FilesMenuManager(testSearchManager, state);
- mgr.updateRootContextMenu(testMenu, testRootInfo);
-
- settings.assertEnabled();
- }
-
- @Test
- public void testRootContextMenu_eject() {
- testRootInfo.flags = Root.FLAG_SUPPORTS_EJECT;
- FilesMenuManager mgr = new FilesMenuManager(testSearchManager, state);
- mgr.updateRootContextMenu(testMenu, testRootInfo);
-
- eject.assertEnabled();
- }
-
- @Test
- public void testRootContextMenu_ejectInProcess() {
- testRootInfo.flags = Root.FLAG_SUPPORTS_EJECT;
- testRootInfo.ejecting = true;
- FilesMenuManager mgr = new FilesMenuManager(testSearchManager, state);
- mgr.updateRootContextMenu(testMenu, testRootInfo);
-
- eject.assertDisabled();
- }
-}
diff --git a/packages/DocumentsUI/tests/src/com/android/documentsui/IntegratedDownloadsUiTest.java b/packages/DocumentsUI/tests/src/com/android/documentsui/IntegratedDownloadsUiTest.java
deleted file mode 100644
index ef4a68d..0000000
--- a/packages/DocumentsUI/tests/src/com/android/documentsui/IntegratedDownloadsUiTest.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.documentsui;
-
-import android.app.DownloadManager;
-import android.app.DownloadManager.Request;
-import android.content.Context;
-import android.net.Uri;
-import android.support.test.uiautomator.Configurator;
-import android.support.test.uiautomator.UiObject;
-import android.test.suitebuilder.annotation.LargeTest;
-import android.test.suitebuilder.annotation.Suppress;
-import android.view.MotionEvent;
-
-// TODO: As of this writing all tests in this class are disabled. Please fix.
-@LargeTest
-public class IntegratedDownloadsUiTest extends ActivityTest<FilesActivity> {
-
- public IntegratedDownloadsUiTest() {
- super(FilesActivity.class);
- }
-
- // We don't really need to test the entirety of download support
- // since downloads is (almost) just another provider.
- @Suppress
- public void testDownload_Queued() throws Exception {
- DownloadManager dm = (DownloadManager) context.getSystemService(
- Context.DOWNLOAD_SERVICE);
- // This downloads ends up being queued (because DNS can't be resolved).
- // We'll still see an entry in the downloads UI with a "Queued" label.
- dm.enqueue(new Request(Uri.parse("http://hammychamp.toodles")));
-
- bots.roots.openRoot("Downloads");
- bots.directory.assertDocumentsPresent("Queued");
- }
-
- @Suppress
- public void testDownload_RetryUnsuccessful() throws Exception {
- DownloadManager dm = (DownloadManager) context.getSystemService(
- Context.DOWNLOAD_SERVICE);
- // This downloads fails! But it'll still show up.
- dm.enqueue(new Request(Uri.parse("http://www.google.com/hamfancy")));
-
- bots.roots.openRoot("Downloads");
- UiObject doc = bots.directory.findDocument("Unsuccessful");
- doc.waitForExists(TIMEOUT);
-
- int toolType = Configurator.getInstance().getToolType();
- Configurator.getInstance().setToolType(MotionEvent.TOOL_TYPE_FINGER);
- doc.click();
- Configurator.getInstance().setToolType(toolType);
-
- assertTrue(bots.main.findDownloadRetryDialog().exists());
-
- device.pressBack(); // to clear the dialog.
- }
-}
diff --git a/packages/DocumentsUI/tests/src/com/android/documentsui/ItemDragListenerTest.java b/packages/DocumentsUI/tests/src/com/android/documentsui/ItemDragListenerTest.java
deleted file mode 100644
index 37f6532..0000000
--- a/packages/DocumentsUI/tests/src/com/android/documentsui/ItemDragListenerTest.java
+++ /dev/null
@@ -1,215 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.documentsui;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertSame;
-import static org.junit.Assert.assertTrue;
-
-import android.content.ClipData;
-import android.support.test.filters.SmallTest;
-import android.support.test.runner.AndroidJUnit4;
-import android.view.DragEvent;
-import android.view.View;
-
-import com.android.documentsui.testing.ClipDatas;
-import com.android.documentsui.testing.DragEvents;
-import com.android.documentsui.testing.TestDrawable;
-import com.android.documentsui.testing.TestTimer;
-import com.android.documentsui.testing.Views;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import java.util.Timer;
-import java.util.TimerTask;
-
-@RunWith(AndroidJUnit4.class)
-@SmallTest
-public class ItemDragListenerTest {
-
- private static final long DELAY_AFTER_HOVERING = ItemDragListener.SPRING_TIMEOUT + 1;
-
- private View mTestView;
- private TestDrawable mTestBackground;
- private TestDragHost mTestDragHost;
- private TestTimer mTestTimer;
-
- private TestDragListener mListener;
-
- @Before
- public void setUp() {
- mTestView = Views.createTestView();
- mTestBackground = new TestDrawable();
- mTestTimer = new TestTimer();
- mTestDragHost = new TestDragHost();
-
- mListener = new TestDragListener(mTestDragHost, mTestTimer);
- }
-
- @Test
- public void testDragStarted_ReturnsTrue() {
- assertTrue(triggerDragEvent(DragEvent.ACTION_DRAG_STARTED));
- }
-
- @Test
- public void testDragEntered_HighlightsView() {
- triggerDragEvent(DragEvent.ACTION_DRAG_ENTERED);
- assertSame(mTestView, mTestDragHost.mHighlightedView);
- }
-
- @Test
- public void testDragExited_UnhighlightsView() {
- triggerDragEvent(DragEvent.ACTION_DRAG_ENTERED);
-
- triggerDragEvent(DragEvent.ACTION_DRAG_EXITED);
- assertNull(mTestDragHost.mHighlightedView);
- }
-
- @Test
- public void testDragEnded_UnhighlightsView() {
- triggerDragEvent(DragEvent.ACTION_DRAG_ENTERED);
-
- triggerDragEvent(DragEvent.ACTION_DRAG_ENDED);
- assertNull(mTestDragHost.mHighlightedView);
- }
-
- @Test
- public void testDragLocation_notCrashWithoutBackground() {
- DragEvent locationEvent = DragEvents.createTestLocationEvent(3, 4);
- mListener.onDrag(mTestView, locationEvent);
- }
-
- @Test
- public void testDragLocation_setHotSpotOnBackground() {
- Views.setBackground(mTestView, mTestBackground);
-
- final float x = 2;
- final float y = 4;
- DragEvent locationEvent = DragEvents.createTestLocationEvent(x, y);
- mListener.onDrag(mTestView, locationEvent);
-
- assertEquals(x, mTestBackground.hotspotX, 0);
- assertEquals(y, mTestBackground.hotspotY, 0);
- }
-
- @Test
- public void testHover_OpensView() {
- triggerDragEvent(DragEvent.ACTION_DRAG_ENTERED);
-
- mTestTimer.fastForwardTo(DELAY_AFTER_HOVERING);
-
- assertSame(mTestView, mTestDragHost.mLastOpenedView);
- }
-
- @Test
- public void testDragExited_CancelsHoverTask() {
- triggerDragEvent(DragEvent.ACTION_DRAG_ENTERED);
-
- triggerDragEvent(DragEvent.ACTION_DRAG_EXITED);
-
- mTestTimer.fastForwardTo(DELAY_AFTER_HOVERING);
-
- assertNull(mTestDragHost.mLastOpenedView);
- }
-
- @Test
- public void testDragEnded_CancelsHoverTask() {
- triggerDragEvent(DragEvent.ACTION_DRAG_ENTERED);
-
- triggerDragEvent(DragEvent.ACTION_DRAG_ENDED);
-
- mTestTimer.fastForwardTo(DELAY_AFTER_HOVERING);
-
- assertNull(mTestDragHost.mLastOpenedView);
- }
-
- @Test
- public void testNoDropWithoutClipData() {
- triggerDragEvent(DragEvent.ACTION_DRAG_ENTERED);
-
- final DragEvent dropEvent = DragEvents.createTestDropEvent(null);
- assertFalse(mListener.onDrag(mTestView, dropEvent));
- }
-
- @Test
- public void testDoDropWithClipData() {
- triggerDragEvent(DragEvent.ACTION_DRAG_ENTERED);
-
- final ClipData data = ClipDatas.createTestClipData();
- final DragEvent dropEvent = DragEvents.createTestDropEvent(data);
- mListener.onDrag(mTestView, dropEvent);
-
- assertSame(mTestView, mListener.mLastDropOnView);
- assertSame(dropEvent, mListener.mLastDropEvent);
- }
-
- protected boolean triggerDragEvent(int actionId) {
- final DragEvent testEvent = DragEvents.createTestDragEvent(actionId);
-
- return mListener.onDrag(mTestView, testEvent);
- }
-
- private static class TestDragListener extends ItemDragListener<TestDragHost> {
-
- private View mLastDropOnView;
- private DragEvent mLastDropEvent;
-
- protected TestDragListener(TestDragHost dragHost, Timer timer) {
- super(dragHost, timer);
- }
-
- @Override
- public TimerTask createOpenTask(View v) {
- TimerTask task = super.createOpenTask(v);
- TestTimer.Task testTask = new TestTimer.Task(task);
-
- return testTask;
- }
-
- @Override
- public boolean handleDropEventChecked(View v, DragEvent event) {
- mLastDropOnView = v;
- mLastDropEvent = event;
- return true;
- }
-
- }
-
- private static class TestDragHost implements ItemDragListener.DragHost {
- private View mHighlightedView;
- private View mLastOpenedView;
-
- @Override
- public void setDropTargetHighlight(View v, boolean highlight) {
- mHighlightedView = highlight ? v : null;
- }
-
- @Override
- public void runOnUiThread(Runnable runnable) {
- runnable.run();
- }
-
- @Override
- public void onViewHovered(View v) {
- mLastOpenedView = v;
- }
- }
-}
diff --git a/packages/DocumentsUI/tests/src/com/android/documentsui/KeyboardNavigationUiTest.java b/packages/DocumentsUI/tests/src/com/android/documentsui/KeyboardNavigationUiTest.java
deleted file mode 100644
index 1657a87..0000000
--- a/packages/DocumentsUI/tests/src/com/android/documentsui/KeyboardNavigationUiTest.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.documentsui;
-
-import android.test.suitebuilder.annotation.LargeTest;
-import android.test.suitebuilder.annotation.Suppress;
-import android.view.KeyEvent;
-
-@LargeTest
-public class KeyboardNavigationUiTest extends ActivityTest<FilesActivity> {
-
- public KeyboardNavigationUiTest() {
- super(FilesActivity.class);
- }
-
- // Tests that pressing tab switches focus between the roots and directory listings.
- @Suppress
- public void testKeyboard_tab() throws Exception {
- bots.keyboard.pressKey(KeyEvent.KEYCODE_TAB);
- bots.roots.assertHasFocus();
- bots.keyboard.pressKey(KeyEvent.KEYCODE_TAB);
- bots.directory.assertHasFocus();
- }
-
- // Tests that arrow keys do not switch focus away from the dir list.
- @Suppress
- public void testKeyboard_arrowsDirList() throws Exception {
- for (int i = 0; i < 10; i++) {
- bots.keyboard.pressKey(KeyEvent.KEYCODE_DPAD_LEFT);
- bots.directory.assertHasFocus();
- }
- for (int i = 0; i < 10; i++) {
- bots.keyboard.pressKey(KeyEvent.KEYCODE_DPAD_RIGHT);
- bots.directory.assertHasFocus();
- }
- }
-
- // Tests that arrow keys do not switch focus away from the roots list.
- public void testKeyboard_arrowsRootsList() throws Exception {
- bots.keyboard.pressKey(KeyEvent.KEYCODE_TAB);
- for (int i = 0; i < 10; i++) {
- bots.keyboard.pressKey(KeyEvent.KEYCODE_DPAD_RIGHT);
- bots.roots.assertHasFocus();
- }
- for (int i = 0; i < 10; i++) {
- bots.keyboard.pressKey(KeyEvent.KEYCODE_DPAD_LEFT);
- bots.roots.assertHasFocus();
- }
- }
-}
diff --git a/packages/DocumentsUI/tests/src/com/android/documentsui/RenameDocumentUiTest.java b/packages/DocumentsUI/tests/src/com/android/documentsui/RenameDocumentUiTest.java
deleted file mode 100644
index e7ac293..0000000
--- a/packages/DocumentsUI/tests/src/com/android/documentsui/RenameDocumentUiTest.java
+++ /dev/null
@@ -1,163 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.documentsui;
-
-import android.support.test.uiautomator.UiObjectNotFoundException;
-import android.test.suitebuilder.annotation.LargeTest;
-
-@LargeTest
-public class RenameDocumentUiTest extends ActivityTest<FilesActivity> {
-
- private final String newName = "kitties.log";
-
- public RenameDocumentUiTest() {
- super(FilesActivity.class);
- }
-
- @Override
- public void setUp() throws Exception {
- super.setUp();
- initTestFiles();
- bots.roots.closeDrawer();
- }
-
- // TODO: Move this over to the FilesMenuManagerTest.
- public void testRenameEnabled_SingleSelection() throws Exception {
- bots.directory.selectDocument(fileName1);
- bots.main.openOverflowMenu();
- bots.main.assertMenuEnabled(R.string.menu_rename, true);
-
- // Dismiss more options window
- device.pressBack();
- }
-
- // TODO: Move this over to the FilesMenuManagerTest.
- public void testNoRenameSupport_SingleSelection() throws Exception {
- bots.directory.selectDocument(fileNameNoRename);
- bots.main.openOverflowMenu();
- bots.main.assertMenuEnabled(R.string.menu_rename, false);
-
- // Dismiss more options window
- device.pressBack();
- }
-
- // TODO: Move this over to the FilesMenuManagerTest.
- public void testOneHasRenameSupport_MultipleSelection() throws Exception {
- bots.directory.selectDocument(fileName1);
- bots.directory.selectDocument(fileNameNoRename);
- bots.main.openOverflowMenu();
- bots.main.assertMenuEnabled(R.string.menu_rename, false);
-
- // Dismiss more options window
- device.pressBack();
- }
-
- // TODO: Move this over to the FilesMenuManagerTest.
- public void testRenameDisabled_MultipleSelection() throws Exception {
- bots.directory.selectDocument(fileName1);
- bots.directory.selectDocument(fileName2);
- bots.main.openOverflowMenu();
- bots.main.assertMenuEnabled(R.string.menu_rename, false);
-
- // Dismiss more options window
- device.pressBack();
- }
-
- public void testRenameFile_OkButton() throws Exception {
- bots.directory.selectDocument(fileName1);
-
- clickRename();
-
- device.waitForIdle();
- bots.main.setDialogText(newName);
-
- device.waitForIdle();
- bots.main.clickDialogOkButton();
-
- bots.directory.waitForDocument(newName);
- bots.directory.assertDocumentsAbsent(fileName1);
- bots.directory.assertDocumentsCount(4);
- }
-
- public void testRenameFile_Enter() throws Exception {
- bots.directory.selectDocument(fileName1);
-
- clickRename();
-
- device.waitForIdle();
- bots.main.setDialogText(newName);
-
- device.waitForIdle();
- bots.keyboard.pressEnter();
-
- bots.directory.waitForDocument(newName);
- bots.directory.assertDocumentsAbsent(fileName1);
- bots.directory.assertDocumentsCount(4);
- }
-
- public void testRenameFile_Cancel() throws Exception {
- bots.directory.selectDocument(fileName1);
-
- clickRename();
-
- bots.main.setDialogText(newName);
-
- bots.main.clickDialogCancelButton();
-
- bots.directory.assertDocumentsPresent(fileName1);
- bots.directory.assertDocumentsAbsent(newName);
- bots.directory.assertDocumentsCount(4);
- }
-
- public void testRenameDir() throws Exception {
- String oldName = "Dir1";
- String newName = "Dir123";
- bots.directory.selectDocument(oldName);
-
- clickRename();
-
- bots.main.setDialogText(newName);
-
- bots.keyboard.pressEnter();
-
- bots.directory.assertDocumentsAbsent(oldName);
- bots.directory.assertDocumentsPresent(newName);
- bots.directory.assertDocumentsCount(4);
- }
-
- public void testRename_NameExists() throws Exception {
- // Check that document with the new name exists
- bots.directory.assertDocumentsPresent(fileName2);
- bots.directory.selectDocument(fileName1);
-
- clickRename();
-
- bots.main.setDialogText(fileName2);
-
- bots.keyboard.pressEnter();
-
- bots.directory.assertSnackbar(R.string.rename_error);
- bots.directory.assertDocumentsPresent(fileName1);
- bots.directory.assertDocumentsPresent(fileName2);
- bots.directory.assertDocumentsCount(4);
- }
-
- private void clickRename() throws UiObjectNotFoundException {
- bots.main.clickActionbarOverflowItem("Rename");
- device.waitForIdle();
- }
-}
diff --git a/packages/DocumentsUI/tests/src/com/android/documentsui/RootsCacheTest.java b/packages/DocumentsUI/tests/src/com/android/documentsui/RootsCacheTest.java
deleted file mode 100644
index 2e81545..0000000
--- a/packages/DocumentsUI/tests/src/com/android/documentsui/RootsCacheTest.java
+++ /dev/null
@@ -1,169 +0,0 @@
-/*
- * 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.
- */
-
-package com.android.documentsui;
-
-import static com.android.documentsui.RootsCache.getMatchingRoots;
-import static com.google.common.collect.Lists.newArrayList;
-
-import android.test.AndroidTestCase;
-import android.test.suitebuilder.annotation.SmallTest;
-
-import com.android.documentsui.model.RootInfo;
-
-import com.google.common.collect.Lists;
-
-import java.util.List;
-
-@SmallTest
-public class RootsCacheTest extends AndroidTestCase {
-
- private static RootInfo mNull = new RootInfo();
- private static RootInfo mEmpty = buildForMimeTypes();
- private static RootInfo mWild = buildForMimeTypes("*/*");
- private static RootInfo mImages = buildForMimeTypes("image/*");
- private static RootInfo mAudio = buildForMimeTypes(
- "audio/*", "application/ogg", "application/x-flac");
- private static RootInfo mDocs = buildForMimeTypes(
- "application/msword", "application/vnd.ms-excel");
- private static RootInfo mMalformed1 = buildForMimeTypes("meow");
- private static RootInfo mMalformed2 = buildForMimeTypes("*/meow");
-
- private List<RootInfo> mRoots;
-
- private State mState;
-
- @Override
- protected void setUp() throws Exception {
- super.setUp();
-
- mRoots = Lists.newArrayList(
- mNull, mWild, mEmpty, mImages, mAudio, mDocs, mMalformed1, mMalformed2);
-
- mState = new State();
- mState.action = State.ACTION_OPEN;
- mState.showAdvanced = true;
- mState.localOnly = false;
- }
-
- public void testMatchingRoots_Everything() throws Exception {
- mState.acceptMimes = new String[] { "*/*" };
- assertContainsExactly(
- newArrayList(mNull, mWild, mImages, mAudio, mDocs, mMalformed1, mMalformed2),
- getMatchingRoots(mRoots, mState));
- }
-
- public void testMatchingRoots_DirectoryCopy() throws Exception {
- RootInfo downloads = buildForMimeTypes("*/*");
- downloads.authority = "com.android.providers.downloads.documents";
- mRoots.add(downloads);
-
- mState.acceptMimes = new String[] { "*/*" };
- mState.directoryCopy = true;
-
- // basically we're asserting that the results don't contain downloads
- assertContainsExactly(
- newArrayList(mNull, mWild, mImages, mAudio, mDocs, mMalformed1, mMalformed2),
- getMatchingRoots(mRoots, mState));
- }
-
- public void testMatchingRoots_PngOrWild() throws Exception {
- mState.acceptMimes = new String[] { "image/png", "*/*" };
- assertContainsExactly(
- newArrayList(mNull, mWild, mImages, mAudio, mDocs, mMalformed1, mMalformed2),
- getMatchingRoots(mRoots, mState));
- }
-
- public void testMatchingRoots_AudioWild() throws Exception {
- mState.acceptMimes = new String[] { "audio/*" };
- assertContainsExactly(
- newArrayList(mNull, mWild, mAudio),
- getMatchingRoots(mRoots, mState));
- }
-
- public void testMatchingRoots_AudioWildOrImageWild() throws Exception {
- mState.acceptMimes = new String[] { "audio/*", "image/*" };
- assertContainsExactly(
- newArrayList(mNull, mWild, mAudio, mImages),
- getMatchingRoots(mRoots, mState));
- }
-
- public void testMatchingRoots_AudioSpecific() throws Exception {
- mState.acceptMimes = new String[] { "audio/mpeg" };
- assertContainsExactly(
- newArrayList(mNull, mWild, mAudio),
- getMatchingRoots(mRoots, mState));
- }
-
- public void testMatchingRoots_Document() throws Exception {
- mState.acceptMimes = new String[] { "application/msword" };
- assertContainsExactly(
- newArrayList(mNull, mWild, mDocs),
- getMatchingRoots(mRoots, mState));
- }
-
- public void testMatchingRoots_Application() throws Exception {
- mState.acceptMimes = new String[] { "application/*" };
- assertContainsExactly(
- newArrayList(mNull, mWild, mAudio, mDocs),
- getMatchingRoots(mRoots, mState));
- }
-
- public void testMatchingRoots_FlacOrPng() throws Exception {
- mState.acceptMimes = new String[] { "application/x-flac", "image/png" };
- assertContainsExactly(
- newArrayList(mNull, mWild, mAudio, mImages),
- getMatchingRoots(mRoots, mState));
- }
-
- public void testExcludedAuthorities() throws Exception {
- final List<RootInfo> roots = newArrayList();
-
- // Set up some roots
- for (int i = 0; i < 5; ++i) {
- RootInfo root = new RootInfo();
- root.authority = "authority" + i;
- roots.add(root);
- }
- // Make some allowed authorities
- List<RootInfo> allowedRoots = newArrayList(
- roots.get(0), roots.get(2), roots.get(4));
- // Set up the excluded authority list
- for (RootInfo root: roots) {
- if (!allowedRoots.contains(root)) {
- mState.excludedAuthorities.add(root.authority);
- }
- }
- mState.acceptMimes = new String[] { "*/*" };
-
- assertContainsExactly(
- allowedRoots,
- getMatchingRoots(roots, mState));
- }
-
- private static void assertContainsExactly(List<?> expected, List<?> actual) {
- assertEquals(expected.size(), actual.size());
- for (Object o : expected) {
- assertTrue(actual.contains(o));
- }
- }
-
- private static RootInfo buildForMimeTypes(String... mimeTypes) {
- final RootInfo root = new RootInfo();
- root.derivedMimeTypes = mimeTypes;
- return root;
- }
-}
diff --git a/packages/DocumentsUI/tests/src/com/android/documentsui/RootsUiTest.java b/packages/DocumentsUI/tests/src/com/android/documentsui/RootsUiTest.java
deleted file mode 100644
index 4edfd8a..0000000
--- a/packages/DocumentsUI/tests/src/com/android/documentsui/RootsUiTest.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.documentsui;
-
-import static com.android.documentsui.StubProvider.ROOT_0_ID;
-import static com.android.documentsui.StubProvider.ROOT_1_ID;
-
-import android.test.suitebuilder.annotation.LargeTest;
-import android.test.suitebuilder.annotation.Suppress;
-
-@LargeTest
-public class RootsUiTest extends ActivityTest<FilesActivity> {
-
- private static final String TAG = "RootUiTest";
-
- public RootsUiTest() {
- super(FilesActivity.class);
- }
-
- @Override
- public void setUp() throws Exception {
- super.setUp();
- initTestFiles();
- }
-
- public void testRootTapped_GoToRootFromChildDir() throws Exception {
- bots.directory.openDocument(dirName1);
- bots.breadcrumb.assertTitle(dirName1);
- bots.roots.openRoot(ROOT_0_ID);
- bots.main.assertWindowTitle(ROOT_0_ID);
- assertDefaultContentOfTestDir0();
- }
-
- @Suppress
- public void testRootChanged_ClearSelection() throws Exception {
- bots.directory.selectDocument(fileName1);
- bots.main.assertInActionMode(true);
-
- bots.roots.openRoot(ROOT_1_ID);
- bots.main.assertInActionMode(false);
- }
-
-}
diff --git a/packages/DocumentsUI/tests/src/com/android/documentsui/SearchViewUiTest.java b/packages/DocumentsUI/tests/src/com/android/documentsui/SearchViewUiTest.java
deleted file mode 100644
index 01c6e1e..0000000
--- a/packages/DocumentsUI/tests/src/com/android/documentsui/SearchViewUiTest.java
+++ /dev/null
@@ -1,165 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.documentsui;
-
-import static com.android.documentsui.StubProvider.ROOT_0_ID;
-import static com.android.documentsui.StubProvider.ROOT_1_ID;
-
-import android.support.test.filters.Suppress;
-import android.support.v7.recyclerview.R;
-import android.test.suitebuilder.annotation.LargeTest;
-
-@LargeTest
-public class SearchViewUiTest extends ActivityTest<FilesActivity> {
-
- public SearchViewUiTest() {
- super(FilesActivity.class);
- }
-
- @Override
- public void setUp() throws Exception {
- super.setUp();
- initTestFiles();
- // Drawer interferes with a lot of search action; going to try to close any opened ones
- bots.roots.closeDrawer();
-
- // wait for a file to be present in default dir.
- bots.directory.waitForDocument(fileName1);
- }
-
- public void testSearchIconVisible() throws Exception {
- // The default root (root 0) supports search
- bots.search.assertInputExists(false);
- bots.search.assertIconVisible(true);
- }
-
- public void testSearchIconHidden() throws Exception {
- bots.roots.openRoot(ROOT_1_ID); // root 1 doesn't support search
-
- bots.search.assertIconVisible(false);
- bots.search.assertInputExists(false);
- }
-
- public void testSearchView_ExpandsOnClick() throws Exception {
- bots.search.clickIcon();
- device.waitForIdle();
-
- bots.search.assertInputExists(true);
- bots.search.assertInputFocused(true);
-
- // FIXME: Matchers fail the not-present check if we've ever clicked this.
- // bots.search.assertIconVisible(false);
- }
-
- public void testSearchView_CollapsesOnBack() throws Exception {
- bots.search.clickIcon();
- device.pressBack();
-
- bots.search.assertIconVisible(true);
- bots.search.assertInputExists(false);
- }
-
- public void testSearchView_ClearsTextOnBack() throws Exception {
- bots.search.clickIcon();
- bots.search.setInputText("file2");
-
- device.pressBack();
-
- // Wait for a file in the default directory to be listed.
- bots.directory.waitForDocument(dirName1);
-
- bots.search.assertIconVisible(true);
- bots.search.assertInputExists(false);
- }
-
- public void testSearchView_StateAfterSearch() throws Exception {
- bots.search.clickIcon();
- bots.search.setInputText("file1");
- bots.keyboard.pressEnter();
- device.waitForIdle();
-
- bots.search.assertInputEquals("file1");
- bots.search.assertInputFocused(false);
- }
-
- public void testSearch_ResultsFound() throws Exception {
- bots.search.clickIcon();
- bots.search.setInputText("file1");
- bots.keyboard.pressEnter();
-
- bots.directory.assertDocumentsCountOnList(true, 2);
- bots.directory.assertDocumentsPresent(fileName1, fileName2);
- }
-
- public void testSearch_NoResults() throws Exception {
- bots.search.clickIcon();
- bots.search.setInputText("chocolate");
-
- bots.keyboard.pressEnter();
-
- String msg = String.valueOf(context.getString(R.string.no_results));
- bots.directory.assertMessageTextView(String.format(msg, "TEST_ROOT_0"));
- }
-
- @Suppress
- public void testSearchResultsFound_ClearsOnBack() throws Exception {
- bots.search.clickIcon();
- bots.search.setInputText(fileName1);
-
- bots.keyboard.pressEnter();
- device.pressBack();
- device.waitForIdle();
-
- assertDefaultContentOfTestDir0();
- }
-
- @Suppress
- public void testSearchNoResults_ClearsOnBack() throws Exception {
- bots.search.clickIcon();
- bots.search.setInputText("chocolate bunny");
-
- bots.keyboard.pressEnter();
- device.pressBack();
- device.waitForIdle();
-
- assertDefaultContentOfTestDir0();
- }
-
- @Suppress
- public void testSearchResultsFound_ClearsOnDirectoryChange() throws Exception {
- // Skipping this test for phones since currently there's no way to open the drawer on
- // phones after doing a search (it's a back button instead of a hamburger button)
- if (!bots.main.inFixedLayout()) {
- return;
- }
-
- bots.search.clickIcon();
-
- bots.search.setInputText(fileName1);
-
- bots.keyboard.pressEnter();
-
- bots.roots.openRoot(ROOT_1_ID);
- device.waitForIdle();
- assertDefaultContentOfTestDir1();
-
- bots.roots.openRoot(ROOT_0_ID);
- device.waitForIdle();
-
- assertDefaultContentOfTestDir0();
- }
-}
diff --git a/packages/DocumentsUI/tests/src/com/android/documentsui/StateTest.java b/packages/DocumentsUI/tests/src/com/android/documentsui/StateTest.java
deleted file mode 100644
index f057850..0000000
--- a/packages/DocumentsUI/tests/src/com/android/documentsui/StateTest.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.documentsui;
-
-import android.test.AndroidTestCase;
-import android.test.suitebuilder.annotation.SmallTest;
-
-import com.android.documentsui.model.DocumentInfo;
-
-@SmallTest
-public class StateTest extends AndroidTestCase {
-
- private static final DocumentInfo DIR_1;
- private static final DocumentInfo DIR_2;
-
- private State mState;
-
- static {
- DIR_1 = new DocumentInfo();
- DIR_1.displayName = "firstDirectory";
- DIR_2 = new DocumentInfo();
- DIR_2.displayName = "secondDirectory";
- }
-
- @Override
- protected void setUp() throws Exception {
- mState = new State();
- }
-
- public void testInitialStateEmpty() {
- assertFalse(mState.hasLocationChanged());
- }
-
- public void testPushDocument_ChangesLocation() {
- mState.pushDocument(DIR_1);
- mState.pushDocument(DIR_2);
- assertTrue(mState.hasLocationChanged());
- }
-
- public void testPushDocument_ModifiesStack() {
- mState.pushDocument(DIR_1);
- mState.pushDocument(DIR_2);
- assertEquals(DIR_2, mState.stack.getFirst());
- }
-
- public void testPopDocument_ModifiesStack() {
- mState.pushDocument(DIR_1);
- mState.pushDocument(DIR_2);
- mState.popDocument();
- assertEquals(DIR_1, mState.stack.getFirst());
- }
-}
diff --git a/packages/DocumentsUI/tests/src/com/android/documentsui/StubProvider.java b/packages/DocumentsUI/tests/src/com/android/documentsui/StubProvider.java
deleted file mode 100644
index f71ce5d..0000000
--- a/packages/DocumentsUI/tests/src/com/android/documentsui/StubProvider.java
+++ /dev/null
@@ -1,820 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.documentsui;
-
-import android.content.Context;
-import android.content.SharedPreferences;
-import android.content.pm.ProviderInfo;
-import android.content.res.AssetFileDescriptor;
-import android.database.Cursor;
-import android.database.MatrixCursor;
-import android.database.MatrixCursor.RowBuilder;
-import android.graphics.Point;
-import android.net.Uri;
-import android.os.Bundle;
-import android.os.CancellationSignal;
-import android.os.FileUtils;
-import android.os.ParcelFileDescriptor;
-import android.provider.DocumentsContract;
-import android.provider.DocumentsContract.Document;
-import android.provider.DocumentsContract.Root;
-import android.provider.DocumentsProvider;
-import android.support.annotation.VisibleForTesting;
-import android.text.TextUtils;
-import android.util.Log;
-
-import libcore.io.IoUtils;
-
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-public class StubProvider extends DocumentsProvider {
-
- public static final String DEFAULT_AUTHORITY = "com.android.documentsui.stubprovider";
- public static final String ROOT_0_ID = "TEST_ROOT_0";
- public static final String ROOT_1_ID = "TEST_ROOT_1";
-
- public static final String EXTRA_SIZE = "com.android.documentsui.stubprovider.SIZE";
- public static final String EXTRA_ROOT = "com.android.documentsui.stubprovider.ROOT";
- public static final String EXTRA_PATH = "com.android.documentsui.stubprovider.PATH";
- public static final String EXTRA_STREAM_TYPES
- = "com.android.documentsui.stubprovider.STREAM_TYPES";
- public static final String EXTRA_CONTENT = "com.android.documentsui.stubprovider.CONTENT";
-
- public static final String EXTRA_FLAGS = "com.android.documentsui.stubprovider.FLAGS";
- public static final String EXTRA_PARENT_ID = "com.android.documentsui.stubprovider.PARENT";
-
- private static final String TAG = "StubProvider";
-
- private static final String STORAGE_SIZE_KEY = "documentsui.stubprovider.size";
- private static int DEFAULT_ROOT_SIZE = 1024 * 1024 * 100; // 100 MB.
-
- private static final String[] DEFAULT_ROOT_PROJECTION = new String[] {
- Root.COLUMN_ROOT_ID, Root.COLUMN_FLAGS, Root.COLUMN_TITLE, Root.COLUMN_DOCUMENT_ID,
- Root.COLUMN_AVAILABLE_BYTES
- };
- private static final String[] DEFAULT_DOCUMENT_PROJECTION = new String[] {
- Document.COLUMN_DOCUMENT_ID, Document.COLUMN_MIME_TYPE, Document.COLUMN_DISPLAY_NAME,
- Document.COLUMN_LAST_MODIFIED, Document.COLUMN_FLAGS, Document.COLUMN_SIZE,
- };
-
- private final Map<String, StubDocument> mStorage = new HashMap<>();
- private final Map<String, RootInfo> mRoots = new HashMap<>();
- private final Object mWriteLock = new Object();
-
- private String mAuthority = DEFAULT_AUTHORITY;
- private SharedPreferences mPrefs;
- private Set<String> mSimulateReadErrorIds = new HashSet<>();
-
- @Override
- public void attachInfo(Context context, ProviderInfo info) {
- mAuthority = info.authority;
- super.attachInfo(context, info);
- }
-
- @Override
- public boolean onCreate() {
- clearCacheAndBuildRoots();
- return true;
- }
-
- @VisibleForTesting
- public void clearCacheAndBuildRoots() {
- Log.d(TAG, "Resetting storage.");
- removeChildrenRecursively(getContext().getCacheDir());
- mStorage.clear();
- mSimulateReadErrorIds.clear();
-
- mPrefs = getContext().getSharedPreferences(
- "com.android.documentsui.stubprovider.preferences", Context.MODE_PRIVATE);
- Collection<String> rootIds = mPrefs.getStringSet("roots", null);
- if (rootIds == null) {
- rootIds = Arrays.asList(new String[] { ROOT_0_ID, ROOT_1_ID });
- }
-
- mRoots.clear();
- for (String rootId : rootIds) {
- // Make a subdir in the cache dir for each root.
- final File file = new File(getContext().getCacheDir(), rootId);
- if (file.mkdir()) {
- Log.i(TAG, "Created new root directory @ " + file.getPath());
- }
- final RootInfo rootInfo = new RootInfo(file, getSize(rootId));
-
- if(rootId.equals(ROOT_1_ID)) {
- rootInfo.setSearchEnabled(false);
- }
-
- mStorage.put(rootInfo.document.documentId, rootInfo.document);
- mRoots.put(rootId, rootInfo);
- }
- }
-
- /**
- * @return Storage size, in bytes.
- */
- private long getSize(String rootId) {
- final String key = STORAGE_SIZE_KEY + "." + rootId;
- return mPrefs.getLong(key, DEFAULT_ROOT_SIZE);
- }
-
- @Override
- public Cursor queryRoots(String[] projection) throws FileNotFoundException {
- final MatrixCursor result = new MatrixCursor(projection != null ? projection
- : DEFAULT_ROOT_PROJECTION);
- for (Map.Entry<String, RootInfo> entry : mRoots.entrySet()) {
- final String id = entry.getKey();
- final RootInfo info = entry.getValue();
- final RowBuilder row = result.newRow();
- row.add(Root.COLUMN_ROOT_ID, id);
- row.add(Root.COLUMN_FLAGS, info.flags);
- row.add(Root.COLUMN_TITLE, id);
- row.add(Root.COLUMN_DOCUMENT_ID, info.document.documentId);
- row.add(Root.COLUMN_AVAILABLE_BYTES, info.getRemainingCapacity());
- }
- return result;
- }
-
- @Override
- public Cursor queryDocument(String documentId, String[] projection)
- throws FileNotFoundException {
- final MatrixCursor result = new MatrixCursor(projection != null ? projection
- : DEFAULT_DOCUMENT_PROJECTION);
- final StubDocument file = mStorage.get(documentId);
- if (file == null) {
- throw new FileNotFoundException();
- }
- includeDocument(result, file);
- return result;
- }
-
- @Override
- public boolean isChildDocument(String parentDocId, String docId) {
- final StubDocument parentDocument = mStorage.get(parentDocId);
- final StubDocument childDocument = mStorage.get(docId);
- return FileUtils.contains(parentDocument.file, childDocument.file);
- }
-
- @Override
- public String createDocument(String parentId, String mimeType, String displayName)
- throws FileNotFoundException {
- StubDocument parent = mStorage.get(parentId);
- File file = createFile(parent, mimeType, displayName);
-
- final StubDocument document = StubDocument.createRegularDocument(file, mimeType, parent);
- mStorage.put(document.documentId, document);
- Log.d(TAG, "Created document " + document.documentId);
- notifyParentChanged(document.parentId);
- getContext().getContentResolver().notifyChange(
- DocumentsContract.buildDocumentUri(mAuthority, document.documentId),
- null, false);
-
- return document.documentId;
- }
-
- @Override
- public void deleteDocument(String documentId)
- throws FileNotFoundException {
- final StubDocument document = mStorage.get(documentId);
- final long fileSize = document.file.length();
- if (document == null || !document.file.delete())
- throw new FileNotFoundException();
- synchronized (mWriteLock) {
- document.rootInfo.size -= fileSize;
- mStorage.remove(documentId);
- }
- Log.d(TAG, "Document deleted: " + documentId);
- notifyParentChanged(document.parentId);
- getContext().getContentResolver().notifyChange(
- DocumentsContract.buildDocumentUri(mAuthority, document.documentId),
- null, false);
- }
-
- @Override
- public Cursor queryChildDocumentsForManage(String parentDocumentId, String[] projection,
- String sortOrder) throws FileNotFoundException {
- return queryChildDocuments(parentDocumentId, projection, sortOrder);
- }
-
- @Override
- public Cursor queryChildDocuments(String parentDocumentId, String[] projection, String sortOrder)
- throws FileNotFoundException {
- final StubDocument parentDocument = mStorage.get(parentDocumentId);
- if (parentDocument == null || parentDocument.file.isFile()) {
- throw new FileNotFoundException();
- }
- final MatrixCursor result = new MatrixCursor(projection != null ? projection
- : DEFAULT_DOCUMENT_PROJECTION);
- result.setNotificationUri(getContext().getContentResolver(),
- DocumentsContract.buildChildDocumentsUri(mAuthority, parentDocumentId));
- StubDocument document;
- for (File file : parentDocument.file.listFiles()) {
- document = mStorage.get(getDocumentIdForFile(file));
- if (document != null) {
- includeDocument(result, document);
- }
- }
- return result;
- }
-
- @Override
- public Cursor queryRecentDocuments(String rootId, String[] projection)
- throws FileNotFoundException {
- final MatrixCursor result = new MatrixCursor(projection != null ? projection
- : DEFAULT_DOCUMENT_PROJECTION);
- return result;
- }
-
- @Override
- public Cursor querySearchDocuments(String rootId, String query, String[] projection)
- throws FileNotFoundException {
-
- StubDocument parentDocument = mRoots.get(rootId).document;
- if (parentDocument == null || parentDocument.file.isFile()) {
- throw new FileNotFoundException();
- }
-
- final MatrixCursor result = new MatrixCursor(
- projection != null ? projection : DEFAULT_DOCUMENT_PROJECTION);
-
- for (File file : parentDocument.file.listFiles()) {
- if (file.getName().toLowerCase().contains(query)) {
- StubDocument document = mStorage.get(getDocumentIdForFile(file));
- if (document != null) {
- includeDocument(result, document);
- }
- }
- }
- return result;
- }
-
- @Override
- public String renameDocument(String documentId, String displayName)
- throws FileNotFoundException {
-
- StubDocument oldDoc = mStorage.get(documentId);
-
- File before = oldDoc.file;
- File after = new File(before.getParentFile(), displayName);
-
- if (after.exists()) {
- throw new IllegalStateException("Already exists " + after);
- }
-
- boolean result = before.renameTo(after);
-
- if (!result) {
- throw new IllegalStateException("Failed to rename to " + after);
- }
-
- StubDocument newDoc = StubDocument.createRegularDocument(after, oldDoc.mimeType,
- mStorage.get(oldDoc.parentId));
-
- mStorage.remove(documentId);
- notifyParentChanged(oldDoc.parentId);
- getContext().getContentResolver().notifyChange(
- DocumentsContract.buildDocumentUri(mAuthority, oldDoc.documentId), null, false);
-
- mStorage.put(newDoc.documentId, newDoc);
- notifyParentChanged(newDoc.parentId);
- getContext().getContentResolver().notifyChange(
- DocumentsContract.buildDocumentUri(mAuthority, newDoc.documentId), null, false);
-
- if (!TextUtils.equals(documentId, newDoc.documentId)) {
- return newDoc.documentId;
- } else {
- return null;
- }
- }
-
- @Override
- public ParcelFileDescriptor openDocument(String docId, String mode, CancellationSignal signal)
- throws FileNotFoundException {
-
- final StubDocument document = mStorage.get(docId);
- if (document == null || !document.file.isFile()) {
- throw new FileNotFoundException();
- }
- if ((document.flags & Document.FLAG_VIRTUAL_DOCUMENT) != 0) {
- throw new IllegalStateException("Tried to open a virtual file.");
- }
-
- if ("r".equals(mode)) {
- if (mSimulateReadErrorIds.contains(docId)) {
- Log.d(TAG, "Simulated errs enabled. Open in the wrong mode.");
- return ParcelFileDescriptor.open(
- document.file, ParcelFileDescriptor.MODE_WRITE_ONLY);
- }
- return ParcelFileDescriptor.open(document.file, ParcelFileDescriptor.MODE_READ_ONLY);
- }
- if ("w".equals(mode)) {
- return startWrite(document);
- }
-
- throw new FileNotFoundException();
- }
-
- @VisibleForTesting
- public void simulateReadErrorsForFile(Uri uri) {
- simulateReadErrorsForFile(DocumentsContract.getDocumentId(uri));
- }
-
- public void simulateReadErrorsForFile(String id) {
- mSimulateReadErrorIds.add(id);
- }
-
- @Override
- public AssetFileDescriptor openDocumentThumbnail(
- String docId, Point sizeHint, CancellationSignal signal) throws FileNotFoundException {
- throw new FileNotFoundException();
- }
-
- @Override
- public AssetFileDescriptor openTypedDocument(
- String docId, String mimeTypeFilter, Bundle opts, CancellationSignal signal)
- throws FileNotFoundException {
- final StubDocument document = mStorage.get(docId);
- if (document == null || !document.file.isFile() || document.streamTypes == null) {
- throw new FileNotFoundException();
- }
- for (final String mimeType : document.streamTypes) {
- // Strict compare won't accept wildcards, but that's OK for tests, as DocumentsUI
- // doesn't use them for getStreamTypes nor openTypedDocument.
- if (mimeType.equals(mimeTypeFilter)) {
- ParcelFileDescriptor pfd = ParcelFileDescriptor.open(
- document.file, ParcelFileDescriptor.MODE_READ_ONLY);
- if (mSimulateReadErrorIds.contains(docId)) {
- pfd = new ParcelFileDescriptor(pfd) {
- @Override
- public void checkError() throws IOException {
- throw new IOException("Test error");
- }
- };
- }
- return new AssetFileDescriptor(pfd, 0, document.file.length());
- }
- }
- throw new IllegalArgumentException("Invalid MIME type filter for openTypedDocument().");
- }
-
- @Override
- public String[] getStreamTypes(Uri uri, String mimeTypeFilter) {
- final StubDocument document = mStorage.get(DocumentsContract.getDocumentId(uri));
- if (document == null) {
- throw new IllegalArgumentException(
- "The provided Uri is incorrect, or the file is gone.");
- }
- if (!"*/*".equals(mimeTypeFilter)) {
- // Not used by DocumentsUI, so don't bother implementing it.
- throw new UnsupportedOperationException();
- }
- if (document.streamTypes == null) {
- return null;
- }
- return document.streamTypes.toArray(new String[document.streamTypes.size()]);
- }
-
- private ParcelFileDescriptor startWrite(final StubDocument document)
- throws FileNotFoundException {
- ParcelFileDescriptor[] pipe;
- try {
- pipe = ParcelFileDescriptor.createReliablePipe();
- } catch (IOException exception) {
- throw new FileNotFoundException();
- }
- final ParcelFileDescriptor readPipe = pipe[0];
- final ParcelFileDescriptor writePipe = pipe[1];
-
- new Thread() {
- @Override
- public void run() {
- InputStream inputStream = null;
- OutputStream outputStream = null;
- try {
- Log.d(TAG, "Opening write stream on file " + document.documentId);
- inputStream = new ParcelFileDescriptor.AutoCloseInputStream(readPipe);
- outputStream = new FileOutputStream(document.file);
- byte[] buffer = new byte[32 * 1024];
- int bytesToRead;
- int bytesRead = 0;
- while (bytesRead != -1) {
- synchronized (mWriteLock) {
- // This cast is safe because the max possible value is buffer.length.
- bytesToRead = (int) Math.min(document.rootInfo.getRemainingCapacity(),
- buffer.length);
- if (bytesToRead == 0) {
- closePipeWithErrorSilently(readPipe, "Not enough space.");
- break;
- }
- bytesRead = inputStream.read(buffer, 0, bytesToRead);
- if (bytesRead == -1) {
- break;
- }
- outputStream.write(buffer, 0, bytesRead);
- document.rootInfo.size += bytesRead;
- }
- }
- } catch (IOException e) {
- Log.e(TAG, "Error on close", e);
- closePipeWithErrorSilently(readPipe, e.getMessage());
- } finally {
- IoUtils.closeQuietly(inputStream);
- IoUtils.closeQuietly(outputStream);
- Log.d(TAG, "Closing write stream on file " + document.documentId);
- notifyParentChanged(document.parentId);
- getContext().getContentResolver().notifyChange(
- DocumentsContract.buildDocumentUri(mAuthority, document.documentId),
- null, false);
- }
- }
- }.start();
-
- return writePipe;
- }
-
- private void closePipeWithErrorSilently(ParcelFileDescriptor pipe, String error) {
- try {
- pipe.closeWithError(error);
- } catch (IOException ignore) {
- }
- }
-
- @Override
- public Bundle call(String method, String arg, Bundle extras) {
- // We're not supposed to override any of the default DocumentsProvider
- // methods that are supported by "call", so javadoc asks that we
- // always call super.call first and return if response is not null.
- Bundle result = super.call(method, arg, extras);
- if (result != null) {
- return result;
- }
-
- switch (method) {
- case "clear":
- clearCacheAndBuildRoots();
- return null;
- case "configure":
- configure(arg, extras);
- return null;
- case "createVirtualFile":
- return createVirtualFileFromBundle(extras);
- case "simulateReadErrorsForFile":
- simulateReadErrorsForFile(arg);
- return null;
- case "createDocumentWithFlags":
- return dispatchCreateDocumentWithFlags(extras);
- }
-
- return null;
- }
-
- private Bundle createVirtualFileFromBundle(Bundle extras) {
- try {
- Uri uri = createVirtualFile(
- extras.getString(EXTRA_ROOT),
- extras.getString(EXTRA_PATH),
- extras.getString(Document.COLUMN_MIME_TYPE),
- extras.getStringArrayList(EXTRA_STREAM_TYPES),
- extras.getByteArray(EXTRA_CONTENT));
-
- String documentId = DocumentsContract.getDocumentId(uri);
- Bundle result = new Bundle();
- result.putString(Document.COLUMN_DOCUMENT_ID, documentId);
- return result;
- } catch (IOException e) {
- Log.e(TAG, "Couldn't create virtual file.");
- }
-
- return null;
- }
-
- private Bundle dispatchCreateDocumentWithFlags(Bundle extras) {
- String rootId = extras.getString(EXTRA_PARENT_ID);
- String mimeType = extras.getString(Document.COLUMN_MIME_TYPE);
- String name = extras.getString(Document.COLUMN_DISPLAY_NAME);
- List<String> streamTypes = extras.getStringArrayList(EXTRA_STREAM_TYPES);
- int flags = extras.getInt(EXTRA_FLAGS);
-
- Bundle out = new Bundle();
- String documentId = null;
- try {
- documentId = createDocument(rootId, mimeType, name, flags, streamTypes);
- Uri uri = DocumentsContract.buildDocumentUri(mAuthority, documentId);
- out.putParcelable(DocumentsContract.EXTRA_URI, uri);
- } catch (FileNotFoundException e) {
- Log.d(TAG, "Creating document with flags failed" + name);
- }
- return out;
- }
-
- public String createDocument(String parentId, String mimeType, String displayName, int flags,
- List<String> streamTypes) throws FileNotFoundException {
-
- StubDocument parent = mStorage.get(parentId);
- File file = createFile(parent, mimeType, displayName);
-
- final StubDocument document = StubDocument.createDocumentWithFlags(file, mimeType, parent,
- flags, streamTypes);
- mStorage.put(document.documentId, document);
- Log.d(TAG, "Created document " + document.documentId);
- notifyParentChanged(document.parentId);
- getContext().getContentResolver().notifyChange(
- DocumentsContract.buildDocumentUri(mAuthority, document.documentId),
- null, false);
-
- return document.documentId;
- }
-
- private File createFile(StubDocument parent, String mimeType, String displayName)
- throws FileNotFoundException {
- if (parent == null) {
- throw new IllegalArgumentException(
- "Can't create file " + displayName + " in null parent.");
- }
- if (!parent.file.isDirectory()) {
- throw new IllegalArgumentException(
- "Can't create file " + displayName + " inside non-directory parent "
- + parent.file.getName());
- }
-
- final File file = new File(parent.file, displayName);
- if (file.exists()) {
- throw new FileNotFoundException(
- "Duplicate file names not supported for " + file);
- }
-
- if (mimeType.equals(Document.MIME_TYPE_DIR)) {
- if (!file.mkdirs()) {
- throw new FileNotFoundException("Failed to create directory(s): " + file);
- }
- Log.i(TAG, "Created new directory: " + file);
- } else {
- boolean created = false;
- try {
- created = file.createNewFile();
- } catch (IOException e) {
- // We'll throw an FNF exception later :)
- Log.e(TAG, "createNewFile operation failed for file: " + file, e);
- }
- if (!created) {
- throw new FileNotFoundException("createNewFile operation failed for: " + file);
- }
- Log.i(TAG, "Created new file: " + file);
- }
- return file;
- }
-
- private void configure(String arg, Bundle extras) {
- Log.d(TAG, "Configure " + arg);
- String rootName = extras.getString(EXTRA_ROOT, ROOT_0_ID);
- long rootSize = extras.getLong(EXTRA_SIZE, 1) * 1024 * 1024;
- setSize(rootName, rootSize);
- }
-
- private void notifyParentChanged(String parentId) {
- getContext().getContentResolver().notifyChange(
- DocumentsContract.buildChildDocumentsUri(mAuthority, parentId), null, false);
- // Notify also about possible change in remaining space on the root.
- getContext().getContentResolver().notifyChange(DocumentsContract.buildRootsUri(mAuthority),
- null, false);
- }
-
- private void includeDocument(MatrixCursor result, StubDocument document) {
- final RowBuilder row = result.newRow();
- row.add(Document.COLUMN_DOCUMENT_ID, document.documentId);
- row.add(Document.COLUMN_DISPLAY_NAME, document.file.getName());
- row.add(Document.COLUMN_SIZE, document.file.length());
- row.add(Document.COLUMN_MIME_TYPE, document.mimeType);
- row.add(Document.COLUMN_FLAGS, document.flags);
- row.add(Document.COLUMN_LAST_MODIFIED, document.file.lastModified());
- }
-
- private void removeChildrenRecursively(File file) {
- for (File childFile : file.listFiles()) {
- if (childFile.isDirectory()) {
- removeChildrenRecursively(childFile);
- }
- childFile.delete();
- }
- }
-
- public void setSize(String rootId, long rootSize) {
- RootInfo root = mRoots.get(rootId);
- if (root != null) {
- final String key = STORAGE_SIZE_KEY + "." + rootId;
- Log.d(TAG, "Set size of " + key + " : " + rootSize);
-
- // Persist the size.
- SharedPreferences.Editor editor = mPrefs.edit();
- editor.putLong(key, rootSize);
- editor.apply();
- // Apply the size in the current instance of this provider.
- root.capacity = rootSize;
- getContext().getContentResolver().notifyChange(
- DocumentsContract.buildRootsUri(mAuthority),
- null, false);
- } else {
- Log.e(TAG, "Attempt to configure non-existent root: " + rootId);
- }
- }
-
- @VisibleForTesting
- public Uri createRegularFile(String rootId, String path, String mimeType, byte[] content)
- throws FileNotFoundException, IOException {
- final File file = createFile(rootId, path, mimeType, content);
- final StubDocument parent = mStorage.get(getDocumentIdForFile(file.getParentFile()));
- if (parent == null) {
- throw new FileNotFoundException("Parent not found.");
- }
- final StubDocument document = StubDocument.createRegularDocument(file, mimeType, parent);
- mStorage.put(document.documentId, document);
- return DocumentsContract.buildDocumentUri(mAuthority, document.documentId);
- }
-
- @VisibleForTesting
- public Uri createVirtualFile(
- String rootId, String path, String mimeType, List<String> streamTypes, byte[] content)
- throws FileNotFoundException, IOException {
-
- final File file = createFile(rootId, path, mimeType, content);
- final StubDocument parent = mStorage.get(getDocumentIdForFile(file.getParentFile()));
- if (parent == null) {
- throw new FileNotFoundException("Parent not found.");
- }
- final StubDocument document = StubDocument.createVirtualDocument(
- file, mimeType, streamTypes, parent);
- mStorage.put(document.documentId, document);
- return DocumentsContract.buildDocumentUri(mAuthority, document.documentId);
- }
-
- @VisibleForTesting
- public File getFile(String rootId, String path) throws FileNotFoundException {
- StubDocument root = mRoots.get(rootId).document;
- if (root == null) {
- throw new FileNotFoundException("No roots with the ID " + rootId + " were found");
- }
- // Convert the path string into a path that's relative to the root.
- File needle = new File(root.file, path.substring(1));
-
- StubDocument found = mStorage.get(getDocumentIdForFile(needle));
- if (found == null) {
- return null;
- }
- return found.file;
- }
-
- private File createFile(String rootId, String path, String mimeType, byte[] content)
- throws FileNotFoundException, IOException {
- Log.d(TAG, "Creating test file " + rootId + " : " + path);
- StubDocument root = mRoots.get(rootId).document;
- if (root == null) {
- throw new FileNotFoundException("No roots with the ID " + rootId + " were found");
- }
- final File file = new File(root.file, path.substring(1));
- if (DocumentsContract.Document.MIME_TYPE_DIR.equals(mimeType)) {
- if (!file.mkdirs()) {
- throw new FileNotFoundException("Couldn't create directory " + file.getPath());
- }
- } else {
- if (!file.createNewFile()) {
- throw new FileNotFoundException("Couldn't create file " + file.getPath());
- }
- try (final FileOutputStream fout = new FileOutputStream(file)) {
- fout.write(content);
- }
- }
- return file;
- }
-
- final static class RootInfo {
- private static final int DEFAULT_ROOTS_FLAGS = Root.FLAG_SUPPORTS_SEARCH
- | Root.FLAG_SUPPORTS_CREATE | Root.FLAG_SUPPORTS_IS_CHILD;
-
- public final String name;
- public final StubDocument document;
- public long capacity;
- public long size;
- public int flags;
-
- RootInfo(File file, long capacity) {
- this.name = file.getName();
- this.capacity = 1024 * 1024;
- this.flags = DEFAULT_ROOTS_FLAGS;
- this.capacity = capacity;
- this.size = 0;
- this.document = StubDocument.createRootDocument(file, this);
- }
-
- public long getRemainingCapacity() {
- return capacity - size;
- }
-
- public void setSearchEnabled(boolean enabled) {
- flags = enabled ? (flags | Root.FLAG_SUPPORTS_SEARCH)
- : (flags & ~Root.FLAG_SUPPORTS_SEARCH);
- }
-
- }
-
- final static class StubDocument {
- public final File file;
- public final String documentId;
- public final String mimeType;
- public final List<String> streamTypes;
- public final int flags;
- public final String parentId;
- public final RootInfo rootInfo;
-
- private StubDocument(File file, String mimeType, List<String> streamTypes, int flags,
- StubDocument parent) {
- this.file = file;
- this.documentId = getDocumentIdForFile(file);
- this.mimeType = mimeType;
- this.streamTypes = streamTypes;
- this.flags = flags;
- this.parentId = parent.documentId;
- this.rootInfo = parent.rootInfo;
- }
-
- private StubDocument(File file, RootInfo rootInfo) {
- this.file = file;
- this.documentId = getDocumentIdForFile(file);
- this.mimeType = Document.MIME_TYPE_DIR;
- this.streamTypes = new ArrayList<String>();
- this.flags = Document.FLAG_DIR_SUPPORTS_CREATE | Document.FLAG_SUPPORTS_RENAME;
- this.parentId = null;
- this.rootInfo = rootInfo;
- }
-
- public static StubDocument createRootDocument(File file, RootInfo rootInfo) {
- return new StubDocument(file, rootInfo);
- }
-
- public static StubDocument createRegularDocument(
- File file, String mimeType, StubDocument parent) {
- int flags = Document.FLAG_SUPPORTS_DELETE | Document.FLAG_SUPPORTS_RENAME;
- if (file.isDirectory()) {
- flags |= Document.FLAG_DIR_SUPPORTS_CREATE;
- } else {
- flags |= Document.FLAG_SUPPORTS_WRITE;
- }
- return new StubDocument(file, mimeType, new ArrayList<String>(), flags, parent);
- }
-
- public static StubDocument createDocumentWithFlags(
- File file, String mimeType, StubDocument parent, int flags,
- List<String> streamTypes) {
- return new StubDocument(file, mimeType, streamTypes, flags, parent);
- }
-
- public static StubDocument createVirtualDocument(
- File file, String mimeType, List<String> streamTypes, StubDocument parent) {
- int flags = Document.FLAG_SUPPORTS_DELETE | Document.FLAG_SUPPORTS_WRITE
- | Document.FLAG_VIRTUAL_DOCUMENT;
- return new StubDocument(file, mimeType, streamTypes, flags, parent);
- }
-
- @Override
- public String toString() {
- return "StubDocument{"
- + "path:" + file.getPath()
- + ", documentId:" + documentId
- + ", mimeType:" + mimeType
- + ", streamTypes:" + streamTypes.toString()
- + ", flags:" + flags
- + ", parentId:" + parentId
- + ", rootInfo:" + rootInfo
- + "}";
- }
- }
-
- private static String getDocumentIdForFile(File file) {
- return file.getAbsolutePath();
- }
-}
diff --git a/packages/DocumentsUI/tests/src/com/android/documentsui/TestInputEvent.java b/packages/DocumentsUI/tests/src/com/android/documentsui/TestInputEvent.java
deleted file mode 100644
index e6936d6..0000000
--- a/packages/DocumentsUI/tests/src/com/android/documentsui/TestInputEvent.java
+++ /dev/null
@@ -1,114 +0,0 @@
-package com.android.documentsui;
-
-import android.graphics.Point;
-import android.support.v7.widget.RecyclerView;
-
-public class TestInputEvent implements Events.InputEvent {
-
- public boolean mouseEvent;
- public boolean primaryButtonPressed;
- public boolean secondaryButtonPressed;
- public boolean shiftKeyDow;
- public boolean actionDown;
- public boolean actionUp;
- public Point location;
- public Point rawLocation;
- public int position = Integer.MIN_VALUE;
-
- public TestInputEvent() {}
-
- public TestInputEvent(int position) {
- this.position = position;
- }
-
- @Override
- public boolean isMouseEvent() {
- return mouseEvent;
- }
-
- @Override
- public boolean isPrimaryButtonPressed() {
- return primaryButtonPressed;
- }
-
- @Override
- public boolean isSecondaryButtonPressed() {
- return secondaryButtonPressed;
- }
-
- @Override
- public boolean isShiftKeyDown() {
- return shiftKeyDow;
- }
-
- @Override
- public boolean isActionDown() {
- return actionDown;
- }
-
- @Override
- public boolean isActionUp() {
- return actionUp;
- }
-
- @Override
- public Point getOrigin() {
- return location;
- }
-
- @Override
- public float getX() {
- return location.x;
- }
-
- @Override
- public float getY() {
- return location.y;
- }
-
- @Override
- public float getRawX() {
- return rawLocation.x;
- }
-
- @Override
- public float getRawY() {
- return rawLocation.y;
- }
-
- @Override
- public boolean isOverItem() {
- return position != Integer.MIN_VALUE && position != RecyclerView.NO_POSITION;
- }
-
- @Override
- public int getItemPosition() {
- return position;
- }
-
- @Override
- public void close() {}
-
- public static TestInputEvent tap(int position) {
- return new TestInputEvent(position);
- }
-
- public static TestInputEvent shiftTap(int position) {
- TestInputEvent e = new TestInputEvent(position);
- e.shiftKeyDow = true;
- return e;
- }
-
- public static TestInputEvent click(int position) {
- TestInputEvent e = new TestInputEvent(position);
- e.mouseEvent = true;
- return e;
- }
-
- public static TestInputEvent shiftClick(int position) {
- TestInputEvent e = new TestInputEvent(position);
- e.mouseEvent = true;
- e.shiftKeyDow = true;
- return e;
- }
-}
diff --git a/packages/DocumentsUI/tests/src/com/android/documentsui/ThumbnailCacheTest.java b/packages/DocumentsUI/tests/src/com/android/documentsui/ThumbnailCacheTest.java
deleted file mode 100644
index ee6ab01..0000000
--- a/packages/DocumentsUI/tests/src/com/android/documentsui/ThumbnailCacheTest.java
+++ /dev/null
@@ -1,214 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.documentsui;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertSame;
-import static org.junit.Assert.assertTrue;
-
-import android.content.ComponentCallbacks2;
-import android.graphics.Bitmap;
-import android.graphics.Point;
-import android.net.Uri;
-import android.support.test.filters.SmallTest;
-import android.support.test.runner.AndroidJUnit4;
-
-import com.android.documentsui.ThumbnailCache.Result;
-import com.android.documentsui.testing.Bitmaps;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-@RunWith(AndroidJUnit4.class)
-@SmallTest
-public class ThumbnailCacheTest {
-
- private static final Uri URI_0 = Uri.parse("content://authority/document/0");
- private static final Uri URI_1 = Uri.parse("content://authority/document/1");
-
- private static final Point SMALL_SIZE = new Point(1, 1);
- private static final Point MID_SIZE = new Point(2, 2);
- private static final Point LARGE_SIZE = new Point(3, 3);
-
- private static final Bitmap SMALL_BITMAP = Bitmaps.createTestBitmap(1, 1);
- private static final Bitmap MIDSIZE_BITMAP = Bitmaps.createTestBitmap(2, 2);
- private static final Bitmap LARGE_BITMAP = Bitmaps.createTestBitmap(3, 3);
-
- private static final long LAST_MODIFIED = 100;
-
- private static final int CACHE_SIZE_LIMIT =
- MIDSIZE_BITMAP.getByteCount() + LARGE_BITMAP.getByteCount();
-
- private ThumbnailCache mCache;
-
- @Before
- public void setUp() {
- mCache = new ThumbnailCache(CACHE_SIZE_LIMIT);
- }
-
- @Test
- public void testMiss() {
- mCache.putThumbnail(URI_0, MID_SIZE, MIDSIZE_BITMAP, LAST_MODIFIED);
-
- Result result = mCache.getThumbnail(URI_1, MID_SIZE);
-
- assertMiss(result);
- }
-
- @Test
- public void testHit_Exact() {
- mCache.putThumbnail(URI_0, MID_SIZE, MIDSIZE_BITMAP, LAST_MODIFIED);
-
- Result result = mCache.getThumbnail(URI_0, MID_SIZE);
-
- assertHitExact(result);
- assertSame(MIDSIZE_BITMAP, result.getThumbnail());
- }
-
- @Test
- public void testHit_Smaller() {
- mCache.putThumbnail(URI_0, MID_SIZE, MIDSIZE_BITMAP, LAST_MODIFIED);
-
- Result result = mCache.getThumbnail(URI_0, LARGE_SIZE);
-
- assertHitSmaller(result);
- assertSame(MIDSIZE_BITMAP, result.getThumbnail());
- }
-
- @Test
- public void testHit_Larger() {
- mCache.putThumbnail(URI_0, MID_SIZE, MIDSIZE_BITMAP, LAST_MODIFIED);
-
- Result result = mCache.getThumbnail(URI_0, SMALL_SIZE);
-
- assertHitLarger(result);
- assertSame(MIDSIZE_BITMAP, result.getThumbnail());
- }
-
- @Test
- public void testHit_Larger_HasBothSize() {
- mCache.putThumbnail(URI_0, LARGE_SIZE, LARGE_BITMAP, LAST_MODIFIED);
- mCache.putThumbnail(URI_0, SMALL_SIZE, SMALL_BITMAP, LAST_MODIFIED);
-
- Result result = mCache.getThumbnail(URI_0, MID_SIZE);
-
- assertHitLarger(result);
- assertSame(LARGE_BITMAP, result.getThumbnail());
- }
-
- @Test
- public void testHit_Exact_MultiplePut() {
- mCache.putThumbnail(URI_0, MID_SIZE, MIDSIZE_BITMAP, LAST_MODIFIED);
-
- Bitmap localBitmap = Bitmaps.createTestBitmap(MID_SIZE.x, MID_SIZE.y);
- long localLastModified = LAST_MODIFIED + 100;
- mCache.putThumbnail(URI_0, MID_SIZE, localBitmap, localLastModified);
-
- Result result = mCache.getThumbnail(URI_0, MID_SIZE);
-
- assertHitExact(result);
- assertSame(localBitmap, result.getThumbnail());
- }
-
- @Test
- public void testHit_EqualLastModified() {
- mCache.putThumbnail(URI_0, MID_SIZE, MIDSIZE_BITMAP, LAST_MODIFIED);
-
- Result result = mCache.getThumbnail(URI_0, MID_SIZE);
-
- assertEquals(LAST_MODIFIED, result.getLastModified());
- }
-
- @Test
- public void testEvictOldest_SizeExceeded() {
- mCache.putThumbnail(URI_0, MID_SIZE, MIDSIZE_BITMAP, LAST_MODIFIED);
- mCache.putThumbnail(URI_1, SMALL_SIZE, SMALL_BITMAP, LAST_MODIFIED);
- mCache.putThumbnail(URI_1, LARGE_SIZE, LARGE_BITMAP, LAST_MODIFIED);
-
- Result result = mCache.getThumbnail(URI_0, MID_SIZE);
-
- assertMiss(result);
- }
-
- @Test
- public void testCacheShrink_OnTrimMemory_Moderate() {
- mCache.putThumbnail(URI_0, MID_SIZE, MIDSIZE_BITMAP, LAST_MODIFIED);
- mCache.putThumbnail(URI_0, SMALL_SIZE, SMALL_BITMAP, LAST_MODIFIED);
- mCache.putThumbnail(URI_0, LARGE_SIZE, LARGE_BITMAP, LAST_MODIFIED);
-
- mCache.onTrimMemory(ComponentCallbacks2.TRIM_MEMORY_MODERATE);
-
- Result result = mCache.getThumbnail(URI_0, MID_SIZE);
- assertMiss(result);
- }
-
- @Test
- public void testCacheShrink_OnTrimMemory_Background() {
- mCache.putThumbnail(URI_0, LARGE_SIZE, LARGE_BITMAP, LAST_MODIFIED);
- mCache.putThumbnail(URI_0, SMALL_SIZE, SMALL_BITMAP, LAST_MODIFIED);
-
- mCache.onTrimMemory(ComponentCallbacks2.TRIM_MEMORY_BACKGROUND);
-
- // Math here (size of each pixel omitted):
- // Limit = midSize + largeSize = 2 * 2 + 3 * 3 = 13, so after all putThumbnail the cache is
- // full.
- //
- // HalfLimit = Limit / 2 = 5. After evicting largeSize bitmap, cache size decreases to 4,
- // which is smaller than 5. Then smallSize bitmap remains.
- Result result = mCache.getThumbnail(URI_0, MID_SIZE);
- assertHitSmaller(result);
- assertSame(SMALL_BITMAP, result.getThumbnail());
- }
-
- @Test
- public void testRemoveUri() {
- mCache.putThumbnail(URI_0, MID_SIZE, MIDSIZE_BITMAP, LAST_MODIFIED);
- mCache.putThumbnail(URI_0, SMALL_SIZE, SMALL_BITMAP, LAST_MODIFIED);
- mCache.putThumbnail(URI_1, MID_SIZE, MIDSIZE_BITMAP, LAST_MODIFIED);
-
- mCache.removeUri(URI_0);
-
- assertMiss(mCache.getThumbnail(URI_0, MID_SIZE));
- assertHitExact(mCache.getThumbnail(URI_1, MID_SIZE));
- }
-
- private static void assertMiss(Result result) {
- assertEquals(Result.CACHE_MISS, result.getStatus());
- assertFalse(result.isExactHit());
- assertFalse(result.isHit());
- }
-
- private static void assertHitExact(Result result) {
- assertEquals(Result.CACHE_HIT_EXACT, result.getStatus());
- assertTrue(result.isExactHit());
- assertTrue(result.isHit());
- }
-
- private static void assertHitSmaller(Result result) {
- assertEquals(Result.CACHE_HIT_SMALLER, result.getStatus());
- assertFalse(result.isExactHit());
- assertTrue(result.isHit());
- }
-
- private static void assertHitLarger(Result result) {
- assertEquals(Result.CACHE_HIT_LARGER, result.getStatus());
- assertFalse(result.isExactHit());
- assertTrue(result.isHit());
- }
-}
diff --git a/packages/DocumentsUI/tests/src/com/android/documentsui/bots/Bots.java b/packages/DocumentsUI/tests/src/com/android/documentsui/bots/Bots.java
deleted file mode 100644
index 4bda531..0000000
--- a/packages/DocumentsUI/tests/src/com/android/documentsui/bots/Bots.java
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- * Copyright (C) 2016 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 static junit.framework.Assert.assertNotNull;
-
-import android.content.Context;
-import android.support.test.uiautomator.By;
-import android.support.test.uiautomator.BySelector;
-import android.support.test.uiautomator.UiDevice;
-import android.support.test.uiautomator.UiObject;
-import android.support.test.uiautomator.UiObject2;
-import android.support.test.uiautomator.UiSelector;
-import android.support.test.uiautomator.Until;
-
-/**
- * Handy collection of bots for working with Files app.
- */
-public final class Bots {
-
- private static final int TIMEOUT = 5000;
-
- public final BreadBot breadcrumb;
- public final DirectoryListBot directory;
- public final KeyboardBot keyboard;
- public final RootsListBot roots;
- public final SearchBot search;
- public final UiBot main;
-
- public Bots(UiDevice device, Context context, int timeout) {
- main = new UiBot(device, context, TIMEOUT);
- breadcrumb = new BreadBot(device, context, TIMEOUT, main);
- roots = new RootsListBot(device, context, TIMEOUT);
- directory = new DirectoryListBot(device, context, TIMEOUT);
- keyboard = new KeyboardBot(device, context, TIMEOUT);
- search = new SearchBot(device, context, TIMEOUT);
- }
-
- /**
- * A test helper class that provides support for controlling directory list
- * and making assertions against the state of it.
- */
- static abstract class BaseBot {
- final UiDevice mDevice;
- final Context mContext;
- final int mTimeout;
-
- BaseBot(UiDevice device, Context context, int timeout) {
- mDevice = device;
- mContext = context;
- mTimeout = timeout;
- }
-
- /**
- * Asserts that the specified view or one of its descendents has focus.
- */
- protected void assertHasFocus(String resourceName) {
- UiObject2 candidate = mDevice.findObject(By.res(resourceName));
- assertNotNull("Expected " + resourceName + " to have focus, but it didn't.",
- candidate.findObject(By.focused(true)));
- }
-
- protected UiObject2 find(BySelector selector) {
- mDevice.wait(Until.findObject(selector), mTimeout);
- return mDevice.findObject(selector);
- }
-
- protected UiObject findObject(String resourceId) {
- final UiSelector object = new UiSelector().resourceId(resourceId);
- return mDevice.findObject(object);
- }
-
- protected UiObject findObject(String parentResourceId, String childResourceId) {
- final UiSelector selector = new UiSelector()
- .resourceId(parentResourceId)
- .childSelector(new UiSelector().resourceId(childResourceId));
- return mDevice.findObject(selector);
- }
-
- protected void waitForIdle() {
- mDevice.waitForIdle(mTimeout);
- }
- }
-
-}
diff --git a/packages/DocumentsUI/tests/src/com/android/documentsui/bots/BreadBot.java b/packages/DocumentsUI/tests/src/com/android/documentsui/bots/BreadBot.java
deleted file mode 100644
index 2683e6c..0000000
--- a/packages/DocumentsUI/tests/src/com/android/documentsui/bots/BreadBot.java
+++ /dev/null
@@ -1,153 +0,0 @@
-/*
- * Copyright (C) 2016 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 static android.support.test.espresso.Espresso.onView;
-import static android.support.test.espresso.action.ViewActions.click;
-import static android.support.test.espresso.assertion.ViewAssertions.matches;
-import static android.support.test.espresso.matcher.ViewMatchers.isAssignableFrom;
-import static android.support.test.espresso.matcher.ViewMatchers.withId;
-import static android.support.test.espresso.matcher.ViewMatchers.withText;
-import static org.hamcrest.CoreMatchers.allOf;
-import static org.hamcrest.CoreMatchers.anyOf;
-import static org.hamcrest.CoreMatchers.is;
-
-import android.content.Context;
-import android.support.test.espresso.ViewInteraction;
-import android.support.test.espresso.matcher.BoundedMatcher;
-import android.support.test.uiautomator.UiDevice;
-import android.support.test.uiautomator.UiObjectNotFoundException;
-import android.view.View;
-
-import com.android.documentsui.DragOverTextView;
-import com.android.documentsui.DropdownBreadcrumb;
-import com.android.documentsui.R;
-import com.android.documentsui.model.DocumentInfo;
-
-import org.hamcrest.Description;
-import org.hamcrest.Matcher;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-import java.util.function.Predicate;
-
-import junit.framework.Assert;
-
-/**
- * A test helper class that provides support for controlling the UI Breadcrumb
- * programmatically, and making assertions against the state of the UI.
- * <p>
- * Support for working directly with Roots and Directory view can be found in the respective bots.
- */
-public class BreadBot extends Bots.BaseBot {
-
- public static final String TARGET_PKG = "com.android.documentsui";
-
- private static final Matcher<View> DROPDOWN_BREADCRUMB = withId(
- R.id.dropdown_breadcrumb);
-
- private static final Matcher<View> HORIZONTAL_BREADCRUMB = withId(
- R.id.horizontal_breadcrumb);
-
- // When any 'ol breadcrumb will do. Could be dropdown or horizontal.
- @SuppressWarnings("unchecked")
- private static final Matcher<View> BREADCRUMB = anyOf(
- DROPDOWN_BREADCRUMB, HORIZONTAL_BREADCRUMB);
-
- private UiBot mMain;
-
- public BreadBot(UiDevice device, Context context, int timeout, UiBot main) {
- super(device, context, timeout);
- mMain = main;
- }
-
- public void assertTitle(String expected) {
- // There is no discrete title part on the horizontal breadcrumb...
- // so we only test on dropdown.
- if (mMain.inDrawerLayout()) {
- Matcher<Object> titleMatcher = dropdownTitleMatcher(expected);
- onView(BREADCRUMB)
- .check(matches(titleMatcher));
- }
- }
-
- /**
- * Reveals the bread crumb if it was hidden. This will likely be the case
- * when the app is in drawer mode.
- */
- public void revealAsNeeded() throws Exception {
- if (mMain.inDrawerLayout()) {
- onView(DROPDOWN_BREADCRUMB).perform(click());
- }
- }
-
- public void clickItem(String label) throws UiObjectNotFoundException {
- if (mMain.inFixedLayout()) {
- findHorizontalEntry(label).perform(click());
- } else {
- mMain.findMenuWithName(label).click();
- }
- }
-
- public void assertItemsPresent(String... items) {
- Predicate<String> checker = mMain.inFixedLayout()
- ? this::hasHorizontalEntry
- : mMain::hasMenuWithName;
-
- assertItemsPresent(items, checker);
- }
-
- public void assertItemsPresent(String[] items, Predicate<String> predicate) {
- List<String> absent = new ArrayList<>();
- for (String item : items) {
- if (!predicate.test(item)) {
- absent.add(item);
- }
- }
- if (!absent.isEmpty()) {
- Assert.fail("Expected iteams " + Arrays.asList(items)
- + ", but missing " + absent);
- }
- }
-
- public boolean hasHorizontalEntry(String label) {
- return Matchers.present(findHorizontalEntry(label), withText(label));
- }
-
- @SuppressWarnings("unchecked")
- public ViewInteraction findHorizontalEntry(String label) {
- return onView(allOf(isAssignableFrom(DragOverTextView.class), withText(label)));
- }
-
- private static Matcher<Object> dropdownTitleMatcher(String expected) {
- final Matcher<String> textMatcher = is(expected);
- return new BoundedMatcher<Object, DropdownBreadcrumb>(DropdownBreadcrumb.class) {
- @Override
- public boolean matchesSafely(DropdownBreadcrumb breadcrumb) {
- DocumentInfo selectedDoc = (DocumentInfo) breadcrumb.getSelectedItem();
- return textMatcher.matches(selectedDoc.displayName);
- }
-
- @Override
- public void describeTo(Description description) {
- description.appendText("with breadcrumb title: ");
- textMatcher.describeTo(description);
- }
- };
- }
-}
diff --git a/packages/DocumentsUI/tests/src/com/android/documentsui/bots/DirectoryListBot.java b/packages/DocumentsUI/tests/src/com/android/documentsui/bots/DirectoryListBot.java
deleted file mode 100644
index fa1e09c..0000000
--- a/packages/DocumentsUI/tests/src/com/android/documentsui/bots/DirectoryListBot.java
+++ /dev/null
@@ -1,197 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.documentsui.bots;
-
-import static junit.framework.Assert.assertEquals;
-import static junit.framework.Assert.assertNotNull;
-import static junit.framework.Assert.assertTrue;
-
-import android.content.Context;
-import android.support.test.espresso.Espresso;
-import android.support.test.espresso.matcher.ViewMatchers;
-import android.support.test.uiautomator.By;
-import android.support.test.uiautomator.BySelector;
-import android.support.test.uiautomator.Configurator;
-import android.support.test.uiautomator.UiDevice;
-import android.support.test.uiautomator.UiObject;
-import android.support.test.uiautomator.UiObject2;
-import android.support.test.uiautomator.UiObjectNotFoundException;
-import android.support.test.uiautomator.UiSelector;
-import android.support.test.uiautomator.Until;
-import android.support.v7.widget.RecyclerView;
-import android.view.KeyEvent;
-import android.view.MotionEvent;
-
-import com.android.documentsui.R;
-
-import junit.framework.Assert;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-import java.util.regex.Pattern;
-
-/**
- * A test helper class that provides support for controlling directory list
- * and making assertions against the state of it.
- */
-public class DirectoryListBot extends Bots.BaseBot {
- private static final String DIR_LIST_ID = "com.android.documentsui:id/dir_list";
-
- private static final BySelector SNACK_DELETE =
- By.desc(Pattern.compile("^Deleting [0-9]+ file.+"));
-
- public DirectoryListBot(UiDevice device, Context context, int timeout) {
- super(device, context, timeout);
- }
-
- public void assertDocumentsCount(int count) throws UiObjectNotFoundException {
- UiObject docsList = findDocumentsList();
- assertEquals(count, docsList.getChildCount());
- }
-
- public void assertDocumentsPresent(String... labels) throws UiObjectNotFoundException {
- List<String> absent = new ArrayList<>();
- for (String label : labels) {
- if (!findDocument(label).exists()) {
- absent.add(label);
- }
- }
- if (!absent.isEmpty()) {
- Assert.fail("Expected documents " + Arrays.asList(labels)
- + ", but missing " + absent);
- }
- }
-
- public void assertDocumentsAbsent(String... labels) throws UiObjectNotFoundException {
- List<String> found = new ArrayList<>();
- for (String label : labels) {
- if (findDocument(label).exists()) {
- found.add(label);
- }
- }
- if (!found.isEmpty()) {
- Assert.fail("Expected documents not present" + Arrays.asList(labels)
- + ", but present " + found);
- }
- }
-
- public void assertDocumentsCountOnList(boolean exists, int count) throws UiObjectNotFoundException {
- UiObject docsList = findDocumentsList();
- assertEquals(exists, docsList.exists());
- if(docsList.exists()) {
- assertEquals(count, docsList.getChildCount());
- }
- }
-
- public void assertMessageTextView(String message) throws UiObjectNotFoundException {
- UiObject messageTextView = findMessageTextView();
- assertTrue(messageTextView.exists());
-
- String msg = String.valueOf(message);
- assertEquals(String.format(msg, "TEST_ROOT_0"), messageTextView.getText());
-
- }
-
- private UiObject findMessageTextView() {
- return findObject(
- "com.android.documentsui:id/container_directory",
- "com.android.documentsui:id/message");
- }
-
- public void assertSnackbar(int id) {
- assertNotNull(getSnackbar(mContext.getString(id)));
- }
-
- public void openDocument(String label) throws UiObjectNotFoundException {
- int toolType = Configurator.getInstance().getToolType();
- Configurator.getInstance().setToolType(MotionEvent.TOOL_TYPE_FINGER);
- UiObject doc = findDocument(label);
- doc.click();
- Configurator.getInstance().setToolType(toolType);
- }
-
- public void clickDocument(String label) throws UiObjectNotFoundException {
- findDocument(label).click();
- }
-
- public UiObject selectDocument(String label) throws UiObjectNotFoundException {
- waitForDocument(label);
- UiObject doc = findDocument(label);
- doc.longClick();
- return doc;
- }
-
- public void copyFilesToClipboard(String...labels) throws UiObjectNotFoundException {
- for (String label: labels) {
- clickDocument(label);
- }
- mDevice.pressKeyCode(KeyEvent.KEYCODE_C, KeyEvent.META_CTRL_ON);
- }
-
- public void pasteFilesFromClipboard() {
- mDevice.pressKeyCode(KeyEvent.KEYCODE_V, KeyEvent.META_CTRL_ON);
- }
-
- public UiObject2 getSnackbar(String message) {
- return mDevice.wait(Until.findObject(By.text(message)), mTimeout);
- }
-
- public void waitForDeleteSnackbar() {
- mDevice.wait(Until.findObject(SNACK_DELETE), mTimeout);
- }
-
- public void waitForDeleteSnackbarGone() {
- // wait a little longer for snackbar to go away, as it disappears after a timeout.
- mDevice.wait(Until.gone(SNACK_DELETE), mTimeout * 2);
- }
-
- public void waitForDocument(String label) throws UiObjectNotFoundException {
- findDocument(label).waitForExists(mTimeout);
- }
-
- public UiObject findDocument(String label) throws UiObjectNotFoundException {
- final UiSelector docList = new UiSelector().resourceId(
- "com.android.documentsui:id/container_directory").childSelector(
- new UiSelector().resourceId(DIR_LIST_ID));
-
- // Wait for the first list item to appear
- new UiObject(docList.childSelector(new UiSelector())).waitForExists(mTimeout);
-
- // new UiScrollable(docList).scrollIntoView(new UiSelector().text(label));
- return mDevice.findObject(docList.childSelector(new UiSelector().text(label)));
- }
-
- public boolean hasDocuments(String... labels) throws UiObjectNotFoundException {
- for (String label : labels) {
- if (!findDocument(label).exists()) {
- return false;
- }
- }
- return true;
- }
-
- public UiObject findDocumentsList() {
- return findObject(
- "com.android.documentsui:id/container_directory",
- DIR_LIST_ID);
- }
-
- public void assertHasFocus() {
- assertHasFocus(DIR_LIST_ID);
- }
-}
diff --git a/packages/DocumentsUI/tests/src/com/android/documentsui/bots/KeyboardBot.java b/packages/DocumentsUI/tests/src/com/android/documentsui/bots/KeyboardBot.java
deleted file mode 100644
index 2e71577..0000000
--- a/packages/DocumentsUI/tests/src/com/android/documentsui/bots/KeyboardBot.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.documentsui.bots;
-
-import static android.support.test.espresso.Espresso.onView;
-import static android.support.test.espresso.action.ViewActions.pressImeActionButton;
-import static android.support.test.espresso.matcher.ViewMatchers.isAssignableFrom;
-
-import android.content.Context;
-import android.support.test.uiautomator.UiDevice;
-import android.view.inputmethod.InputMethodManager;
-import android.widget.EditText;
-
-/**
- * A test helper class that provides support for keyboard manipulation.
- */
-public class KeyboardBot extends Bots.BaseBot {
-
- public KeyboardBot(UiDevice device, Context context, int timeout) {
- super(device, context, timeout);
- }
-
- public void dismissKeyboardIfPresent() {
- if(isKeyboardPresent()) {
- mDevice.pressBack();
- }
- }
-
- // Indirect way to detect the keyboard.
- private boolean isKeyboardPresent() {
- InputMethodManager inputManager = (InputMethodManager) mContext
- .getSystemService(Context.INPUT_METHOD_SERVICE);
- return inputManager.isAcceptingText();
- }
-
- public void pressEnter() {
- //TODO: There seems to be a bug on N/Espresso that makes pressing Enter not work
- // This is a temporary workaround that somehow works
- // See b/28399576
- onView(isAssignableFrom(EditText.class)).perform(pressImeActionButton());
- }
-
- public void pressKey(int keyCode) {
- mDevice.pressKeyCode(keyCode);
- }
-
- public void pressKey(int keyCode, int metaState) {
- mDevice.pressKeyCode(keyCode, metaState);
- }
-}
diff --git a/packages/DocumentsUI/tests/src/com/android/documentsui/bots/Matchers.java b/packages/DocumentsUI/tests/src/com/android/documentsui/bots/Matchers.java
deleted file mode 100644
index fb3cd0c..0000000
--- a/packages/DocumentsUI/tests/src/com/android/documentsui/bots/Matchers.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (C) 2016 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 static android.support.test.espresso.Espresso.onView;
-import static android.support.test.espresso.assertion.ViewAssertions.matches;
-import static android.support.test.espresso.matcher.ViewMatchers.isDisplayed;
-
-import android.support.test.espresso.ViewInteraction;
-import android.view.View;
-
-import org.hamcrest.Matcher;
-
-/**
- * Support methods for working with Espresso related matchers 'n stuff.
- */
-public final class Matchers {
-
- private Matchers() {}
-
- public static boolean present(Matcher<View> matcher) {
- return present(onView(matcher), isDisplayed());
- }
-
- public static boolean present(ViewInteraction vi, Matcher<View> matcher) {
- try {
- vi.check(matches(matcher));
- vi.check(matches(isDisplayed()));
- return true;
- } catch (Exception e) {
- return false;
- }
- }
-}
diff --git a/packages/DocumentsUI/tests/src/com/android/documentsui/bots/RootsListBot.java b/packages/DocumentsUI/tests/src/com/android/documentsui/bots/RootsListBot.java
deleted file mode 100644
index c73cec2..0000000
--- a/packages/DocumentsUI/tests/src/com/android/documentsui/bots/RootsListBot.java
+++ /dev/null
@@ -1,126 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.documentsui.bots;
-
-import static android.support.test.espresso.Espresso.onView;
-import static android.support.test.espresso.action.ViewActions.swipeLeft;
-import static android.support.test.espresso.action.ViewActions.swipeRight;
-import static android.support.test.espresso.matcher.ViewMatchers.withId;
-
-import android.content.Context;
-import android.support.test.uiautomator.UiDevice;
-import android.support.test.uiautomator.UiObject;
-import android.support.test.uiautomator.UiObjectNotFoundException;
-import android.support.test.uiautomator.UiScrollable;
-import android.support.test.uiautomator.UiSelector;
-import android.util.Log;
-import android.view.View;
-
-import com.android.documentsui.R;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
-import junit.framework.Assert;
-
-/**
- * A test helper class that provides support for controlling and asserting against
- * the roots list drawer.
- */
-public class RootsListBot extends Bots.BaseBot {
- private static final String ROOTS_LIST_ID = "com.android.documentsui:id/roots_list";
- private static final String TAG = "RootsListBot";
-
- public RootsListBot(UiDevice device, Context context, int timeout) {
- super(device, context, timeout);
- }
-
- private UiObject findRoot(String label) throws UiObjectNotFoundException {
- final UiSelector rootsList = new UiSelector().resourceId(
- "com.android.documentsui:id/container_roots").childSelector(
- new UiSelector().resourceId(ROOTS_LIST_ID));
-
- // We might need to expand drawer if not visible
- if (!new UiObject(rootsList).waitForExists(mTimeout)) {
- Log.d(TAG, "Failed to find roots list; trying to expand");
- final UiSelector hamburger = new UiSelector().resourceId(
- "com.android.documentsui:id/toolbar").childSelector(
- new UiSelector().className("android.widget.ImageButton").clickable(true));
- new UiObject(hamburger).click();
- }
-
- // Wait for the first list item to appear
- new UiObject(rootsList.childSelector(new UiSelector())).waitForExists(mTimeout);
-
- // Now scroll around to find our item
- new UiScrollable(rootsList).scrollIntoView(new UiSelector().text(label));
- return new UiObject(rootsList.childSelector(new UiSelector().text(label)));
- }
-
- public void openRoot(String label) throws UiObjectNotFoundException {
- findRoot(label).click();
- // Close the drawer in case we select a pre-selected root already
- closeDrawer();
- }
-
- public void closeDrawer() {
- // Espresso will try to close the drawer if it's opened
- // But if no drawer exists (Tablet devices), we will have to catch the exception
- // and continue on the test
- // Why can't we do something like .exist() first?
- // http://stackoverflow.com/questions/20807131/espresso-return-boolean-if-view-exists
- try {
- if (mContext.getResources().getConfiguration()
- .getLayoutDirection() == View.LAYOUT_DIRECTION_RTL) {
- onView(withId(R.id.drawer_layout)).perform(swipeRight());
- } else {
- onView(withId(R.id.drawer_layout)).perform(swipeLeft());
- }
- } catch (Exception e) {
- }
- }
-
- public void assertRootsPresent(String... labels) throws UiObjectNotFoundException {
- List<String> missing = new ArrayList<>();
- for (String label : labels) {
- if (!findRoot(label).exists()) {
- missing.add(label);
- }
- }
- if (!missing.isEmpty()) {
- Assert.fail(
- "Expected roots " + Arrays.asList(labels) + ", but missing " + missing);
- }
- }
-
- public void assertRootsAbsent(String... labels) throws UiObjectNotFoundException {
- List<String> unexpected = new ArrayList<>();
- for (String label : labels) {
- if (findRoot(label).exists()) {
- unexpected.add(label);
- }
- }
- if (!unexpected.isEmpty()) {
- Assert.fail("Unexpected roots " + unexpected);
- }
- }
-
- public void assertHasFocus() {
- assertHasFocus(ROOTS_LIST_ID);
- }
-}
diff --git a/packages/DocumentsUI/tests/src/com/android/documentsui/bots/SearchBot.java b/packages/DocumentsUI/tests/src/com/android/documentsui/bots/SearchBot.java
deleted file mode 100644
index 66be677..0000000
--- a/packages/DocumentsUI/tests/src/com/android/documentsui/bots/SearchBot.java
+++ /dev/null
@@ -1,124 +0,0 @@
-/*
- * Copyright (C) 2016 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 static android.support.test.espresso.Espresso.onView;
-import static android.support.test.espresso.action.ViewActions.typeText;
-import static android.support.test.espresso.matcher.ViewMatchers.hasDescendant;
-import static android.support.test.espresso.matcher.ViewMatchers.isClickable;
-import static android.support.test.espresso.matcher.ViewMatchers.isDisplayed;
-import static android.support.test.espresso.matcher.ViewMatchers.withId;
-import static junit.framework.Assert.assertEquals;
-import static junit.framework.Assert.assertFalse;
-import static junit.framework.Assert.assertTrue;
-import static org.hamcrest.CoreMatchers.allOf;
-import static org.hamcrest.CoreMatchers.anyOf;
-
-import android.content.Context;
-import android.support.test.uiautomator.UiDevice;
-import android.support.test.uiautomator.UiObject;
-import android.support.test.uiautomator.UiObjectNotFoundException;
-import android.support.v7.recyclerview.R;
-import android.view.View;
-
-import org.hamcrest.Matcher;
-
-/**
- * A test helper class that provides support for controlling the search UI
- * programmatically, and making assertions against the state of the UI.
- * <p>
- * Support for working directly with Roots and Directory view can be found in the respective bots.
- */
-public class SearchBot extends Bots.BaseBot {
-
- public static final String TARGET_PKG = "com.android.documentsui";
-
- // Dumb search layout changes substantially between Ryu and Angler.
- @SuppressWarnings("unchecked")
- private static final Matcher<View> SEARCH_WIDGET = allOf(
- withId(R.id.menu_search),
- anyOf(isClickable(), hasDescendant(isClickable())));
-
- // Note that input is visible when the clicky button is not
- // present. So to clearly qualify the two...we explicitly
- // require this input be not clickable.
- @SuppressWarnings("unchecked")
- private static final Matcher<View> SEARCH_INPUT = allOf(
- withId(R.id.menu_search),
- isDisplayed());
-
- public SearchBot(UiDevice device, Context context, int timeout) {
- super(device, context, timeout);
- }
-
- public void clickIcon() throws UiObjectNotFoundException {
- UiObject searchView = findSearchView();
- searchView.click();
- assertTrue(searchView.exists());
- }
-
- public void setInputText(String query) throws UiObjectNotFoundException {
- onView(SEARCH_INPUT).perform(typeText(query));
- }
-
- public void assertIconVisible(boolean visible) {
- if (visible) {
- assertTrue(
- "Search icon should be visible.",
- Matchers.present(SEARCH_WIDGET));
- } else {
- assertFalse(
- "Search icon should not be visible.",
- Matchers.present(SEARCH_WIDGET));
- }
- }
-
- public void assertInputEquals(String query)
- throws UiObjectNotFoundException {
- UiObject textField = findSearchViewTextField();
-
- assertTrue(textField.exists());
- assertEquals(query, textField.getText());
- }
-
- public void assertInputFocused(boolean focused)
- throws UiObjectNotFoundException {
- UiObject textField = findSearchViewTextField();
-
- assertTrue(textField.exists());
- assertEquals(focused, textField.isFocused());
- }
-
- public void assertInputExists(boolean exists)
- throws UiObjectNotFoundException {
- assertEquals(exists, findSearchViewTextField().exists());
- }
-
- private UiObject findSearchView() {
- return findObject("com.android.documentsui:id/menu_search");
- }
-
- private UiObject findSearchViewTextField() {
- return findObject("com.android.documentsui:id/menu_search", "android:id/search_src_text");
- }
-
- private UiObject findSearchViewIcon() {
- return mContext.getResources().getBoolean(R.bool.full_bar_search_view)
- ? findObject("com.android.documentsui:id/menu_search")
- : findObject("com.android.documentsui:id/menu_search", "android:id/search_button");
- }
-}
diff --git a/packages/DocumentsUI/tests/src/com/android/documentsui/bots/UiBot.java b/packages/DocumentsUI/tests/src/com/android/documentsui/bots/UiBot.java
deleted file mode 100644
index d1b73e2..0000000
--- a/packages/DocumentsUI/tests/src/com/android/documentsui/bots/UiBot.java
+++ /dev/null
@@ -1,248 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.documentsui.bots;
-
-import static android.support.test.espresso.Espresso.onView;
-import static android.support.test.espresso.action.ViewActions.click;
-import static android.support.test.espresso.assertion.ViewAssertions.matches;
-import static android.support.test.espresso.matcher.ViewMatchers.isAssignableFrom;
-import static android.support.test.espresso.matcher.ViewMatchers.withClassName;
-import static android.support.test.espresso.matcher.ViewMatchers.withId;
-import static android.support.test.espresso.matcher.ViewMatchers.withText;
-import static junit.framework.Assert.assertEquals;
-import static junit.framework.Assert.assertNotNull;
-import static org.hamcrest.CoreMatchers.allOf;
-import static org.hamcrest.CoreMatchers.is;
-import static org.hamcrest.Matchers.endsWith;
-
-import android.content.Context;
-import android.support.test.espresso.Espresso;
-import android.support.test.espresso.action.ViewActions;
-import android.support.test.espresso.matcher.BoundedMatcher;
-import android.support.test.espresso.matcher.ViewMatchers;
-import android.support.test.uiautomator.By;
-import android.support.test.uiautomator.UiDevice;
-import android.support.test.uiautomator.UiObject;
-import android.support.test.uiautomator.UiObject2;
-import android.support.test.uiautomator.UiObjectNotFoundException;
-import android.support.test.uiautomator.UiSelector;
-import android.util.TypedValue;
-import android.view.View;
-import android.widget.Toolbar;
-
-import com.android.documentsui.R;
-
-import org.hamcrest.Description;
-import org.hamcrest.Matcher;
-
-import java.util.Iterator;
-import java.util.List;
-
-/**
- * A test helper class that provides support for controlling DocumentsUI activities
- * programmatically, and making assertions against the state of the UI.
- * <p>
- * Support for working directly with Roots and Directory view can be found in the respective bots.
- */
-public class UiBot extends Bots.BaseBot {
-
- public static final String TARGET_PKG = "com.android.documentsui";
-
- @SuppressWarnings("unchecked")
- private static final Matcher<View> TOOLBAR = allOf(
- isAssignableFrom(Toolbar.class),
- withId(R.id.toolbar));
-
- @SuppressWarnings("unchecked")
- private static final Matcher<View> ACTIONBAR = allOf(
- withClassName(endsWith("ActionBarContextView")));
-
- @SuppressWarnings("unchecked")
- private static final Matcher<View> TEXT_ENTRY = allOf(
- withClassName(endsWith("EditText")));
-
- @SuppressWarnings("unchecked")
- private static final Matcher<View> TOOLBAR_OVERFLOW = allOf(
- withClassName(endsWith("OverflowMenuButton")),
- ViewMatchers.isDescendantOfA(TOOLBAR));
-
- @SuppressWarnings("unchecked")
- private static final Matcher<View> ACTIONBAR_OVERFLOW = allOf(
- withClassName(endsWith("OverflowMenuButton")),
- ViewMatchers.isDescendantOfA(ACTIONBAR));
-
- public UiBot(UiDevice device, Context context, int timeout) {
- super(device, context, timeout);
- }
-
- public void assertWindowTitle(String expected) {
- onView(TOOLBAR)
- .check(matches(withToolbarTitle(is(expected))));
- }
-
- public void assertMenuEnabled(int id, boolean enabled) {
- UiObject2 menu = findMenuWithName(mContext.getString(id));
- assertNotNull(menu);
- assertEquals(enabled, menu.isEnabled());
- }
-
- public void assertInActionMode(boolean inActionMode) {
- UiObject actionModeBar = findActionModeBar();
- assertEquals(inActionMode, actionModeBar.exists());
- }
-
- public UiObject openOverflowMenu() throws UiObjectNotFoundException {
- UiObject obj = findMenuMoreOptions();
- obj.click();
- mDevice.waitForIdle(mTimeout);
- return obj;
- }
-
- public void setDialogText(String text) throws UiObjectNotFoundException {
- onView(TEXT_ENTRY)
- .perform(ViewActions.replaceText(text));
- }
-
- public boolean inFixedLayout() {
- TypedValue val = new TypedValue();
- // We alias files_activity to either fixed or drawer layouts based
- // on screen dimensions. In order to determine which layout
- // has been selected, we check the resolved value.
- mContext.getResources().getValue(R.layout.files_activity, val, true);
- return val.resourceId == R.layout.fixed_layout;
- }
-
- public boolean inDrawerLayout() {
- return !inFixedLayout();
- }
-
- void switchViewMode() {
- UiObject2 mode = menuGridMode();
- if (mode != null) {
- mode.click();
- } else {
- menuListMode().click();
- }
- }
-
- UiObject2 menuGridMode() {
- // Note that we're using By.desc rather than By.res, because of b/25285770
- return find(By.desc("Grid view"));
- }
-
- UiObject2 menuListMode() {
- // Note that we're using By.desc rather than By.res, because of b/25285770
- return find(By.desc("List view"));
- }
-
- public void clickToolbarItem(int id) {
- onView(withId(id)).perform(click());
- }
-
- public void clickNewFolder() {
- onView(ACTIONBAR_OVERFLOW).perform(click());
-
- // Click the item by label, since Espresso doesn't support lookup by id on overflow.
- onView(withText("New folder")).perform(click());
- }
-
- public void clickActionbarOverflowItem(String label) {
- onView(ACTIONBAR_OVERFLOW).perform(click());
- // Click the item by label, since Espresso doesn't support lookup by id on overflow.
- onView(withText(label)).perform(click());
- }
-
- public void clickToolbarOverflowItem(String label) {
- onView(TOOLBAR_OVERFLOW).perform(click());
- // Click the item by label, since Espresso doesn't support lookup by id on overflow.
- onView(withText(label)).perform(click());
- }
-
- UiObject findActionModeBar() {
- UiObject bar = findObject("android:id/action_mode_bar");
- bar.waitForExists(mTimeout);
- return bar;
- }
-
- public UiObject findDownloadRetryDialog() {
- UiSelector selector = new UiSelector().text("Couldn't download");
- UiObject title = mDevice.findObject(selector);
- title.waitForExists(mTimeout);
- return title;
- }
-
- public void clickDialogOkButton() {
- // Espresso has flaky results when keyboard shows up, so hiding it for now
- // before trying to click on any dialog button
- Espresso.closeSoftKeyboard();
- onView(withId(android.R.id.button1)).perform(click());
- }
-
- public void clickDialogCancelButton() throws UiObjectNotFoundException {
- // Espresso has flaky results when keyboard shows up, so hiding it for now
- // before trying to click on any dialog button
- Espresso.closeSoftKeyboard();
- onView(withId(android.R.id.button2)).perform(click());
- }
-
- UiObject findMenuLabelWithName(String label) {
- UiSelector selector = new UiSelector().text(label);
- return mDevice.findObject(selector);
- }
-
- UiObject2 findMenuWithName(String label) {
- List<UiObject2> menuItems = mDevice.findObjects(By.clazz("android.widget.LinearLayout"));
- Iterator<UiObject2> it = menuItems.iterator();
-
- UiObject2 menuItem = null;
- while (it.hasNext()) {
- menuItem = it.next();
- UiObject2 text = menuItem.findObject(By.text(label));
- if (text != null) {
- break;
- }
- }
- return menuItem;
- }
-
- boolean hasMenuWithName(String label) {
- return findMenuWithName(label) != null;
- }
-
- UiObject findMenuMoreOptions() {
- UiSelector selector = new UiSelector().className("android.widget.ImageButton")
- .descriptionContains("More options");
- // TODO: use the system string ? android.R.string.action_menu_overflow_description
- return mDevice.findObject(selector);
- }
-
- private static Matcher<Object> withToolbarTitle(
- final Matcher<CharSequence> textMatcher) {
- return new BoundedMatcher<Object, Toolbar>(Toolbar.class) {
- @Override
- public boolean matchesSafely(Toolbar toolbar) {
- return textMatcher.matches(toolbar.getTitle());
- }
-
- @Override
- public void describeTo(Description description) {
- description.appendText("with toolbar title: ");
- textMatcher.describeTo(description);
- }
- };
- }
-}
diff --git a/packages/DocumentsUI/tests/src/com/android/documentsui/clipping/ClipStorageTest.java b/packages/DocumentsUI/tests/src/com/android/documentsui/clipping/ClipStorageTest.java
deleted file mode 100644
index 73366f8..0000000
--- a/packages/DocumentsUI/tests/src/com/android/documentsui/clipping/ClipStorageTest.java
+++ /dev/null
@@ -1,159 +0,0 @@
-/*
- * Copyright (C) 2016 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.clipping;
-
-import static com.android.documentsui.clipping.ClipStorage.NUM_OF_SLOTS;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-
-import android.content.SharedPreferences;
-import android.net.Uri;
-import android.os.AsyncTask;
-import android.support.test.InstrumentationRegistry;
-import android.support.test.filters.SmallTest;
-import android.support.test.runner.AndroidJUnit4;
-
-import com.android.documentsui.testing.TestScheduledExecutorService;
-
-import org.junit.AfterClass;
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.TemporaryFolder;
-import org.junit.runner.RunWith;
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-@RunWith(AndroidJUnit4.class)
-@SmallTest
-public class ClipStorageTest {
- private static final String PREF_NAME = "pref";
- private static final List<Uri> TEST_URIS = createList(
- "content://ham/fancy",
- "content://poodle/monkey/giraffe");
-
- @Rule
- public TemporaryFolder folder = new TemporaryFolder();
-
- private SharedPreferences mPref;
- private TestScheduledExecutorService mExecutor;
- private ClipStorage mStorage;
-
- private int mTag;
-
- @Before
- public void setUp() {
- mPref = InstrumentationRegistry.getContext().getSharedPreferences(PREF_NAME, 0);
- File clipDir = ClipStorage.prepareStorage(folder.getRoot());
- mStorage = new ClipStorage(clipDir, mPref);
-
- mExecutor = new TestScheduledExecutorService();
- AsyncTask.setDefaultExecutor(mExecutor);
-
- mTag = mStorage.claimStorageSlot();
- }
-
- @AfterClass
- public static void tearDownOnce() {
- AsyncTask.setDefaultExecutor(AsyncTask.SERIAL_EXECUTOR);
- }
-
- @Test
- public void testWrite() throws Exception {
- writeAll(mTag, TEST_URIS);
- }
-
- @Test
- public void testRead() throws Exception {
- writeAll(mTag, TEST_URIS);
- List<Uri> uris = new ArrayList<>();
-
- File copy = mStorage.getFile(mTag);
- try(ClipStorageReader provider = mStorage.createReader(copy)) {
- for (Uri uri : provider) {
- uris.add(uri);
- }
- }
- assertEquals(TEST_URIS, uris);
- }
-
- @Test
- public void testClaimStorageSlot_NoAvailableSlot() throws Exception {
- int firstTag = mStorage.claimStorageSlot();
- writeAll(firstTag, TEST_URIS);
- mStorage.getFile(firstTag);
- for (int i = 0; i < NUM_OF_SLOTS - 1; ++i) {
- int tag = mStorage.claimStorageSlot();
- writeAll(tag, TEST_URIS);
- mStorage.getFile(tag);
- }
-
- assertEquals(firstTag, mStorage.claimStorageSlot());
- }
-
- @Test
- public void testReadConcurrently() throws Exception {
- writeAll(mTag, TEST_URIS);
- List<Uri> uris = new ArrayList<>();
- List<Uri> uris2 = new ArrayList<>();
-
- File copy = mStorage.getFile(mTag);
- File copy2 = mStorage.getFile(mTag);
- try(ClipStorageReader reader = mStorage.createReader(copy)) {
- try(ClipStorageReader reader2 = mStorage.createReader(copy2)){
- Iterator<Uri> iter = reader.iterator();
- Iterator<Uri> iter2 = reader2.iterator();
-
- while (iter.hasNext() && iter2.hasNext()) {
- uris.add(iter.next());
- uris2.add(iter2.next());
- }
-
- assertFalse(iter.hasNext());
- assertFalse(iter2.hasNext());
- }
- }
- assertEquals(TEST_URIS, uris);
- assertEquals(TEST_URIS, uris2);
- }
-
- @Test
- public void testPrepareStorage_CreatesDir() throws Exception {
- File clipDir = ClipStorage.prepareStorage(folder.getRoot());
- assertTrue(clipDir.exists());
- assertTrue(clipDir.isDirectory());
- assertFalse(clipDir.equals(folder.getRoot()));
- }
-
- private void writeAll(int tag, List<Uri> uris) {
- new ClipStorage.PersistTask(mStorage, uris, tag).execute();
- mExecutor.runAll();
- }
-
- private static List<Uri> createList(String... values) {
- List<Uri> uris = new ArrayList<>(values.length);
- for (int i = 0; i < values.length; i++) {
- uris.add(i, Uri.parse(values[i]));
- }
- return uris;
- }
-}
diff --git a/packages/DocumentsUI/tests/src/com/android/documentsui/clipping/UrisSupplierTest.java b/packages/DocumentsUI/tests/src/com/android/documentsui/clipping/UrisSupplierTest.java
deleted file mode 100644
index 9815d0e..0000000
--- a/packages/DocumentsUI/tests/src/com/android/documentsui/clipping/UrisSupplierTest.java
+++ /dev/null
@@ -1,150 +0,0 @@
-/*
- * Copyright (C) 2016 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.clipping;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-
-import android.content.SharedPreferences;
-import android.net.Uri;
-import android.os.AsyncTask;
-import android.provider.DocumentsContract;
-import android.support.test.InstrumentationRegistry;
-import android.support.test.filters.MediumTest;
-import android.support.test.runner.AndroidJUnit4;
-
-import com.android.documentsui.Shared;
-import com.android.documentsui.testing.TestScheduledExecutorService;
-
-import org.junit.AfterClass;
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.TemporaryFolder;
-import org.junit.runner.RunWith;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-@RunWith(AndroidJUnit4.class)
-@MediumTest
-public class UrisSupplierTest {
-
- private static final String PREF_NAME = "pref";
- private static final String AUTHORITY = "foo";
- private static final List<Uri> SHORT_URI_LIST = createList(3);
- private static final List<Uri> LONG_URI_LIST = createList(Shared.MAX_DOCS_IN_INTENT + 5);
-
- @Rule
- public TemporaryFolder folder = new TemporaryFolder();
-
- private SharedPreferences mPref;
- private TestScheduledExecutorService mExecutor;
- private ClipStorage mStorage;
-
- @Before
- public void setUp() {
- mExecutor = new TestScheduledExecutorService();
- AsyncTask.setDefaultExecutor(mExecutor);
-
- mPref = InstrumentationRegistry.getContext().getSharedPreferences(PREF_NAME, 0);
- mStorage = new ClipStorage(folder.getRoot(), mPref);
- }
-
- @AfterClass
- public static void tearDownOnce() {
- AsyncTask.setDefaultExecutor(AsyncTask.SERIAL_EXECUTOR);
- }
-
- @Test
- public void testItemCountEquals_shortList() throws Exception {
- UrisSupplier uris = createWithShortList();
-
- assertEquals(SHORT_URI_LIST.size(), uris.getItemCount());
- }
-
- @Test
- public void testItemCountEquals_longList() throws Exception {
- UrisSupplier uris = createWithLongList();
-
- assertEquals(LONG_URI_LIST.size(), uris.getItemCount());
- }
-
- @Test
- public void testGetDocsEquals_shortList() throws Exception {
- UrisSupplier uris = createWithShortList();
-
- assertIterableEquals(SHORT_URI_LIST, uris.getUris(mStorage));
- }
-
- @Test
- public void testGetDocsEquals_longList() throws Exception {
- UrisSupplier uris = createWithLongList();
-
- assertIterableEquals(LONG_URI_LIST, uris.getUris(mStorage));
- }
-
- @Test
- public void testDispose_shortList() throws Exception {
- UrisSupplier uris = createWithShortList();
-
- uris.dispose();
- }
-
- @Test
- public void testDispose_longList() throws Exception {
- UrisSupplier uris = createWithLongList();
-
- uris.dispose();
- }
-
- private UrisSupplier createWithShortList() throws Exception {
- return UrisSupplier.create(SHORT_URI_LIST, mStorage);
- }
-
- private UrisSupplier createWithLongList() throws Exception {
- UrisSupplier uris =
- UrisSupplier.create(LONG_URI_LIST, mStorage);
-
- mExecutor.runAll();
-
- return uris;
- }
-
- private void assertIterableEquals(Iterable<Uri> expected, Iterable<Uri> value) {
- Iterator<Uri> expectedIter = expected.iterator();
- Iterator<Uri> valueIter = value.iterator();
-
- while (expectedIter.hasNext() && valueIter.hasNext()) {
- assertEquals(expectedIter.next(), valueIter.next());
- }
-
- assertFalse(expectedIter.hasNext());
- assertFalse(expectedIter.hasNext());
- }
-
- private static List<Uri> createList(int count) {
- List<Uri> uris = new ArrayList<>(count);
-
- for (int i = 0; i < count; ++i) {
- uris.add(DocumentsContract.buildDocumentUri(AUTHORITY, Integer.toString(i)));
- }
-
- return uris;
- }
-}
diff --git a/packages/DocumentsUI/tests/src/com/android/documentsui/dirlist/BandController_GridModelTest.java b/packages/DocumentsUI/tests/src/com/android/documentsui/dirlist/BandController_GridModelTest.java
deleted file mode 100644
index 59547ad..0000000
--- a/packages/DocumentsUI/tests/src/com/android/documentsui/dirlist/BandController_GridModelTest.java
+++ /dev/null
@@ -1,470 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.documentsui.dirlist;
-
-import static com.android.documentsui.dirlist.BandController.GridModel.NOT_SET;
-
-import android.graphics.Point;
-import android.graphics.Rect;
-import android.support.v7.widget.RecyclerView.OnScrollListener;
-import android.test.AndroidTestCase;
-import android.test.suitebuilder.annotation.SmallTest;
-
-import com.android.documentsui.dirlist.BandController.GridModel;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Set;
-
-@SmallTest
-public class BandController_GridModelTest extends AndroidTestCase {
-
- private static final int VIEW_PADDING_PX = 5;
- private static final int CHILD_VIEW_EDGE_PX = 100;
- private static final int VIEWPORT_HEIGHT = 500;
-
- private GridModel model;
- private TestEnvironment env;
- private TestDocumentsAdapter adapter;
- private Set<String> lastSelection;
- private int viewWidth;
-
- // TLDR: Don't call model.{start|resize}Selection; use the local #startSelection and
- // #resizeSelection methods instead.
- //
- // The reason for this is that selection is stateful and involves operations that take the
- // current UI state (e.g scrolling) into account. This test maintains its own copy of the
- // selection bounds as control data for verifying selections. Keep this data in sync by calling
- // #startSelection and
- // #resizeSelection.
- private Point mSelectionOrigin;
- private Point mSelectionPoint;
-
- private void initData(final int numChildren, int numColumns) {
- env = new TestEnvironment(numChildren, numColumns);
- adapter = new TestDocumentsAdapter(new ArrayList<String>()) {
- @Override
- public String getModelId(int position) {
- return Integer.toString(position);
- }
-
- @Override
- public int getItemCount() {
- return numChildren;
- }
- };
-
- viewWidth = VIEW_PADDING_PX + numColumns * (VIEW_PADDING_PX + CHILD_VIEW_EDGE_PX);
- model = new GridModel(env, adapter);
- model.addOnSelectionChangedListener(
- new GridModel.OnSelectionChangedListener() {
- @Override
- public void onSelectionChanged(Set<String> updatedSelection) {
- lastSelection = updatedSelection;
- }
-
- @Override
- public boolean onBeforeItemStateChange(String id, boolean nextState) {
- return true;
- }
- });
- }
-
- @Override
- public void tearDown() {
- model = null;
- env = null;
- lastSelection = null;
- }
-
- public void testSelectionLeftOfItems() {
- initData(20, 5);
- startSelection(new Point(0, 10));
- resizeSelection(new Point(1, 11));
- assertNoSelection();
- assertEquals(NOT_SET, model.getPositionNearestOrigin());
- }
-
- public void testSelectionRightOfItems() {
- initData(20, 4);
- startSelection(new Point(viewWidth - 1, 10));
- resizeSelection(new Point(viewWidth - 2, 11));
- assertNoSelection();
- assertEquals(NOT_SET, model.getPositionNearestOrigin());
- }
-
- public void testSelectionAboveItems() {
- initData(20, 4);
- startSelection(new Point(10, 0));
- resizeSelection(new Point(11, 1));
- assertNoSelection();
- assertEquals(NOT_SET, model.getPositionNearestOrigin());
- }
-
- public void testSelectionBelowItems() {
- initData(5, 4);
- startSelection(new Point(10, VIEWPORT_HEIGHT - 1));
- resizeSelection(new Point(11, VIEWPORT_HEIGHT - 2));
- assertNoSelection();
- assertEquals(NOT_SET, model.getPositionNearestOrigin());
- }
-
- public void testVerticalSelectionBetweenItems() {
- initData(20, 4);
- startSelection(new Point(106, 0));
- resizeSelection(new Point(107, 200));
- assertNoSelection();
- assertEquals(NOT_SET, model.getPositionNearestOrigin());
- }
-
- public void testHorizontalSelectionBetweenItems() {
- initData(20, 4);
- startSelection(new Point(0, 105));
- resizeSelection(new Point(200, 106));
- assertNoSelection();
- assertEquals(NOT_SET, model.getPositionNearestOrigin());
- }
-
- public void testGrowingAndShrinkingSelection() {
- initData(20, 4);
- startSelection(new Point(0, 0));
-
- resizeSelection(new Point(5, 5));
- verifySelection();
-
- resizeSelection(new Point(109, 109));
- verifySelection();
-
- resizeSelection(new Point(110, 109));
- verifySelection();
-
- resizeSelection(new Point(110, 110));
- verifySelection();
-
- resizeSelection(new Point(214, 214));
- verifySelection();
-
- resizeSelection(new Point(215, 214));
- verifySelection();
-
- resizeSelection(new Point(214, 214));
- verifySelection();
-
- resizeSelection(new Point(110, 110));
- verifySelection();
-
- resizeSelection(new Point(110, 109));
- verifySelection();
-
- resizeSelection(new Point(109, 109));
- verifySelection();
-
- resizeSelection(new Point(5, 5));
- verifySelection();
-
- resizeSelection(new Point(0, 0));
- verifySelection();
-
- assertEquals(NOT_SET, model.getPositionNearestOrigin());
- }
-
- public void testSelectionMovingAroundOrigin() {
- initData(16, 4);
-
- startSelection(new Point(210, 210));
- resizeSelection(new Point(viewWidth - 1, 0));
- verifySelection();
-
- resizeSelection(new Point(0, 0));
- verifySelection();
-
- resizeSelection(new Point(0, 420));
- verifySelection();
-
- resizeSelection(new Point(viewWidth - 1, 420));
- verifySelection();
-
- // This is manually figured and will need to be adjusted if the separator position is
- // changed.
- assertEquals(7, model.getPositionNearestOrigin());
- }
-
- public void testScrollingBandSelect() {
- initData(40, 4);
-
- startSelection(new Point(0, 0));
- resizeSelection(new Point(100, VIEWPORT_HEIGHT - 1));
- verifySelection();
-
- scroll(CHILD_VIEW_EDGE_PX);
- verifySelection();
-
- resizeSelection(new Point(200, VIEWPORT_HEIGHT - 1));
- verifySelection();
-
- scroll(CHILD_VIEW_EDGE_PX);
- verifySelection();
-
- scroll(-2 * CHILD_VIEW_EDGE_PX);
- verifySelection();
-
- resizeSelection(new Point(100, VIEWPORT_HEIGHT - 1));
- verifySelection();
-
- assertEquals(0, model.getPositionNearestOrigin());
- }
-
- /** Returns the current selection area as a Rect. */
- private Rect getSelectionArea() {
- // Construct a rect from the two selection points.
- Rect selectionArea = new Rect(
- mSelectionOrigin.x, mSelectionOrigin.y, mSelectionOrigin.x, mSelectionOrigin.y);
- selectionArea.union(mSelectionPoint.x, mSelectionPoint.y);
- // Rect intersection tests are exclusive of bounds, while the MSM's selection code is
- // inclusive. Expand the rect by 1 pixel in all directions to account for this.
- selectionArea.inset(-1, -1);
-
- return selectionArea;
- }
-
- /** Asserts that the selection is currently empty. */
- private void assertNoSelection() {
- assertEquals("Unexpected items " + lastSelection + " in selection " + getSelectionArea(),
- 0, lastSelection.size());
- }
-
- /** Verifies the selection using actual bbox checks. */
- private void verifySelection() {
- Rect selectionArea = getSelectionArea();
- for (TestEnvironment.Item item: env.items) {
- if (Rect.intersects(selectionArea, item.rect)) {
- assertTrue("Expected item " + item + " was not in selection " + selectionArea,
- lastSelection.contains(item.name));
- } else {
- assertFalse("Unexpected item " + item + " in selection" + selectionArea,
- lastSelection.contains(item.name));
- }
- }
- }
-
- private void startSelection(Point p) {
- model.startSelection(p);
- mSelectionOrigin = env.createAbsolutePoint(p);
- }
-
- private void resizeSelection(Point p) {
- model.resizeSelection(p);
- mSelectionPoint = env.createAbsolutePoint(p);
- }
-
- private void scroll(int dy) {
- assertTrue(env.verticalOffset + VIEWPORT_HEIGHT + dy <= env.getTotalHeight());
- env.verticalOffset += dy;
- // Correct the cached selection point as well.
- mSelectionPoint.y += dy;
- model.onScrolled(null, 0, dy);
- }
-
- private static final class TestEnvironment implements BandController.SelectionEnvironment {
-
- private final int mNumColumns;
- private final int mNumRows;
- private final int mNumChildren;
- private final int mSeparatorPosition;
-
- public int horizontalOffset = 0;
- public int verticalOffset = 0;
- private List<Item> items = new ArrayList<>();
-
- public TestEnvironment(int numChildren, int numColumns) {
- mNumChildren = numChildren;
- mNumColumns = numColumns;
- mSeparatorPosition = mNumColumns + 1;
- mNumRows = setupGrid();
- }
-
- private int setupGrid() {
- // Split the input set into folders and documents. Do this such that there is a
- // partially-populated row in the middle of the grid, to test corner cases in layout
- // code.
- int y = VIEW_PADDING_PX;
- int i = 0;
- int numRows = 0;
- while (i < mNumChildren) {
- int top = y;
- int height = CHILD_VIEW_EDGE_PX;
- int width = CHILD_VIEW_EDGE_PX;
- for (int j = 0; j < mNumColumns && i < mNumChildren; j++) {
- int left = VIEW_PADDING_PX + (j * (width + VIEW_PADDING_PX));
- items.add(new Item(
- Integer.toString(i),
- new Rect(
- left,
- top,
- left + width - 1,
- top + height - 1)));
-
- // Create a partially populated row at the separator position.
- if (++i == mSeparatorPosition) {
- break;
- }
- }
- y += height + VIEW_PADDING_PX;
- numRows++;
- }
-
- return numRows;
- }
-
- private int getTotalHeight() {
- return CHILD_VIEW_EDGE_PX * mNumRows + VIEW_PADDING_PX * (mNumRows + 1);
- }
-
- private int getFirstVisibleRowIndex() {
- return verticalOffset / (CHILD_VIEW_EDGE_PX + VIEW_PADDING_PX);
- }
-
- private int getLastVisibleRowIndex() {
- int lastVisibleRowUncapped =
- (VIEWPORT_HEIGHT + verticalOffset - 1) / (CHILD_VIEW_EDGE_PX + VIEW_PADDING_PX);
- return Math.min(lastVisibleRowUncapped, mNumRows - 1);
- }
-
- private int getNumItemsInRow(int index) {
- assertTrue(index >= 0 && index < mNumRows);
- int mod = mSeparatorPosition % mNumColumns;
- if (index == (mSeparatorPosition / mNumColumns)) {
- // The row containing the separator may be incomplete
- return mod > 0 ? mod : mNumColumns;
- }
- // Account for the partial separator row in the final row tally.
- if (index == mNumRows - 1) {
- // The last row may be incomplete
- int finalRowCount = (mNumChildren - mod) % mNumColumns;
- return finalRowCount > 0 ? finalRowCount : mNumColumns;
- }
-
- return mNumColumns;
- }
-
- @Override
- public void addOnScrollListener(OnScrollListener listener) {}
-
- @Override
- public void removeOnScrollListener(OnScrollListener listener) {}
-
- @Override
- public Point createAbsolutePoint(Point relativePoint) {
- return new Point(
- relativePoint.x + horizontalOffset, relativePoint.y + verticalOffset);
- }
-
- @Override
- public int getVisibleChildCount() {
- int childCount = 0;
- for (int i = getFirstVisibleRowIndex(); i <= getLastVisibleRowIndex(); i++) {
- childCount += getNumItemsInRow(i);
- }
- return childCount;
- }
-
- @Override
- public int getAdapterPositionAt(int index) {
- // Account for partial rows by actually tallying up the items in hidden rows.
- int hiddenCount = 0;
- for (int i = 0; i < getFirstVisibleRowIndex(); i++) {
- hiddenCount += getNumItemsInRow(i);
- }
- return index + hiddenCount;
- }
-
- @Override
- public Rect getAbsoluteRectForChildViewAt(int index) {
- int adapterPosition = getAdapterPositionAt(index);
- return items.get(adapterPosition).rect;
- }
-
- @Override
- public int getChildCount() {
- return mNumChildren;
- }
-
- @Override
- public int getColumnCount() {
- return mNumColumns;
- }
-
- @Override
- public void showBand(Rect rect) {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public void hideBand() {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public void scrollBy(int dy) {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public int getHeight() {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public void invalidateView() {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public void runAtNextFrame(Runnable r) {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public void removeCallback(Runnable r) {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public boolean isLayoutItem(int adapterPosition) {
- return false;
- }
-
- @Override
- public boolean hasView(int adapterPosition) {
- return true;
- }
-
- public static final class Item {
- public String name;
- public Rect rect;
-
- public Item(String n, Rect r) {
- name = n;
- rect = r;
- }
-
- public String toString() {
- return name + ": " + rect;
- }
- }
- }
-}
diff --git a/packages/DocumentsUI/tests/src/com/android/documentsui/dirlist/DocumentHolderTest.java b/packages/DocumentsUI/tests/src/com/android/documentsui/dirlist/DocumentHolderTest.java
deleted file mode 100644
index 949f6b7..0000000
--- a/packages/DocumentsUI/tests/src/com/android/documentsui/dirlist/DocumentHolderTest.java
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
- * Copyright (C) 2016 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.dirlist;
-
-import android.content.Context;
-import android.database.Cursor;
-import android.graphics.Rect;
-import android.os.SystemClock;
-import android.support.test.filters.Suppress;
-import android.test.AndroidTestCase;
-import android.test.suitebuilder.annotation.SmallTest;
-import android.view.KeyEvent;
-import android.view.LayoutInflater;
-import android.view.MotionEvent;
-import android.view.MotionEvent.PointerCoords;
-import android.view.MotionEvent.PointerProperties;
-
-import com.android.documentsui.R;
-import com.android.documentsui.State;
-
-@SmallTest
-public class DocumentHolderTest extends AndroidTestCase {
-
- DocumentHolder mHolder;
- TestListener mListener;
-
- @Override
- public void setUp() throws Exception {
- Context context = getContext();
- LayoutInflater inflater = LayoutInflater.from(context);
- mHolder = new DocumentHolder(getContext(), inflater.inflate(R.layout.item_doc_list, null)) {
- @Override
- public void bind(Cursor cursor, String modelId, State state) {}
- };
-
- mListener = new TestListener();
- mHolder.addKeyEventListener(mListener);
-
- mHolder.itemView.requestLayout();
- mHolder.itemView.invalidate();
- }
-
- @Suppress
- public void testIsInSelectionHotspot() {
- fail();
- }
-
- @Suppress
- public void testDelegatesKeyEvents() {
- fail();
- }
-
- public MotionEvent createEvent(int tooltype) {
- long time = SystemClock.uptimeMillis();
-
- PointerProperties properties[] = new PointerProperties[] {
- new PointerProperties()
- };
- properties[0].toolType = tooltype;
-
- PointerCoords coords[] = new PointerCoords[] {
- new PointerCoords()
- };
-
- Rect rect = new Rect();
- mHolder.itemView.getHitRect(rect);
- coords[0].x = rect.left;
- coords[0].y = rect.top;
-
- return MotionEvent.obtain(
- time, // down time
- time, // event time
- MotionEvent.ACTION_UP, // action
- 1, // pointer count
- properties, // pointer properties
- coords, // pointer coords
- 0, // metastate
- 0, // button state
- 0, // xprecision
- 0, // yprecision
- 0, // deviceid
- 0, // edgeflags
- 0, // source
- 0 // flags
- );
- }
-
- private class TestListener implements DocumentHolder.KeyboardEventListener {
- @Override
- public boolean onKey(DocumentHolder doc, int keyCode, KeyEvent event) {
- return false;
- }
-
- }
-}
diff --git a/packages/DocumentsUI/tests/src/com/android/documentsui/dirlist/ModelBackedDocumentsAdapterTest.java b/packages/DocumentsUI/tests/src/com/android/documentsui/dirlist/ModelBackedDocumentsAdapterTest.java
deleted file mode 100644
index 236621f..0000000
--- a/packages/DocumentsUI/tests/src/com/android/documentsui/dirlist/ModelBackedDocumentsAdapterTest.java
+++ /dev/null
@@ -1,122 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.documentsui.dirlist;
-
-import android.content.Context;
-import android.database.Cursor;
-import android.support.v7.widget.RecyclerView;
-import android.test.AndroidTestCase;
-import android.test.suitebuilder.annotation.SmallTest;
-import android.view.ViewGroup;
-
-import com.android.documentsui.State;
-
-@SmallTest
-public class ModelBackedDocumentsAdapterTest extends AndroidTestCase {
-
- private static final String AUTHORITY = "test_authority";
- private static final String[] NAMES = new String[] {
- "4",
- "foo",
- "1",
- "bar",
- "*(Ljifl;a",
- "0",
- "baz",
- "2",
- "3",
- "%$%VD"
- };
-
- private TestModel mModel;
- private ModelBackedDocumentsAdapter mAdapter;
-
- public void setUp() {
-
- final Context testContext = TestContext.createStorageTestContext(getContext(), AUTHORITY);
- mModel = new TestModel(AUTHORITY);
- mModel.update(NAMES);
-
- DocumentsAdapter.Environment env = new TestEnvironment(testContext);
-
- mAdapter = new ModelBackedDocumentsAdapter(
- env, new IconHelper(testContext, State.MODE_GRID));
- mAdapter.onModelUpdate(mModel);
- }
-
- // Tests that the item count is correct.
- public void testItemCount() {
- assertEquals(mModel.getItemCount(), mAdapter.getItemCount());
- }
-
- private final class TestEnvironment implements DocumentsAdapter.Environment {
- private final Context testContext;
-
- private TestEnvironment(Context testContext) {
- this.testContext = testContext;
- }
-
- @Override
- public boolean isSelected(String id) {
- return false;
- }
-
- @Override
- public boolean isDocumentEnabled(String mimeType, int flags) {
- return true;
- }
-
- @Override
- public void initDocumentHolder(DocumentHolder holder) {}
-
- @Override
- public Model getModel() {
- return mModel;
- }
-
- @Override
- public State getDisplayState() {
- return null;
- }
-
- @Override
- public Context getContext() {
- return testContext;
- }
-
- @Override
- public int getColumnCount() {
- return 4;
- }
-
- @Override
- public void onBindDocumentHolder(DocumentHolder holder, Cursor cursor) {}
- }
-
- private static class DummyListener implements Model.UpdateListener {
- public void onModelUpdate(Model model) {}
- public void onModelUpdateFailed(Exception e) {}
- }
-
- private static class DummyAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
- public int getItemCount() { return 0; }
- public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {}
- public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
- return null;
- }
- }
-}
diff --git a/packages/DocumentsUI/tests/src/com/android/documentsui/dirlist/ModelTest.java b/packages/DocumentsUI/tests/src/com/android/documentsui/dirlist/ModelTest.java
deleted file mode 100644
index b816287..0000000
--- a/packages/DocumentsUI/tests/src/com/android/documentsui/dirlist/ModelTest.java
+++ /dev/null
@@ -1,337 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.documentsui.dirlist;
-
-import android.content.ContentResolver;
-import android.content.Context;
-import android.content.ContextWrapper;
-import android.database.Cursor;
-import android.database.MatrixCursor;
-import android.database.MergeCursor;
-import android.provider.DocumentsContract.Document;
-import android.test.AndroidTestCase;
-import android.test.mock.MockContentResolver;
-import android.test.suitebuilder.annotation.SmallTest;
-
-import com.android.documentsui.DirectoryResult;
-import com.android.documentsui.RootCursorWrapper;
-import com.android.documentsui.Shared;
-import com.android.documentsui.State;
-import com.android.documentsui.dirlist.MultiSelectManager.Selection;
-import com.android.documentsui.model.DocumentInfo;
-
-import java.util.ArrayList;
-import java.util.BitSet;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Random;
-import java.util.Set;
-
-@SmallTest
-public class ModelTest extends AndroidTestCase {
-
- private static final int ITEM_COUNT = 10;
- private static final String AUTHORITY = "test_authority";
-
- private static final String[] COLUMNS = new String[]{
- RootCursorWrapper.COLUMN_AUTHORITY,
- Document.COLUMN_DOCUMENT_ID,
- Document.COLUMN_FLAGS,
- Document.COLUMN_DISPLAY_NAME,
- Document.COLUMN_SIZE,
- Document.COLUMN_LAST_MODIFIED,
- Document.COLUMN_MIME_TYPE
- };
-
- private static final String[] NAMES = new String[] {
- "4",
- "foo",
- "1",
- "bar",
- "*(Ljifl;a",
- "0",
- "baz",
- "2",
- "3",
- "%$%VD"
- };
-
- private Cursor cursor;
- private Context context;
- private Model model;
- private TestContentProvider provider;
-
- public void setUp() {
- setupTestContext();
-
- Random rand = new Random();
-
- MatrixCursor c = new MatrixCursor(COLUMNS);
- for (int i = 0; i < ITEM_COUNT; ++i) {
- MatrixCursor.RowBuilder row = c.newRow();
- row.add(RootCursorWrapper.COLUMN_AUTHORITY, AUTHORITY);
- row.add(Document.COLUMN_DOCUMENT_ID, Integer.toString(i));
- row.add(Document.COLUMN_FLAGS, Document.FLAG_SUPPORTS_DELETE);
- // Generate random document names and sizes. This forces the model's internal sort code
- // to actually do something.
- row.add(Document.COLUMN_DISPLAY_NAME, NAMES[i]);
- row.add(Document.COLUMN_SIZE, rand.nextInt());
- }
- cursor = c;
-
- DirectoryResult r = new DirectoryResult();
- r.cursor = cursor;
-
- // Instantiate the model with a dummy view adapter and listener that (for now) do nothing.
- model = new Model();
- model.addUpdateListener(new DummyListener());
- model.update(r);
- }
-
- // Tests that the model is properly emptied out after a null update.
- public void testNullUpdate() {
- model.update(null);
-
- assertTrue(model.isEmpty());
- assertEquals(0, model.getItemCount());
- assertEquals(0, model.getModelIds().length);
- }
-
- // Tests that the item count is correct.
- public void testItemCount() {
- assertEquals(ITEM_COUNT, model.getItemCount());
- }
-
- // Tests multiple authorities with clashing document IDs.
- public void testModelIdIsUnique() {
- MatrixCursor cIn1 = new MatrixCursor(COLUMNS);
- MatrixCursor cIn2 = new MatrixCursor(COLUMNS);
-
- // Make two sets of items with the same IDs, under different authorities.
- final String AUTHORITY0 = "auth0";
- final String AUTHORITY1 = "auth1";
-
- for (int i = 0; i < ITEM_COUNT; ++i) {
- MatrixCursor.RowBuilder row0 = cIn1.newRow();
- row0.add(RootCursorWrapper.COLUMN_AUTHORITY, AUTHORITY0);
- row0.add(Document.COLUMN_DOCUMENT_ID, Integer.toString(i));
-
- MatrixCursor.RowBuilder row1 = cIn2.newRow();
- row1.add(RootCursorWrapper.COLUMN_AUTHORITY, AUTHORITY1);
- row1.add(Document.COLUMN_DOCUMENT_ID, Integer.toString(i));
- }
-
- Cursor cIn = new MergeCursor(new Cursor[] { cIn1, cIn2 });
-
- // Update the model, then make sure it contains all the expected items.
- DirectoryResult r = new DirectoryResult();
- r.cursor = cIn;
- model.update(r);
-
- assertEquals(ITEM_COUNT * 2, model.getItemCount());
- BitSet b0 = new BitSet(ITEM_COUNT);
- BitSet b1 = new BitSet(ITEM_COUNT);
-
- for (String id: model.getModelIds()) {
- Cursor cOut = model.getItem(id);
- String authority =
- DocumentInfo.getCursorString(cOut, RootCursorWrapper.COLUMN_AUTHORITY);
- String docId = DocumentInfo.getCursorString(cOut, Document.COLUMN_DOCUMENT_ID);
-
- switch (authority) {
- case AUTHORITY0:
- b0.set(Integer.parseInt(docId));
- break;
- case AUTHORITY1:
- b1.set(Integer.parseInt(docId));
- break;
- default:
- fail("Unrecognized authority string");
- }
- }
-
- assertEquals(ITEM_COUNT, b0.cardinality());
- assertEquals(ITEM_COUNT, b1.cardinality());
- }
-
- // Tests the base case for Model.getItem.
- public void testGetItem() {
- String[] ids = model.getModelIds();
- assertEquals(ITEM_COUNT, ids.length);
- for (int i = 0; i < ITEM_COUNT; ++i) {
- Cursor c = model.getItem(ids[i]);
- assertEquals(i, c.getPosition());
- }
- }
-
- // Tests sorting by item name.
- public void testSort_names() {
- BitSet seen = new BitSet(ITEM_COUNT);
- List<String> names = new ArrayList<>();
-
- DirectoryResult r = new DirectoryResult();
- r.cursor = cursor;
- r.sortOrder = State.SORT_ORDER_DISPLAY_NAME;
- model.update(r);
-
- for (String id: model.getModelIds()) {
- Cursor c = model.getItem(id);
- seen.set(c.getPosition());
- names.add(DocumentInfo.getCursorString(c, Document.COLUMN_DISPLAY_NAME));
- }
-
- assertEquals(ITEM_COUNT, seen.cardinality());
- for (int i = 0; i < names.size()-1; ++i) {
- assertTrue(Shared.compareToIgnoreCaseNullable(names.get(i), names.get(i+1)) <= 0);
- }
- }
-
- // Tests sorting by item size.
- public void testSort_sizes() {
- DirectoryResult r = new DirectoryResult();
- r.cursor = cursor;
- r.sortOrder = State.SORT_ORDER_SIZE;
- model.update(r);
-
- BitSet seen = new BitSet(ITEM_COUNT);
- int previousSize = Integer.MAX_VALUE;
- for (String id: model.getModelIds()) {
- Cursor c = model.getItem(id);
- seen.set(c.getPosition());
- // Check sort order - descending numerical
- int size = DocumentInfo.getCursorInt(c, Document.COLUMN_SIZE);
- assertTrue(previousSize >= size);
- previousSize = size;
- }
- // Check that all items were accounted for.
- assertEquals(ITEM_COUNT, seen.cardinality());
- }
-
- // Tests that directories and files are properly bucketed when sorting by size
- public void testSort_sizesWithBucketing() {
- MatrixCursor c = new MatrixCursor(COLUMNS);
-
- for (int i = 0; i < ITEM_COUNT; ++i) {
- MatrixCursor.RowBuilder row = c.newRow();
- row.add(RootCursorWrapper.COLUMN_AUTHORITY, AUTHORITY);
- row.add(Document.COLUMN_DOCUMENT_ID, Integer.toString(i));
- row.add(Document.COLUMN_SIZE, i);
- // Interleave directories and text files.
- String mimeType =(i % 2 == 0) ? Document.MIME_TYPE_DIR : "text/*";
- row.add(Document.COLUMN_MIME_TYPE, mimeType);
- }
-
- DirectoryResult r = new DirectoryResult();
- r.cursor = c;
- r.sortOrder = State.SORT_ORDER_SIZE;
- model.update(r);
-
- boolean seenAllDirs = false;
- int previousSize = Integer.MAX_VALUE;
- BitSet seen = new BitSet(ITEM_COUNT);
- // Iterate over items in sort order. Once we've encountered a document (i.e. not a
- // directory), all subsequent items must also be documents. That is, all directories are
- // bucketed at the front of the list, sorted by size, followed by documents, sorted by size.
- for (String id: model.getModelIds()) {
- Cursor cOut = model.getItem(id);
- seen.set(cOut.getPosition());
-
- String mimeType = DocumentInfo.getCursorString(cOut, Document.COLUMN_MIME_TYPE);
- if (seenAllDirs) {
- assertFalse(Document.MIME_TYPE_DIR.equals(mimeType));
- } else {
- if (!Document.MIME_TYPE_DIR.equals(mimeType)) {
- seenAllDirs = true;
- // Reset the previous size seen, because documents are bucketed separately by
- // the sort.
- previousSize = Integer.MAX_VALUE;
- }
- }
- // Check sort order - descending numerical
- int size = DocumentInfo.getCursorInt(c, Document.COLUMN_SIZE);
- assertTrue(previousSize >= size);
- previousSize = size;
- }
-
- // Check that all items were accounted for.
- assertEquals(ITEM_COUNT, seen.cardinality());
- }
-
- public void testSort_time() {
- final int DL_COUNT = 3;
- MatrixCursor c = new MatrixCursor(COLUMNS);
- Set<String> currentDownloads = new HashSet<>();
-
- // Add some files
- for (int i = 0; i < ITEM_COUNT; i++) {
- MatrixCursor.RowBuilder row = c.newRow();
- row.add(RootCursorWrapper.COLUMN_AUTHORITY, AUTHORITY);
- row.add(Document.COLUMN_DOCUMENT_ID, Integer.toString(i));
- row.add(Document.COLUMN_LAST_MODIFIED, System.currentTimeMillis());
- }
- // Add some current downloads (no timestamp)
- for (int i = ITEM_COUNT; i < ITEM_COUNT + DL_COUNT; i++) {
- MatrixCursor.RowBuilder row = c.newRow();
- String id = Integer.toString(i);
- row.add(RootCursorWrapper.COLUMN_AUTHORITY, AUTHORITY);
- row.add(Document.COLUMN_DOCUMENT_ID, id);
- currentDownloads.add(id);
- }
-
- DirectoryResult r = new DirectoryResult();
- r.cursor = c;
- r.sortOrder = State.SORT_ORDER_LAST_MODIFIED;
- model.update(r);
-
- String[] ids = model.getModelIds();
-
- // Check that all items were accounted for
- assertEquals(ITEM_COUNT + DL_COUNT, ids.length);
-
- // Check that active downloads are sorted to the top.
- for (int i = 0; i < DL_COUNT; i++) {
- assertTrue(currentDownloads.contains(ids[i]));
- }
- }
-
- private void setupTestContext() {
- final MockContentResolver resolver = new MockContentResolver();
- context = new ContextWrapper(getContext()) {
- @Override
- public ContentResolver getContentResolver() {
- return resolver;
- }
- };
- provider = new TestContentProvider();
- resolver.addProvider(AUTHORITY, provider);
- }
-
- private Selection positionToSelection(int... positions) {
- String[] ids = model.getModelIds();
- Selection s = new Selection();
- // Construct a selection of the given positions.
- for (int p: positions) {
- s.add(ids[p]);
- }
- return s;
- }
-
- private static class DummyListener implements Model.UpdateListener {
- public void onModelUpdate(Model model) {}
- public void onModelUpdateFailed(Exception e) {}
- }
-}
diff --git a/packages/DocumentsUI/tests/src/com/android/documentsui/dirlist/MultiSelectManagerTest.java b/packages/DocumentsUI/tests/src/com/android/documentsui/dirlist/MultiSelectManagerTest.java
deleted file mode 100644
index 57b9f92..0000000
--- a/packages/DocumentsUI/tests/src/com/android/documentsui/dirlist/MultiSelectManagerTest.java
+++ /dev/null
@@ -1,196 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.documentsui.dirlist;
-
-import android.test.AndroidTestCase;
-import android.test.suitebuilder.annotation.SmallTest;
-import android.util.SparseBooleanArray;
-
-import com.android.documentsui.dirlist.MultiSelectManager.Selection;
-import com.android.documentsui.testing.dirlist.SelectionProbe;
-import com.android.documentsui.testing.dirlist.TestSelectionListener;
-
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
-@SmallTest
-public class MultiSelectManagerTest extends AndroidTestCase {
-
- private static final List<String> ITEMS = TestData.create(100);
-
- private MultiSelectManager mManager;
- private TestSelectionListener mCallback;
- private TestDocumentsAdapter mAdapter;
- private SelectionProbe mSelection;
-
- @Override
- public void setUp() throws Exception {
- mCallback = new TestSelectionListener();
- mAdapter = new TestDocumentsAdapter(ITEMS);
- mManager = new MultiSelectManager(mAdapter, MultiSelectManager.MODE_MULTIPLE);
- mManager.addCallback(mCallback);
-
- mSelection = new SelectionProbe(mManager);
- }
-
- public void testSelection() {
- // Check selection.
- mManager.toggleSelection(ITEMS.get(7));
- mSelection.assertSelection(7);
- // Check deselection.
- mManager.toggleSelection(ITEMS.get(7));
- mSelection.assertNoSelection();
- }
-
- public void testSelection_NotifiesSelectionChanged() {
- // Selection should notify.
- mManager.toggleSelection(ITEMS.get(7));
- mCallback.assertSelectionChanged();
- // Deselection should notify.
- mManager.toggleSelection(ITEMS.get(7));
- mCallback.assertSelectionChanged();
- }
-
- public void testRangeSelection() {
- mManager.startRangeSelection(15);
- mManager.snapRangeSelection(19);
- mSelection.assertRangeSelection(15, 19);
- }
-
- public void testRangeSelection_snapExpand() {
- mManager.startRangeSelection(15);
- mManager.snapRangeSelection(19);
- mManager.snapRangeSelection(27);
- mSelection.assertRangeSelection(15, 27);
- }
-
- public void testRangeSelection_snapContract() {
- mManager.startRangeSelection(15);
- mManager.snapRangeSelection(27);
- mManager.snapRangeSelection(19);
- mSelection.assertRangeSelection(15, 19);
- }
-
- public void testRangeSelection_snapInvert() {
- mManager.startRangeSelection(15);
- mManager.snapRangeSelection(27);
- mManager.snapRangeSelection(3);
- mSelection.assertRangeSelection(3, 15);
- }
-
- public void testRangeSelection_multiple() {
- mManager.startRangeSelection(15);
- mManager.snapRangeSelection(27);
- mManager.endRangeSelection();
- mManager.startRangeSelection(42);
- mManager.snapRangeSelection(57);
- mSelection.assertSelectionSize(29);
- mSelection.assertRangeSelected(15, 27);
- mSelection.assertRangeSelected(42, 57);
-
- }
-
- public void testProvisionalSelection() {
- Selection s = mManager.getSelection();
- mSelection.assertNoSelection();
-
- SparseBooleanArray provisional = new SparseBooleanArray();
- provisional.append(1, true);
- provisional.append(2, true);
- s.setProvisionalSelection(getItemIds(provisional));
- mSelection.assertSelection(1, 2);
- }
-
- public void testProvisionalSelection_Replace() {
- Selection s = mManager.getSelection();
-
- SparseBooleanArray provisional = new SparseBooleanArray();
- provisional.append(1, true);
- provisional.append(2, true);
- s.setProvisionalSelection(getItemIds(provisional));
-
- provisional.clear();
- provisional.append(3, true);
- provisional.append(4, true);
- s.setProvisionalSelection(getItemIds(provisional));
- mSelection.assertSelection(3, 4);
- }
-
- public void testProvisionalSelection_IntersectsExistingProvisionalSelection() {
- Selection s = mManager.getSelection();
-
- SparseBooleanArray provisional = new SparseBooleanArray();
- provisional.append(1, true);
- provisional.append(2, true);
- s.setProvisionalSelection(getItemIds(provisional));
-
- provisional.clear();
- provisional.append(1, true);
- s.setProvisionalSelection(getItemIds(provisional));
- mSelection.assertSelection(1);
- }
-
- public void testProvisionalSelection_Apply() {
- Selection s = mManager.getSelection();
-
- SparseBooleanArray provisional = new SparseBooleanArray();
- provisional.append(1, true);
- provisional.append(2, true);
- s.setProvisionalSelection(getItemIds(provisional));
- s.applyProvisionalSelection();
- mSelection.assertSelection(1, 2);
- }
-
- public void testProvisionalSelection_Cancel() {
- mManager.toggleSelection(ITEMS.get(1));
- mManager.toggleSelection(ITEMS.get(2));
- Selection s = mManager.getSelection();
-
- SparseBooleanArray provisional = new SparseBooleanArray();
- provisional.append(3, true);
- provisional.append(4, true);
- s.setProvisionalSelection(getItemIds(provisional));
- s.cancelProvisionalSelection();
-
- // Original selection should remain.
- mSelection.assertSelection(1, 2);
- }
-
- public void testProvisionalSelection_IntersectsAppliedSelection() {
- mManager.toggleSelection(ITEMS.get(1));
- mManager.toggleSelection(ITEMS.get(2));
- Selection s = mManager.getSelection();
-
- SparseBooleanArray provisional = new SparseBooleanArray();
- provisional.append(2, true);
- provisional.append(3, true);
- s.setProvisionalSelection(getItemIds(provisional));
- mSelection.assertSelection(1, 2, 3);
- }
-
- private static Set<String> getItemIds(SparseBooleanArray selection) {
- Set<String> ids = new HashSet<>();
-
- int count = selection.size();
- for (int i = 0; i < count; ++i) {
- ids.add(ITEMS.get(selection.keyAt(i)));
- }
-
- return ids;
- }
-}
diff --git a/packages/DocumentsUI/tests/src/com/android/documentsui/dirlist/MultiSelectManager_SelectionTest.java b/packages/DocumentsUI/tests/src/com/android/documentsui/dirlist/MultiSelectManager_SelectionTest.java
deleted file mode 100644
index 444b2dc..0000000
--- a/packages/DocumentsUI/tests/src/com/android/documentsui/dirlist/MultiSelectManager_SelectionTest.java
+++ /dev/null
@@ -1,177 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.documentsui.dirlist;
-
-import android.test.AndroidTestCase;
-import android.test.suitebuilder.annotation.SmallTest;
-
-import com.android.documentsui.dirlist.MultiSelectManager.Selection;
-import com.google.common.collect.Sets;
-
-import java.util.HashSet;
-import java.util.Set;
-
-@SmallTest
-public class MultiSelectManager_SelectionTest extends AndroidTestCase {
-
- private Selection selection;
-
- private String[] ids = new String[]{
- "foo",
- "43",
- "auth|id=@53di*/f3#d"
- };
-
- @Override
- public void setUp() throws Exception {
- selection = new Selection();
- selection.add(ids[0]);
- selection.add(ids[1]);
- selection.add(ids[2]);
- }
-
- public void testAdd() {
- // We added in setUp.
- assertEquals(3, selection.size());
- assertContains(ids[0]);
- assertContains(ids[1]);
- assertContains(ids[2]);
- }
-
- public void testRemove() {
- selection.remove(ids[0]);
- selection.remove(ids[2]);
- assertEquals(1, selection.size());
- assertContains(ids[1]);
- }
-
- public void testClear() {
- selection.clear();
- assertEquals(0, selection.size());
- }
-
- public void testIsEmpty() {
- assertTrue(new Selection().isEmpty());
- selection.clear();
- assertTrue(selection.isEmpty());
- }
-
- public void testSize() {
- Selection other = new Selection();
- for (int i = 0; i < selection.size(); i++) {
- other.add(ids[i]);
- }
- assertEquals(selection.size(), other.size());
- }
-
- public void testEqualsSelf() {
- assertEquals(selection, selection);
- }
-
- public void testEqualsOther() {
- Selection other = new Selection();
- other.add(ids[0]);
- other.add(ids[1]);
- other.add(ids[2]);
- assertEquals(selection, other);
- assertEquals(selection.hashCode(), other.hashCode());
- }
-
- public void testEqualsCopy() {
- Selection other = new Selection();
- other.copyFrom(selection);
- assertEquals(selection, other);
- assertEquals(selection.hashCode(), other.hashCode());
- }
-
- public void testNotEquals() {
- Selection other = new Selection();
- other.add("foobar");
- assertFalse(selection.equals(other));
- }
-
- public void testIntersection_empty0() {
- Selection testSelection = new Selection();
- testSelection.intersect(new HashSet<String>());
- assertTrue(testSelection.isEmpty());
- }
-
- public void testIntersection_empty1() {
- Selection testSelection = new Selection();
- testSelection.intersect(Sets.newHashSet("foo"));
- assertTrue(testSelection.isEmpty());
- }
-
- public void testIntersection_empty2() {
- assertFalse(selection.isEmpty());
- selection.intersect(new HashSet<String>());
- assertTrue(selection.isEmpty());
- }
-
- public void testIntersection_exclusive() {
- String[] ids0 = new String[]{"foo", "bar", "baz"};
- String[] ids1 = new String[]{"0", "1", "2"};
-
- Selection testSelection = new Selection();
- testSelection.add(ids0[0]);
- testSelection.add(ids0[1]);
- testSelection.add(ids0[2]);
-
- Set<String> set = Sets.newHashSet(ids1);
- testSelection.intersect(set);
-
- assertTrue(testSelection.isEmpty());
- }
-
- public void testIntersection_subset() {
- String[] ids0 = new String[]{"foo", "bar", "baz"};
- String[] ids1 = new String[]{"0", "baz", "1", "foo", "2"};
-
- Selection testSelection = new Selection();
- testSelection.add(ids0[0]);
- testSelection.add(ids0[1]);
- testSelection.add(ids0[2]);
-
- testSelection.intersect(Sets.newHashSet(ids1));
-
- assertTrue(testSelection.contains("foo"));
- assertFalse(testSelection.contains("bar"));
- assertTrue(testSelection.contains("baz"));
- }
-
- public void testIntersection_all() {
- String[] ids0 = new String[]{"foo", "bar", "baz"};
- String[] ids1 = new String[]{"0", "baz", "1", "foo", "2", "bar"};
-
- Selection testSelection = new Selection();
- testSelection.add(ids0[0]);
- testSelection.add(ids0[1]);
- testSelection.add(ids0[2]);
-
- Selection control = new Selection();
- control.copyFrom(testSelection);
-
- testSelection.intersect(Sets.newHashSet(ids1));
-
- assertTrue(testSelection.equals(control));
- }
-
- private void assertContains(String id) {
- String err = String.format("Selection %s does not contain %s", selection, id);
- assertTrue(err, selection.contains(id));
- }
-}
diff --git a/packages/DocumentsUI/tests/src/com/android/documentsui/dirlist/MultiSelectManager_SingleSelectTest.java b/packages/DocumentsUI/tests/src/com/android/documentsui/dirlist/MultiSelectManager_SingleSelectTest.java
deleted file mode 100644
index 62cb1b0..0000000
--- a/packages/DocumentsUI/tests/src/com/android/documentsui/dirlist/MultiSelectManager_SingleSelectTest.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.documentsui.dirlist;
-
-import android.test.AndroidTestCase;
-import android.test.suitebuilder.annotation.SmallTest;
-
-import com.android.documentsui.testing.dirlist.SelectionProbe;
-import com.android.documentsui.testing.dirlist.TestSelectionListener;
-
-import java.util.List;
-
-@SmallTest
-public class MultiSelectManager_SingleSelectTest extends AndroidTestCase {
-
- private static final List<String> ITEMS = TestData.create(100);
-
- private MultiSelectManager mManager;
- private TestSelectionListener mCallback;
- private TestDocumentsAdapter mAdapter;
- private SelectionProbe mSelection;
-
- @Override
- public void setUp() throws Exception {
- mCallback = new TestSelectionListener();
- mAdapter = new TestDocumentsAdapter(ITEMS);
- mManager = new MultiSelectManager(mAdapter, MultiSelectManager.MODE_SINGLE);
- mManager.addCallback(mCallback);
-
- mSelection = new SelectionProbe(mManager);
- }
-
- public void testSimpleSelect() {
- mManager.toggleSelection(ITEMS.get(3));
- mManager.toggleSelection(ITEMS.get(4));
- mCallback.assertSelectionChanged();
- mSelection.assertSelection(4);
- }
-
- public void testRangeSelectionNotEstablished() {
- mManager.toggleSelection(ITEMS.get(3));
- mCallback.reset();
-
- try {
- mManager.snapRangeSelection(10);
- fail("Should have thrown.");
- } catch (Exception expected) {}
-
- mCallback.assertSelectionUnchanged();
- mSelection.assertSelection(3);
- }
-}
diff --git a/packages/DocumentsUI/tests/src/com/android/documentsui/dirlist/SectionBreakDocumentsAdapterWrapperTest.java b/packages/DocumentsUI/tests/src/com/android/documentsui/dirlist/SectionBreakDocumentsAdapterWrapperTest.java
deleted file mode 100644
index 7c324e7..0000000
--- a/packages/DocumentsUI/tests/src/com/android/documentsui/dirlist/SectionBreakDocumentsAdapterWrapperTest.java
+++ /dev/null
@@ -1,167 +0,0 @@
-/*
- * Copyright (C) 2016 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.dirlist;
-
-import android.content.Context;
-import android.database.Cursor;
-import android.database.MatrixCursor;
-import android.provider.DocumentsContract.Document;
-import android.support.v7.widget.RecyclerView;
-import android.test.AndroidTestCase;
-import android.test.suitebuilder.annotation.SmallTest;
-import android.view.ViewGroup;
-
-import com.android.documentsui.DirectoryResult;
-import com.android.documentsui.RootCursorWrapper;
-import com.android.documentsui.State;
-
-@SmallTest
-public class SectionBreakDocumentsAdapterWrapperTest extends AndroidTestCase {
-
- private static final String AUTHORITY = "test_authority";
- private static final String[] NAMES = new String[] {
- "4",
- "foo",
- "1",
- "bar",
- "*(Ljifl;a",
- "0",
- "baz",
- "2",
- "3",
- "%$%VD"
- };
-
- private TestModel mModel;
- private SectionBreakDocumentsAdapterWrapper mAdapter;
-
- public void setUp() {
-
- final Context testContext = TestContext.createStorageTestContext(getContext(), AUTHORITY);
- DocumentsAdapter.Environment env = new TestEnvironment(testContext);
-
- mModel = new TestModel(AUTHORITY);
- mAdapter = new SectionBreakDocumentsAdapterWrapper(
- env,
- new ModelBackedDocumentsAdapter(
- env, new IconHelper(testContext, State.MODE_GRID)));
-
- mModel.addUpdateListener(mAdapter);
- }
-
- // Tests that the item count is correct for a directory containing only subdirs.
- public void testItemCount_allDirs() {
- MatrixCursor c = new MatrixCursor(TestModel.COLUMNS);
-
- for (int i = 0; i < 5; ++i) {
- MatrixCursor.RowBuilder row = c.newRow();
- row.add(RootCursorWrapper.COLUMN_AUTHORITY, AUTHORITY);
- row.add(Document.COLUMN_DOCUMENT_ID, Integer.toString(i));
- row.add(Document.COLUMN_SIZE, i);
- row.add(Document.COLUMN_MIME_TYPE, Document.MIME_TYPE_DIR);
- }
- DirectoryResult r = new DirectoryResult();
- r.cursor = c;
- r.sortOrder = State.SORT_ORDER_SIZE;
- mModel.update(r);
-
- assertEquals(mModel.getItemCount(), mAdapter.getItemCount());
- }
-
- // Tests that the item count is correct for a directory containing only files.
- public void testItemCount_allFiles() {
- mModel.update(NAMES);
- assertEquals(mModel.getItemCount(), mAdapter.getItemCount());
- }
-
- // Tests that the item count is correct for a directory containing files and subdirs.
- public void testItemCount_mixed() {
- MatrixCursor c = new MatrixCursor(TestModel.COLUMNS);
-
- for (int i = 0; i < 5; ++i) {
- MatrixCursor.RowBuilder row = c.newRow();
- row.add(RootCursorWrapper.COLUMN_AUTHORITY, AUTHORITY);
- row.add(Document.COLUMN_DOCUMENT_ID, Integer.toString(i));
- row.add(Document.COLUMN_SIZE, i);
- String mimeType =(i < 2) ? Document.MIME_TYPE_DIR : "text/*";
- row.add(Document.COLUMN_MIME_TYPE, mimeType);
- }
- DirectoryResult r = new DirectoryResult();
- r.cursor = c;
- r.sortOrder = State.SORT_ORDER_SIZE;
- mModel.update(r);
-
- assertEquals(mModel.getItemCount() + 1, mAdapter.getItemCount());
- }
-
- private final class TestEnvironment implements DocumentsAdapter.Environment {
- private final Context testContext;
-
- private TestEnvironment(Context testContext) {
- this.testContext = testContext;
- }
-
- @Override
- public boolean isSelected(String id) {
- return false;
- }
-
- @Override
- public boolean isDocumentEnabled(String mimeType, int flags) {
- return true;
- }
-
- @Override
- public void initDocumentHolder(DocumentHolder holder) {}
-
- @Override
- public Model getModel() {
- return mModel;
- }
-
- @Override
- public State getDisplayState() {
- return null;
- }
-
- @Override
- public Context getContext() {
- return testContext;
- }
-
- @Override
- public int getColumnCount() {
- return 4;
- }
-
- @Override
- public void onBindDocumentHolder(DocumentHolder holder, Cursor cursor) {}
- }
-
- private static class DummyListener implements Model.UpdateListener {
- public void onModelUpdate(Model model) {}
- public void onModelUpdateFailed(Exception e) {}
- }
-
- private static class DummyAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
- public int getItemCount() { return 0; }
- public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {}
- public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
- return null;
- }
- }
-}
diff --git a/packages/DocumentsUI/tests/src/com/android/documentsui/dirlist/TestContentProvider.java b/packages/DocumentsUI/tests/src/com/android/documentsui/dirlist/TestContentProvider.java
deleted file mode 100644
index c8d424f..0000000
--- a/packages/DocumentsUI/tests/src/com/android/documentsui/dirlist/TestContentProvider.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.documentsui.dirlist;
-
-import android.net.Uri;
-import android.os.Bundle;
-import android.provider.DocumentsContract;
-import android.test.mock.MockContentProvider;
-
-import com.android.documentsui.model.DocumentInfo;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * A very simple test double for ContentProvider. Useful in this package only.
- */
-class TestContentProvider extends MockContentProvider {
- List<Uri> mDeleted = new ArrayList<>();
-
- @Override
- public Bundle call(String method, String arg, Bundle extras) {
- // Intercept and log delete method calls.
- if (DocumentsContract.METHOD_DELETE_DOCUMENT.equals(method)) {
- final Uri documentUri = extras.getParcelable(DocumentsContract.EXTRA_URI);
- mDeleted.add(documentUri);
- return new Bundle();
- } else {
- return super.call(method, arg, extras);
- }
- }
-
- public void assertWasDeleted(DocumentInfo doc) {
- ModelTest.assertTrue(mDeleted.contains(doc.derivedUri));
- }
-}
\ No newline at end of file
diff --git a/packages/DocumentsUI/tests/src/com/android/documentsui/dirlist/TestContext.java b/packages/DocumentsUI/tests/src/com/android/documentsui/dirlist/TestContext.java
deleted file mode 100644
index 714062d..0000000
--- a/packages/DocumentsUI/tests/src/com/android/documentsui/dirlist/TestContext.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.documentsui.dirlist;
-
-import android.content.ContentResolver;
-import android.content.Context;
-import android.content.ContextWrapper;
-import android.test.mock.MockContentResolver;
-
-public final class TestContext {
-
- /**
- * Returns a Context configured with test provider for authority.
- */
- static Context createStorageTestContext(Context context, String authority) {
- final MockContentResolver testResolver = new MockContentResolver();
- TestContentProvider provider = new TestContentProvider();
- testResolver.addProvider(authority, provider);
-
- return new ContextWrapper(context) {
- @Override
- public ContentResolver getContentResolver() {
- return testResolver;
- }
- };
- }
-}
diff --git a/packages/DocumentsUI/tests/src/com/android/documentsui/dirlist/TestData.java b/packages/DocumentsUI/tests/src/com/android/documentsui/dirlist/TestData.java
deleted file mode 100644
index 5c1d987..0000000
--- a/packages/DocumentsUI/tests/src/com/android/documentsui/dirlist/TestData.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Copyright (C) 2016 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.dirlist;
-
-import java.util.ArrayList;
-import java.util.List;
-
-public class TestData {
- public static List<String> create(int num) {
- List<String> items = new ArrayList<String>(num);
- for (int i = 0; i < num; ++i) {
- items.add(Integer.toString(i));
- }
- return items;
- }
-}
diff --git a/packages/DocumentsUI/tests/src/com/android/documentsui/dirlist/TestDocumentsAdapter.java b/packages/DocumentsUI/tests/src/com/android/documentsui/dirlist/TestDocumentsAdapter.java
deleted file mode 100644
index 4df0fa1..0000000
--- a/packages/DocumentsUI/tests/src/com/android/documentsui/dirlist/TestDocumentsAdapter.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.documentsui.dirlist;
-
-import android.view.ViewGroup;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * A skeletal {@link DocumentsAdapter} test double.
- */
-public class TestDocumentsAdapter extends DocumentsAdapter {
-
- List<String> mModelIds = new ArrayList<>();
-
- public TestDocumentsAdapter(List<String> modelIds) {
- mModelIds = modelIds;
- }
-
- @Override
- public void onModelUpdate(Model model) {
- }
-
- @Override
- public void onModelUpdateFailed(Exception e) {
- }
-
- @Override
- List<String> getModelIds() {
- return mModelIds;
- }
-
- @Override
- void onItemSelectionChanged(String id) {
- }
-
- @Override
- String getModelId(int position) {
- return mModelIds.get(position);
- }
-
- @Override
- public DocumentHolder onCreateViewHolder(ViewGroup parent, int viewType) {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public void onBindViewHolder(DocumentHolder holder, int position) {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public int getItemCount() {
- return mModelIds.size();
- }
-}
diff --git a/packages/DocumentsUI/tests/src/com/android/documentsui/dirlist/TestFocusHandler.java b/packages/DocumentsUI/tests/src/com/android/documentsui/dirlist/TestFocusHandler.java
deleted file mode 100644
index 0585b9f..0000000
--- a/packages/DocumentsUI/tests/src/com/android/documentsui/dirlist/TestFocusHandler.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright (C) 2016 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.dirlist;
-
-import android.view.KeyEvent;
-import android.view.View;
-
-/**
- * A purely dummy instance of FocusHandler.
- */
-public final class TestFocusHandler implements FocusHandler {
-
- @Override
- public boolean handleKey(DocumentHolder doc, int keyCode, KeyEvent event) {
- return false;
- }
-
- @Override
- public void onFocusChange(View v, boolean hasFocus) {
- }
-
- @Override
- public void restoreLastFocus() {
- }
-
- @Override
- public int getFocusPosition() {
- return 0;
- }
-}
\ No newline at end of file
diff --git a/packages/DocumentsUI/tests/src/com/android/documentsui/dirlist/TestModel.java b/packages/DocumentsUI/tests/src/com/android/documentsui/dirlist/TestModel.java
deleted file mode 100644
index 2d819ff..0000000
--- a/packages/DocumentsUI/tests/src/com/android/documentsui/dirlist/TestModel.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.documentsui.dirlist;
-
-import android.database.MatrixCursor;
-import android.provider.DocumentsContract.Document;
-
-import com.android.documentsui.DirectoryResult;
-import com.android.documentsui.RootCursorWrapper;
-
-import java.util.Random;
-
-public class TestModel extends Model {
-
- static final String[] COLUMNS = new String[]{
- RootCursorWrapper.COLUMN_AUTHORITY,
- Document.COLUMN_DOCUMENT_ID,
- Document.COLUMN_FLAGS,
- Document.COLUMN_DISPLAY_NAME,
- Document.COLUMN_SIZE,
- Document.COLUMN_MIME_TYPE
- };
-
- private final String mAuthority;
-
- public TestModel(String authority) {
- super();
- mAuthority = authority;
- }
-
- void update(String... names) {
- Random rand = new Random();
-
- MatrixCursor c = new MatrixCursor(COLUMNS);
- for (int i = 0; i < names.length; i++) {
- MatrixCursor.RowBuilder row = c.newRow();
- row.add(RootCursorWrapper.COLUMN_AUTHORITY, mAuthority);
- row.add(Document.COLUMN_DOCUMENT_ID, Integer.toString(i));
- row.add(Document.COLUMN_FLAGS, Document.FLAG_SUPPORTS_DELETE);
- // Generate random document names and sizes. This forces the model's internal sort code
- // to actually do something.
- row.add(Document.COLUMN_DISPLAY_NAME, names[i]);
- row.add(Document.COLUMN_SIZE, rand.nextInt());
- }
-
- DirectoryResult r = new DirectoryResult();
- r.cursor = c;
- update(r);
- }
-
- String idForPosition(int p) {
- return Integer.toString(p);
- }
-}
diff --git a/packages/DocumentsUI/tests/src/com/android/documentsui/dirlist/TestSelectionEnvironment.java b/packages/DocumentsUI/tests/src/com/android/documentsui/dirlist/TestSelectionEnvironment.java
deleted file mode 100644
index b69787c..0000000
--- a/packages/DocumentsUI/tests/src/com/android/documentsui/dirlist/TestSelectionEnvironment.java
+++ /dev/null
@@ -1,108 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.documentsui.dirlist;
-
-import android.graphics.Point;
-import android.graphics.Rect;
-import android.support.v7.widget.RecyclerView.OnScrollListener;
-
-import com.android.documentsui.dirlist.BandController.SelectionEnvironment;
-
-import java.util.List;
-
-public class TestSelectionEnvironment implements SelectionEnvironment {
-
- public TestSelectionEnvironment(List<String> items) {
- }
-
- @Override
- public void showBand(Rect rect) {
- }
-
- @Override
- public void hideBand() {
- }
-
- @Override
- public void addOnScrollListener(OnScrollListener listener) {
- }
-
- @Override
- public void removeOnScrollListener(OnScrollListener listener) {
- }
-
- @Override
- public void scrollBy(int dy) {
- }
-
- @Override
- public int getHeight() {
- return 0;
- }
-
- @Override
- public void invalidateView() {
- }
-
- @Override
- public void runAtNextFrame(Runnable r) {
- }
-
- @Override
- public void removeCallback(Runnable r) {
- }
-
- @Override
- public Point createAbsolutePoint(Point relativePoint) {
- return null;
- }
-
- @Override
- public Rect getAbsoluteRectForChildViewAt(int index) {
- return null;
- }
-
- @Override
- public int getAdapterPositionAt(int index) {
- return 0;
- }
-
- @Override
- public int getColumnCount() {
- return 0;
- }
-
- @Override
- public int getChildCount() {
- return 0;
- }
-
- @Override
- public int getVisibleChildCount() {
- return 0;
- }
-
- @Override
- public boolean isLayoutItem(int adapterPosition) {
- return false;
- }
-
- @Override
- public boolean hasView(int adapterPosition) {
- return true;
- }
-}
diff --git a/packages/DocumentsUI/tests/src/com/android/documentsui/dirlist/UserInputHandler_MouseTest.java b/packages/DocumentsUI/tests/src/com/android/documentsui/dirlist/UserInputHandler_MouseTest.java
deleted file mode 100644
index 4c34546..0000000
--- a/packages/DocumentsUI/tests/src/com/android/documentsui/dirlist/UserInputHandler_MouseTest.java
+++ /dev/null
@@ -1,110 +0,0 @@
-/*
- * Copyright (C) 2016 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.dirlist;
-
-import android.support.test.filters.SmallTest;
-import android.support.test.runner.AndroidJUnit4;
-import android.support.v7.widget.RecyclerView;
-import android.view.MotionEvent;
-
-import com.android.documentsui.Events.InputEvent;
-import com.android.documentsui.dirlist.UserInputHandler.DocumentDetails;
-import com.android.documentsui.testing.TestEvent;
-import com.android.documentsui.testing.TestEvent.Builder;
-import com.android.documentsui.testing.TestPredicate;
-import com.android.documentsui.testing.dirlist.SelectionProbe;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import java.util.List;
-
-@RunWith(AndroidJUnit4.class)
-@SmallTest
-public final class UserInputHandler_MouseTest {
-
- private static final List<String> ITEMS = TestData.create(100);
-
- private UserInputHandler<TestEvent> mInputHandler;
-
- private TestDocumentsAdapter mAdapter;
- private SelectionProbe mSelection;
- private TestPredicate<DocumentDetails> mCanSelect;
- private TestPredicate<InputEvent> mRightClickHandler;
- private TestPredicate<DocumentDetails> mActivateHandler;
- private TestPredicate<DocumentDetails> mDeleteHandler;
-
- private Builder mEvent;
-
- @Before
- public void setUp() {
-
- mAdapter = new TestDocumentsAdapter(ITEMS);
- MultiSelectManager selectionMgr =
- new MultiSelectManager(mAdapter, MultiSelectManager.MODE_MULTIPLE);
-
- mSelection = new SelectionProbe(selectionMgr);
- mCanSelect = new TestPredicate<>();
- mRightClickHandler = new TestPredicate<>();
- mActivateHandler = new TestPredicate<>();
- mDeleteHandler = new TestPredicate<>();
-
- mInputHandler = new UserInputHandler<>(
- selectionMgr,
- new TestFocusHandler(),
- (MotionEvent event) -> {
- throw new UnsupportedOperationException("Not exercised in tests.");
- },
- (TestEvent event) -> {
- return event.getDocument();
- },
- mCanSelect,
- mRightClickHandler::test,
- mActivateHandler::test,
- mDeleteHandler::test);
-
- mEvent = TestEvent.builder().mouse();
- }
-
- @Test
- public void testConfirmedClick_StartsSelection() {
- mInputHandler.onSingleTapConfirmed(mEvent.at(11).build());
- mSelection.assertSelection(11);
- }
-
- @Test
- public void testUnconfirmedClick_AddsToExistingSelection() {
- mInputHandler.onSingleTapConfirmed(mEvent.at(7).build());
-
- mInputHandler.onSingleTapUp(mEvent.at(11).build());
- mSelection.assertSelection(7, 11);
- }
-
- @Test
- public void testDoubleClick_Activates() {
- mInputHandler.onDoubleTap(mEvent.at(11).build());
- mActivateHandler.assertLastArgument(mEvent.build());
- }
-
- @Test
- public void testClickOff_ClearsSelection() {
- mInputHandler.onSingleTapConfirmed(mEvent.at(11).build());
- mInputHandler.onSingleTapUp(mEvent.at(RecyclerView.NO_POSITION).build());
- mSelection.assertNoSelection();
- }
-}
diff --git a/packages/DocumentsUI/tests/src/com/android/documentsui/dirlist/UserInputHandler_RangeTest.java b/packages/DocumentsUI/tests/src/com/android/documentsui/dirlist/UserInputHandler_RangeTest.java
deleted file mode 100644
index 1d763f9..0000000
--- a/packages/DocumentsUI/tests/src/com/android/documentsui/dirlist/UserInputHandler_RangeTest.java
+++ /dev/null
@@ -1,147 +0,0 @@
-/*
- * Copyright (C) 2016 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.dirlist;
-
-import android.support.test.filters.SmallTest;
-import android.support.test.runner.AndroidJUnit4;
-import android.view.MotionEvent;
-
-import com.android.documentsui.Events.InputEvent;
-import com.android.documentsui.dirlist.UserInputHandler.DocumentDetails;
-import com.android.documentsui.testing.TestEvent;
-import com.android.documentsui.testing.TestEvent.Builder;
-import com.android.documentsui.testing.TestPredicate;
-import com.android.documentsui.testing.dirlist.SelectionProbe;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import java.util.List;
-
-/**
- * UserInputHandler / MultiSelectManager integration test covering the shared
- * responsibility of range selection.
- */
-@RunWith(AndroidJUnit4.class)
-@SmallTest
-public final class UserInputHandler_RangeTest {
-
- private static final List<String> ITEMS = TestData.create(100);
-
- private UserInputHandler<TestEvent> mInputHandler;
-
- private TestDocumentsAdapter mAdapter;
- private SelectionProbe mSelection;
- private TestPredicate<DocumentDetails> mCanSelect;
- private TestPredicate<InputEvent> mRightClickHandler;
- private TestPredicate<DocumentDetails> mActivateHandler;
- private TestPredicate<DocumentDetails> mDeleteHandler;
- private Builder mEvent;
-
- @Before
- public void setUp() {
-
- mAdapter = new TestDocumentsAdapter(ITEMS);
- MultiSelectManager selectionMgr =
- new MultiSelectManager(mAdapter, MultiSelectManager.MODE_MULTIPLE);
-
- mSelection = new SelectionProbe(selectionMgr);
- mCanSelect = new TestPredicate<>();
- mRightClickHandler = new TestPredicate<>();
- mActivateHandler = new TestPredicate<>();
- mDeleteHandler = new TestPredicate<>();
-
- mInputHandler = new UserInputHandler<>(
- selectionMgr,
- new TestFocusHandler(),
- (MotionEvent event) -> {
- throw new UnsupportedOperationException("Not exercised in tests.");
- },
- (TestEvent event) -> {
- return event.getDocument();
- },
- mCanSelect,
- mRightClickHandler::test,
- mActivateHandler::test,
- mDeleteHandler::test);
-
- mEvent = TestEvent.builder().mouse();
- }
-
- @Test
- public void testExtendRange() {
- mInputHandler.onSingleTapConfirmed(mEvent.at(7).build());
- mInputHandler.onSingleTapUp(mEvent.at(11).shift().build());
- mSelection.assertRangeSelection(7, 11);
- }
-
- @Test
- public void testExtendRangeContinues() {
- mInputHandler.onSingleTapConfirmed(mEvent.at(7).build());
- mInputHandler.onSingleTapUp(mEvent.at(11).shift().build());
- mInputHandler.onSingleTapUp(mEvent.at(21).shift().build());
- mSelection.assertRangeSelection(7, 21);
- }
-
- @Test
- public void testMultipleContiguousRanges() {
- mInputHandler.onSingleTapConfirmed(mEvent.at(7).build());
- mInputHandler.onSingleTapUp(mEvent.at(11).shift().build());
-
- // click without shift sets a new range start point.
- mInputHandler.onSingleTapUp(mEvent.at(20).unshift().build());
- mInputHandler.onSingleTapUp(mEvent.at(25).shift().build());
-
- mSelection.assertRangeSelected(7, 11);
- mSelection.assertRangeSelected(20, 25);
-
- mSelection.assertRangeNotSelected(12, 19);
- mSelection.assertSelectionSize(11);
- }
-
- @Test
- public void testReducesSelectionRange() {
- mInputHandler.onSingleTapConfirmed(mEvent.at(7).build());
- mInputHandler.onSingleTapUp(mEvent.at(17).shift().build());
- mInputHandler.onSingleTapUp(mEvent.at(10).shift().build());
- mSelection.assertRangeSelection(7, 10);
- }
-
- @Test
- public void testReducesSelectionRange_Reverse() {
- mInputHandler.onSingleTapConfirmed(mEvent.at(17).build());
- mInputHandler.onSingleTapUp(mEvent.at(7).shift().build());
- mInputHandler.onSingleTapUp(mEvent.at(14).shift().build());
- mSelection.assertRangeSelection(14, 17);
- }
-
- @Test
- public void testExtendsRange_Reverse() {
- mInputHandler.onSingleTapConfirmed(mEvent.at(12).build());
- mInputHandler.onSingleTapUp(mEvent.at(5).shift().build());
- mSelection.assertRangeSelection(5, 12);
- }
-
- @Test
- public void testExtendsRange_ReversesAfterForwardClick() {
- mInputHandler.onSingleTapConfirmed(mEvent.at(7).build());
- mInputHandler.onSingleTapUp(mEvent.at(11).shift().build());
- mInputHandler.onSingleTapUp(mEvent.at(0).shift().build());
- mSelection.assertRangeSelection(0, 7);
- }
-}
diff --git a/packages/DocumentsUI/tests/src/com/android/documentsui/dirlist/UserInputHandler_TouchTest.java b/packages/DocumentsUI/tests/src/com/android/documentsui/dirlist/UserInputHandler_TouchTest.java
deleted file mode 100644
index 2d1453e..0000000
--- a/packages/DocumentsUI/tests/src/com/android/documentsui/dirlist/UserInputHandler_TouchTest.java
+++ /dev/null
@@ -1,118 +0,0 @@
-/*
- * Copyright (C) 2016 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.dirlist;
-
-import android.support.test.filters.SmallTest;
-import android.support.test.runner.AndroidJUnit4;
-import android.support.v7.widget.RecyclerView;
-import android.view.MotionEvent;
-
-import com.android.documentsui.Events.InputEvent;
-import com.android.documentsui.dirlist.UserInputHandler.DocumentDetails;
-import com.android.documentsui.testing.TestEvent;
-import com.android.documentsui.testing.TestEvent.Builder;
-import com.android.documentsui.testing.TestPredicate;
-import com.android.documentsui.testing.dirlist.SelectionProbe;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import java.util.List;
-
-@RunWith(AndroidJUnit4.class)
-@SmallTest
-public final class UserInputHandler_TouchTest {
-
- private static final List<String> ITEMS = TestData.create(100);
-
- private UserInputHandler<TestEvent> mInputHandler;
-
- private TestDocumentsAdapter mAdapter;
- private SelectionProbe mSelection;
- private TestPredicate<DocumentDetails> mCanSelect;
- private TestPredicate<InputEvent> mRightClickHandler;
- private TestPredicate<DocumentDetails> mActivateHandler;
- private TestPredicate<DocumentDetails> mDeleteHandler;
-
- private Builder mEvent;
-
- @Before
- public void setUp() {
-
- mAdapter = new TestDocumentsAdapter(ITEMS);
- MultiSelectManager selectionMgr =
- new MultiSelectManager(mAdapter, MultiSelectManager.MODE_MULTIPLE);
-
- mSelection = new SelectionProbe(selectionMgr);
- mCanSelect = new TestPredicate<>();
- mRightClickHandler = new TestPredicate<>();
- mActivateHandler = new TestPredicate<>();
- mDeleteHandler = new TestPredicate<>();
-
- mInputHandler = new UserInputHandler<>(
- selectionMgr,
- new TestFocusHandler(),
- (MotionEvent event) -> {
- throw new UnsupportedOperationException("Not exercised in tests.");
- },
- (TestEvent event) -> {
- return event.getDocument();
- },
- mCanSelect,
- mRightClickHandler::test,
- mActivateHandler::test,
- mDeleteHandler::test);
-
- mEvent = TestEvent.builder();
- }
-
- @Test
- public void testTap_ActivatesWhenNoExistingSelection() {
- mInputHandler.onSingleTapUp(mEvent.at(11).build());
- mActivateHandler.assertLastArgument(mEvent.build());
- }
-
- @Test
- public void testLongPress_StartsSelectionMode() {
- mInputHandler.onLongPress(mEvent.at(7).build());
- mSelection.assertSelection(7);
- }
-
- @Test
- public void testLongPress_SecondPressExtendsSelection() {
- mInputHandler.onLongPress(mEvent.at(7).build());
- mInputHandler.onLongPress(mEvent.at(99).build());
- mInputHandler.onLongPress(mEvent.at(13).build());
- mSelection.assertSelection(7, 13, 99);
- }
-
- @Test
- public void testTap_UnselectsSelectedItem() {
- mInputHandler.onLongPress(mEvent.at(7).build());
- mInputHandler.onSingleTapUp(mEvent.at(7).build());
- mSelection.assertNoSelection();
- }
-
- @Test
- public void testTapOff_ClearsSelection() {
- mInputHandler.onLongPress(mEvent.at(7).build());
- mInputHandler.onSingleTapUp(mEvent.at(11).build());
- mInputHandler.onSingleTapUp(mEvent.at(RecyclerView.NO_POSITION).build());
- mSelection.assertNoSelection();
- }
-}
diff --git a/packages/DocumentsUI/tests/src/com/android/documentsui/dirlist/ViewAutoScrollerTest.java b/packages/DocumentsUI/tests/src/com/android/documentsui/dirlist/ViewAutoScrollerTest.java
deleted file mode 100644
index e2aaa84..0000000
--- a/packages/DocumentsUI/tests/src/com/android/documentsui/dirlist/ViewAutoScrollerTest.java
+++ /dev/null
@@ -1,136 +0,0 @@
-/*
- * Copyright (C) 2016 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.dirlist;
-
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
-
-import android.graphics.Point;
-import android.support.test.filters.SmallTest;
-import android.support.test.runner.AndroidJUnit4;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import java.util.function.IntConsumer;
-
-@RunWith(AndroidJUnit4.class)
-@SmallTest
-public final class ViewAutoScrollerTest {
-
- private static final int VIEW_HEIGHT = 100;
- private static final int EDGE_HEIGHT = 10;
-
- private ViewAutoScroller mAutoScroller;
- private Point mPoint;
- private boolean mActive;
- private ViewAutoScroller.ScrollDistanceDelegate mDistanceDelegate;
- private ViewAutoScroller.ScrollActionDelegate mActionDelegate;
- private IntConsumer mScrollAssert;
-
- @Before
- public void setUp() {
- mActive = false;
- mPoint = new Point();
- mDistanceDelegate = new ViewAutoScroller.ScrollDistanceDelegate() {
- @Override
- public boolean isActive() {
- return mActive;
- }
-
- @Override
- public int getViewHeight() {
- return VIEW_HEIGHT;
- }
-
- @Override
- public Point getCurrentPosition() {
- return mPoint;
- }
- };
- mActionDelegate = new ViewAutoScroller.ScrollActionDelegate() {
- @Override
- public void scrollBy(int dy) {
- mScrollAssert.accept(dy);
- }
-
- @Override
- public void runAtNextFrame(Runnable r) {
- }
-
- @Override
- public void removeCallback(Runnable r) {
- }
- };
- mAutoScroller = new ViewAutoScroller(
- EDGE_HEIGHT, mDistanceDelegate, mActionDelegate, new TestClock()::getCurrentTime);
- }
-
- @Test
- public void testCursorNotInScrollZone() {
- mPoint = new Point(0, VIEW_HEIGHT/2);
- mScrollAssert = (int dy) -> {
- // Should not have called this method
- fail("Received unexpected scroll event");
- assertTrue(false);
- };
- mAutoScroller.run();
- }
-
- @Test
- public void testCursorInScrollZone_notActive() {
- mActive = false;
- mPoint = new Point(0, EDGE_HEIGHT - 1);
- mScrollAssert = (int dy) -> {
- // Should not have called this method
- fail("Received unexpected scroll event");
- assertTrue(false);
- };
- mAutoScroller.run();
- }
-
- @Test
- public void testCursorInScrollZone_top() {
- mActive = true;
- mPoint = new Point(0, EDGE_HEIGHT - 1);
- int expectedScrollDistance = mAutoScroller.computeScrollDistance(-1, 1);
- mScrollAssert = (int dy) -> {
- assertTrue(dy == expectedScrollDistance);
- };
- mAutoScroller.run();
- }
-
- @Test
- public void testCursorInScrollZone_bottom() {
- mActive = true;
- mPoint = new Point(0, VIEW_HEIGHT - EDGE_HEIGHT + 1);
- int expectedScrollDistance = mAutoScroller.computeScrollDistance(1, 1);
- mScrollAssert = (int dy) -> {
- assertTrue(dy == expectedScrollDistance);
- };
- mAutoScroller.run();
- }
-
- class TestClock {
- private int timesCalled = 0;
-
- public long getCurrentTime() {
- return ++timesCalled;
- }
- }
-}
diff --git a/packages/DocumentsUI/tests/src/com/android/documentsui/model/DocumentInfoTest.java b/packages/DocumentsUI/tests/src/com/android/documentsui/model/DocumentInfoTest.java
deleted file mode 100644
index 2481dc3..0000000
--- a/packages/DocumentsUI/tests/src/com/android/documentsui/model/DocumentInfoTest.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.documentsui.model;
-
-import android.test.AndroidTestCase;
-import android.test.suitebuilder.annotation.SmallTest;
-
-@SmallTest
-public class DocumentInfoTest extends AndroidTestCase {
-
- private static final DocumentInfo TEST_DOC
- = createDocInfo("authority.a", "doc.1", "text/plain");
-
- public void testEquals() throws Exception {
- assertEquals(TEST_DOC, TEST_DOC);
- assertEquals(TEST_DOC, createDocInfo("authority.a", "doc.1", "text/plain"));
- }
-
- public void testEquals_HandlesNulls() throws Exception {
- assertFalse(TEST_DOC.equals(null));
- }
-
- public void testEquals_HandlesNullFields() throws Exception {
- assertFalse(TEST_DOC.equals(new DocumentInfo()));
- assertFalse(new DocumentInfo().equals(TEST_DOC));
- }
-
- public void testNotEquals_differentAuthority() throws Exception {
- assertFalse(TEST_DOC.equals(createDocInfo("authority.b", "doc.1", "text/plain")));
- }
-
- public void testNotEquals_differentDocId() throws Exception {
- assertFalse(TEST_DOC.equals(createDocInfo("authority.a", "doc.2", "text/plain")));
- }
-
- public void testNotEquals_differentMimetype() throws Exception {
- assertFalse(TEST_DOC.equals(createDocInfo("authority.a", "doc.1", "image/png")));
- }
-
- private static DocumentInfo createDocInfo(String authority, String docId, String mimeType) {
- DocumentInfo doc = new DocumentInfo();
- doc.authority = authority;
- doc.documentId = docId;
- doc.mimeType = mimeType;
- doc.deriveFields();
- return doc;
- }
-}
diff --git a/packages/DocumentsUI/tests/src/com/android/documentsui/services/AbstractCopyJobTest.java b/packages/DocumentsUI/tests/src/com/android/documentsui/services/AbstractCopyJobTest.java
deleted file mode 100644
index 2560f2c..0000000
--- a/packages/DocumentsUI/tests/src/com/android/documentsui/services/AbstractCopyJobTest.java
+++ /dev/null
@@ -1,173 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.documentsui.services;
-
-import static com.google.common.collect.Lists.newArrayList;
-
-import android.net.Uri;
-import android.provider.DocumentsContract;
-import android.test.suitebuilder.annotation.MediumTest;
-
-import com.android.documentsui.model.DocumentInfo;
-import com.android.documentsui.services.FileOperationService.OpType;
-
-import java.util.List;
-
-@MediumTest
-public abstract class AbstractCopyJobTest<T extends CopyJob> extends AbstractJobTest<T> {
-
- private final @OpType int mOpType;
-
- AbstractCopyJobTest(@OpType int opType) {
- mOpType = opType;
- }
-
- public void runCopyFilesTest() throws Exception {
- Uri testFile1 = mDocs.createDocument(mSrcRoot, "text/plain", "test1.txt");
- mDocs.writeDocument(testFile1, HAM_BYTES);
-
- Uri testFile2 = mDocs.createDocument(mSrcRoot, "text/plain", "test2.txt");
- mDocs.writeDocument(testFile2, FRUITY_BYTES);
-
- createJob(newArrayList(testFile1, testFile2)).run();
- mJobListener.waitForFinished();
-
- mDocs.assertChildCount(mDestRoot, 2);
- mDocs.assertHasFile(mDestRoot, "test1.txt");
- mDocs.assertHasFile(mDestRoot, "test2.txt");
- mDocs.assertFileContents(mDestRoot.documentId, "test1.txt", HAM_BYTES);
- mDocs.assertFileContents(mDestRoot.documentId, "test2.txt", FRUITY_BYTES);
- }
-
- public void runCopyVirtualTypedFileTest() throws Exception {
- Uri testFile = mDocs.createVirtualFile(
- mSrcRoot, "/virtual.sth", "virtual/mime-type",
- FRUITY_BYTES, "application/pdf", "text/html");
-
- createJob(newArrayList(testFile)).run();
-
- mJobListener.waitForFinished();
-
- mDocs.assertChildCount(mDestRoot, 1);
- mDocs.assertHasFile(mDestRoot, "virtual.sth.pdf"); // copy should convert file to PDF.
- mDocs.assertFileContents(mDestRoot.documentId, "virtual.sth.pdf", FRUITY_BYTES);
- }
-
- public void runCopyVirtualNonTypedFileTest() throws Exception {
- Uri testFile = mDocs.createVirtualFile(
- mSrcRoot, "/virtual.sth", "virtual/mime-type",
- FRUITY_BYTES);
-
- createJob(newArrayList(testFile)).run();
-
- mJobListener.waitForFinished();
- mJobListener.assertFailed();
- mJobListener.assertFilesFailed(newArrayList("virtual.sth"));
-
- mDocs.assertChildCount(mDestRoot, 0);
- }
-
- public void runCopyEmptyDirTest() throws Exception {
- Uri testDir = mDocs.createFolder(mSrcRoot, "emptyDir");
-
- createJob(newArrayList(testDir)).run();
- mJobListener.waitForFinished();
-
- mDocs.assertChildCount(mDestRoot, 1);
- mDocs.assertHasDirectory(mDestRoot, "emptyDir");
- }
-
- public void runCopyDirRecursivelyTest() throws Exception {
-
- Uri testDir1 = mDocs.createFolder(mSrcRoot, "dir1");
- mDocs.createDocument(testDir1, "text/plain", "test1.txt");
-
- Uri testDir2 = mDocs.createFolder(testDir1, "dir2");
- mDocs.createDocument(testDir2, "text/plain", "test2.txt");
-
- createJob(newArrayList(testDir1)).run();
- mJobListener.waitForFinished();
-
- DocumentInfo dir1Copy = mDocs.findDocument(mDestRoot.documentId, "dir1");
-
- mDocs.assertChildCount(dir1Copy.derivedUri, 2);
- mDocs.assertHasDirectory(dir1Copy.derivedUri, "dir2");
- mDocs.assertHasFile(dir1Copy.derivedUri, "test1.txt");
-
- DocumentInfo dir2Copy = mDocs.findDocument(dir1Copy.documentId, "dir2");
- mDocs.assertChildCount(dir2Copy.derivedUri, 1);
- mDocs.assertHasFile(dir2Copy.derivedUri, "test2.txt");
- }
-
- public void runNoCopyDirToSelfTest() throws Exception {
- Uri testDir = mDocs.createFolder(mSrcRoot, "someDir");
-
- createJob(mOpType,
- newArrayList(testDir),
- DocumentsContract.buildDocumentUri(AUTHORITY, mSrcRoot.documentId),
- testDir).run();
-
- mJobListener.waitForFinished();
- mJobListener.assertFailed();
- mJobListener.assertFilesFailed(newArrayList("someDir"));
-
- mDocs.assertChildCount(mDestRoot, 0);
- }
-
- public void runNoCopyDirToDescendentTest() throws Exception {
- Uri testDir = mDocs.createFolder(mSrcRoot, "someDir");
- Uri destDir = mDocs.createFolder(testDir, "theDescendent");
-
- createJob(mOpType,
- newArrayList(testDir),
- DocumentsContract.buildDocumentUri(AUTHORITY, mSrcRoot.documentId),
- destDir).run();
-
- mJobListener.waitForFinished();
- mJobListener.assertFailed();
- mJobListener.assertFilesFailed(newArrayList("someDir"));
-
- mDocs.assertChildCount(mDestRoot, 0);
- }
-
- public void runCopyFileWithReadErrorsTest() throws Exception {
- Uri testFile = mDocs.createDocument(mSrcRoot, "text/plain", "test1.txt");
- mDocs.writeDocument(testFile, HAM_BYTES);
-
- String testId = DocumentsContract.getDocumentId(testFile);
- mClient.call("simulateReadErrorsForFile", testId, null);
-
- createJob(newArrayList(testFile)).run();
-
- mJobListener.waitForFinished();
- mJobListener.assertFailed();
- mJobListener.assertFilesFailed(newArrayList("test1.txt"));
-
- mDocs.assertChildCount(mDestRoot, 0);
- }
-
- /**
- * Creates a job with a stack consisting to the default source and destination.
- * TODO: Clean up, as mDestRoot.documentInfo may not really be the parent of
- * srcs.
- */
- final T createJob(List<Uri> srcs) throws Exception {
- Uri srcParent = DocumentsContract.buildDocumentUri(AUTHORITY, mSrcRoot.documentId);
- Uri destination = DocumentsContract.buildDocumentUri(AUTHORITY, mDestRoot.documentId);
- return createJob(mOpType, srcs, srcParent, destination);
- }
-}
diff --git a/packages/DocumentsUI/tests/src/com/android/documentsui/services/AbstractJobTest.java b/packages/DocumentsUI/tests/src/com/android/documentsui/services/AbstractJobTest.java
deleted file mode 100644
index 6e4e534..0000000
--- a/packages/DocumentsUI/tests/src/com/android/documentsui/services/AbstractJobTest.java
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
- * Copyright (C) 2016 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.services;
-
-import static com.android.documentsui.StubProvider.ROOT_0_ID;
-import static com.android.documentsui.StubProvider.ROOT_1_ID;
-
-import android.content.ContentProviderClient;
-import android.content.ContentResolver;
-import android.content.Context;
-import android.net.Uri;
-import android.os.RemoteException;
-import android.test.AndroidTestCase;
-import android.test.suitebuilder.annotation.MediumTest;
-
-import com.android.documentsui.clipping.UrisSupplier;
-import com.android.documentsui.DocumentsProviderHelper;
-import com.android.documentsui.StubProvider;
-import com.android.documentsui.model.DocumentInfo;
-import com.android.documentsui.model.DocumentStack;
-import com.android.documentsui.model.RootInfo;
-import com.android.documentsui.services.FileOperationService.OpType;
-import com.android.documentsui.testing.DocsProviders;
-
-import java.util.List;
-
-@MediumTest
-public abstract class AbstractJobTest<T extends Job> extends AndroidTestCase {
-
- static String AUTHORITY = StubProvider.DEFAULT_AUTHORITY;
- static final byte[] HAM_BYTES = "ham and cheese".getBytes();
- static final byte[] FRUITY_BYTES = "I love fruit cakes!".getBytes();
-
- Context mContext;
- ContentResolver mResolver;
- ContentProviderClient mClient;
- DocumentsProviderHelper mDocs;
- TestJobListener mJobListener;
- RootInfo mSrcRoot;
- RootInfo mDestRoot;
-
- @Override
- protected void setUp() throws Exception {
- super.setUp();
-
- mJobListener = new TestJobListener();
-
- // NOTE: Must be the "target" context, else security checks in content provider will fail.
- mContext = getContext();
- mResolver = mContext.getContentResolver();
-
- mClient = mResolver.acquireContentProviderClient(AUTHORITY);
- mDocs = new DocumentsProviderHelper(AUTHORITY, mClient);
-
- initTestFiles();
- }
-
- @Override
- protected void tearDown() throws Exception {
- resetStorage();
- mClient.release();
- super.tearDown();
- }
-
- private void resetStorage() throws RemoteException {
- mClient.call("clear", null, null);
- }
-
- private void initTestFiles() throws RemoteException {
- mSrcRoot = mDocs.getRoot(ROOT_0_ID);
- mDestRoot = mDocs.getRoot(ROOT_1_ID);
- }
-
- final T createJob(@OpType int opType, List<Uri> srcs, Uri srcParent, Uri destination)
- throws Exception {
- DocumentStack stack = new DocumentStack();
- stack.push(DocumentInfo.fromUri(mResolver, destination));
- stack.root = mSrcRoot;
-
- UrisSupplier urisSupplier = DocsProviders.createDocsProvider(srcs);
- FileOperation operation = new FileOperation.Builder()
- .withOpType(opType)
- .withSrcs(urisSupplier)
- .withDestination(stack)
- .withSrcParent(srcParent)
- .build();
- return (T) operation.createJob(mContext, mJobListener, FileOperations.createJobId());
- }
-}
diff --git a/packages/DocumentsUI/tests/src/com/android/documentsui/services/CopyJobTest.java b/packages/DocumentsUI/tests/src/com/android/documentsui/services/CopyJobTest.java
deleted file mode 100644
index 64211c2..0000000
--- a/packages/DocumentsUI/tests/src/com/android/documentsui/services/CopyJobTest.java
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.documentsui.services;
-
-import static com.android.documentsui.services.FileOperationService.OPERATION_COPY;
-
-import static com.google.common.collect.Lists.newArrayList;
-
-import android.net.Uri;
-import android.provider.DocumentsContract.Document;
-import android.test.suitebuilder.annotation.MediumTest;
-
-@MediumTest
-public class CopyJobTest extends AbstractCopyJobTest<CopyJob> {
-
- public CopyJobTest() {
- super(OPERATION_COPY);
- }
-
- public void testCopyFiles() throws Exception {
- runCopyFilesTest();
- }
-
- public void testCopyVirtualTypedFile() throws Exception {
- runCopyVirtualTypedFileTest();
- }
-
- public void testCopyVirtualNonTypedFile() throws Exception {
- runCopyVirtualNonTypedFileTest();
- }
-
- public void testCopy_BackendSideVirtualTypedFile_Fallback() throws Exception {
- mDocs.assertChildCount(mDestRoot, 0);
-
- Uri testFile = mDocs.createDocumentWithFlags(
- mSrcRoot.documentId, "virtual/mime-type", "tokyo.sth",
- Document.FLAG_VIRTUAL_DOCUMENT | Document.FLAG_SUPPORTS_COPY
- | Document.FLAG_SUPPORTS_MOVE, "application/pdf");
-
- createJob(newArrayList(testFile)).run();
-
- mJobListener.waitForFinished();
- mDocs.assertChildCount(mDestRoot, 1);
- mDocs.assertHasFile(mDestRoot, "tokyo.sth.pdf"); // Copy should convert file to PDF.
- }
-
- public void testCopyEmptyDir() throws Exception {
- runCopyEmptyDirTest();
- }
-
- public void testCopyDirRecursively() throws Exception {
- runCopyDirRecursivelyTest();
- }
-
- public void testNoCopyDirToSelf() throws Exception {
- runNoCopyDirToSelfTest();
- }
-
- public void testNoCopyDirToDescendent() throws Exception {
- runNoCopyDirToDescendentTest();
- }
-
- public void testCopyFileWithReadErrors() throws Exception {
- runCopyFileWithReadErrorsTest();
- }
-}
diff --git a/packages/DocumentsUI/tests/src/com/android/documentsui/services/DeleteJobTest.java b/packages/DocumentsUI/tests/src/com/android/documentsui/services/DeleteJobTest.java
deleted file mode 100644
index 9dbe7ce..0000000
--- a/packages/DocumentsUI/tests/src/com/android/documentsui/services/DeleteJobTest.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Copyright (C) 2016 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.services;
-
-import static com.android.documentsui.services.FileOperationService.OPERATION_DELETE;
-
-import static com.google.common.collect.Lists.newArrayList;
-
-import android.net.Uri;
-import android.provider.DocumentsContract;
-import android.test.suitebuilder.annotation.MediumTest;
-
-import java.util.List;
-
-@MediumTest
-public class DeleteJobTest extends AbstractJobTest<DeleteJob> {
-
- public void testDeleteFiles() throws Exception {
- Uri testFile1 = mDocs.createDocument(mSrcRoot, "text/plain", "test1.txt");
- mDocs.writeDocument(testFile1, HAM_BYTES);
-
- Uri testFile2 = mDocs.createDocument(mSrcRoot, "text/plain", "test2.txt");
- mDocs.writeDocument(testFile2, FRUITY_BYTES);
-
- createJob(newArrayList(testFile1, testFile2),
- DocumentsContract.buildDocumentUri(AUTHORITY, mSrcRoot.documentId)).run();
- mJobListener.waitForFinished();
-
- mDocs.assertChildCount(mSrcRoot, 0);
- }
-
- /**
- * Creates a job with a stack consisting to the default src directory.
- */
- private final DeleteJob createJob(List<Uri> srcs, Uri srcParent) throws Exception {
- Uri stack = DocumentsContract.buildDocumentUri(AUTHORITY, mSrcRoot.documentId);
- return createJob(OPERATION_DELETE, srcs, srcParent, stack);
- }
-}
diff --git a/packages/DocumentsUI/tests/src/com/android/documentsui/services/FileOperationServiceTest.java b/packages/DocumentsUI/tests/src/com/android/documentsui/services/FileOperationServiceTest.java
deleted file mode 100644
index d6bbe5a..0000000
--- a/packages/DocumentsUI/tests/src/com/android/documentsui/services/FileOperationServiceTest.java
+++ /dev/null
@@ -1,367 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.documentsui.services;
-
-import static com.android.documentsui.services.FileOperationService.OPERATION_COPY;
-import static com.android.documentsui.services.FileOperationService.OPERATION_DELETE;
-import static com.android.documentsui.services.FileOperationService.OpType;
-import static com.android.documentsui.services.FileOperations.createBaseIntent;
-import static com.android.documentsui.services.FileOperations.createJobId;
-
-import static com.google.android.collect.Lists.newArrayList;
-
-import android.content.Context;
-import android.content.Intent;
-import android.net.Uri;
-import android.os.Parcel;
-import android.os.Parcelable;
-import android.test.ServiceTestCase;
-import android.test.suitebuilder.annotation.MediumTest;
-
-import com.android.documentsui.clipping.UrisSupplier;
-import com.android.documentsui.model.DocumentInfo;
-import com.android.documentsui.model.DocumentStack;
-import com.android.documentsui.testing.DocsProviders;
-import com.android.documentsui.testing.TestHandler;
-import com.android.documentsui.testing.TestScheduledExecutorService;
-
-import java.util.ArrayList;
-import java.util.List;
-
-@MediumTest
-public class FileOperationServiceTest extends ServiceTestCase<FileOperationService> {
-
- private static final Uri SRC_PARENT =
- Uri.parse("content://com.android.documentsui.testing/parent");
- private static final DocumentInfo ALPHA_DOC = createDoc("alpha");
- private static final DocumentInfo BETA_DOC = createDoc("alpha");
- private static final DocumentInfo GAMMA_DOC = createDoc("gamma");
- private static final DocumentInfo DELTA_DOC = createDoc("delta");
-
- private final List<TestJob> mCopyJobs = new ArrayList<>();
- private final List<TestJob> mDeleteJobs = new ArrayList<>();
-
- private FileOperationService mService;
- private TestScheduledExecutorService mExecutor;
- private TestScheduledExecutorService mDeletionExecutor;
- private TestHandler mHandler;
-
- public FileOperationServiceTest() {
- super(FileOperationService.class);
- }
-
- @Override
- protected void setUp() throws Exception {
- super.setUp();
- setupService(); // must be called first for our test setup to work correctly.
-
- mExecutor = new TestScheduledExecutorService();
- mDeletionExecutor = new TestScheduledExecutorService();
- mHandler = new TestHandler();
-
- mCopyJobs.clear();
- mDeleteJobs.clear();
-
- // Install test doubles.
- mService = getService();
-
- assertNull(mService.executor);
- mService.executor = mExecutor;
-
- assertNull(mService.deletionExecutor);
- mService.deletionExecutor = mDeletionExecutor;
-
- assertNull(mService.handler);
- mService.handler = mHandler;
- }
-
- @Override
- protected void tearDown() {
- // There are lots of progress notifications generated in this test case.
- // Dismiss all of them here.
- mHandler.dispatchAllMessages();
- }
-
- public void testRunsCopyJobs() throws Exception {
- startService(createCopyIntent(newArrayList(ALPHA_DOC), BETA_DOC));
- startService(createCopyIntent(newArrayList(GAMMA_DOC), DELTA_DOC));
-
- mExecutor.runAll();
- assertAllCopyJobsStarted();
- }
-
- public void testRunsCopyJobs_AfterExceptionInJobCreation() throws Exception {
- try {
- startService(createCopyIntent(new ArrayList<>(), BETA_DOC));
- } catch(AssertionError e) {
- // Expected AssertionError
- }
- startService(createCopyIntent(newArrayList(GAMMA_DOC), DELTA_DOC));
-
- assertJobsCreated(1);
-
- mExecutor.runAll();
- assertAllCopyJobsStarted();
- }
-
- public void testRunsCopyJobs_AfterFailure() throws Exception {
- startService(createCopyIntent(newArrayList(ALPHA_DOC), BETA_DOC));
- startService(createCopyIntent(newArrayList(GAMMA_DOC), DELTA_DOC));
-
- mCopyJobs.get(0).fail(ALPHA_DOC);
-
- mExecutor.runAll();
- assertAllCopyJobsStarted();
- }
-
- public void testRunsCopyJobs_notRunsDeleteJobs() throws Exception {
- startService(createCopyIntent(newArrayList(ALPHA_DOC), BETA_DOC));
- startService(createDeleteIntent(newArrayList(GAMMA_DOC)));
-
- mExecutor.runAll();
- assertNoDeleteJobsStarted();
- }
-
- public void testRunsDeleteJobs() throws Exception {
- startService(createDeleteIntent(newArrayList(ALPHA_DOC)));
-
- mDeletionExecutor.runAll();
- assertAllDeleteJobsStarted();
- }
-
- public void testRunsDeleteJobs_NotRunsCopyJobs() throws Exception {
- startService(createCopyIntent(newArrayList(ALPHA_DOC), BETA_DOC));
- startService(createDeleteIntent(newArrayList(GAMMA_DOC)));
-
- mDeletionExecutor.runAll();
- assertNoCopyJobsStarted();
- }
-
- public void testUpdatesNotification() throws Exception {
- startService(createCopyIntent(newArrayList(ALPHA_DOC), BETA_DOC));
- mExecutor.runAll();
-
- // Assert monitoring continues until job is done
- assertTrue(mHandler.hasScheduledMessage());
- // Two notifications -- one for setup; one for progress
- assertEquals(2, mCopyJobs.get(0).getNumOfNotifications());
- }
-
- public void testStopsUpdatingNotificationAfterFinished() throws Exception {
- startService(createCopyIntent(newArrayList(ALPHA_DOC), BETA_DOC));
- mExecutor.runAll();
-
- mHandler.dispatchNextMessage();
- // Assert monitoring stops once job is completed.
- assertFalse(mHandler.hasScheduledMessage());
-
- // Assert no more notification is generated after finish.
- assertEquals(2, mCopyJobs.get(0).getNumOfNotifications());
-
- }
-
- public void testHoldsWakeLockWhileWorking() throws Exception {
- startService(createCopyIntent(newArrayList(ALPHA_DOC), BETA_DOC));
-
- assertTrue(mService.holdsWakeLock());
- }
-
- public void testReleasesWakeLock_AfterSuccess() throws Exception {
- startService(createCopyIntent(newArrayList(ALPHA_DOC), BETA_DOC));
-
- assertTrue(mService.holdsWakeLock());
- mExecutor.runAll();
- assertFalse(mService.holdsWakeLock());
- }
-
- public void testReleasesWakeLock_AfterFailure() throws Exception {
- startService(createCopyIntent(newArrayList(ALPHA_DOC), BETA_DOC));
-
- assertTrue(mService.holdsWakeLock());
- mExecutor.runAll();
- assertFalse(mService.holdsWakeLock());
- }
-
- public void testShutdownStopsExecutor_AfterSuccess() throws Exception {
- startService(createCopyIntent(newArrayList(ALPHA_DOC), BETA_DOC));
-
- mExecutor.assertAlive();
- mDeletionExecutor.assertAlive();
-
- mExecutor.runAll();
- shutdownService();
-
- assertExecutorsShutdown();
- }
-
- public void testShutdownStopsExecutor_AfterMixedFailures() throws Exception {
- startService(createCopyIntent(newArrayList(ALPHA_DOC), BETA_DOC));
- startService(createCopyIntent(newArrayList(GAMMA_DOC), DELTA_DOC));
-
- mCopyJobs.get(0).fail(ALPHA_DOC);
-
- mExecutor.runAll();
- shutdownService();
-
- assertExecutorsShutdown();
- }
-
- public void testShutdownStopsExecutor_AfterTotalFailure() throws Exception {
- startService(createCopyIntent(newArrayList(ALPHA_DOC), BETA_DOC));
- startService(createCopyIntent(newArrayList(GAMMA_DOC), DELTA_DOC));
-
- mCopyJobs.get(0).fail(ALPHA_DOC);
- mCopyJobs.get(1).fail(GAMMA_DOC);
-
- mExecutor.runAll();
- shutdownService();
-
- assertExecutorsShutdown();
- }
-
- private Intent createCopyIntent(ArrayList<DocumentInfo> files, DocumentInfo dest)
- throws Exception {
- DocumentStack stack = new DocumentStack();
- stack.push(dest);
-
- List<Uri> uris = new ArrayList<>(files.size());
- for (DocumentInfo file: files) {
- uris.add(file.derivedUri);
- }
-
- UrisSupplier urisSupplier = DocsProviders.createDocsProvider(uris);
- TestFileOperation operation = new TestFileOperation(OPERATION_COPY, urisSupplier, stack);
-
- return createBaseIntent(getContext(), createJobId(), operation);
- }
-
- private Intent createDeleteIntent(ArrayList<DocumentInfo> files) {
- DocumentStack stack = new DocumentStack();
-
- List<Uri> uris = new ArrayList<>(files.size());
- for (DocumentInfo file: files) {
- uris.add(file.derivedUri);
- }
-
- UrisSupplier urisSupplier = DocsProviders.createDocsProvider(uris);
- TestFileOperation operation = new TestFileOperation(OPERATION_DELETE, urisSupplier, stack);
-
- return createBaseIntent(getContext(), createJobId(), operation);
- }
-
- private static DocumentInfo createDoc(String name) {
- // Doesn't need to be valid content Uri, just some urly looking thing.
- Uri uri = new Uri.Builder()
- .scheme("content")
- .authority("com.android.documentsui.testing")
- .path(name)
- .build();
-
- return createDoc(uri);
- }
-
- void assertAllCopyJobsStarted() {
- for (TestJob job : mCopyJobs) {
- job.assertStarted();
- }
- }
-
- void assertAllDeleteJobsStarted() {
- for (TestJob job : mDeleteJobs) {
- job.assertStarted();
- }
- }
-
- void assertNoCopyJobsStarted() {
- for (TestJob job : mCopyJobs) {
- job.assertNotStarted();
- }
- }
-
- void assertNoDeleteJobsStarted() {
- for (TestJob job : mDeleteJobs) {
- job.assertNotStarted();
- }
- }
-
- void assertJobsCreated(int expected) {
- assertEquals(expected, mCopyJobs.size() + mDeleteJobs.size());
- }
- private static DocumentInfo createDoc(Uri destination) {
- DocumentInfo destDoc = new DocumentInfo();
- destDoc.derivedUri = destination;
- return destDoc;
- }
-
- private void assertExecutorsShutdown() {
- mExecutor.assertShutdown();
- mDeletionExecutor.assertShutdown();
- }
-
- private final class TestFileOperation extends FileOperation {
-
- private final Runnable mJobRunnable = () -> {
- // The following statement is executed concurrently to Job.start() in real situation.
- // Call it in TestJob.start() to mimic this behavior.
- mHandler.dispatchNextMessage();
- };
- private final @OpType int mOpType;
- private final UrisSupplier mSrcs;
- private final DocumentStack mDestination;
-
- private TestFileOperation(
- @OpType int opType, UrisSupplier srcs, DocumentStack destination) {
- super(opType, srcs, destination);
- mOpType = opType;
- mSrcs = srcs;
- mDestination = destination;
- }
-
- @Override
- public Job createJob(Context service, Job.Listener listener, String id) {
- TestJob job =
- new TestJob(service, listener, id, mOpType, mDestination, mSrcs, mJobRunnable);
-
- if (mOpType == OPERATION_COPY) {
- mCopyJobs.add(job);
- }
-
- if (mOpType == OPERATION_DELETE) {
- mDeleteJobs.add(job);
- }
-
- return job;
- }
-
- /**
- * CREATOR is required for Parcelables, but we never pass this class via parcel.
- */
- public Parcelable.Creator<TestFileOperation> CREATOR =
- new Parcelable.Creator<TestFileOperation>() {
-
- @Override
- public TestFileOperation createFromParcel(Parcel source) {
- throw new UnsupportedOperationException("Can't create from a parcel.");
- }
-
- @Override
- public TestFileOperation[] newArray(int size) {
- throw new UnsupportedOperationException("Can't create a new array.");
- }
- };
- }
-}
diff --git a/packages/DocumentsUI/tests/src/com/android/documentsui/services/MoveJobTest.java b/packages/DocumentsUI/tests/src/com/android/documentsui/services/MoveJobTest.java
deleted file mode 100644
index 56d96cc..0000000
--- a/packages/DocumentsUI/tests/src/com/android/documentsui/services/MoveJobTest.java
+++ /dev/null
@@ -1,111 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.documentsui.services;
-
-import static com.android.documentsui.services.FileOperationService.OPERATION_MOVE;
-
-import static com.google.common.collect.Lists.newArrayList;
-
-import android.net.Uri;
-import android.provider.DocumentsContract.Document;
-import android.test.suitebuilder.annotation.MediumTest;
-
-@MediumTest
-public class MoveJobTest extends AbstractCopyJobTest<MoveJob> {
-
- public MoveJobTest() {
- super(OPERATION_MOVE);
- }
-
- public void testMoveFiles() throws Exception {
- runCopyFilesTest();
-
- mDocs.assertChildCount(mSrcRoot, 0);
- }
-
- public void testMoveVirtualTypedFile() throws Exception {
- mDocs.createFolder(mSrcRoot, "hello");
- Uri testFile = mDocs.createVirtualFile(
- mSrcRoot, "/hello/virtual.sth", "virtual/mime-type",
- FRUITY_BYTES, "application/pdf", "text/html");
- createJob(newArrayList(testFile)).run();
-
- mJobListener.waitForFinished();
-
- // Should have failed, source not deleted. Moving by bytes for virtual files
- // is not supported.
- mDocs.assertChildCount(mDestRoot, 0);
- mDocs.assertChildCount(mSrcRoot, 1);
- }
-
- public void testMoveVirtualNonTypedFile() throws Exception {
- runCopyVirtualNonTypedFileTest();
-
- // Should have failed, source not deleted.
- mDocs.assertChildCount(mSrcRoot, 1);
- }
-
- public void testMove_BackendSideVirtualTypedFile_Fallback() throws Exception {
- Uri testFile = mDocs.createDocumentWithFlags(
- mSrcRoot.documentId, "virtual/mime-type", "tokyo.sth",
- Document.FLAG_VIRTUAL_DOCUMENT | Document.FLAG_SUPPORTS_COPY
- | Document.FLAG_SUPPORTS_MOVE, "application/pdf");
-
- createJob(newArrayList(testFile)).run();
- mJobListener.waitForFinished();
-
- // Should have failed, source not deleted. Moving by bytes for virtual files
- // is not supported.
- mDocs.assertChildCount(mDestRoot, 0);
- mDocs.assertChildCount(mSrcRoot, 1);
- }
-
- public void testMoveEmptyDir() throws Exception {
- runCopyEmptyDirTest();
-
- mDocs.assertChildCount(mSrcRoot, 0);
- }
-
- public void testMoveDirRecursively() throws Exception {
- runCopyDirRecursivelyTest();
-
- mDocs.assertChildCount(mSrcRoot, 0);
- }
-
- public void testNoMoveDirToSelf() throws Exception {
- runNoCopyDirToSelfTest();
-
- // should have failed, source not deleted
- mDocs.assertChildCount(mSrcRoot, 1);
- }
-
- public void testNoMoveDirToDescendent() throws Exception {
- runNoCopyDirToDescendentTest();
-
- // should have failed, source not deleted
- mDocs.assertChildCount(mSrcRoot, 1);
- }
-
- public void testMoveFileWithReadErrors() throws Exception {
- runCopyFileWithReadErrorsTest();
-
- // should have failed, source not deleted
- mDocs.assertChildCount(mSrcRoot, 1);
- }
-
- // TODO: Add test cases for moving when multi-parented.
-}
diff --git a/packages/DocumentsUI/tests/src/com/android/documentsui/services/TestContentResolver.java b/packages/DocumentsUI/tests/src/com/android/documentsui/services/TestContentResolver.java
deleted file mode 100644
index 8f39b14..0000000
--- a/packages/DocumentsUI/tests/src/com/android/documentsui/services/TestContentResolver.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * Copyright (C) 2016 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.services;
-
-import android.content.Context;
-import android.database.ContentObserver;
-import android.net.Uri;
-import android.provider.DocumentsContract;
-import android.test.mock.MockContentResolver;
-import android.util.Log;
-
-import java.util.concurrent.CountDownLatch;
-import java.util.concurrent.TimeUnit;
-import java.util.concurrent.TimeoutException;
-
-/**
- * A test resolver that enables this test suite to listen for notifications that mark when copy
- * operations are done.
- */
-class TestContentResolver extends MockContentResolver {
-
- private static final String TAG = "TestContextResolver";
-
- private CountDownLatch mReadySignal;
- private CountDownLatch mNotificationSignal;
- private Context mContext;
-
- public TestContentResolver(Context context) {
- mContext = context;
- mReadySignal = new CountDownLatch(1);
- }
-
- /**
- * Wait for the given number of files to be copied to destination. Times out after 1 sec.
- */
- public void waitForChanges(int count) throws Exception {
- // Wait for no more than 1 second by default.
- waitForChanges(count, 1000);
- }
-
- /**
- * Wait for files to be copied to destination.
- *
- * @param count Number of files to wait for.
- * @param timeOut Timeout in ms. TimeoutException will be thrown if this function times out.
- */
- public void waitForChanges(int count, int timeOut) throws Exception {
- mNotificationSignal = new CountDownLatch(count);
- // Signal that the test is now waiting for files.
- mReadySignal.countDown();
- if (!mNotificationSignal.await(timeOut, TimeUnit.MILLISECONDS)) {
- throw new TimeoutException("Timed out waiting for file operations to complete.");
- }
- }
-
- @Override
- public void notifyChange(Uri uri, ContentObserver observer, boolean syncToNetwork) {
- // Wait until the test is ready to receive file notifications.
- try {
- mReadySignal.await();
- } catch (InterruptedException e) {
- Log.d(TAG, "Interrupted while waiting for file copy readiness");
- Thread.currentThread().interrupt();
- }
- if (DocumentsContract.isDocumentUri(mContext, uri)) {
- Log.d(TAG, "Notification: " + uri);
- // Watch for document URI change notifications - this signifies the end of a copy.
- mNotificationSignal.countDown();
- }
- }
-}
\ No newline at end of file
diff --git a/packages/DocumentsUI/tests/src/com/android/documentsui/services/TestJob.java b/packages/DocumentsUI/tests/src/com/android/documentsui/services/TestJob.java
deleted file mode 100644
index 1fbcf37..0000000
--- a/packages/DocumentsUI/tests/src/com/android/documentsui/services/TestJob.java
+++ /dev/null
@@ -1,110 +0,0 @@
-/*
- * Copyright (C) 2016 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.services;
-
-import static junit.framework.Assert.assertFalse;
-import static junit.framework.Assert.assertTrue;
-
-import android.app.Notification;
-import android.app.Notification.Builder;
-import android.content.Context;
-
-import com.android.documentsui.clipping.UrisSupplier;
-import com.android.documentsui.R;
-import com.android.documentsui.model.DocumentInfo;
-import com.android.documentsui.model.DocumentStack;
-import com.android.documentsui.services.FileOperationService.OpType;
-
-import java.text.NumberFormat;
-
-public class TestJob extends Job {
-
- private boolean mStarted;
- private Runnable mStartRunnable;
-
- private int mNumOfNotifications = 0;
-
- TestJob(
- Context service, Listener listener, String id,
- @OpType int opType, DocumentStack stack, UrisSupplier srcs, Runnable startRunnable) {
- super(service, listener, id, opType, stack, srcs);
-
- mStartRunnable = startRunnable;
- }
-
- @Override
- void start() {
- mStarted = true;
-
- mStartRunnable.run();
- }
-
- void assertStarted() {
- assertTrue(mStarted);
- }
-
- void assertNotStarted() {
- assertFalse(mStarted);
- }
-
- void fail(DocumentInfo doc) {
- onFileFailed(doc);
- }
-
- int getNumOfNotifications() {
- return mNumOfNotifications;
- }
-
- @Override
- Notification getSetupNotification() {
- ++mNumOfNotifications;
- return getSetupNotification(service.getString(R.string.copy_preparing));
- }
-
- @Override
- Notification getProgressNotification() {
- ++mNumOfNotifications;
- double completed = mStarted ? 1F : 0F;
- return mProgressBuilder
- .setProgress(1, (int) completed, true)
- .setSubText(NumberFormat.getPercentInstance().format(completed))
- .build();
- }
-
- @Override
- Notification getFailureNotification() {
- // the "copy" stuff was just convenient and available :)
- return getFailureNotification(
- R.plurals.copy_error_notification_title, R.drawable.ic_menu_copy);
- }
-
- @Override
- Notification getWarningNotification() {
- throw new UnsupportedOperationException();
- }
-
- @Override
- Builder createProgressBuilder() {
- ++mNumOfNotifications;
- // the "copy" stuff was just convenient and available :)
- return super.createProgressBuilder(
- service.getString(R.string.copy_notification_title),
- R.drawable.ic_menu_copy,
- service.getString(android.R.string.cancel),
- R.drawable.ic_cab_cancel);
- }
-}
diff --git a/packages/DocumentsUI/tests/src/com/android/documentsui/services/TestJobListener.java b/packages/DocumentsUI/tests/src/com/android/documentsui/services/TestJobListener.java
deleted file mode 100644
index e9c68c6..0000000
--- a/packages/DocumentsUI/tests/src/com/android/documentsui/services/TestJobListener.java
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
- * Copyright (C) 2016 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.services;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.fail;
-
-import android.support.annotation.Nullable;
-
-import com.android.documentsui.model.DocumentInfo;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.concurrent.CountDownLatch;
-import java.util.concurrent.TimeUnit;
-
-public class TestJobListener implements Job.Listener {
-
- private final CountDownLatch latch = new CountDownLatch(1);
- private final List<Job> progress = new ArrayList<>();
- @Nullable private Job started;
- @Nullable private Job finished;
-
- @Override
- public void onStart(Job job) {
- started = job;
- }
-
- @Override
- public void onFinished(Job job) {
- this.finished = job;
- latch.countDown();
- }
-
- public void assertStarted() {
- if (started == null) {
- fail("Job didn't start. onStart never called.");
- }
- }
-
- public void assertFinished() {
- if (finished == null) {
- fail("Job didn't finish. onFinish never called.");
- }
- }
-
- public void assertFailed() {
- if (finished == null || !finished.hasFailures()) {
- fail("Job didn't fail. onFailed never called.");
- }
- }
-
- public void assertFilesFailed(ArrayList<String> names) {
- if (finished == null || !finished.hasFailures()) {
- fail("Can't test failed documetns. Job didn't fail.");
- }
-
- assertEquals(finished.failedFiles.size(), names.size());
- for (String name : names) {
- assertFileFailed(name);
- }
- }
-
- public void assertFileFailed(String name) {
- if (finished == null || !finished.hasFailures()) {
- fail("Can't test failed documetns. Job didn't fail.");
- }
-
- for (DocumentInfo failed : finished.failedFiles) {
- if (name.equals(failed.displayName)) {
- return;
- }
- }
- fail("Couldn't find failed file: " + name);
- }
-
- public void assertCanceled() {
- if (finished == null) {
- fail("Can't determine if job was canceled. Job didn't finish.");
- }
- if (!finished.isCanceled()) {
- fail("Job wasn't canceled. Job#isCanceled returned false.");
- }
- }
-
- public void assertMadeProgress() {
- if (progress.isEmpty()) {
- fail("Job made no progress. onProgress never called.");
- }
- }
-
- public void waitForFinished() throws InterruptedException {
- latch.await(500, TimeUnit.MILLISECONDS);
- }
-}
diff --git a/packages/DocumentsUI/tests/src/com/android/documentsui/testing/Bitmaps.java b/packages/DocumentsUI/tests/src/com/android/documentsui/testing/Bitmaps.java
deleted file mode 100644
index 1b94b15..0000000
--- a/packages/DocumentsUI/tests/src/com/android/documentsui/testing/Bitmaps.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Copyright (C) 2016 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.testing;
-
-import android.graphics.Bitmap;
-
-public final class Bitmaps {
-
- private Bitmaps() {}
-
- public static Bitmap createTestBitmap(int width, int height) {
- final Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
-
- return bitmap;
- }
-
-}
diff --git a/packages/DocumentsUI/tests/src/com/android/documentsui/testing/ClipDatas.java b/packages/DocumentsUI/tests/src/com/android/documentsui/testing/ClipDatas.java
deleted file mode 100644
index 525a02e..0000000
--- a/packages/DocumentsUI/tests/src/com/android/documentsui/testing/ClipDatas.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright (C) 2016 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.testing;
-
-import android.content.ClipData;
-
-import org.mockito.Mockito;
-
-public final class ClipDatas {
-
- private ClipDatas() {}
-
- public static ClipData createTestClipData() {
- final ClipData data = Mockito.mock(ClipData.class);
-
- return data;
- }
-
-}
diff --git a/packages/DocumentsUI/tests/src/com/android/documentsui/testing/DocsProviders.java b/packages/DocumentsUI/tests/src/com/android/documentsui/testing/DocsProviders.java
deleted file mode 100644
index c08157f..0000000
--- a/packages/DocumentsUI/tests/src/com/android/documentsui/testing/DocsProviders.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Copyright (C) 2016 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.testing;
-
-import android.net.Uri;
-
-import com.android.documentsui.clipping.UrisSupplier;
-
-import java.util.List;
-
-public final class DocsProviders {
- private DocsProviders() {}
-
- public static UrisSupplier createDocsProvider(List<Uri> docs) {
- return new UrisSupplier.StandardUrisSupplier(docs);
- }
-}
diff --git a/packages/DocumentsUI/tests/src/com/android/documentsui/testing/DragEvents.java b/packages/DocumentsUI/tests/src/com/android/documentsui/testing/DragEvents.java
deleted file mode 100644
index 4ad9ec0..0000000
--- a/packages/DocumentsUI/tests/src/com/android/documentsui/testing/DragEvents.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Copyright (C) 2016 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.testing;
-
-import android.content.ClipData;
-import android.view.DragEvent;
-
-import org.mockito.Mockito;
-
-public final class DragEvents {
-
- private DragEvents() {}
-
- public static DragEvent createTestDragEvent(int actionId) {
- final DragEvent mockEvent = Mockito.mock(DragEvent.class);
- Mockito.when(mockEvent.getAction()).thenReturn(actionId);
-
- return mockEvent;
- }
-
- public static DragEvent createTestLocationEvent(float x, float y) {
- final DragEvent locationEvent = createTestDragEvent(DragEvent.ACTION_DRAG_LOCATION);
- Mockito.when(locationEvent.getX()).thenReturn(x);
- Mockito.when(locationEvent.getY()).thenReturn(y);
-
- return locationEvent;
- }
-
- public static DragEvent createTestDropEvent(ClipData clipData) {
- final DragEvent dropEvent = createTestDragEvent(DragEvent.ACTION_DROP);
- Mockito.when(dropEvent.getClipData()).thenReturn(clipData);
-
- return dropEvent;
- }
-
-}
diff --git a/packages/DocumentsUI/tests/src/com/android/documentsui/testing/TestDirectoryDetails.java b/packages/DocumentsUI/tests/src/com/android/documentsui/testing/TestDirectoryDetails.java
deleted file mode 100644
index e2891bf..0000000
--- a/packages/DocumentsUI/tests/src/com/android/documentsui/testing/TestDirectoryDetails.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * Copyright (C) 2016 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.testing;
-
-import com.android.documentsui.MenuManager.DirectoryDetails;
-
-/**
- * Test copy of DirectoryDetails, everything default to false
- */
-public class TestDirectoryDetails extends DirectoryDetails {
-
- public boolean shouldShowFancyFeatures;
- public boolean isInRecents;
- public boolean hasRootSettings;
- public boolean hasItemsToPaste;
- public boolean canCreateDirectory;
- public boolean getDisplayFileSize;
-
- public TestDirectoryDetails() {
- super(null);
- }
-
- @Override
- public boolean shouldShowFancyFeatures() {
- return shouldShowFancyFeatures;
- }
-
- @Override
- public boolean hasRootSettings() {
- return hasRootSettings;
- }
-
- @Override
- public boolean hasItemsToPaste() {
- return hasItemsToPaste;
- }
-
- @Override
- public boolean isInRecents() {
- return isInRecents;
- }
-
- @Override
- public boolean canCreateDirectory() {
- return canCreateDirectory;
- }
-
- @Override
- public boolean getDisplayFileSize() {
- return getDisplayFileSize;
- }
-}
\ No newline at end of file
diff --git a/packages/DocumentsUI/tests/src/com/android/documentsui/testing/TestDrawable.java b/packages/DocumentsUI/tests/src/com/android/documentsui/testing/TestDrawable.java
deleted file mode 100644
index bc3831ec..0000000
--- a/packages/DocumentsUI/tests/src/com/android/documentsui/testing/TestDrawable.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Copyright (C) 2016 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.testing;
-
-import android.graphics.Canvas;
-import android.graphics.ColorFilter;
-import android.graphics.drawable.Drawable;
-
-public class TestDrawable extends Drawable {
-
- public float hotspotX;
- public float hotspotY;
-
- @Override
- public void setHotspot(float x, float y) {
- hotspotX = x;
- hotspotY = y;
- }
-
- @Override
- public void draw(Canvas canvas) {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public void setAlpha(int alpha) {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public void setColorFilter(ColorFilter colorFilter) {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public int getOpacity() {
- throw new UnsupportedOperationException();
- }
-}
diff --git a/packages/DocumentsUI/tests/src/com/android/documentsui/testing/TestEvent.java b/packages/DocumentsUI/tests/src/com/android/documentsui/testing/TestEvent.java
deleted file mode 100644
index 98fa2de..0000000
--- a/packages/DocumentsUI/tests/src/com/android/documentsui/testing/TestEvent.java
+++ /dev/null
@@ -1,138 +0,0 @@
-/*
- * Copyright (C) 2016 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.testing;
-
-import com.android.documentsui.Events.InputEvent;
-import com.android.documentsui.TestInputEvent;
-import com.android.documentsui.dirlist.UserInputHandler.DocumentDetails;
-
-/**
- * Events and DocDetails are closely related. For the pursposes of this test
- * we coalesce the two in a single, handy-dandy test class.
- */
-public class TestEvent extends TestInputEvent implements DocumentDetails {
-
- private String modelId;
- private boolean inHotspot;
-
- @Override
- public String getModelId() {
- return modelId;
- }
-
- @Override
- public int getAdapterPosition() {
- return getItemPosition();
- }
-
- @Override
- public boolean isInSelectionHotspot(InputEvent event) {
- return inHotspot;
- }
-
- public TestEvent at(int position) {
- this.position = position; // this is both "adapter position" and "item position".
- modelId = String.valueOf(position);
- return this;
- }
-
- public TestEvent shift() {
- this.shiftKeyDow = true;
- return this;
- }
-
- public TestEvent inHotspot() {
- this.inHotspot = true;
- return this;
- }
-
- public DocumentDetails getDocument() {
- return this;
- }
-
- @Override
- public int hashCode() {
- return modelId != null ? modelId.hashCode() : -1;
- }
-
- @Override
- public boolean equals(Object o) {
- if (this == o) {
- return true;
- }
-
- if (!(o instanceof TestEvent)) {
- return false;
- }
-
- TestEvent other = (TestEvent) o;
- return position == other.position
- && modelId == other.modelId
- && shiftKeyDow == other.shiftKeyDow
- && mouseEvent == other.mouseEvent;
- }
-
- public static final Builder builder() {
- return new Builder();
- }
-
- public static final class Builder {
-
- private TestEvent mState = new TestEvent();
-
- public Builder reset() {
- mState = new TestEvent();
- return this;
- }
-
- public Builder at(int position) {
- mState.position = position; // this is both "adapter position" and "item position".
- mState.modelId = String.valueOf(position);
- return this;
- }
-
- public Builder shift() {
- mState.shiftKeyDow = true;
- return this;
- }
-
- public Builder unshift() {
- mState.shiftKeyDow = false;
- return this;
- }
-
- public Builder inHotspot() {
- mState.inHotspot = true;
- return this;
- }
-
- public Builder mouse() {
- mState.mouseEvent = true;
- return this;
- }
-
- public TestEvent build() {
- // Return a copy, so nobody can mess w/ our internal state.
- TestEvent e = new TestEvent();
- e.position = mState.position;
- e.modelId = mState.modelId;
- e.shiftKeyDow = mState.shiftKeyDow;
- e.mouseEvent = mState.mouseEvent;
- return e;
- }
- }
-}
diff --git a/packages/DocumentsUI/tests/src/com/android/documentsui/testing/TestHandler.java b/packages/DocumentsUI/tests/src/com/android/documentsui/testing/TestHandler.java
deleted file mode 100644
index 143ec71..0000000
--- a/packages/DocumentsUI/tests/src/com/android/documentsui/testing/TestHandler.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * Copyright (C) 2016 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.testing;
-
-import android.os.Handler;
-import android.os.Looper;
-import android.os.Message;
-
-import java.util.TimerTask;
-
-/**
- * A test double of {@link Handler}, backed by {@link TestTimer}.
- */
-public class TestHandler extends Handler {
- private TestTimer mTimer = new TestTimer();
-
- public TestHandler() {
- // Use main looper to trick underlying handler, we're not using it at all.
- super(Looper.getMainLooper());
- }
-
- public boolean hasScheduledMessage() {
- return mTimer.hasScheduledTask();
- }
-
- public void dispatchNextMessage() {
- mTimer.fastForwardToNextTask();
- }
-
- public void dispatchAllMessages() {
- while (hasScheduledMessage()) {
- dispatchNextMessage();
- }
- }
-
- @Override
- public boolean sendMessageAtTime(Message msg, long uptimeMillis) {
- msg.setTarget(this);
- TimerTask task = new MessageTimerTask(msg);
- mTimer.scheduleAtTime(new TestTimer.Task(task), uptimeMillis);
- return true;
- }
-
- private static class MessageTimerTask extends TimerTask {
- private Message mMessage;
-
- private MessageTimerTask(Message message) {
- mMessage = message;
- }
-
- @Override
- public void run() {
- mMessage.getTarget().dispatchMessage(mMessage);
- }
- }
-}
diff --git a/packages/DocumentsUI/tests/src/com/android/documentsui/testing/TestMenu.java b/packages/DocumentsUI/tests/src/com/android/documentsui/testing/TestMenu.java
deleted file mode 100644
index a8699b9..0000000
--- a/packages/DocumentsUI/tests/src/com/android/documentsui/testing/TestMenu.java
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- * Copyright (C) 2016 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.testing;
-
-import android.util.SparseArray;
-import android.view.Menu;
-
-import com.android.documentsui.R;
-
-import org.mockito.Mockito;
-
-/**
- *
- * Test copy of {@link android.view.Menu}.
- *
- * We use abstract so we don't have to implement all the necessary methods from the interface,
- * and we use Mockito to just mock out the methods we need.
- * To get an instance, use {@link #create(int...)}.
- */
-public abstract class TestMenu implements Menu {
-
- private SparseArray<TestMenuItem> items = new SparseArray<>();
-
- public static TestMenu create() {
- return create(R.id.menu_open,
- R.id.menu_rename,
- R.id.menu_move_to,
- R.id.menu_copy_to,
- R.id.menu_cut_to_clipboard,
- R.id.menu_copy_to_clipboard,
- R.id.menu_paste_from_clipboard,
- R.id.menu_share,
- R.id.menu_delete,
- R.id.menu_create_dir,
- R.id.menu_settings,
- R.id.menu_new_window,
- R.id.menu_select_all,
- R.id.menu_file_size,
- R.id.menu_grid,
- R.id.menu_list,
- R.id.menu_sort,
- R.id.menu_sort_size,
- R.id.menu_advanced,
- R.id.menu_eject_root);
- }
-
- public static TestMenu create(int... ids) {
- final TestMenu menu = Mockito.mock(TestMenu.class,
- Mockito.withSettings().defaultAnswer(Mockito.CALLS_REAL_METHODS));
- menu.items = new SparseArray<>();
- for (int id : ids) {
- TestMenuItem item = TestMenuItem.create(id);
- menu.addMenuItem(id, item);
- }
- return menu;
- }
-
- public void addMenuItem(int id, TestMenuItem item) {
- items.put(id, item);
- }
-
- @Override
- public TestMenuItem findItem(int id) {
- return items.get(id);
- }
-
- @Override
- public int size() {
- return items.size();
- }
-
- @Override
- public TestMenuItem getItem(int index) {
- return items.valueAt(index);
- }
-}
diff --git a/packages/DocumentsUI/tests/src/com/android/documentsui/testing/TestMenuItem.java b/packages/DocumentsUI/tests/src/com/android/documentsui/testing/TestMenuItem.java
deleted file mode 100644
index 6314b7b..0000000
--- a/packages/DocumentsUI/tests/src/com/android/documentsui/testing/TestMenuItem.java
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
- * Copyright (C) 2016 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.testing;
-
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-
-import android.annotation.StringRes;
-import android.view.MenuItem;
-
-import org.mockito.Mockito;
-
-/**
-*
-* Test copy of {@link android.view.MenuItem}.
-*
-* We use abstract so we don't have to implement all the necessary methods from the interface,
-* and we use Mockito to just mock out the methods we need.
-* To get an instance, use {@link #create(int)}.
-*/
-
-public abstract class TestMenuItem implements MenuItem {
-
- boolean enabled;
- boolean visible;
- @StringRes int title;
-
- public static TestMenuItem create(int id) {
- final TestMenuItem mockMenuItem = Mockito.mock(TestMenuItem.class,
- Mockito.withSettings().defaultAnswer(Mockito.CALLS_REAL_METHODS));
-
- return mockMenuItem;
- }
-
- @Override
- public TestMenuItem setTitle(@StringRes int title) {
- this.title = title;
- return this;
- }
-
- @Override
- public MenuItem setEnabled(boolean enabled) {
- this.enabled = enabled;
- return this;
- }
-
- @Override
- public MenuItem setVisible(boolean visible) {
- this.visible = visible;
- return this;
- }
-
- @Override
- public boolean isVisible() {
- return this.visible;
- }
-
- @Override
- public boolean isEnabled() {
- return this.enabled;
- }
-
- public void assertEnabled() {
- assertTrue(this.enabled);
- }
-
- public void assertDisabled() {
- assertFalse(this.enabled);
- }
-
- public void assertVisible() {
- assertTrue(this.visible);
- }
-
- public void assertInvisible() {
- assertFalse(this.visible);
- }
-
- public void assertTitle(@StringRes int title) {
- assertTrue(this.title == title);
- }
-}
diff --git a/packages/DocumentsUI/tests/src/com/android/documentsui/testing/TestPredicate.java b/packages/DocumentsUI/tests/src/com/android/documentsui/testing/TestPredicate.java
deleted file mode 100644
index f8ee21e..0000000
--- a/packages/DocumentsUI/tests/src/com/android/documentsui/testing/TestPredicate.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright (C) 2016 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.testing;
-
-import static org.junit.Assert.assertEquals;
-
-import java.util.function.Predicate;
-
-import javax.annotation.Nullable;
-
-/**
- * Test predicate that can be used to spy control responses and make
- * assertions against values tested.
- */
-public class TestPredicate<T> implements Predicate<T> {
-
- private @Nullable T lastValue;
- private boolean nextReturnValue;
-
- @Override
- public boolean test(T t) {
- lastValue = t;
- return nextReturnValue;
- }
-
- public void assertLastArgument(@Nullable T expected) {
- assertEquals(expected, lastValue);
- }
-
- public void nextReturn(boolean value) {
- nextReturnValue = value;
- }
-}
diff --git a/packages/DocumentsUI/tests/src/com/android/documentsui/testing/TestScheduledExecutorService.java b/packages/DocumentsUI/tests/src/com/android/documentsui/testing/TestScheduledExecutorService.java
deleted file mode 100644
index f5001ee..0000000
--- a/packages/DocumentsUI/tests/src/com/android/documentsui/testing/TestScheduledExecutorService.java
+++ /dev/null
@@ -1,201 +0,0 @@
-/*
- * Copyright (C) 2016 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.testing;
-
-import static junit.framework.Assert.assertFalse;
-import static junit.framework.Assert.fail;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
-import java.util.concurrent.Callable;
-import java.util.concurrent.Delayed;
-import java.util.concurrent.ExecutionException;
-import java.util.concurrent.Future;
-import java.util.concurrent.ScheduledExecutorService;
-import java.util.concurrent.ScheduledFuture;
-import java.util.concurrent.TimeUnit;
-import java.util.concurrent.TimeoutException;
-
-public class TestScheduledExecutorService implements ScheduledExecutorService {
-
- private List<TestFuture> scheduled = new ArrayList<>();
- private boolean shutdown;
-
- @Override
- public void shutdown() {
- this.shutdown = true;
- }
-
- @Override
- public List<Runnable> shutdownNow() {
- this.shutdown = true;
- return new ArrayList<>();
- }
-
- public void assertShutdown() {
- if (!shutdown) {
- fail("Executor wasn't shut down.");
- }
- }
-
- @Override
- public boolean isShutdown() {
- return shutdown;
- }
-
- @Override
- public boolean isTerminated() {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public boolean awaitTermination(long timeout, TimeUnit unit) throws InterruptedException {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public <T> Future<T> submit(Callable<T> task) {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public <T> Future<T> submit(Runnable task, T result) {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public Future<?> submit(Runnable task) {
- return schedule(task, 0, TimeUnit.MILLISECONDS);
- }
-
- @Override
- public <T> List<Future<T>> invokeAll(Collection<? extends Callable<T>> tasks)
- throws InterruptedException {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public <T> List<Future<T>> invokeAll(Collection<? extends Callable<T>> tasks, long timeout,
- TimeUnit unit) throws InterruptedException {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public <T> T invokeAny(Collection<? extends Callable<T>> tasks)
- throws InterruptedException, ExecutionException {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public <T> T invokeAny(Collection<? extends Callable<T>> tasks, long timeout, TimeUnit unit)
- throws InterruptedException, ExecutionException, TimeoutException {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public void execute(Runnable command) {
- schedule(command, 0, TimeUnit.MILLISECONDS);
- }
-
- @Override
- public ScheduledFuture<?> schedule(Runnable command, long delay, TimeUnit unit) {
- TestFuture future = new TestFuture(command, delay, unit);
- scheduled.add(future);
- return future;
- }
-
- @Override
- public <V> ScheduledFuture<V> schedule(Callable<V> callable, long delay, TimeUnit unit) {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public ScheduledFuture<?> scheduleAtFixedRate(Runnable command, long initialDelay, long period,
- TimeUnit unit) {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public ScheduledFuture<?> scheduleWithFixedDelay(Runnable command, long initialDelay,
- long delay, TimeUnit unit) {
- throw new UnsupportedOperationException();
- }
-
- public void runAll() {
- for (TestFuture future : scheduled) {
- future.runnable.run();
- }
- }
-
- public void run(int taskIndex) {
- scheduled.get(taskIndex).runnable.run();
- }
-
- public void assertAlive() {
- assertFalse(isShutdown());
- }
-
- static class TestFuture implements ScheduledFuture<Void> {
-
- final Runnable runnable;
- final long delay;
- final TimeUnit unit;
-
- public TestFuture(Runnable runnable, long delay, TimeUnit unit) {
- this.runnable = runnable;
- this.delay = delay;
- this.unit = unit;
- }
-
- @Override
- public long getDelay(TimeUnit unit) {
- return 0;
- }
-
- @Override
- public int compareTo(Delayed arg0) {
- return 0;
- }
-
- @Override
- public boolean cancel(boolean mayInterruptIfRunning) {
- return false;
- }
-
- @Override
- public boolean isCancelled() {
- return false;
- }
-
- @Override
- public boolean isDone() {
- return false;
- }
-
- @Override
- public Void get() throws InterruptedException, ExecutionException {
- return null;
- }
-
- @Override
- public Void get(long timeout, TimeUnit unit)
- throws InterruptedException, ExecutionException, TimeoutException {
- return null;
- }
- }
-}
diff --git a/packages/DocumentsUI/tests/src/com/android/documentsui/testing/TestSearchViewManager.java b/packages/DocumentsUI/tests/src/com/android/documentsui/testing/TestSearchViewManager.java
deleted file mode 100644
index 29ae3bd..0000000
--- a/packages/DocumentsUI/tests/src/com/android/documentsui/testing/TestSearchViewManager.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Copyright (C) 2016 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.testing;
-
-import android.os.Bundle;
-
-import com.android.documentsui.SearchViewManager;
-
-/**
- * Test copy of {@link com.android.documentsui.SearchViewManager}
- *
- * Specficially used to test whether {@link #showMenu(boolean)}
- * and {@link #updateMenu()} are called.
- */
-public class TestSearchViewManager extends SearchViewManager {
-
- boolean updateMenuCalled;
- boolean showMenuCalled;
-
- public TestSearchViewManager(SearchManagerListener listener, Bundle savedState) {
- super(listener, savedState);
- }
-
- public TestSearchViewManager() {
- super(null, null);
- }
-
- @Override
- protected void showMenu(boolean visible) {
- showMenuCalled = true;
- }
-
- @Override
- public void updateMenu() {
- updateMenuCalled = true;
- }
-
- public boolean showMenuCalled() {
- return showMenuCalled;
- }
-
- public boolean updateMenuCalled() {
- return updateMenuCalled;
- }
-}
diff --git a/packages/DocumentsUI/tests/src/com/android/documentsui/testing/TestSelectionDetails.java b/packages/DocumentsUI/tests/src/com/android/documentsui/testing/TestSelectionDetails.java
deleted file mode 100644
index 20796ca00..0000000
--- a/packages/DocumentsUI/tests/src/com/android/documentsui/testing/TestSelectionDetails.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Copyright (C) 2016 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.testing;
-
-import com.android.documentsui.MenuManager.SelectionDetails;
-
-/**
- * Test copy of SelectionDetails, everything default to false
- */
-public class TestSelectionDetails implements SelectionDetails {
-
- public boolean canRename;
- public boolean canDelete;
- public boolean containPartial;
- public boolean containDirectories;
-
- @Override
- public boolean containsPartialFiles() {
- return containPartial;
- }
-
- @Override
- public boolean containsDirectories() {
- return containDirectories;
- }
-
- @Override
- public boolean canRename() {
- return canRename;
- }
-
- @Override
- public boolean canDelete() {
- return canDelete;
- }
- }
\ No newline at end of file
diff --git a/packages/DocumentsUI/tests/src/com/android/documentsui/testing/TestTimer.java b/packages/DocumentsUI/tests/src/com/android/documentsui/testing/TestTimer.java
deleted file mode 100644
index 04af283..0000000
--- a/packages/DocumentsUI/tests/src/com/android/documentsui/testing/TestTimer.java
+++ /dev/null
@@ -1,150 +0,0 @@
-/*
- * Copyright (C) 2016 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.testing;
-
-import java.util.Date;
-import java.util.Iterator;
-import java.util.LinkedList;
-import java.util.ListIterator;
-import java.util.Timer;
-import java.util.TimerTask;
-
-/**
- * A {@link Timer} for testing that can dial its clock hands to any future time.
- */
-public class TestTimer extends Timer {
-
- private long mNow = 0;
-
- private final LinkedList<Task> mTaskList = new LinkedList<>();
-
- public void fastForwardTo(long time) {
- if (time < mNow) {
- throw new IllegalArgumentException("Can't fast forward to past.");
- }
-
- mNow = time;
- while (!mTaskList.isEmpty() && mTaskList.getFirst().mExecuteTime <= mNow) {
- Task task = mTaskList.getFirst();
- if (!task.isCancelled()) {
- task.run();
- }
- mTaskList.removeFirst();
- }
- }
-
- public boolean hasScheduledTask() {
- return !mTaskList.isEmpty();
- }
-
- public void fastForwardToNextTask() {
- if (!hasScheduledTask()) {
- throw new IllegalStateException("There is no scheduled task!");
- }
- fastForwardTo(mTaskList.getFirst().mExecuteTime);
- }
-
- @Override
- public void cancel() {
- mTaskList.clear();
- }
-
- @Override
- public int purge() {
- int count = 0;
- Iterator<Task> iter = mTaskList.iterator();
- while (iter.hasNext()) {
- Task task = iter.next();
- if (task.isCancelled()) {
- iter.remove();
- ++count;
- }
- }
- return count;
- }
-
- @Override
- public void schedule(TimerTask task, Date time) {
- long executeTime = time.getTime();
- scheduleAtTime(task, executeTime);
- }
-
- @Override
- public void schedule(TimerTask task, Date firstTime, long period) {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public void schedule(TimerTask task, long delay) {
- long executeTime = mNow + delay;
- scheduleAtTime(task, executeTime);
- }
-
- @Override
- public void schedule(TimerTask task, long delay, long period) {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public void scheduleAtFixedRate(TimerTask task, Date firstTime, long period) {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public void scheduleAtFixedRate(TimerTask task, long delay, long period) {
- throw new UnsupportedOperationException();
- }
-
- public void scheduleAtTime(TimerTask task, long executeTime) {
- Task testTimerTask = (Task) task;
- testTimerTask.mExecuteTime = executeTime;
-
- ListIterator<Task> iter = mTaskList.listIterator(0);
- while (iter.hasNext()) {
- if (iter.next().mExecuteTime >= executeTime) {
- break;
- }
- }
- iter.add(testTimerTask);
- }
-
- public static class Task extends TimerTask {
- private boolean mIsCancelled;
- private long mExecuteTime;
-
- private TimerTask mDelegate;
-
- public Task(TimerTask delegate) {
- mDelegate = delegate;
- }
-
- @Override
- public boolean cancel() {
- mIsCancelled = true;
- return mDelegate.cancel();
- }
-
- @Override
- public void run() {
- mDelegate.run();
- }
-
- boolean isCancelled() {
- return mIsCancelled;
- }
- }
-}
diff --git a/packages/DocumentsUI/tests/src/com/android/documentsui/testing/Views.java b/packages/DocumentsUI/tests/src/com/android/documentsui/testing/Views.java
deleted file mode 100644
index 52a9cbc..0000000
--- a/packages/DocumentsUI/tests/src/com/android/documentsui/testing/Views.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright (C) 2016 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.testing;
-
-import android.graphics.drawable.Drawable;
-import android.view.View;
-
-import org.mockito.Mockito;
-
-public final class Views {
-
- private Views() {}
-
- public static View createTestView() {
- final View view = Mockito.mock(View.class);
- Mockito.doCallRealMethod().when(view).setTag(Mockito.anyInt(), Mockito.any());
- Mockito.doCallRealMethod().when(view).getTag(Mockito.anyInt());
-
- return view;
- }
-
- public static void setBackground(View testView, Drawable background) {
- Mockito.when(testView.getBackground()).thenReturn(background);
- }
-}
diff --git a/packages/DocumentsUI/tests/src/com/android/documentsui/testing/dirlist/SelectionProbe.java b/packages/DocumentsUI/tests/src/com/android/documentsui/testing/dirlist/SelectionProbe.java
deleted file mode 100644
index 12f4642..0000000
--- a/packages/DocumentsUI/tests/src/com/android/documentsui/testing/dirlist/SelectionProbe.java
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- * Copyright (C) 2016 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.testing.dirlist;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-
-import com.android.documentsui.dirlist.MultiSelectManager;
-import com.android.documentsui.dirlist.MultiSelectManager.Selection;
-
-/**
- * Helper class for making assertions against the state of a MultiSelectManager instance.
- */
-public final class SelectionProbe {
-
- private final MultiSelectManager mMgr;
-
- public SelectionProbe(MultiSelectManager mgr) {
- mMgr = mgr;
- }
-
- public void assertRangeSelected(int begin, int end) {
- for (int i = begin; i <= end; i++) {
- assertSelected(i);
- }
- }
-
- public void assertRangeNotSelected(int begin, int end) {
- for (int i = begin; i <= end; i++) {
- assertNotSelected(i);
- }
- }
-
- public void assertRangeSelection(int begin, int end) {
- assertSelectionSize(end - begin + 1);
- assertRangeSelected(begin, end);
- }
-
- public void assertSelectionSize(int expected) {
- Selection selection = mMgr.getSelection();
- assertEquals(selection.toString(), expected, selection.size());
- }
-
- public void assertNoSelection() {
- assertSelectionSize(0);
- }
-
- public void assertSelection(int... ids) {
- assertSelected(ids);
- assertEquals(ids.length, mMgr.getSelection().size());
- }
-
- public void assertSelected(int... ids) {
- Selection sel = mMgr.getSelection();
- for (int id : ids) {
- String sid = String.valueOf(id);
- assertTrue(sid + " is not in selection " + sel, sel.contains(sid));
- }
- }
-
- public void assertNotSelected(int... ids) {
- Selection sel = mMgr.getSelection();
- for (int id : ids) {
- String sid = String.valueOf(id);
- assertFalse(sid + " is in selection " + sel, sel.contains(sid));
- }
- }
-
- public void select(int...positions) {
- for (int position : positions) {
- mMgr.toggleSelection(String.valueOf(position));
- }
- }
-}
diff --git a/packages/DocumentsUI/tests/src/com/android/documentsui/testing/dirlist/TestSelectionListener.java b/packages/DocumentsUI/tests/src/com/android/documentsui/testing/dirlist/TestSelectionListener.java
deleted file mode 100644
index 08f29f0..0000000
--- a/packages/DocumentsUI/tests/src/com/android/documentsui/testing/dirlist/TestSelectionListener.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Copyright (C) 2016 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.testing.dirlist;
-
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-
-import com.android.documentsui.dirlist.MultiSelectManager;
-
-import java.util.HashSet;
-import java.util.Set;
-
-public final class TestSelectionListener implements MultiSelectManager.Callback {
-
- Set<String> ignored = new HashSet<>();
- private boolean mSelectionChanged = false;
-
- @Override
- public void onItemStateChanged(String modelId, boolean selected) {}
-
- @Override
- public boolean onBeforeItemStateChange(String modelId, boolean selected) {
- return !ignored.contains(modelId);
- }
-
- @Override
- public void onSelectionChanged() {
- mSelectionChanged = true;
- }
-
- public void reset() {
- mSelectionChanged = false;
- }
-
- public void assertSelectionChanged() {
- assertTrue(mSelectionChanged);
- }
-
- public void assertSelectionUnchanged() {
- assertFalse(mSelectionChanged);
- }
-}
\ No newline at end of file
diff --git a/packages/DocumentsUI/wrap_alpha.py b/packages/DocumentsUI/wrap_alpha.py
deleted file mode 100644
index 92a3d59..0000000
--- a/packages/DocumentsUI/wrap_alpha.py
+++ /dev/null
@@ -1,47 +0,0 @@
-#!/usr/bin/python
-
-import os
-
-"""
-# assume everything needs alpha suffixes
-for root, dirs, files in os.walk('.'):
- if "res/drawable-" not in root: continue
-
- for before in files:
- if "_alpha.png" in before: continue
-
- after = before.replace(".png", "_alpha.png")
- os.rename(os.path.join(root, before), os.path.join(root, after))
-"""
-
-# build xml redirection
-for root, dirs, files in os.walk('.'):
- if "res/drawable-" not in root: continue
-
- for src in files:
- if not src.endswith(".png"): continue
- src = src[0:-4]
-
- src_clause = '\n android:src="@drawable/%s"' % (src)
-
- alpha = src.endswith("_alpha")
- if alpha:
- src = src[0:-6]
- if "ic_doc" in src or "ic_root" in src or "ic_grid_folder" in src:
- alpha_clause = '\n android:tint="@*android:color/secondary_text_material_light"'
- else:
- alpha_clause = '\n android:tint="?android:attr/colorControlNormal"'
- else:
- alpha_clause = ''
-
- am = src.endswith("_am")
- if am:
- src = src[0:-3]
- am_clause = '\n android:autoMirrored="true"'
- else:
- am_clause = ''
-
- with open("res/drawable/%s.xml" % (src), 'w') as xml:
- xml.write("""<?xml version="1.0" encoding="utf-8"?>
-<bitmap xmlns:android="http://schemas.android.com/apk/res/android"%s%s%s />
-""" % (src_clause, alpha_clause, am_clause))