package com.android.launcher3.ui; import android.content.SharedPreferences; import android.graphics.Rect; import android.support.test.uiautomator.UiDevice; import android.support.test.uiautomator.UiObject; import android.support.test.uiautomator.UiSelector; import android.test.suitebuilder.annotation.MediumTest; import com.android.launcher3.R; import com.android.launcher3.Utilities; /** * Test for auto rotate preference. */ @MediumTest public class RotationPreferenceTest extends LauncherInstrumentationTestCase { private SharedPreferences mPrefs; private boolean mOriginalRotationValue; @Override protected void setUp() throws Exception { super.setUp(); mDevice = UiDevice.getInstance(getInstrumentation()); mTargetContext = getInstrumentation().getTargetContext(); mTargetPackage = mTargetContext.getPackageName(); mPrefs = Utilities.getPrefs(mTargetContext); mOriginalRotationValue = mPrefs.getBoolean(Utilities.ALLOW_ROTATION_PREFERENCE_KEY, false); } @Override protected void tearDown() throws Exception { setRotationEnabled(mOriginalRotationValue); super.tearDown(); } public void testRotation_disabled() throws Exception { if (mTargetContext.getResources().getBoolean(R.bool.allow_rotation)) { // This is a tablet. The test is only valid to mobile devices. return; } setRotationEnabled(false); mDevice.setOrientationRight(); startLauncher(); Rect hotseat = getHotseatBounds(); assertTrue(hotseat.width() > hotseat.height()); } public void testRotation_enabled() throws Exception { if (mTargetContext.getResources().getBoolean(R.bool.allow_rotation)) { // This is a tablet. The test is only valid to mobile devices. return; } setRotationEnabled(true); mDevice.setOrientationRight(); startLauncher(); Rect hotseat = getHotseatBounds(); assertTrue(hotseat.width() < hotseat.height()); } private void setRotationEnabled(boolean enabled) { mPrefs.edit().putBoolean(Utilities.ALLOW_ROTATION_PREFERENCE_KEY, enabled).commit(); } private Rect getHotseatBounds() throws Exception { UiObject hotseat = mDevice.findObject( new UiSelector().resourceId(mTargetPackage + ":id/hotseat")); hotseat.waitForExists(6000); return hotseat.getVisibleBounds(); } }