Use BillingCycleRepository in DataUsageList
Unify the enable logic for the "Data warning & limit" page. Bug: 290856342 Test: manual - on DataUsageList Test: m RunSettingsRoboTests Change-Id: I3014461ef21768b5d0eb6d91873a4ba52d20f6bf
This commit is contained in:
@@ -49,6 +49,7 @@ class BillingCyclePreference @JvmOverloads constructor(
|
||||
this.subId = subId
|
||||
summary = null
|
||||
updateEnabled()
|
||||
intent = intent
|
||||
}
|
||||
|
||||
override fun onAttached() {
|
||||
|
||||
@@ -15,23 +15,13 @@
|
||||
package com.android.settings.datausage;
|
||||
|
||||
import android.content.Context;
|
||||
import android.net.NetworkPolicy;
|
||||
import android.net.NetworkPolicyManager;
|
||||
import android.os.Bundle;
|
||||
import android.os.INetworkManagementService;
|
||||
import android.os.RemoteException;
|
||||
import android.os.ServiceManager;
|
||||
import android.os.UserManager;
|
||||
import android.telephony.SubscriptionManager;
|
||||
import android.telephony.TelephonyManager;
|
||||
import android.util.Log;
|
||||
|
||||
import com.android.settings.dashboard.DashboardFragment;
|
||||
import com.android.settingslib.NetworkPolicyEditor;
|
||||
|
||||
public abstract class DataUsageBaseFragment extends DashboardFragment {
|
||||
private static final String TAG = "DataUsageBase";
|
||||
private static final String ETHERNET = "ethernet";
|
||||
|
||||
protected final TemplatePreference.NetworkServices services =
|
||||
new TemplatePreference.NetworkServices();
|
||||
@@ -41,16 +31,10 @@ public abstract class DataUsageBaseFragment extends DashboardFragment {
|
||||
super.onCreate(icicle);
|
||||
Context context = getContext();
|
||||
|
||||
services.mNetworkService = INetworkManagementService.Stub.asInterface(
|
||||
ServiceManager.getService(Context.NETWORKMANAGEMENT_SERVICE));
|
||||
services.mPolicyManager = (NetworkPolicyManager) context
|
||||
.getSystemService(Context.NETWORK_POLICY_SERVICE);
|
||||
|
||||
services.mPolicyEditor = new NetworkPolicyEditor(services.mPolicyManager);
|
||||
|
||||
services.mTelephonyManager = context.getSystemService(TelephonyManager.class);
|
||||
services.mSubscriptionManager = SubscriptionManager.from(context);
|
||||
services.mUserManager = UserManager.get(context);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -58,33 +42,4 @@ public abstract class DataUsageBaseFragment extends DashboardFragment {
|
||||
super.onResume();
|
||||
services.mPolicyEditor.read();
|
||||
}
|
||||
|
||||
protected boolean isAdmin() {
|
||||
return services.mUserManager.isAdminUser();
|
||||
}
|
||||
|
||||
protected boolean isMobileDataAvailable(int subId) {
|
||||
return services.mSubscriptionManager.getActiveSubscriptionInfo(subId) != null;
|
||||
}
|
||||
|
||||
protected boolean isNetworkPolicyModifiable(NetworkPolicy policy, int subId) {
|
||||
return policy != null && isBandwidthControlEnabled() && services.mUserManager.isAdminUser()
|
||||
&& isDataEnabled(subId);
|
||||
}
|
||||
|
||||
private boolean isDataEnabled(int subId) {
|
||||
if (subId == SubscriptionManager.INVALID_SUBSCRIPTION_ID) {
|
||||
return true;
|
||||
}
|
||||
return services.mTelephonyManager.getDataEnabled(subId);
|
||||
}
|
||||
|
||||
protected boolean isBandwidthControlEnabled() {
|
||||
try {
|
||||
return services.mNetworkService.isBandwidthControlEnabled();
|
||||
} catch (RemoteException e) {
|
||||
Log.w(TAG, "problem talking with INetworkManagementService: ", e);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -32,7 +32,6 @@ import android.view.View.AccessibilityDelegate;
|
||||
import android.view.accessibility.AccessibilityEvent;
|
||||
import android.widget.AdapterView;
|
||||
import android.widget.AdapterView.OnItemSelectedListener;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.Spinner;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
@@ -46,6 +45,7 @@ import androidx.preference.Preference;
|
||||
import com.android.settings.R;
|
||||
import com.android.settings.core.SubSettingLauncher;
|
||||
import com.android.settings.datausage.CycleAdapter.SpinnerInterface;
|
||||
import com.android.settings.datausage.lib.BillingCycleRepository;
|
||||
import com.android.settings.network.MobileDataEnabledListener;
|
||||
import com.android.settings.network.MobileNetworkRepository;
|
||||
import com.android.settings.widget.LoadingViewController;
|
||||
@@ -108,6 +108,7 @@ public class DataUsageList extends DataUsageBaseFragment
|
||||
private MobileNetworkRepository mMobileNetworkRepository;
|
||||
private SubscriptionInfoEntity mSubscriptionInfoEntity;
|
||||
private DataUsageListAppsController mDataUsageListAppsController;
|
||||
private BillingCycleRepository mBillingCycleRepository;
|
||||
|
||||
@Override
|
||||
public int getMetricsCategory() {
|
||||
@@ -125,7 +126,8 @@ public class DataUsageList extends DataUsageBaseFragment
|
||||
}
|
||||
|
||||
final Activity activity = getActivity();
|
||||
if (!isBandwidthControlEnabled()) {
|
||||
mBillingCycleRepository = createBillingCycleRepository();
|
||||
if (!mBillingCycleRepository.isBandwidthControlEnabled()) {
|
||||
Log.w(TAG, "No bandwidth control; leaving");
|
||||
activity.finish();
|
||||
return;
|
||||
@@ -146,6 +148,12 @@ public class DataUsageList extends DataUsageBaseFragment
|
||||
mDataUsageListAppsController.init(mTemplate);
|
||||
}
|
||||
|
||||
@VisibleForTesting
|
||||
@NonNull
|
||||
BillingCycleRepository createBillingCycleRepository() {
|
||||
return new BillingCycleRepository(requireContext());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onViewCreated(@NonNull View v, Bundle savedInstanceState) {
|
||||
super.onViewCreated(v, savedInstanceState);
|
||||
@@ -286,10 +294,9 @@ public class DataUsageList extends DataUsageBaseFragment
|
||||
final NetworkPolicy policy = services.mPolicyEditor.getPolicy(mTemplate);
|
||||
final View configureButton = mHeader.findViewById(R.id.filter_settings);
|
||||
//SUB SELECT
|
||||
if (isNetworkPolicyModifiable(policy, mSubId) && isMobileDataAvailable(mSubId)) {
|
||||
if (policy != null && isMobileDataAvailable()) {
|
||||
mChart.setNetworkPolicy(policy);
|
||||
configureButton.setVisibility(View.VISIBLE);
|
||||
((ImageView) configureButton).setColorFilter(android.R.color.white);
|
||||
} else {
|
||||
// controls are disabled; don't bind warning/limit sweeps
|
||||
mChart.setNetworkPolicy(null);
|
||||
@@ -304,6 +311,12 @@ public class DataUsageList extends DataUsageBaseFragment
|
||||
updateSelectedCycle();
|
||||
}
|
||||
|
||||
private boolean isMobileDataAvailable() {
|
||||
return mBillingCycleRepository.isModifiable(mSubId)
|
||||
&& SubscriptionManager.from(requireContext())
|
||||
.getActiveSubscriptionInfo(mSubId) != null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Updates the chart and detail data when initial loaded or selected cycle changed.
|
||||
*/
|
||||
|
||||
@@ -20,6 +20,7 @@ import android.app.ActivityManager
|
||||
import android.content.Context
|
||||
import android.net.NetworkTemplate
|
||||
import android.os.Bundle
|
||||
import androidx.annotation.OpenForTesting
|
||||
import androidx.annotation.VisibleForTesting
|
||||
import androidx.lifecycle.LifecycleCoroutineScope
|
||||
import androidx.lifecycle.LifecycleOwner
|
||||
@@ -37,7 +38,8 @@ import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.launch
|
||||
import kotlinx.coroutines.withContext
|
||||
|
||||
class DataUsageListAppsController(context: Context, preferenceKey: String) :
|
||||
@OpenForTesting
|
||||
open class DataUsageListAppsController(context: Context, preferenceKey: String) :
|
||||
BasePreferenceController(context, preferenceKey) {
|
||||
|
||||
private val uidDetailProvider = UidDetailProvider(context)
|
||||
@@ -48,7 +50,7 @@ class DataUsageListAppsController(context: Context, preferenceKey: String) :
|
||||
|
||||
private var cycleData: List<NetworkCycleChartData>? = null
|
||||
|
||||
fun init(template: NetworkTemplate) {
|
||||
open fun init(template: NetworkTemplate) {
|
||||
this.template = template
|
||||
repository = AppDataUsageRepository(
|
||||
context = mContext,
|
||||
|
||||
@@ -103,7 +103,7 @@ public class DataUsageSummary extends DataUsageBaseFragment implements DataUsage
|
||||
mDefaultTemplate = DataUsageUtils.getDefaultTemplate(context, defaultSubId);
|
||||
mSummaryPreference = findPreference(KEY_STATUS_HEADER);
|
||||
|
||||
if (!hasMobileData || !isAdmin()) {
|
||||
if (!hasMobileData || !UserManager.get(context).isAdminUser()) {
|
||||
removePreference(KEY_RESTRICT_BACKGROUND);
|
||||
}
|
||||
boolean hasWifiRadio = DataUsageUtils.hasWifiRadio(context);
|
||||
|
||||
@@ -16,10 +16,6 @@ package com.android.settings.datausage;
|
||||
|
||||
import android.net.NetworkPolicyManager;
|
||||
import android.net.NetworkTemplate;
|
||||
import android.os.INetworkManagementService;
|
||||
import android.os.UserManager;
|
||||
import android.telephony.SubscriptionManager;
|
||||
import android.telephony.TelephonyManager;
|
||||
|
||||
import com.android.settingslib.NetworkPolicyEditor;
|
||||
|
||||
@@ -29,11 +25,7 @@ public interface TemplatePreference {
|
||||
void setTemplate(NetworkTemplate template, int subId);
|
||||
|
||||
class NetworkServices {
|
||||
INetworkManagementService mNetworkService;
|
||||
NetworkPolicyManager mPolicyManager;
|
||||
TelephonyManager mTelephonyManager;
|
||||
SubscriptionManager mSubscriptionManager;
|
||||
UserManager mUserManager;
|
||||
NetworkPolicyEditor mPolicyEditor;
|
||||
}
|
||||
|
||||
|
||||
@@ -21,9 +21,11 @@ import android.os.INetworkManagementService
|
||||
import android.os.ServiceManager
|
||||
import android.telephony.TelephonyManager
|
||||
import android.util.Log
|
||||
import androidx.annotation.OpenForTesting
|
||||
import com.android.settingslib.spaprivileged.framework.common.userManager
|
||||
|
||||
class BillingCycleRepository(
|
||||
@OpenForTesting
|
||||
open class BillingCycleRepository @JvmOverloads constructor(
|
||||
context: Context,
|
||||
private val networkService: INetworkManagementService =
|
||||
INetworkManagementService.Stub.asInterface(
|
||||
@@ -36,7 +38,7 @@ class BillingCycleRepository(
|
||||
fun isModifiable(subId: Int): Boolean =
|
||||
isBandwidthControlEnabled() && userManager.isAdminUser && isDataEnabled(subId)
|
||||
|
||||
fun isBandwidthControlEnabled(): Boolean = try {
|
||||
open fun isBandwidthControlEnabled(): Boolean = try {
|
||||
networkService.isBandwidthControlEnabled
|
||||
} catch (e: Exception) {
|
||||
Log.w(TAG, "problem talking with INetworkManagementService: ", e)
|
||||
|
||||
Reference in New Issue
Block a user