blob: 5d3203679725c63297899154c535f8aafb968eb4 [file] [log] [blame]
/*
* Copyright (C) 2020 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF 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.base.Providers.AUTHORITY_STORAGE;
import static com.google.common.truth.Truth.assertThat;
import android.app.Activity;
import android.app.Instrumentation;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.SystemClock;
import android.provider.DocumentsContract;
import androidx.test.filters.SmallTest;
import androidx.test.platform.app.InstrumentationRegistry;
import androidx.test.rule.ActivityTestRule;
import com.android.documentsui.base.DocumentInfo;
import com.android.documentsui.picker.PickActivity;
import com.android.documentsui.testing.TestProvidersAccess;
import com.android.documentsui.ui.TestDialogController;
import com.android.documentsui.util.VersionUtils;
import com.android.modules.utils.build.SdkLevel;
import com.google.common.collect.Lists;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameter;
import org.junit.runners.Parameterized.Parameters;
@SmallTest
@RunWith(Parameterized.class)
public class PickActivityTest {
private static final String RESULT_EXTRA = "test_result_extra";
private static final String RESULT_DATA = "123321";
private Context mTargetContext;
private Intent mIntentGetContent;
private TestDialogController mTestDialogs;
private TestConfigStore mTestConfigStore;
@Parameter(0)
public boolean isPrivateSpaceEnabled;
/**
* Parametrize values for {@code isPrivateSpaceEnabled} to run all the tests twice once with
* private space flag enabled and once with it disabled.
*/
@Parameters(name = "privateSpaceEnabled={0}")
public static Iterable<?> data() {
return Lists.newArrayList(true, false);
}
@Rule
public final ActivityTestRule<PickActivity> mRule =
new ActivityTestRule<>(PickActivity.class, false, false);
@Before
public void setUp() throws Exception {
mTargetContext = InstrumentationRegistry.getInstrumentation().getTargetContext();
mIntentGetContent = new Intent(Intent.ACTION_GET_CONTENT);
mIntentGetContent.addCategory(Intent.CATEGORY_OPENABLE);
mIntentGetContent.setType("*/*");
Uri hintUri = DocumentsContract.buildRootUri(AUTHORITY_STORAGE, "primary");
mIntentGetContent.putExtra(DocumentsContract.EXTRA_INITIAL_URI, hintUri);
mTestDialogs = new TestDialogController();
mTestConfigStore = new TestConfigStore();
isPrivateSpaceEnabled = SdkLevel.isAtLeastS() && isPrivateSpaceEnabled;
}
@Test
public void testOnDocumentPicked() {
DocumentInfo doc = new DocumentInfo();
doc.userId = TestProvidersAccess.USER_ID;
doc.authority = "authority";
doc.documentId = "documentId";
PickActivity pickActivity = mRule.launchActivity(mIntentGetContent);
pickActivity.mState.configStore = mTestConfigStore;
if (isPrivateSpaceEnabled) {
mTestConfigStore.enablePrivateSpaceInPhotoPicker();
pickActivity.mState.canForwardToProfileIdMap.put(TestProvidersAccess.USER_ID, true);
} else {
pickActivity.mState.canShareAcrossProfile = true;
}
pickActivity.onDocumentPicked(doc);
SystemClock.sleep(3000);
Instrumentation.ActivityResult result = mRule.getActivityResult();
assertThat(pickActivity.isFinishing()).isTrue();
assertThat(result.getResultCode()).isEqualTo(Activity.RESULT_OK);
assertThat(result.getResultData().getData()).isEqualTo(doc.getDocumentUri());
}
@Test
public void testOnDocumentPicked_otherUser() {
if (VersionUtils.isAtLeastR()) {
DocumentInfo doc = new DocumentInfo();
doc.userId = TestProvidersAccess.OtherUser.USER_ID;
doc.authority = "authority";
doc.documentId = "documentId";
PickActivity pickActivity = mRule.launchActivity(mIntentGetContent);
pickActivity.mState.configStore = mTestConfigStore;
if (isPrivateSpaceEnabled) {
mTestConfigStore.enablePrivateSpaceInPhotoPicker();
pickActivity.mState.canForwardToProfileIdMap.put(TestProvidersAccess.USER_ID, true);
pickActivity.mState.canForwardToProfileIdMap.put(
TestProvidersAccess.OtherUser.USER_ID, true);
} else {
pickActivity.mState.canShareAcrossProfile = true;
}
pickActivity.onDocumentPicked(doc);
SystemClock.sleep(3000);
Instrumentation.ActivityResult result = mRule.getActivityResult();
assertThat(result.getResultCode()).isEqualTo(Activity.RESULT_OK);
assertThat(result.getResultData().getData()).isEqualTo(doc.getDocumentUri());
}
}
@Test
public void testOnDocumentPicked_otherUserDoesNotReturn() {
DocumentInfo doc = new DocumentInfo();
doc.userId = TestProvidersAccess.OtherUser.USER_ID;
doc.authority = "authority";
doc.documentId = "documentId";
PickActivity pickActivity = mRule.launchActivity(mIntentGetContent);
pickActivity.mState.configStore = mTestConfigStore;
if (isPrivateSpaceEnabled) {
mTestConfigStore.enablePrivateSpaceInPhotoPicker();
pickActivity.mState.canForwardToProfileIdMap.put(TestProvidersAccess.USER_ID, true);
} else {
pickActivity.mState.canShareAcrossProfile = false;
}
pickActivity.getInjector().dialogs = mTestDialogs;
pickActivity.onDocumentPicked(doc);
SystemClock.sleep(3000);
assertThat(pickActivity.isFinishing()).isFalse();
mTestDialogs.assertActionNotAllowedShown();
}
}