Adding a customizable development mode tile

User can configure the active state for development mode
which would allow enabling multiple options at once

Test: make -j40 RunSettingsRoboTests
Change-Id: I545b790f8c7097945f39ca003e5985b23cb53636
This commit is contained in:
Sunny Goyal
2016-11-02 11:20:17 -07:00
parent 8a86de2c5f
commit bf9f2d2698
13 changed files with 601 additions and 223 deletions

View File

@@ -0,0 +1,75 @@
package com.android.settings.qstile;
import static org.junit.Assert.assertEquals;
import static org.mockito.Matchers.eq;
import static org.mockito.Mockito.reset;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import android.content.Intent;
import android.service.quicksettings.Tile;
import com.android.settings.SettingsRobolectricTestRunner;
import com.android.settings.TestConfig;
import com.android.settings.testutils.shadow.ShadowTileService;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.robolectric.Robolectric;
import org.robolectric.annotation.Config;
import org.robolectric.internal.ShadowExtractor;
import org.robolectric.util.ReflectionHelpers;
@RunWith(SettingsRobolectricTestRunner.class)
@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION,
shadows = ShadowTileService.class)
public class DevelopmentModeTileTest {
@Mock private Tile mTile;
@Mock private DevelopmentModeTile.DevModeProperties mProps;
private DevelopmentModeTile mDevelopmentModeTile;
private ShadowTileService mShadowTileService;
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
mDevelopmentModeTile = Robolectric.buildService(DevelopmentModeTile.class).get();
ReflectionHelpers.setField(mDevelopmentModeTile, "mProps", mProps);
mShadowTileService = (ShadowTileService) ShadowExtractor.extract(mDevelopmentModeTile);
mShadowTileService.setTile(mTile);
}
@Test
public void refresh() {
verifyRefreshState(false, true, Tile.STATE_UNAVAILABLE);
verifyRefreshState(false, false, Tile.STATE_UNAVAILABLE);
verifyRefreshState(true, false, Tile.STATE_INACTIVE);
verifyRefreshState(true, true, Tile.STATE_ACTIVE);
}
@Test
public void onClick_startSetting() {
when(mTile.getState()).thenReturn(Tile.STATE_UNAVAILABLE);
mDevelopmentModeTile.onClick();
Intent intent = mShadowTileService.getNextStartedActivity();
assertEquals(DevelopmentTileConfigActivity.class.getName(),
intent.getComponent().getClassName());
}
private void verifyRefreshState(boolean isSet, boolean allMatch, int expectedState) {
reset(mProps, mTile);
mProps.isSet = isSet;
mProps.allMatch = allMatch;
mDevelopmentModeTile.refresh();
verify(mProps).refreshState(eq(mDevelopmentModeTile));
verify(mTile).setState(eq(expectedState));
}
}

View File

@@ -0,0 +1,38 @@
package com.android.settings.testutils.shadow;
import android.content.Intent;
import android.service.quicksettings.Tile;
import android.service.quicksettings.TileService;
import org.robolectric.annotation.Implementation;
import org.robolectric.annotation.Implements;
import org.robolectric.annotation.RealObject;
import org.robolectric.shadows.ShadowService;
/**
* Shadow for {@link TileService}.
*/
@Implements(TileService.class)
public class ShadowTileService extends ShadowService {
@RealObject TileService realService;
private Tile mTile;
public void __constructor__() { }
@Implementation
public final Tile getQsTile() {
return mTile;
}
@Implementation
public final void startActivityAndCollapse(Intent intent) {
realService.startActivity(intent);
}
// Non-Android setter.
public void setTile(Tile tile) {
mTile = tile;
}
}