Loading res/xml/app_info_settings.xml +6 −0 Original line number Diff line number Diff line Loading @@ -67,6 +67,12 @@ android:summary="@string/summary_placeholder" settings:controller="com.android.settings.applications.appinfo.AppDataUsagePreferenceController" /> <Preference android:key="data_settings_v2" android:title="@string/data_usage_app_summary_title" android:summary="@string/summary_placeholder" settings:controller="com.android.settings.applications.appinfo.AppDataUsagePreferenceControllerV2" /> <Preference android:key="time_spent_in_app" android:title="@string/time_spent_in_app_pref_title" Loading src/com/android/settings/applications/appinfo/AppDataUsagePreferenceController.java +8 −1 Original line number Diff line number Diff line Loading @@ -25,6 +25,7 @@ import android.os.RemoteException; import android.os.ServiceManager; import android.text.format.DateUtils; import android.text.format.Formatter; import android.util.FeatureFlagUtils; import androidx.annotation.VisibleForTesting; import androidx.loader.app.LoaderManager; Loading @@ -35,6 +36,7 @@ import androidx.preference.PreferenceScreen; import com.android.settings.R; import com.android.settings.SettingsPreferenceFragment; import com.android.settings.Utils; import com.android.settings.core.FeatureFlags; import com.android.settings.datausage.AppDataUsage; import com.android.settings.datausage.DataUsageList; import com.android.settings.datausage.DataUsageUtils; Loading Loading @@ -63,6 +65,9 @@ public class AppDataUsagePreferenceController extends AppInfoPreferenceControlle @Override public int getAvailabilityStatus() { if (FeatureFlagUtils.isEnabled(mContext, FeatureFlags.DATA_USAGE_V2)) { return UNSUPPORTED_ON_DEVICE; } return isBandwidthControlEnabled() ? AVAILABLE : CONDITIONALLY_UNAVAILABLE; } Loading Loading @@ -99,8 +104,10 @@ public class AppDataUsagePreferenceController extends AppInfoPreferenceControlle @Override public void onPause() { if (mStatsSession != null) { mParent.getLoaderManager().destroyLoader(mParent.LOADER_CHART_DATA); } } @Override public Loader<ChartData> onCreateLoader(int id, Bundle args) { Loading src/com/android/settings/applications/appinfo/AppDataUsagePreferenceControllerV2.java +44 −35 Original line number Diff line number Diff line /* * Copyright (C) 2017 The Android Open Source Project * Copyright (C) 2018 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. Loading @@ -17,14 +17,11 @@ package com.android.settings.applications.appinfo; import android.content.Context; import android.net.INetworkStatsService; import android.net.INetworkStatsSession; import android.net.NetworkTemplate; import android.os.Bundle; import android.os.RemoteException; import android.os.ServiceManager; import android.text.format.DateUtils; import android.text.format.Formatter; import android.util.FeatureFlagUtils; import androidx.annotation.VisibleForTesting; import androidx.loader.app.LoaderManager; Loading @@ -35,21 +32,23 @@ import androidx.preference.PreferenceScreen; import com.android.settings.R; import com.android.settings.SettingsPreferenceFragment; import com.android.settings.Utils; import com.android.settings.datausage.AppDataUsage; import com.android.settings.datausage.DataUsageList; import com.android.settings.core.FeatureFlags; import com.android.settings.datausage.AppDataUsageV2; import com.android.settings.datausage.DataUsageUtils; import com.android.settingslib.AppItem; import com.android.settingslib.core.lifecycle.LifecycleObserver; import com.android.settingslib.core.lifecycle.events.OnPause; import com.android.settingslib.core.lifecycle.events.OnResume; import com.android.settingslib.net.ChartData; import com.android.settingslib.net.ChartDataLoaderCompat; import com.android.settingslib.net.NetworkCycleDataForUid; import com.android.settingslib.net.NetworkCycleDataForUidLoader; import java.util.List; public class AppDataUsagePreferenceControllerV2 extends AppInfoPreferenceControllerBase implements LoaderManager.LoaderCallbacks<ChartData>, LifecycleObserver, OnResume, OnPause { implements LoaderManager.LoaderCallbacks<List<NetworkCycleDataForUid>>, LifecycleObserver, OnResume, OnPause { private ChartData mChartData; private INetworkStatsSession mStatsSession; private List<NetworkCycleDataForUid> mAppUsageData; public AppDataUsagePreferenceControllerV2(Context context, String key) { super(context, key); Loading @@ -57,21 +56,15 @@ public class AppDataUsagePreferenceControllerV2 extends AppInfoPreferenceControl @Override public int getAvailabilityStatus() { if (!FeatureFlagUtils.isEnabled(mContext, FeatureFlags.DATA_USAGE_V2)) { return UNSUPPORTED_ON_DEVICE; } return isBandwidthControlEnabled() ? AVAILABLE : CONDITIONALLY_UNAVAILABLE; } @Override public void displayPreference(PreferenceScreen screen) { super.displayPreference(screen); if (isAvailable()) { final INetworkStatsService statsService = INetworkStatsService.Stub.asInterface( ServiceManager.getService(Context.NETWORK_STATS_SERVICE)); try { mStatsSession = statsService.openSession(); } catch (RemoteException e) { throw new RuntimeException(e); } } } @Override Loading @@ -81,51 +74,67 @@ public class AppDataUsagePreferenceControllerV2 extends AppInfoPreferenceControl @Override public void onResume() { if (mStatsSession != null) { if (isAvailable()) { final int uid = mParent.getAppEntry().info.uid; final AppItem app = new AppItem(uid); app.addUid(uid); mParent.getLoaderManager().restartLoader(mParent.LOADER_CHART_DATA, ChartDataLoaderCompat.buildArgs(getTemplate(mContext), app), mParent.getLoaderManager().restartLoader(mParent.LOADER_CHART_DATA, null /* args */, this); } } @Override public void onPause() { if (isAvailable()) { mParent.getLoaderManager().destroyLoader(mParent.LOADER_CHART_DATA); } } @Override public Loader<ChartData> onCreateLoader(int id, Bundle args) { return new ChartDataLoaderCompat(mContext, mStatsSession, args); public Loader<List<NetworkCycleDataForUid>> onCreateLoader(int id, Bundle args) { final NetworkTemplate template = getTemplate(mContext); return NetworkCycleDataForUidLoader.builder(mContext) .setUid(mParent.getAppEntry().info.uid) .setRetrieveDetail(false) .setNetworkTemplate(template) .setSubscriberId(template.getSubscriberId()) .build(); } @Override public void onLoadFinished(Loader<ChartData> loader, ChartData data) { mChartData = data; public void onLoadFinished(Loader<List<NetworkCycleDataForUid>> loader, List<NetworkCycleDataForUid> data) { mAppUsageData = data; updateState(mPreference); } @Override public void onLoaderReset(Loader<ChartData> loader) { public void onLoaderReset(Loader<List<NetworkCycleDataForUid>> loader) { // Leave last result. } @Override protected Class<? extends SettingsPreferenceFragment> getDetailFragmentClass() { return AppDataUsage.class; return AppDataUsageV2.class; } private CharSequence getDataSummary() { if (mChartData != null) { final long totalBytes = mChartData.detail.getTotalBytes(); if (mAppUsageData != null) { long totalBytes = 0; long startTime = System.currentTimeMillis(); for (NetworkCycleDataForUid data : mAppUsageData) { totalBytes += data.getTotalUsage(); final long cycleStart = data.getStartTime(); if (cycleStart < startTime) { startTime = cycleStart; } } if (totalBytes == 0) { return mContext.getString(R.string.no_data_usage); } return mContext.getString(R.string.data_summary_format, Formatter.formatFileSize(mContext, totalBytes), DateUtils.formatDateTime(mContext, mChartData.detail.getStart(), DateUtils.formatDateTime(mContext, startTime, DateUtils.FORMAT_SHOW_DATE | DateUtils.FORMAT_ABBREV_MONTH)); } return mContext.getString(R.string.computing_size); Loading src/com/android/settings/applications/appinfo/AppInfoDashboardFragment.java +7 −1 Original line number Diff line number Diff line Loading @@ -34,6 +34,7 @@ import android.os.Bundle; import android.os.UserHandle; import android.os.UserManager; import android.text.TextUtils; import android.util.FeatureFlagUtils; import android.util.Log; import android.view.Menu; import android.view.MenuInflater; Loading @@ -48,6 +49,7 @@ import com.android.settings.SettingsPreferenceFragment; import com.android.settings.applications.manageapplications.ManageApplications; import com.android.settings.applications.specialaccess.pictureinpicture .PictureInPictureDetailPreferenceController; import com.android.settings.core.FeatureFlags; import com.android.settings.core.SubSettingLauncher; import com.android.settings.dashboard.DashboardFragment; import com.android.settingslib.RestrictedLockUtilsInternal; Loading Loading @@ -139,7 +141,11 @@ public class AppInfoDashboardFragment extends DashboardFragment final String packageName = getPackageName(); use(TimeSpentInAppPreferenceController.class).setPackageName(packageName); if (FeatureFlagUtils.isEnabled(context, FeatureFlags.DATA_USAGE_V2)) { use(AppDataUsagePreferenceControllerV2.class).setParentFragment(this); } else { use(AppDataUsagePreferenceController.class).setParentFragment(this); } final AppInstallerInfoPreferenceController installer = use(AppInstallerInfoPreferenceController.class); installer.setPackageName(packageName); Loading src/com/android/settings/datausage/DataUsageListV2.java +3 −5 Original line number Diff line number Diff line Loading @@ -426,11 +426,11 @@ public class DataUsageListV2 extends DataUsageBaseFragment { private void startAppDataUsage(AppItem item) { final Bundle args = new Bundle(); args.putParcelable(AppDataUsage.ARG_APP_ITEM, item); args.putParcelable(AppDataUsage.ARG_NETWORK_TEMPLATE, mTemplate); args.putParcelable(AppDataUsageV2.ARG_APP_ITEM, item); args.putParcelable(AppDataUsageV2.ARG_NETWORK_TEMPLATE, mTemplate); new SubSettingLauncher(getContext()) .setDestination(AppDataUsage.class.getName()) .setDestination(AppDataUsageV2.class.getName()) .setTitleRes(R.string.app_data_usage) .setArguments(args) .setSourceMetricsCategory(getMetricsCategory()) Loading Loading @@ -490,8 +490,6 @@ public class DataUsageListV2 extends DataUsageBaseFragment { @Override public Loader<List<NetworkCycleChartData>> onCreateLoader(int id, Bundle args) { return NetworkCycleChartDataLoader.builder(getContext()) .setNetworkPolicy(services.mPolicyEditor.getPolicy(mTemplate)) .setNetworkType(mNetworkType) .setNetworkTemplate(mTemplate) .setSubscriberId(mTelephonyManager.getSubscriberId(mSubId)) .build(); Loading Loading
res/xml/app_info_settings.xml +6 −0 Original line number Diff line number Diff line Loading @@ -67,6 +67,12 @@ android:summary="@string/summary_placeholder" settings:controller="com.android.settings.applications.appinfo.AppDataUsagePreferenceController" /> <Preference android:key="data_settings_v2" android:title="@string/data_usage_app_summary_title" android:summary="@string/summary_placeholder" settings:controller="com.android.settings.applications.appinfo.AppDataUsagePreferenceControllerV2" /> <Preference android:key="time_spent_in_app" android:title="@string/time_spent_in_app_pref_title" Loading
src/com/android/settings/applications/appinfo/AppDataUsagePreferenceController.java +8 −1 Original line number Diff line number Diff line Loading @@ -25,6 +25,7 @@ import android.os.RemoteException; import android.os.ServiceManager; import android.text.format.DateUtils; import android.text.format.Formatter; import android.util.FeatureFlagUtils; import androidx.annotation.VisibleForTesting; import androidx.loader.app.LoaderManager; Loading @@ -35,6 +36,7 @@ import androidx.preference.PreferenceScreen; import com.android.settings.R; import com.android.settings.SettingsPreferenceFragment; import com.android.settings.Utils; import com.android.settings.core.FeatureFlags; import com.android.settings.datausage.AppDataUsage; import com.android.settings.datausage.DataUsageList; import com.android.settings.datausage.DataUsageUtils; Loading Loading @@ -63,6 +65,9 @@ public class AppDataUsagePreferenceController extends AppInfoPreferenceControlle @Override public int getAvailabilityStatus() { if (FeatureFlagUtils.isEnabled(mContext, FeatureFlags.DATA_USAGE_V2)) { return UNSUPPORTED_ON_DEVICE; } return isBandwidthControlEnabled() ? AVAILABLE : CONDITIONALLY_UNAVAILABLE; } Loading Loading @@ -99,8 +104,10 @@ public class AppDataUsagePreferenceController extends AppInfoPreferenceControlle @Override public void onPause() { if (mStatsSession != null) { mParent.getLoaderManager().destroyLoader(mParent.LOADER_CHART_DATA); } } @Override public Loader<ChartData> onCreateLoader(int id, Bundle args) { Loading
src/com/android/settings/applications/appinfo/AppDataUsagePreferenceControllerV2.java +44 −35 Original line number Diff line number Diff line /* * Copyright (C) 2017 The Android Open Source Project * Copyright (C) 2018 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. Loading @@ -17,14 +17,11 @@ package com.android.settings.applications.appinfo; import android.content.Context; import android.net.INetworkStatsService; import android.net.INetworkStatsSession; import android.net.NetworkTemplate; import android.os.Bundle; import android.os.RemoteException; import android.os.ServiceManager; import android.text.format.DateUtils; import android.text.format.Formatter; import android.util.FeatureFlagUtils; import androidx.annotation.VisibleForTesting; import androidx.loader.app.LoaderManager; Loading @@ -35,21 +32,23 @@ import androidx.preference.PreferenceScreen; import com.android.settings.R; import com.android.settings.SettingsPreferenceFragment; import com.android.settings.Utils; import com.android.settings.datausage.AppDataUsage; import com.android.settings.datausage.DataUsageList; import com.android.settings.core.FeatureFlags; import com.android.settings.datausage.AppDataUsageV2; import com.android.settings.datausage.DataUsageUtils; import com.android.settingslib.AppItem; import com.android.settingslib.core.lifecycle.LifecycleObserver; import com.android.settingslib.core.lifecycle.events.OnPause; import com.android.settingslib.core.lifecycle.events.OnResume; import com.android.settingslib.net.ChartData; import com.android.settingslib.net.ChartDataLoaderCompat; import com.android.settingslib.net.NetworkCycleDataForUid; import com.android.settingslib.net.NetworkCycleDataForUidLoader; import java.util.List; public class AppDataUsagePreferenceControllerV2 extends AppInfoPreferenceControllerBase implements LoaderManager.LoaderCallbacks<ChartData>, LifecycleObserver, OnResume, OnPause { implements LoaderManager.LoaderCallbacks<List<NetworkCycleDataForUid>>, LifecycleObserver, OnResume, OnPause { private ChartData mChartData; private INetworkStatsSession mStatsSession; private List<NetworkCycleDataForUid> mAppUsageData; public AppDataUsagePreferenceControllerV2(Context context, String key) { super(context, key); Loading @@ -57,21 +56,15 @@ public class AppDataUsagePreferenceControllerV2 extends AppInfoPreferenceControl @Override public int getAvailabilityStatus() { if (!FeatureFlagUtils.isEnabled(mContext, FeatureFlags.DATA_USAGE_V2)) { return UNSUPPORTED_ON_DEVICE; } return isBandwidthControlEnabled() ? AVAILABLE : CONDITIONALLY_UNAVAILABLE; } @Override public void displayPreference(PreferenceScreen screen) { super.displayPreference(screen); if (isAvailable()) { final INetworkStatsService statsService = INetworkStatsService.Stub.asInterface( ServiceManager.getService(Context.NETWORK_STATS_SERVICE)); try { mStatsSession = statsService.openSession(); } catch (RemoteException e) { throw new RuntimeException(e); } } } @Override Loading @@ -81,51 +74,67 @@ public class AppDataUsagePreferenceControllerV2 extends AppInfoPreferenceControl @Override public void onResume() { if (mStatsSession != null) { if (isAvailable()) { final int uid = mParent.getAppEntry().info.uid; final AppItem app = new AppItem(uid); app.addUid(uid); mParent.getLoaderManager().restartLoader(mParent.LOADER_CHART_DATA, ChartDataLoaderCompat.buildArgs(getTemplate(mContext), app), mParent.getLoaderManager().restartLoader(mParent.LOADER_CHART_DATA, null /* args */, this); } } @Override public void onPause() { if (isAvailable()) { mParent.getLoaderManager().destroyLoader(mParent.LOADER_CHART_DATA); } } @Override public Loader<ChartData> onCreateLoader(int id, Bundle args) { return new ChartDataLoaderCompat(mContext, mStatsSession, args); public Loader<List<NetworkCycleDataForUid>> onCreateLoader(int id, Bundle args) { final NetworkTemplate template = getTemplate(mContext); return NetworkCycleDataForUidLoader.builder(mContext) .setUid(mParent.getAppEntry().info.uid) .setRetrieveDetail(false) .setNetworkTemplate(template) .setSubscriberId(template.getSubscriberId()) .build(); } @Override public void onLoadFinished(Loader<ChartData> loader, ChartData data) { mChartData = data; public void onLoadFinished(Loader<List<NetworkCycleDataForUid>> loader, List<NetworkCycleDataForUid> data) { mAppUsageData = data; updateState(mPreference); } @Override public void onLoaderReset(Loader<ChartData> loader) { public void onLoaderReset(Loader<List<NetworkCycleDataForUid>> loader) { // Leave last result. } @Override protected Class<? extends SettingsPreferenceFragment> getDetailFragmentClass() { return AppDataUsage.class; return AppDataUsageV2.class; } private CharSequence getDataSummary() { if (mChartData != null) { final long totalBytes = mChartData.detail.getTotalBytes(); if (mAppUsageData != null) { long totalBytes = 0; long startTime = System.currentTimeMillis(); for (NetworkCycleDataForUid data : mAppUsageData) { totalBytes += data.getTotalUsage(); final long cycleStart = data.getStartTime(); if (cycleStart < startTime) { startTime = cycleStart; } } if (totalBytes == 0) { return mContext.getString(R.string.no_data_usage); } return mContext.getString(R.string.data_summary_format, Formatter.formatFileSize(mContext, totalBytes), DateUtils.formatDateTime(mContext, mChartData.detail.getStart(), DateUtils.formatDateTime(mContext, startTime, DateUtils.FORMAT_SHOW_DATE | DateUtils.FORMAT_ABBREV_MONTH)); } return mContext.getString(R.string.computing_size); Loading
src/com/android/settings/applications/appinfo/AppInfoDashboardFragment.java +7 −1 Original line number Diff line number Diff line Loading @@ -34,6 +34,7 @@ import android.os.Bundle; import android.os.UserHandle; import android.os.UserManager; import android.text.TextUtils; import android.util.FeatureFlagUtils; import android.util.Log; import android.view.Menu; import android.view.MenuInflater; Loading @@ -48,6 +49,7 @@ import com.android.settings.SettingsPreferenceFragment; import com.android.settings.applications.manageapplications.ManageApplications; import com.android.settings.applications.specialaccess.pictureinpicture .PictureInPictureDetailPreferenceController; import com.android.settings.core.FeatureFlags; import com.android.settings.core.SubSettingLauncher; import com.android.settings.dashboard.DashboardFragment; import com.android.settingslib.RestrictedLockUtilsInternal; Loading Loading @@ -139,7 +141,11 @@ public class AppInfoDashboardFragment extends DashboardFragment final String packageName = getPackageName(); use(TimeSpentInAppPreferenceController.class).setPackageName(packageName); if (FeatureFlagUtils.isEnabled(context, FeatureFlags.DATA_USAGE_V2)) { use(AppDataUsagePreferenceControllerV2.class).setParentFragment(this); } else { use(AppDataUsagePreferenceController.class).setParentFragment(this); } final AppInstallerInfoPreferenceController installer = use(AppInstallerInfoPreferenceController.class); installer.setPackageName(packageName); Loading
src/com/android/settings/datausage/DataUsageListV2.java +3 −5 Original line number Diff line number Diff line Loading @@ -426,11 +426,11 @@ public class DataUsageListV2 extends DataUsageBaseFragment { private void startAppDataUsage(AppItem item) { final Bundle args = new Bundle(); args.putParcelable(AppDataUsage.ARG_APP_ITEM, item); args.putParcelable(AppDataUsage.ARG_NETWORK_TEMPLATE, mTemplate); args.putParcelable(AppDataUsageV2.ARG_APP_ITEM, item); args.putParcelable(AppDataUsageV2.ARG_NETWORK_TEMPLATE, mTemplate); new SubSettingLauncher(getContext()) .setDestination(AppDataUsage.class.getName()) .setDestination(AppDataUsageV2.class.getName()) .setTitleRes(R.string.app_data_usage) .setArguments(args) .setSourceMetricsCategory(getMetricsCategory()) Loading Loading @@ -490,8 +490,6 @@ public class DataUsageListV2 extends DataUsageBaseFragment { @Override public Loader<List<NetworkCycleChartData>> onCreateLoader(int id, Bundle args) { return NetworkCycleChartDataLoader.builder(getContext()) .setNetworkPolicy(services.mPolicyEditor.getPolicy(mTemplate)) .setNetworkType(mNetworkType) .setNetworkTemplate(mTemplate) .setSubscriberId(mTelephonyManager.getSubscriberId(mSubId)) .build(); Loading