package com.android.settings;
-import static android.support.test.espresso.Espresso.onView;
-import static android.support.test.espresso.assertion.ViewAssertions.matches;
-import static android.support.test.espresso.matcher.RootMatchers.isDialog;
-import static android.support.test.espresso.matcher.ViewMatchers.isDisplayed;
-import static android.support.test.espresso.matcher.ViewMatchers.withId;
-import static junit.framework.Assert.fail;
-
import android.app.Instrumentation;
+import android.app.UiAutomation;
import android.content.Context;
import android.content.Intent;
import android.content.pm.ResolveInfo;
+import android.graphics.Bitmap;
import android.support.test.InstrumentationRegistry;
import android.support.test.filters.SmallTest;
import android.support.test.runner.AndroidJUnit4;
+import android.util.Log;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+
+import static android.support.test.espresso.Espresso.onView;
+import static android.support.test.espresso.assertion.ViewAssertions.matches;
+import static android.support.test.espresso.matcher.RootMatchers.isDialog;
+import static android.support.test.espresso.matcher.ViewMatchers.isDisplayed;
+import static android.support.test.espresso.matcher.ViewMatchers.withId;
+import static junit.framework.Assert.fail;
+
@RunWith(AndroidJUnit4.class)
@SmallTest
public class RegulatoryInfoDisplayActivityTest {
+ private static final String TAG = "RegulatoryInfoTest";
private Instrumentation mInstrumentation;
private Intent mRegulatoryInfoIntent;
+ private UiAutomation mUiAutomation;
@Before
public void setUp() {
mInstrumentation = InstrumentationRegistry.getInstrumentation();
+ mUiAutomation = InstrumentationRegistry.getInstrumentation().getUiAutomation();
mRegulatoryInfoIntent = new Intent("android.settings.SHOW_REGULATORY_INFO")
.addCategory(Intent.CATEGORY_DEFAULT)
.setPackage(mInstrumentation.getTargetContext().getPackageName());
.check(matches(isDisplayed()));
}
+ @Test
+ public void launchRegulatoryInfo_withInfoImage_shouldDisplay() throws IOException {
+ // TODO: Remove "setenforce 0" when selinux rules is updated to give read permission for
+ // regulatory info.
+ mUiAutomation.executeShellCommand("setenforce 0");
+
+ final boolean tempFileCreated = ensureRegulatoryInfoImageExists();
+ try {
+ final Context context = mInstrumentation.getTargetContext();
+ final boolean hasRegulatoryInfo = context.getResources()
+ .getBoolean(R.bool.config_show_regulatory_info);
+
+ if (!hasRegulatoryInfo) {
+ return;
+ }
+ // Launch intent
+ mInstrumentation.startActivitySync(mRegulatoryInfoIntent);
+
+ onView(withId(R.id.regulatoryInfo))
+ .inRoot(isDialog())
+ .check(matches(isDisplayed()));
+ } finally {
+ if (tempFileCreated) {
+ final String filename =
+ RegulatoryInfoDisplayActivity.getRegulatoryInfoImageFileName();
+ new File(filename).delete();
+ Log.d(TAG, "Deleting temp file " + filename);
+ }
+ }
+ }
+
+ /**
+ * Ensures regulatory label image exists on disk.
+ *
+ * @return true if a test image is created.
+ */
+ private boolean ensureRegulatoryInfoImageExists() throws IOException {
+ final String filename = RegulatoryInfoDisplayActivity.getRegulatoryInfoImageFileName();
+ if (new File(filename).exists()) {
+ return false;
+ }
+ Log.d(TAG, "Creating temp file " + filename);
+ final Bitmap bitmap = Bitmap.createBitmap(400 /* width */, 400 /* height */,
+ Bitmap.Config.ARGB_8888);
+ final FileOutputStream out = new FileOutputStream(filename);
+ bitmap.compress(Bitmap.CompressFormat.PNG, 100 /* quality */, out);
+ out.close();
+ return true;
+ }
+
+
}