package com.developerphil.adbidea.compatibility; import com.android.ddmlib.IDevice; import com.android.tools.idea.model.ManifestInfo; import org.jetbrains.android.dom.AndroidAttributeValue; import org.jetbrains.android.dom.manifest.UsesFeature; import org.jetbrains.android.facet.AndroidFacet; import org.joor.Reflect; import java.util.EnumSet; import java.util.List; public class GetRequiredHardwareFeaturesCompat extends BackwardCompatibleGetter<EnumSet<IDevice.HardwareFeature>> { private AndroidFacet facet; public GetRequiredHardwareFeaturesCompat(AndroidFacet facet) { this.facet = facet; } @Override // Android studio 1.5 - 2.0-Preview5 protected EnumSet<IDevice.HardwareFeature> getCurrentImplementation() throws Throwable { if (new IsWatchFeatureRequiredCompat(facet).get()) { return EnumSet.of(IDevice.HardwareFeature.WATCH); } else { return EnumSet.noneOf(IDevice.HardwareFeature.class); } } @Override // Android studio 1.4 and below protected EnumSet<IDevice.HardwareFeature> getPreviousImplementation() { ManifestInfo manifestInfo = ManifestInfo.get(facet.getModule(), true); List<UsesFeature> requiredFeatures = Reflect.on(manifestInfo).call("getRequiredFeatures").get(); for (UsesFeature feature : requiredFeatures) { AndroidAttributeValue<String> name = feature.getName(); if (name != null && UsesFeature.HARDWARE_TYPE_WATCH.equals(name.getStringValue())) { return EnumSet.of(IDevice.HardwareFeature.WATCH); } } return EnumSet.noneOf(IDevice.HardwareFeature.class); } }