[Settings] Query historical data in background

Move the query of historical data into background thread to avoid from
blocking other query operation in UI thread,

Bug: 141833767
Test: make RunSettingsRoboTests -j ROBOTEST_FILTER=DataUsageSummaryPreferenceControllerTest
Test: make RunSettingsRoboTests -j ROBOTEST_FILTER=DataUsagePreferenceControllerTest
Change-Id: I61e414d70136a0025ddd7373a4f34a99acb89510
This commit is contained in:
Bonian Chen
2020-05-04 11:54:19 +08:00
parent 37c795af3a
commit 3d62032fed
2 changed files with 33 additions and 10 deletions

View File

@@ -47,8 +47,10 @@ import com.android.settingslib.core.lifecycle.Lifecycle;
import com.android.settingslib.core.lifecycle.LifecycleObserver; import com.android.settingslib.core.lifecycle.LifecycleObserver;
import com.android.settingslib.core.lifecycle.events.OnStart; import com.android.settingslib.core.lifecycle.events.OnStart;
import com.android.settingslib.net.DataUsageController; import com.android.settingslib.net.DataUsageController;
import com.android.settingslib.utils.ThreadUtils;
import java.util.List; import java.util.List;
import java.util.concurrent.Future;
/** /**
* This is the controller for a data usage header that retrieves carrier data from the new * This is the controller for a data usage header that retrieves carrier data from the new
@@ -99,6 +101,8 @@ public class DataUsageSummaryPreferenceController extends TelephonyBasePreferenc
private Intent mManageSubscriptionIntent; private Intent mManageSubscriptionIntent;
private Future<Long> mHistoricalUsageLevel;
public DataUsageSummaryPreferenceController(Activity activity, public DataUsageSummaryPreferenceController(Activity activity,
Lifecycle lifecycle, PreferenceFragmentCompat fragment, int subscriptionId) { Lifecycle lifecycle, PreferenceFragmentCompat fragment, int subscriptionId) {
super(activity, KEY); super(activity, KEY);
@@ -206,13 +210,13 @@ public class DataUsageSummaryPreferenceController extends TelephonyBasePreferenc
updateConfiguration(mContext, mSubId, subInfo); updateConfiguration(mContext, mSubId, subInfo);
} }
mHistoricalUsageLevel = ThreadUtils.postOnBackgroundThread(() ->
mDataUsageController.getHistoricalUsageLevel(mDefaultTemplate));
final DataUsageController.DataUsageInfo info = final DataUsageController.DataUsageInfo info =
mDataUsageController.getDataUsageInfo(mDefaultTemplate); mDataUsageController.getDataUsageInfo(mDefaultTemplate);
long usageLevel = info.usageLevel; long usageLevel = info.usageLevel;
if (usageLevel <= 0L) {
usageLevel = mDataUsageController.getHistoricalUsageLevel(mDefaultTemplate);
}
if (subInfo != null) { if (subInfo != null) {
mDataInfoController.updateDataLimit(info, mPolicyEditor.getPolicy(mDefaultTemplate)); mDataInfoController.updateDataLimit(info, mPolicyEditor.getPolicy(mDefaultTemplate));
@@ -222,7 +226,7 @@ public class DataUsageSummaryPreferenceController extends TelephonyBasePreferenc
summaryPreference.setWifiMode(/* isWifiMode */ true, /* usagePeriod */ summaryPreference.setWifiMode(/* isWifiMode */ true, /* usagePeriod */
info.period, /* isSingleWifi */ false); info.period, /* isSingleWifi */ false);
summaryPreference.setLimitInfo(null); summaryPreference.setLimitInfo(null);
summaryPreference.setUsageNumbers(usageLevel, summaryPreference.setUsageNumbers(displayUsageLevel(usageLevel),
/* dataPlanSize */ -1L, /* dataPlanSize */ -1L,
/* hasMobileData */ true); /* hasMobileData */ true);
summaryPreference.setChartEnabled(false); summaryPreference.setChartEnabled(false);
@@ -235,11 +239,6 @@ public class DataUsageSummaryPreferenceController extends TelephonyBasePreferenc
} }
refreshDataplanInfo(info, subInfo); refreshDataplanInfo(info, subInfo);
if ((mDataplanUse <= 0L) && (mSnapshotTime < 0)) {
Log.d(TAG, "Display data usage from history");
mDataplanUse = usageLevel;
mSnapshotTime = -1L;
}
if (info.warningLevel > 0 && info.limitLevel > 0) { if (info.warningLevel > 0 && info.limitLevel > 0) {
summaryPreference.setLimitInfo(TextUtils.expandTemplate( summaryPreference.setLimitInfo(TextUtils.expandTemplate(
@@ -258,6 +257,12 @@ public class DataUsageSummaryPreferenceController extends TelephonyBasePreferenc
summaryPreference.setLimitInfo(null); summaryPreference.setLimitInfo(null);
} }
if ((mDataplanUse <= 0L) && (mSnapshotTime < 0)) {
Log.d(TAG, "Display data usage from history");
mDataplanUse = displayUsageLevel(usageLevel);
mSnapshotTime = -1L;
}
summaryPreference.setUsageNumbers(mDataplanUse, mDataplanSize, mHasMobileData); summaryPreference.setUsageNumbers(mDataplanUse, mDataplanSize, mHasMobileData);
if (mDataBarSize <= 0) { if (mDataBarSize <= 0) {
@@ -272,6 +277,17 @@ public class DataUsageSummaryPreferenceController extends TelephonyBasePreferenc
mDataplanCount, mManageSubscriptionIntent); mDataplanCount, mManageSubscriptionIntent);
} }
private long displayUsageLevel(long usageLevel) {
if (usageLevel > 0) {
return usageLevel;
}
try {
usageLevel = mHistoricalUsageLevel.get();
} catch (Exception ex) {
}
return usageLevel;
}
// TODO(b/70950124) add test for this method once the robolectric shadow run script is // TODO(b/70950124) add test for this method once the robolectric shadow run script is
// completed (b/3526807) // completed (b/3526807)
private void refreshDataplanInfo(DataUsageController.DataUsageInfo info, private void refreshDataplanInfo(DataUsageController.DataUsageInfo info,

View File

@@ -45,6 +45,7 @@ public class DataUsagePreferenceController extends TelephonyBasePreferenceContro
private Future<NetworkTemplate> mTemplateFuture; private Future<NetworkTemplate> mTemplateFuture;
private AtomicReference<NetworkTemplate> mTemplate; private AtomicReference<NetworkTemplate> mTemplate;
private Future<Long> mHistoricalUsageLevel;
public DataUsagePreferenceController(Context context, String key) { public DataUsagePreferenceController(Context context, String key) {
super(context, key); super(context, key);
@@ -127,11 +128,17 @@ public class DataUsagePreferenceController extends TelephonyBasePreferenceContro
final DataUsageController controller = new DataUsageController(context); final DataUsageController controller = new DataUsageController(context);
controller.setSubscriptionId(subId); controller.setSubscriptionId(subId);
mHistoricalUsageLevel = ThreadUtils.postOnBackgroundThread(() ->
controller.getHistoricalUsageLevel(getNetworkTemplate()));
final DataUsageController.DataUsageInfo usageInfo = getDataUsageInfo(controller); final DataUsageController.DataUsageInfo usageInfo = getDataUsageInfo(controller);
long usageLevel = usageInfo.usageLevel; long usageLevel = usageInfo.usageLevel;
if (usageLevel <= 0L) { if (usageLevel <= 0L) {
usageLevel = controller.getHistoricalUsageLevel(getNetworkTemplate()); try {
usageLevel = mHistoricalUsageLevel.get();
} catch (Exception exception) {
}
} }
if (usageLevel <= 0L) { if (usageLevel <= 0L) {
return null; return null;