Merge "Import translations. DO NOT MERGE"
diff --git a/src/com/android/documentsui/files/ActionHandler.java b/src/com/android/documentsui/files/ActionHandler.java
index 052d80e..e1e1db3 100644
--- a/src/com/android/documentsui/files/ActionHandler.java
+++ b/src/com/android/documentsui/files/ActionHandler.java
@@ -66,7 +66,6 @@
import com.android.documentsui.clipping.DocumentClipper;
import com.android.documentsui.clipping.UrisSupplier;
import com.android.documentsui.dirlist.AnimationView;
-import com.android.documentsui.files.ActionHandler.Addons;
import com.android.documentsui.inspector.InspectorActivity;
import com.android.documentsui.queries.SearchViewManager;
import com.android.documentsui.roots.ProvidersAccess;
@@ -83,8 +82,11 @@
/**
* Provides {@link FilesActivity} action specializations to fragments.
+ * @param <T> activity which extends {@link FragmentActivity} and implements
+ * {@link AbstractActionHandler.CommonAddons}.
*/
-public class ActionHandler<T extends FragmentActivity & Addons> extends AbstractActionHandler<T> {
+public class ActionHandler<T extends FragmentActivity & AbstractActionHandler.CommonAddons>
+ extends AbstractActionHandler<T> {
private static final String TAG = "ManagerActionHandler";
private static final int SHARE_FILES_COUNT_LIMIT = 100;
@@ -769,7 +771,4 @@
}
mActivity.startActivity(intent);
}
-
- public interface Addons extends CommonAddons {
- }
}
diff --git a/src/com/android/documentsui/files/FilesActivity.java b/src/com/android/documentsui/files/FilesActivity.java
index 7308272..ac2c513 100644
--- a/src/com/android/documentsui/files/FilesActivity.java
+++ b/src/com/android/documentsui/files/FilesActivity.java
@@ -32,6 +32,7 @@
import androidx.annotation.CallSuper;
import androidx.fragment.app.FragmentManager;
+import com.android.documentsui.AbstractActionHandler;
import com.android.documentsui.ActionModeController;
import com.android.documentsui.BaseActivity;
import com.android.documentsui.DocsSelectionHelper;
@@ -65,7 +66,7 @@
/**
* Standalone file management activity.
*/
-public class FilesActivity extends BaseActivity implements ActionHandler.Addons {
+public class FilesActivity extends BaseActivity implements AbstractActionHandler.CommonAddons {
private static final String TAG = "FilesActivity";
static final String PREFERENCES_SCOPE = "files";
diff --git a/tests/common/com/android/documentsui/DocumentsProviderHelper.java b/tests/common/com/android/documentsui/DocumentsProviderHelper.java
index e7a590e..45bc5c0 100644
--- a/tests/common/com/android/documentsui/DocumentsProviderHelper.java
+++ b/tests/common/com/android/documentsui/DocumentsProviderHelper.java
@@ -20,8 +20,11 @@
import static android.provider.DocumentsContract.buildChildDocumentsUri;
import static android.provider.DocumentsContract.buildDocumentUri;
import static android.provider.DocumentsContract.buildRootsUri;
-import static com.android.documentsui.base.DocumentInfo.getCursorString;
+
import static androidx.core.util.Preconditions.checkArgument;
+
+import static com.android.documentsui.base.DocumentInfo.getCursorString;
+
import static junit.framework.Assert.assertEquals;
import static junit.framework.Assert.assertNotNull;
import static junit.framework.Assert.fail;
@@ -30,6 +33,7 @@
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
+import android.os.FileUtils;
import android.os.ParcelFileDescriptor;
import android.os.ParcelFileDescriptor.AutoCloseInputStream;
import android.os.ParcelFileDescriptor.AutoCloseOutputStream;
@@ -37,23 +41,22 @@
import android.provider.DocumentsContract;
import android.provider.DocumentsContract.Document;
import android.provider.DocumentsContract.Root;
-import androidx.annotation.Nullable;
import android.test.MoreAsserts;
import android.text.TextUtils;
+import androidx.annotation.Nullable;
+
import com.android.documentsui.base.DocumentInfo;
import com.android.documentsui.base.RootInfo;
import com.android.documentsui.roots.RootCursorWrapper;
-import android.os.FileUtils;
-import libcore.io.Streams;
-
import com.google.common.collect.Lists;
+import libcore.io.Streams;
+
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.ArrayList;
-import java.util.Arrays;
import java.util.List;
/**
@@ -147,11 +150,11 @@
waitForWrite();
}
- public void writeAppendDocument(Uri documentUri, byte[] contents)
+ public void writeAppendDocument(Uri documentUri, byte[] contents, int length)
throws RemoteException, IOException {
ParcelFileDescriptor file = mClient.openFile(documentUri, "wa", null);
try (AutoCloseOutputStream out = new AutoCloseOutputStream(file)) {
- out.write(contents);
+ out.write(contents, 0, length);
}
waitForWrite();
}
diff --git a/tests/common/com/android/documentsui/StubProvider.java b/tests/common/com/android/documentsui/StubProvider.java
index 4366d31..521df53 100644
--- a/tests/common/com/android/documentsui/StubProvider.java
+++ b/tests/common/com/android/documentsui/StubProvider.java
@@ -26,16 +26,20 @@
import android.database.MatrixCursor.RowBuilder;
import android.graphics.Point;
import android.net.Uri;
-import android.os.*;
+import android.os.Bundle;
+import android.os.CancellationSignal;
+import android.os.FileUtils;
+import android.os.Handler;
+import android.os.Looper;
+import android.os.ParcelFileDescriptor;
import android.provider.DocumentsContract;
import android.provider.DocumentsContract.Document;
import android.provider.DocumentsContract.Root;
import android.provider.DocumentsProvider;
-import androidx.annotation.VisibleForTesting;
import android.text.TextUtils;
import android.util.Log;
-import android.os.FileUtils;
+import androidx.annotation.VisibleForTesting;
import java.io.File;
import java.io.FileNotFoundException;
@@ -183,7 +187,23 @@
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);
+
+ if (parentDocument.file == null || childDocument.file == null) {
+ return false;
+ }
+
+ return contains(
+ parentDocument.file.getAbsolutePath(), childDocument.file.getAbsolutePath());
+ }
+
+ private static boolean contains(String dirPath, String filePath) {
+ if (dirPath.equals(filePath)) {
+ return true;
+ }
+ if (!dirPath.endsWith("/")) {
+ dirPath += "/";
+ }
+ return filePath.startsWith(dirPath);
}
@Override
diff --git a/tests/common/com/android/documentsui/bots/UiBot.java b/tests/common/com/android/documentsui/bots/UiBot.java
index 0043bf7..4885b6d 100644
--- a/tests/common/com/android/documentsui/bots/UiBot.java
+++ b/tests/common/com/android/documentsui/bots/UiBot.java
@@ -273,18 +273,19 @@
}
UiObject2 findMenuWithName(String label) {
- List<UiObject2> menuItems = mDevice.findObjects(By.clazz("android.widget.LinearLayout"));
+ UiObject2 list = mDevice.findObject(By.clazz("android.widget.ListView"));
+ List<UiObject2> menuItems = list.getChildren();
Iterator<UiObject2> it = menuItems.iterator();
UiObject2 menuItem = null;
while (it.hasNext()) {
menuItem = it.next();
UiObject2 text = menuItem.findObject(By.text(label));
- if (text != null && menuItem.isClickable()) {
- break;
+ if (text != null) {
+ return menuItem;
}
}
- return menuItem;
+ return null;
}
boolean hasMenuWithName(String label) {
diff --git a/tests/functional/com/android/documentsui/CancelFromNotificationUiTest.java b/tests/functional/com/android/documentsui/CancelFromNotificationUiTest.java
index 5deb6b7..1c125c9 100644
--- a/tests/functional/com/android/documentsui/CancelFromNotificationUiTest.java
+++ b/tests/functional/com/android/documentsui/CancelFromNotificationUiTest.java
@@ -138,7 +138,7 @@
for (int i = 0; i < 49; i++) {
dummyByte = null;
dummyByte = new byte[BUFFER_SIZE];
- mDocsHelper.writeAppendDocument(uri, dummyByte);
+ mDocsHelper.writeAppendDocument(uri, dummyByte, dummyByte.length);
}
}
diff --git a/tests/functional/com/android/documentsui/FileCopyUiTest.java b/tests/functional/com/android/documentsui/FileCopyUiTest.java
index 2113ef7..5b43905 100644
--- a/tests/functional/com/android/documentsui/FileCopyUiTest.java
+++ b/tests/functional/com/android/documentsui/FileCopyUiTest.java
@@ -64,7 +64,7 @@
private static final String TARGET_FOLDER = "test_folder";
- private static final int TARGET_COUNT = 1000;
+ private static final int TARGET_COUNT = 100;
private static final int WAIT_TIME_SECONDS = 180;
@@ -275,7 +275,7 @@
Uri uri = helper.createDocument(root, "image/png", fileName);
byte[] buff = new byte[1024];
while ((read = in.read(buff)) > 0) {
- helper.writeAppendDocument(uri, buff);
+ helper.writeAppendDocument(uri, buff, read);
}
buff = null;
}
diff --git a/tests/functional/com/android/documentsui/RenameDocumentUiTest.java b/tests/functional/com/android/documentsui/RenameDocumentUiTest.java
index 863cdd0..2e66117 100644
--- a/tests/functional/com/android/documentsui/RenameDocumentUiTest.java
+++ b/tests/functional/com/android/documentsui/RenameDocumentUiTest.java
@@ -38,43 +38,43 @@
bots.roots.closeDrawer();
}
-// public void testRenameEnabled_SingleSelection() throws Exception {
-// bots.directory.selectDocument(fileName1, 1);
-// bots.main.openOverflowMenu();
-// bots.main.assertMenuEnabled(R.string.menu_rename, true);
-//
-// // Dismiss more options window
-// device.pressBack();
-// }
-//
-// public void testNoRenameSupport_SingleSelection() throws Exception {
-// bots.directory.selectDocument(fileNameNoRename, 1);
-// bots.main.openOverflowMenu();
-// bots.main.assertMenuEnabled(R.string.menu_rename, false);
-//
-// // Dismiss more options window
-// device.pressBack();
-// }
-//
-// public void testOneHasRenameSupport_MultipleSelection() throws Exception {
-// bots.directory.selectDocument(fileName1, 1);
-// bots.directory.selectDocument(fileNameNoRename, 2);
-// bots.main.openOverflowMenu();
-// bots.main.assertMenuEnabled(R.string.menu_rename, false);
-//
-// // Dismiss more options window
-// device.pressBack();
-// }
-//
-// public void testRenameDisabled_MultipleSelection() throws Exception {
-// bots.directory.selectDocument(fileName1, 1);
-// bots.directory.selectDocument(fileName2, 2);
-// bots.main.openOverflowMenu();
-// bots.main.assertMenuEnabled(R.string.menu_rename, false);
-//
-// // Dismiss more options window
-// device.pressBack();
-// }
+ public void testRenameEnabled_SingleSelection() throws Exception {
+ bots.directory.selectDocument(fileName1, 1);
+ bots.main.openOverflowMenu();
+ bots.main.assertMenuEnabled(R.string.menu_rename, true);
+
+ // Dismiss more options window
+ device.pressBack();
+ }
+
+ public void testNoRenameSupport_SingleSelection() throws Exception {
+ bots.directory.selectDocument(fileNameNoRename, 1);
+ bots.main.openOverflowMenu();
+ bots.main.assertMenuEnabled(R.string.menu_rename, false);
+
+ // Dismiss more options window
+ device.pressBack();
+ }
+
+ public void testOneHasRenameSupport_MultipleSelection() throws Exception {
+ bots.directory.selectDocument(fileName1, 1);
+ bots.directory.selectDocument(fileNameNoRename, 2);
+ bots.main.openOverflowMenu();
+ bots.main.assertMenuEnabled(R.string.menu_rename, false);
+
+ // Dismiss more options window
+ device.pressBack();
+ }
+
+ public void testRenameDisabled_MultipleSelection() throws Exception {
+ bots.directory.selectDocument(fileName1, 1);
+ bots.directory.selectDocument(fileName2, 2);
+ 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, 1);
diff --git a/tests/res/raw/uitest_images.zip b/tests/res/raw/uitest_images.zip
index 33186e4..1a1331d 100644
--- a/tests/res/raw/uitest_images.zip
+++ b/tests/res/raw/uitest_images.zip
Binary files differ
diff --git a/tests/unit/com/android/documentsui/files/TestActivity.java b/tests/unit/com/android/documentsui/files/TestActivity.java
index 4d49649..d69b9b8 100644
--- a/tests/unit/com/android/documentsui/files/TestActivity.java
+++ b/tests/unit/com/android/documentsui/files/TestActivity.java
@@ -16,7 +16,7 @@
package com.android.documentsui.files;
-import com.android.documentsui.files.ActionHandler;
+import com.android.documentsui.AbstractActionHandler;
import com.android.documentsui.testing.TestEnv;
import org.mockito.Mockito;
@@ -33,4 +33,4 @@
// Trick Mockito into finding our Addons methods correctly. W/o this
// hack, Mockito thinks Addons methods are not implemented.
abstract class AbstractBase extends com.android.documentsui.TestActivity
- implements ActionHandler.Addons {}
+ implements AbstractActionHandler.CommonAddons {}
diff --git a/tests/unit/com/android/documentsui/queries/SearchHistoryManagerTest.java b/tests/unit/com/android/documentsui/queries/SearchHistoryManagerTest.java
index 1f2a974..3c216c7 100644
--- a/tests/unit/com/android/documentsui/queries/SearchHistoryManagerTest.java
+++ b/tests/unit/com/android/documentsui/queries/SearchHistoryManagerTest.java
@@ -19,21 +19,21 @@
import static com.google.common.truth.Truth.assertThat;
import android.content.Context;
+
import androidx.test.InstrumentationRegistry;
import androidx.test.filters.MediumTest;
import androidx.test.runner.AndroidJUnit4;
-import com.android.documentsui.queries.SearchHistoryManager;
-
-import java.util.concurrent.CountDownLatch;
-import java.util.concurrent.TimeUnit;
-import java.util.List;
-
-import org.junit.Before;
import org.junit.After;
+import org.junit.Before;
+import org.junit.Ignore;
import org.junit.Test;
import org.junit.runner.RunWith;
+import java.util.List;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.TimeUnit;
+
@RunWith(AndroidJUnit4.class)
@MediumTest
public final class SearchHistoryManagerTest {
@@ -49,7 +49,7 @@
public void setUp() throws Exception {
mContext = InstrumentationRegistry.getTargetContext();
mManager = SearchHistoryManager.getInstance(mContext);
- clearData();
+ //clearData();
mIntResult = -1;
mLongResult = -1;
}
@@ -57,7 +57,7 @@
@After
public void tearDown() {
mListener = null;
- clearData();
+ //clearData();
}
private void clearData() {
@@ -68,6 +68,7 @@
}
@Test
+ @Ignore
public void testAddHistory() throws Exception {
mLatch = new CountDownLatch(2);
mListener = new SearchHistoryManager.DatabaseChangedListener() {
@@ -90,6 +91,7 @@
}
@Test
+ @Ignore
public void testDeleteHistory() throws Exception {
mLatch = new CountDownLatch(2);
mListener = new SearchHistoryManager.DatabaseChangedListener() {
@@ -125,6 +127,7 @@
}
@Test
+ @Ignore
public void testGetHistoryList() throws Exception {
mLatch = new CountDownLatch(2);
mListener = new SearchHistoryManager.DatabaseChangedListener() {