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("&#8226; %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))
