Ensure the first file in the ExplorerActivity is always the parent directory

This commit is contained in:
William Brawner 2018-09-07 08:52:14 -05:00 committed by William Brawner
parent 9d3f04bbbd
commit 35d077190d
2 changed files with 89 additions and 8 deletions

View file

@ -0,0 +1,79 @@
package com.wbrawner.simplemarkdown.view.activity;
import android.Manifest;
import android.content.Intent;
import android.support.test.rule.ActivityTestRule;
import android.support.test.rule.GrantPermissionRule;
import android.widget.TextView;
import com.wbrawner.simplemarkdown.R;
import com.wbrawner.simplemarkdown.utility.Constants;
import org.junit.Rule;
import org.junit.Test;
import java.util.HashMap;
import static android.support.test.espresso.Espresso.onData;
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.withId;
import static android.support.test.espresso.matcher.ViewMatchers.withParent;
import static android.support.test.espresso.matcher.ViewMatchers.withText;
import static org.hamcrest.Matchers.allOf;
import static org.hamcrest.Matchers.instanceOf;
import static org.hamcrest.Matchers.is;
public class ExplorerActivityTest {
@Rule
public ActivityTestRule<ExplorerActivity> explorerActivityActivityTestRule
= new ActivityTestRule<>(ExplorerActivity.class, false, false);
@Rule
public GrantPermissionRule readFilesPermissionRule =
GrantPermissionRule.grant(Manifest.permission.READ_EXTERNAL_STORAGE);
@Rule
public GrantPermissionRule writeFilesPermissionRule =
GrantPermissionRule.grant(Manifest.permission.WRITE_EXTERNAL_STORAGE);
@Test
public void firstItemInDirectoryIsGoUpTest() {
Intent startIntent = new Intent();
startIntent.putExtra(Constants.EXTRA_REQUEST_CODE, Constants.REQUEST_OPEN_FILE);
explorerActivityActivityTestRule.launchActivity(startIntent);
// We should start in the Documents directory
onView(allOf(instanceOf(TextView.class), withParent(withId(R.id.toolbar))))
.check(matches(withText("Documents")));
// Check that the first item in the list is our navigate up a directory item and click it
onData(is(instanceOf(HashMap.class)))
.atPosition(0)
.check(matches(withText(
explorerActivityActivityTestRule.getActivity().getString(R.string.directory_up)
)))
.perform(click());
// Check that we're in the parent of the Documents directory
onView(allOf(instanceOf(TextView.class), withParent(withId(R.id.toolbar))))
.check(matches(withText("0")));
// Enter the Android/data/data directory, which should almost certainly have other
// directories, and check that each directory shows the "Go up" option as the first option
// in the list
onView(withText("Android"))
.perform(click());
onData(is(instanceOf(HashMap.class)))
.atPosition(0)
.check(matches(withText(
explorerActivityActivityTestRule.getActivity().getString(R.string.directory_up)
)));
onView(withText("data"))
.perform(click());
onData(is(instanceOf(HashMap.class)))
.atPosition(0)
.check(matches(withText(
explorerActivityActivityTestRule.getActivity().getString(R.string.directory_up)
)));
}
}

View file

@ -172,13 +172,6 @@ public class ExplorerActivity extends AppCompatActivity {
TreeSet<HashMap<String, Object>> dirs = new TreeSet<HashMap<String, Object>>((o1, o2) ->
((String) o1.get("name")).compareToIgnoreCase((String) o2.get("name"))) {
};
if (docsDir.getParentFile() != null && docsDir.getParentFile().canRead()) {
HashMap<String, Object> fileHashMap = new HashMap<>();
fileHashMap.put("name", getString(R.string.directory_up));
fileHashMap.put("file", docsDir.getParentFile());
dirs.add(fileHashMap);
}
if (docsDir.listFiles() != null) {
for (File file : docsDir.listFiles()) {
@ -202,7 +195,16 @@ public class ExplorerActivity extends AppCompatActivity {
}
}
List<HashMap<String, Object>> sortedFiles = new ArrayList<>(dirs);
List<HashMap<String, Object>> sortedFiles = new ArrayList<>();
if (docsDir.getParentFile() != null && docsDir.getParentFile().canRead()) {
HashMap<String, Object> fileHashMap = new HashMap<>();
fileHashMap.put("name", getString(R.string.directory_up));
fileHashMap.put("file", docsDir.getParentFile());
sortedFiles.add(fileHashMap);
}
sortedFiles.addAll(dirs);
sortedFiles.addAll(files);
return sortedFiles;