Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
import com.google.devtools.mobileharness.api.query.proto.LabQueryProto.DeviceInfo;
import com.google.devtools.mobileharness.fe.v6.service.proto.device.ActionButtonState;
import com.google.devtools.mobileharness.fe.v6.service.util.FeatureManagerFactory;
import com.google.devtools.mobileharness.fe.v6.service.util.UniverseScope;
import javax.inject.Inject;
import javax.inject.Singleton;

Expand All @@ -33,7 +34,7 @@ class ConfigurationButtonBuilder {
this.featureManagerFactory = featureManagerFactory;
}

public ActionButtonState build(DeviceInfo deviceInfo, String universe) {
public ActionButtonState build(DeviceInfo deviceInfo, UniverseScope universe) {
if (!featureManagerFactory.create(universe).isConfigurationFeatureEnabled()) {
return ActionButtonState.newBuilder().setVisible(false).build();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,8 @@
import com.google.devtools.mobileharness.fe.v6.service.proto.device.DeviceHeaderInfo;
import com.google.devtools.mobileharness.fe.v6.service.proto.device.HostInfo;
import com.google.devtools.mobileharness.fe.v6.service.proto.device.QuarantineInfo;
import com.google.devtools.mobileharness.fe.v6.service.util.UniverseFactory;
import com.google.devtools.mobileharness.fe.v6.service.util.UniverseScope;
import java.util.Locale;
import java.util.Optional;
import javax.inject.Inject;
Expand All @@ -37,27 +39,46 @@ public class DeviceHeaderInfoBuilder {
private final QuarantineButtonBuilder quarantineButtonBuilder;
private final ScreenshotButtonBuilder screenshotButtonBuilder;
private final ConfigurationButtonBuilder configurationButtonBuilder;
private final UniverseFactory universeFactory;

@Inject
DeviceHeaderInfoBuilder(
FlashButtonBuilder flashButtonBuilder,
LogcatButtonBuilder logcatButtonBuilder,
QuarantineButtonBuilder quarantineButtonBuilder,
ScreenshotButtonBuilder screenshotButtonBuilder,
ConfigurationButtonBuilder configurationButtonBuilder) {
ConfigurationButtonBuilder configurationButtonBuilder,
UniverseFactory universeFactory) {
this.flashButtonBuilder = flashButtonBuilder;
this.logcatButtonBuilder = logcatButtonBuilder;
this.quarantineButtonBuilder = quarantineButtonBuilder;
this.screenshotButtonBuilder = screenshotButtonBuilder;
this.configurationButtonBuilder = configurationButtonBuilder;
this.universeFactory = universeFactory;
}

/** Builds DeviceHeaderInfo based on device info and configs. */
/**
* Builds DeviceHeaderInfo based on device info and configs.
*
* @deprecated Use {@link #buildDeviceHeaderInfo(DeviceInfo, Optional, Optional, UniverseScope)}
* instead.
*/
@Deprecated
public DeviceHeaderInfo buildDeviceHeaderInfo(
DeviceInfo deviceInfo,
Optional<DeviceConfig> unusedDeviceConfigOpt,
Optional<LabConfig> unusedLabConfigOpt,
String universe) {
return buildDeviceHeaderInfo(
deviceInfo, unusedDeviceConfigOpt, unusedLabConfigOpt, universeFactory.create(universe));
}

/** Builds DeviceHeaderInfo based on device info and configs. */
public DeviceHeaderInfo buildDeviceHeaderInfo(
DeviceInfo deviceInfo,
Optional<DeviceConfig> unusedDeviceConfigOpt,
Optional<LabConfig> unusedLabConfigOpt,
UniverseScope universe) {
return DeviceHeaderInfo.newBuilder()
.setId(deviceInfo.getDeviceLocator().getId())
.setHost(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
import com.google.devtools.mobileharness.fe.v6.service.proto.device.FlashActionButtonState;
import com.google.devtools.mobileharness.fe.v6.service.util.FeatureManagerFactory;
import com.google.devtools.mobileharness.fe.v6.service.util.FeatureReadiness;
import com.google.devtools.mobileharness.fe.v6.service.util.UniverseScope;
import java.util.List;
import javax.inject.Inject;
import javax.inject.Singleton;
Expand All @@ -41,7 +42,7 @@ public class FlashButtonBuilder {
this.featureReadiness = featureReadiness;
}

public FlashActionButtonState build(DeviceInfo deviceInfo, String universe) {
public FlashActionButtonState build(DeviceInfo deviceInfo, UniverseScope universe) {
if (!featureManagerFactory.create(universe).isDeviceFlashingFeatureEnabled()) {
return FlashActionButtonState.newBuilder()
.setState(ActionButtonState.newBuilder().setVisible(false))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
import com.google.devtools.mobileharness.fe.v6.service.proto.device.ActionButtonState;
import com.google.devtools.mobileharness.fe.v6.service.util.FeatureManagerFactory;
import com.google.devtools.mobileharness.fe.v6.service.util.FeatureReadiness;
import com.google.devtools.mobileharness.fe.v6.service.util.UniverseScope;
import java.util.List;
import javax.inject.Inject;
import javax.inject.Singleton;
Expand All @@ -39,7 +40,7 @@ class LogcatButtonBuilder {
this.featureReadiness = featureReadiness;
}

public ActionButtonState build(DeviceInfo deviceInfo, String universe) {
public ActionButtonState build(DeviceInfo deviceInfo, UniverseScope universe) {
if (!featureManagerFactory.create(universe).isDeviceLogcatFeatureEnabled()) {
return ActionButtonState.newBuilder().setVisible(false).build();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
import com.google.devtools.mobileharness.fe.v6.service.proto.device.ActionButtonState;
import com.google.devtools.mobileharness.fe.v6.service.util.FeatureManagerFactory;
import com.google.devtools.mobileharness.fe.v6.service.util.FeatureReadiness;
import com.google.devtools.mobileharness.fe.v6.service.util.UniverseScope;
import javax.inject.Inject;
import javax.inject.Singleton;

Expand All @@ -38,7 +39,7 @@ class QuarantineButtonBuilder {
this.featureReadiness = featureReadiness;
}

public ActionButtonState build(DeviceInfo deviceInfo, String universe) {
public ActionButtonState build(DeviceInfo deviceInfo, UniverseScope universe) {
if (!featureManagerFactory.create(universe).isDeviceQuarantineFeatureEnabled()) {
return ActionButtonState.newBuilder().setVisible(false).build();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
import com.google.devtools.mobileharness.fe.v6.service.proto.device.ActionButtonState;
import com.google.devtools.mobileharness.fe.v6.service.util.FeatureManagerFactory;
import com.google.devtools.mobileharness.fe.v6.service.util.FeatureReadiness;
import com.google.devtools.mobileharness.fe.v6.service.util.UniverseScope;
import javax.inject.Inject;
import javax.inject.Singleton;

Expand All @@ -39,7 +40,7 @@ class ScreenshotButtonBuilder {
this.featureReadiness = featureReadiness;
}

public ActionButtonState build(DeviceInfo deviceInfo, String universe) {
public ActionButtonState build(DeviceInfo deviceInfo, UniverseScope universe) {
if (!featureManagerFactory.create(universe).isDeviceScreenshotFeatureEnabled()) {
return ActionButtonState.newBuilder().setVisible(false).build();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,10 +39,10 @@
public class FeatureManager {

private final Environment environment;
private final String universe;
private final UniverseScope universe;

@AssistedInject
FeatureManager(Environment environment, @Assisted String universe) {
FeatureManager(Environment environment, @Assisted UniverseScope universe) {
this.environment = environment;
this.universe = universe;
}
Expand All @@ -54,7 +54,7 @@ public class FeatureManager {
* builds.
*/
public boolean isDeviceFlashingFeatureEnabled() {
return environment.isGoogleInternal() && universe.equals("google_1p");
return environment.isGoogleInternal() && universe instanceof UniverseScope.SelfUniverse;
}

/**
Expand All @@ -64,7 +64,7 @@ public boolean isDeviceFlashingFeatureEnabled() {
* builds.
*/
public boolean isDeviceLogcatFeatureEnabled() {
return environment.isGoogleInternal() && universe.equals("google_1p");
return environment.isGoogleInternal() && universe instanceof UniverseScope.SelfUniverse;
}

/**
Expand All @@ -74,7 +74,7 @@ public boolean isDeviceLogcatFeatureEnabled() {
* builds.
*/
public boolean isDeviceQuarantineFeatureEnabled() {
return environment.isGoogleInternal() && universe.equals("google_1p");
return environment.isGoogleInternal() && universe instanceof UniverseScope.SelfUniverse;
}

/**
Expand All @@ -84,18 +84,22 @@ public boolean isDeviceQuarantineFeatureEnabled() {
* builds.
*/
public boolean isDeviceScreenshotFeatureEnabled() {
return environment.isGoogleInternal() && universe.equals("google_1p");
return environment.isGoogleInternal() && universe instanceof UniverseScope.SelfUniverse;
}

/**
* Checks if the device configuration feature is enabled.
* Checks if the configuration feature is enabled.
*
* <p>In Google internal builds, this feature is only available in the {@code google_1p} universe.
* In OSS builds, it is always available. In both cases, the {@code fe_enable_configuration} flag
* must be set.
* <p>In Google internal builds, configuration is always enabled for {@link
* UniverseScope.SelfUniverse} and disabled for routed universes. In OSS builds, availability is
* gated by the {@code fe_enable_configuration} flag regardless of universe.
*/
public boolean isConfigurationFeatureEnabled() {
boolean enabledByUniverse = !environment.isGoogleInternal() || universe.equals("google_1p");
return enabledByUniverse && Flags.instance().feEnableConfiguration.getNonNull();
if (environment.isGoogleInternal()) {
// Internal builds: configuration is always available for the self universe, no flag needed.
return universe instanceof UniverseScope.SelfUniverse;
}
// OSS/ATS: availability depends on the flag.
return Flags.instance().feEnableConfiguration.getNonNull();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -22,5 +22,5 @@
public interface FeatureManagerFactory {

/** Creates a {@link FeatureManager} for the given universe. */
FeatureManager create(@Assisted String universe);
FeatureManager create(@Assisted UniverseScope universe);
}
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
import com.google.devtools.mobileharness.fe.v6.service.proto.device.ActionButtonState;
import com.google.devtools.mobileharness.fe.v6.service.util.FeatureManager;
import com.google.devtools.mobileharness.fe.v6.service.util.FeatureManagerFactory;
import com.google.devtools.mobileharness.fe.v6.service.util.UniverseScope;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
Expand All @@ -34,7 +35,7 @@

@RunWith(JUnit4.class)
public final class ConfigurationButtonBuilderTest {
private static final String UNIVERSE = "google_1p";
private static final UniverseScope SELF_UNIVERSE = new UniverseScope.SelfUniverse();

@Rule public final MockitoRule mocks = MockitoJUnit.rule();
@Mock private FeatureManagerFactory featureManagerFactory;
Expand All @@ -45,7 +46,7 @@ public final class ConfigurationButtonBuilderTest {
@Before
public void setUp() {
configurationButtonBuilder = new ConfigurationButtonBuilder(featureManagerFactory);
when(featureManagerFactory.create(UNIVERSE)).thenReturn(featureManager);
when(featureManagerFactory.create(SELF_UNIVERSE)).thenReturn(featureManager);
}

@Test
Expand All @@ -54,7 +55,7 @@ public void build_configurationDisabled_invisible() {

assertThat(
configurationButtonBuilder
.build(DeviceInfo.getDefaultInstance(), UNIVERSE)
.build(DeviceInfo.getDefaultInstance(), SELF_UNIVERSE)
.getVisible())
.isFalse();
}
Expand All @@ -64,7 +65,7 @@ public void build_configurationEnabled_visibleEnabledWithTooltip() {
when(featureManager.isConfigurationFeatureEnabled()).thenReturn(true);

ActionButtonState state =
configurationButtonBuilder.build(DeviceInfo.getDefaultInstance(), UNIVERSE);
configurationButtonBuilder.build(DeviceInfo.getDefaultInstance(), SELF_UNIVERSE);

assertThat(state.getVisible()).isTrue();
assertThat(state.getEnabled()).isTrue();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,8 @@
import com.google.devtools.mobileharness.fe.v6.service.proto.device.FlashActionButtonState;
import com.google.devtools.mobileharness.fe.v6.service.proto.device.HostInfo;
import com.google.devtools.mobileharness.fe.v6.service.proto.device.QuarantineInfo;
import com.google.devtools.mobileharness.fe.v6.service.util.UniverseFactory;
import com.google.devtools.mobileharness.fe.v6.service.util.UniverseScope;
import com.google.inject.Guice;
import com.google.inject.testing.fieldbinder.Bind;
import com.google.inject.testing.fieldbinder.BoundFieldModule;
Expand All @@ -50,6 +52,7 @@
public final class DeviceHeaderInfoBuilderTest {
@Rule public final MockitoRule mocks = MockitoJUnit.rule();

private static final UniverseScope SELF_UNIVERSE = new UniverseScope.SelfUniverse();
private static final String DEVICE_ID = "test_device_id";
private static final String HOST_NAME = "test_host.google.com";
private static final String IP = "192.168.1.1";
Expand All @@ -59,20 +62,21 @@ public final class DeviceHeaderInfoBuilderTest {
@Bind @Mock private QuarantineButtonBuilder quarantineButtonBuilder;
@Bind @Mock private ScreenshotButtonBuilder screenshotButtonBuilder;
@Bind @Mock private ConfigurationButtonBuilder configurationButtonBuilder;
@Bind @Mock private UniverseFactory universeFactory;
@Inject private DeviceHeaderInfoBuilder deviceHeaderInfoBuilder;

@Before
public void setUp() {
Guice.createInjector(BoundFieldModule.of(this)).injectMembers(this);
when(flashButtonBuilder.build(any(DeviceInfo.class), any(String.class)))
when(flashButtonBuilder.build(any(DeviceInfo.class), any(UniverseScope.class)))
.thenReturn(FlashActionButtonState.getDefaultInstance());
when(logcatButtonBuilder.build(any(DeviceInfo.class), any(String.class)))
when(logcatButtonBuilder.build(any(DeviceInfo.class), any(UniverseScope.class)))
.thenReturn(ActionButtonState.getDefaultInstance());
when(quarantineButtonBuilder.build(any(DeviceInfo.class), any(String.class)))
when(quarantineButtonBuilder.build(any(DeviceInfo.class), any(UniverseScope.class)))
.thenReturn(ActionButtonState.getDefaultInstance());
when(screenshotButtonBuilder.build(any(DeviceInfo.class), any(String.class)))
when(screenshotButtonBuilder.build(any(DeviceInfo.class), any(UniverseScope.class)))
.thenReturn(ActionButtonState.getDefaultInstance());
when(configurationButtonBuilder.build(any(DeviceInfo.class), any(String.class)))
when(configurationButtonBuilder.build(any(DeviceInfo.class), any(UniverseScope.class)))
.thenReturn(ActionButtonState.getDefaultInstance());
}

Expand Down Expand Up @@ -111,7 +115,7 @@ public void buildDeviceHeaderInfo_quarantined() {

assertThat(
deviceHeaderInfoBuilder.buildDeviceHeaderInfo(
deviceInfo, Optional.empty(), Optional.empty(), "google_1p"))
deviceInfo, Optional.empty(), Optional.empty(), SELF_UNIVERSE))
.isEqualTo(expectedHeaderInfo);
}

Expand Down Expand Up @@ -142,7 +146,7 @@ public void buildDeviceHeaderInfo_notQuarantined() {

assertThat(
deviceHeaderInfoBuilder.buildDeviceHeaderInfo(
deviceInfo, Optional.empty(), Optional.empty(), "google_1p"))
deviceInfo, Optional.empty(), Optional.empty(), SELF_UNIVERSE))
.isEqualTo(expectedHeaderInfo);
}
}
Loading
Loading