Merge "Refine optimize page log pattern" into udc-dev
diff --git a/src/com/android/settings/datausage/DataUsageList.java b/src/com/android/settings/datausage/DataUsageList.java
index 1855c2e..dd8312c 100644
--- a/src/com/android/settings/datausage/DataUsageList.java
+++ b/src/com/android/settings/datausage/DataUsageList.java
@@ -165,11 +165,7 @@
         }
 
         processArgument();
-        mMobileNetworkRepository = MobileNetworkRepository.getInstance(getContext());
-        ThreadUtils.postOnBackgroundThread(() -> {
-            mSubscriptionInfoEntity = mMobileNetworkRepository.getSubInfoById(
-                    String.valueOf(mSubId));
-        });
+        updateSubscriptionInfoEntity();
         mDataStateListener = new MobileDataEnabledListener(activity, this);
     }
 
@@ -294,6 +290,15 @@
         }
     }
 
+    @VisibleForTesting
+    void updateSubscriptionInfoEntity() {
+        mMobileNetworkRepository = MobileNetworkRepository.getInstance(getContext());
+        ThreadUtils.postOnBackgroundThread(() -> {
+            mSubscriptionInfoEntity = mMobileNetworkRepository.getSubInfoById(
+                    String.valueOf(mSubId));
+        });
+    }
+
     /**
      * Implementation of {@code MobileDataEnabledListener.Client}
      */
@@ -503,11 +508,13 @@
         Collections.sort(items);
         final List<String> packageNames = Arrays.asList(getContext().getResources().getStringArray(
                 R.array.datausage_hiding_carrier_service_package_names));
+        // When there is no specified SubscriptionInfo, Wi-Fi data usage will be displayed.
+        // In this case, the carrier service package also needs to be hidden.
         boolean shouldHidePackageName = mSubscriptionInfoEntity != null
                 ? Arrays.stream(getContext().getResources().getIntArray(
                         R.array.datausage_hiding_carrier_service_carrier_id))
                 .anyMatch(carrierId -> (carrierId == mSubscriptionInfoEntity.carrierId))
-                : false;
+                : true;
 
         for (int i = 0; i < items.size(); i++) {
             UidDetail detail = mUidDetailProvider.getUidDetail(items.get(i).key, true);
diff --git a/src/com/android/settings/fuelgauge/BatteryBackupHelper.java b/src/com/android/settings/fuelgauge/BatteryBackupHelper.java
index bf874bb..0558d46 100644
--- a/src/com/android/settings/fuelgauge/BatteryBackupHelper.java
+++ b/src/com/android/settings/fuelgauge/BatteryBackupHelper.java
@@ -24,7 +24,6 @@
 import android.content.Context;
 import android.content.pm.ApplicationInfo;
 import android.content.pm.IPackageManager;
-import android.os.Build;
 import android.os.IDeviceIdleController;
 import android.os.ParcelFileDescriptor;
 import android.os.RemoteException;
@@ -48,7 +47,6 @@
     /** An inditifier for {@link BackupHelper}. */
     public static final String TAG = "BatteryBackupHelper";
     private static final String DEVICE_IDLE_SERVICE = "deviceidle";
-    private static final boolean DEBUG = Build.TYPE.equals("userdebug");
 
     static final String DELIMITER = ",";
     static final String DELIMITER_MODE = ":";
@@ -119,7 +117,7 @@
             Log.e(TAG, "backupFullPowerList() failed", e);
             return null;
         }
-        // Ignores unexpected emptty result case.
+        // Ignores unexpected empty result case.
         if (allowlistedApps == null || allowlistedApps.length == 0) {
             Log.w(TAG, "no data found in the getFullPowerList()");
             return new ArrayList<>();
@@ -145,8 +143,7 @@
         final AppOpsManager appOps = mContext.getSystemService(AppOpsManager.class);
         // Converts application into the AppUsageState.
         for (ApplicationInfo info : applications) {
-            final int mode = appOps.checkOpNoThrow(
-                    AppOpsManager.OP_RUN_ANY_IN_BACKGROUND, info.uid, info.packageName);
+            final int mode = BatteryOptimizeUtils.getMode(appOps, info.uid, info.packageName);
             @BatteryOptimizeUtils.OptimizationMode
             final int optimizationMode = BatteryOptimizeUtils.getAppOptimizationMode(
                     mode, allowlistedApps.contains(info.packageName));
@@ -159,7 +156,7 @@
             final String packageOptimizeMode =
                     info.packageName + DELIMITER_MODE + optimizationMode;
             builder.append(packageOptimizeMode + DELIMITER);
-            debugLog(packageOptimizeMode);
+            Log.d(TAG, "backupOptimizationMode: " + packageOptimizeMode);
             backupCount++;
         }
 
@@ -255,9 +252,8 @@
     }
 
     private boolean isSystemOrDefaultApp(String packageName, int uid) {
-        final PowerAllowlistBackend powerAllowlistBackend = getPowerAllowlistBackend();
-        return powerAllowlistBackend.isSysAllowlisted(packageName)
-                || powerAllowlistBackend.isDefaultActiveApp(packageName, uid);
+        return BatteryOptimizeUtils.isSystemOrDefaultApp(
+                getPowerAllowlistBackend(), packageName, uid);
     }
 
     private ArraySet<ApplicationInfo> getInstalledApplications() {
@@ -267,10 +263,6 @@
         return BatteryOptimizeUtils.getInstalledApplications(mContext, getIPackageManager());
     }
 
-    private void debugLog(String debugContent) {
-        if (DEBUG) Log.d(TAG, debugContent);
-    }
-
     private static void writeBackupData(
             BackupDataOutput data, String dataKey, String dataContent) {
         final byte[] dataContentBytes = dataContent.getBytes();
@@ -283,6 +275,6 @@
     }
 
     private static boolean isOwner() {
-        return UserHandle.myUserId() == UserHandle.USER_OWNER;
+        return UserHandle.myUserId() == UserHandle.USER_SYSTEM;
     }
 }
diff --git a/src/com/android/settings/fuelgauge/BatteryOptimizeUtils.java b/src/com/android/settings/fuelgauge/BatteryOptimizeUtils.java
index 6354f3b..b9ac64d 100644
--- a/src/com/android/settings/fuelgauge/BatteryOptimizeUtils.java
+++ b/src/com/android/settings/fuelgauge/BatteryOptimizeUtils.java
@@ -83,8 +83,7 @@
         mAppOpsManager = context.getSystemService(AppOpsManager.class);
         mBatteryUtils = BatteryUtils.getInstance(context);
         mPowerAllowListBackend = PowerAllowlistBackend.getInstance(context);
-        mMode = mAppOpsManager
-                .checkOpNoThrow(AppOpsManager.OP_RUN_ANY_IN_BACKGROUND, mUid, mPackageName);
+        mMode = getMode(mAppOpsManager, mUid, mPackageName);
         mAllowListed = mPowerAllowListBackend.isAllowlisted(mPackageName, mUid);
     }
 
@@ -204,7 +203,12 @@
         return mPackageName == null ? UNKNOWN_PACKAGE : mPackageName;
     }
 
-    private static boolean isSystemOrDefaultApp(
+    static int getMode(AppOpsManager appOpsManager, int uid, String packageName) {
+        return appOpsManager.checkOpNoThrow(
+                AppOpsManager.OP_RUN_ANY_IN_BACKGROUND, uid, packageName);
+    }
+
+    static boolean isSystemOrDefaultApp(
             PowerAllowlistBackend powerAllowlistBackend, String packageName, int uid) {
         return powerAllowlistBackend.isSysAllowlisted(packageName)
                 || powerAllowlistBackend.isDefaultActiveApp(packageName, uid);
diff --git a/src/com/android/settings/fuelgauge/batterytip/BatteryTipLoader.java b/src/com/android/settings/fuelgauge/batterytip/BatteryTipLoader.java
index 8e9d485..34c431a 100644
--- a/src/com/android/settings/fuelgauge/batterytip/BatteryTipLoader.java
+++ b/src/com/android/settings/fuelgauge/batterytip/BatteryTipLoader.java
@@ -67,9 +67,6 @@
 
         tips.add(new LowBatteryDetector(context, policy, batteryInfo, isPowerSaveMode).detect());
         tips.add(new HighUsageDetector(context, policy, mBatteryUsageStats, batteryInfo).detect());
-        tips.add(new SmartBatteryDetector(
-                context, policy, batteryInfo, context.getContentResolver(), isPowerSaveMode)
-                        .detect());
         tips.add(new BatteryDefenderDetector(batteryInfo, context).detect());
         tips.add(new DockDefenderDetector(batteryInfo, context).detect());
         tips.add(new IncompatibleChargerDetector(context).detect());
diff --git a/tests/robotests/src/com/android/settings/datausage/DataUsageListTest.java b/tests/robotests/src/com/android/settings/datausage/DataUsageListTest.java
index 9cedba9..762fbf8 100644
--- a/tests/robotests/src/com/android/settings/datausage/DataUsageListTest.java
+++ b/tests/robotests/src/com/android/settings/datausage/DataUsageListTest.java
@@ -106,6 +106,7 @@
         ReflectionHelpers.setField(mDataUsageList, "services", mNetworkServices);
         doReturn(mLoaderManager).when(mDataUsageList).getLoaderManager();
         mDataUsageList.mLoadingViewController = mock(LoadingViewController.class);
+        doNothing().when(mDataUsageList).updateSubscriptionInfoEntity();
     }
 
     @Test
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/batterytip/BatteryTipLoaderTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batterytip/BatteryTipLoaderTest.java
index 5b0ae04..e13dcc0 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/batterytip/BatteryTipLoaderTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/batterytip/BatteryTipLoaderTest.java
@@ -54,8 +54,7 @@
             BatteryTip.TipType.BATTERY_DEFENDER,
             BatteryTip.TipType.DOCK_DEFENDER,
             BatteryTip.TipType.INCOMPATIBLE_CHARGER,
-            BatteryTip.TipType.HIGH_DEVICE_USAGE,
-            BatteryTip.TipType.SMART_BATTERY_MANAGER};
+            BatteryTip.TipType.HIGH_DEVICE_USAGE};
     @Mock(answer = Answers.RETURNS_DEEP_STUBS)
     private BatteryUsageStats mBatteryUsageStats;
     @Mock