OSDN Git Service

Add type service in settings advanced page.
authorjackqdyulei <jackqdyulei@google.com>
Mon, 13 Feb 2017 23:14:51 +0000 (15:14 -0800)
committerjackqdyulei <jackqdyulei@google.com>
Fri, 17 Feb 2017 23:17:31 +0000 (15:17 -0800)
Currently it only includes the gms service

Bug: 35317876
Test: RunSettingsRoboTests
Change-Id: I20a2a9d320efe4aed036552d450f59c89e81584a

src/com/android/settings/fuelgauge/PowerUsageAdvanced.java
src/com/android/settings/fuelgauge/PowerUsageFeatureProvider.java
src/com/android/settings/fuelgauge/PowerUsageFeatureProviderImpl.java
tests/robotests/src/com/android/settings/fuelgauge/PowerUsageAdvancedTest.java

index f9f914c..826ec09 100644 (file)
@@ -14,6 +14,7 @@
 package com.android.settings.fuelgauge;
 
 import android.content.Context;
+import android.content.pm.PackageManager;
 import android.os.Bundle;
 import android.os.Process;
 import android.provider.SearchIndexableResource;
@@ -61,6 +62,8 @@ public class PowerUsageAdvanced extends PowerUsageBase {
             UsageType.APP};
     private BatteryHistoryPreference mHistPref;
     private PreferenceGroup mUsageListGroup;
+    private PowerUsageFeatureProvider mPowerUsageFeatureProvider;
+    private PackageManager mPackageManager;
 
     @Override
     public void onCreate(Bundle icicle) {
@@ -68,6 +71,9 @@ public class PowerUsageAdvanced extends PowerUsageBase {
 
         mHistPref = (BatteryHistoryPreference) findPreference(KEY_BATTERY_GRAPH);
         mUsageListGroup = (PreferenceGroup) findPreference(KEY_BATTERY_USAGE_LIST);
+        mPowerUsageFeatureProvider = FeatureFactory.getFactory(getContext())
+                .getPowerUsageFeatureProvider(getContext());
+        mPackageManager = getContext().getPackageManager();
     }
 
     @Override
@@ -133,6 +139,8 @@ public class PowerUsageAdvanced extends PowerUsageBase {
             return UsageType.CELL;
         } else if (uid == Process.SYSTEM_UID || uid == Process.ROOT_UID) {
             return UsageType.SYSTEM;
+        } else if (mPowerUsageFeatureProvider.isTypeService(sipper.mPackages)) {
+            return UsageType.SERVICE;
         } else {
             return UsageType.APP;
         }
@@ -149,6 +157,7 @@ public class PowerUsageAdvanced extends PowerUsageBase {
 
         // Accumulate power usage based on usage type
         for (final BatterySipper sipper : batterySippers) {
+            sipper.mPackages = mPackageManager.getPackagesForUid(sipper.getUid());
             final PowerUsageData usageData = batteryDataMap.get(extractUsageType(sipper));
             usageData.totalPowerMah += sipper.totalPowerMah;
         }
@@ -165,6 +174,16 @@ public class PowerUsageAdvanced extends PowerUsageBase {
         return batteryDataList;
     }
 
+    @VisibleForTesting
+    void setPackageManager(PackageManager packageManager) {
+        mPackageManager = packageManager;
+    }
+
+    @VisibleForTesting
+    void setPowerUsageFeatureProvider(PowerUsageFeatureProvider provider) {
+        mPowerUsageFeatureProvider = provider;
+    }
+
     /**
      * Class that contains data used in {@link PowerGaugePreference}.
      */
index 3c1b197..4bcdc92 100644 (file)
@@ -41,4 +41,9 @@ public interface PowerUsageFeatureProvider {
    * Check whether advanced ui is enabled
    */
   boolean isAdvancedUiEnabled();
+
+  /**
+   * Check whether it is type service
+   */
+  boolean isTypeService(String[] packages);
 }
index b29900e..6442945 100644 (file)
@@ -38,4 +38,9 @@ public class PowerUsageFeatureProviderImpl implements PowerUsageFeatureProvider
     public boolean isAdvancedUiEnabled() {
         return false;
     }
+
+    @Override
+    public boolean isTypeService(String[] packages) {
+        return false;
+    }
 }
index f6b76e9..e47aac9 100644 (file)
@@ -1,5 +1,6 @@
 package com.android.settings.fuelgauge;
 
+import android.content.pm.PackageManager;
 import android.os.Process;
 import com.android.internal.os.BatterySipper;
 import com.android.internal.os.BatterySipper.DrainType;
@@ -21,6 +22,7 @@ import java.util.List;
 import java.util.Set;
 
 import static com.google.common.truth.Truth.assertThat;
+import static org.mockito.Matchers.any;
 import static org.mockito.Mockito.when;
 
 @RunWith(SettingsRobolectricTestRunner.class)
@@ -38,6 +40,10 @@ public class PowerUsageAdvancedTest {
     private BatterySipper mBatterySipper;
     @Mock
     private BatteryStatsHelper mBatteryStatsHelper;
+    @Mock
+    private PowerUsageFeatureProvider mPowerUsageFeatureProvider;
+    @Mock
+    private PackageManager mPackageManager;
     private PowerUsageAdvanced mPowerUsageAdvanced;
 
     @Before
@@ -57,6 +63,8 @@ public class PowerUsageAdvancedTest {
 
         when(mBatteryStatsHelper.getUsageList()).thenReturn(batterySippers);
         when(mBatteryStatsHelper.getTotalPower()).thenReturn(TOTAL_USAGE);
+        mPowerUsageAdvanced.setPackageManager(mPackageManager);
+        mPowerUsageAdvanced.setPowerUsageFeatureProvider(mPowerUsageFeatureProvider);
     }
 
     @Test
@@ -87,6 +95,16 @@ public class PowerUsageAdvancedTest {
     }
 
     @Test
+    public void testExtractUsageType_TypeService_ReturnService() {
+        mBatterySipper.drainType = DrainType.APP;
+        when(mBatterySipper.getUid()).thenReturn(FAKE_UID_1);
+        when(mPowerUsageFeatureProvider.isTypeService(any())).thenReturn(true);
+
+        assertThat(mPowerUsageAdvanced.extractUsageType(mBatterySipper))
+                .isEqualTo(UsageType.SERVICE);
+    }
+
+    @Test
     public void testParsePowerUsageData_PercentageCalculatedCorrectly() {
         final double percentApp = TYPE_APP_USAGE * 2 / TOTAL_USAGE * 100;
         final double percentWifi = TYPE_WIFI_USAGE / TOTAL_USAGE * 100;