1/* 2 * Copyright (C) 2016 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file 5 * except in compliance with the License. You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software distributed under the 10 * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 11 * KIND, either express or implied. See the License for the specific language governing 12 * permissions and limitations under the License. 13 */ 14 15package com.android.settings.datausage; 16 17import android.app.AlertDialog; 18import android.content.Context; 19import android.content.DialogInterface; 20import android.net.NetworkPolicyManager; 21import android.support.v7.preference.PreferenceViewHolder; 22import android.util.AttributeSet; 23import android.view.View; 24import android.widget.Checkable; 25import com.android.settings.CustomDialogPreference; 26import com.android.settings.R; 27import com.android.settings.Utils; 28import com.android.settings.dashboard.conditional.BackgroundDataCondition; 29import com.android.settings.dashboard.conditional.ConditionManager; 30 31public class RestrictBackgroundDataPreference extends CustomDialogPreference { 32 33 private NetworkPolicyManager mPolicyManager; 34 private boolean mChecked; 35 36 public RestrictBackgroundDataPreference(Context context, AttributeSet attrs) { 37 super(context, attrs, android.R.attr.switchPreferenceStyle); 38 } 39 40 @Override 41 public void onAttached() { 42 super.onAttached(); 43 mPolicyManager = NetworkPolicyManager.from(getContext()); 44 setChecked(mPolicyManager.getRestrictBackground()); 45 } 46 47 public void setRestrictBackground(boolean restrictBackground) { 48 mPolicyManager.setRestrictBackground(restrictBackground); 49 setChecked(restrictBackground); 50 ConditionManager.get(getContext()).getCondition(BackgroundDataCondition.class) 51 .refreshState(); 52 } 53 54 private void setChecked(boolean checked) { 55 if (mChecked == checked) return; 56 mChecked = checked; 57 notifyChanged(); 58 } 59 60 @Override 61 public void onBindViewHolder(PreferenceViewHolder holder) { 62 super.onBindViewHolder(holder); 63 View switchView = holder.findViewById(android.R.id.switch_widget); 64 switchView.setClickable(false); 65 ((Checkable) switchView).setChecked(mChecked); 66 } 67 68 @Override 69 protected void performClick(View view) { 70 if (mChecked) { 71 setRestrictBackground(false); 72 } else { 73 super.performClick(view); 74 } 75 } 76 77 @Override 78 protected void onPrepareDialogBuilder(AlertDialog.Builder builder, 79 DialogInterface.OnClickListener listener) { 80 super.onPrepareDialogBuilder(builder, listener); 81 builder.setTitle(R.string.data_usage_restrict_background_title); 82 if (Utils.hasMultipleUsers(getContext())) { 83 builder.setMessage(R.string.data_usage_restrict_background_multiuser); 84 } else { 85 builder.setMessage(R.string.data_usage_restrict_background); 86 } 87 88 builder.setPositiveButton(android.R.string.ok, listener); 89 builder.setNegativeButton(android.R.string.cancel, null); 90 } 91 92 @Override 93 protected void onClick(DialogInterface dialog, int which) { 94 if (which != DialogInterface.BUTTON_POSITIVE) { 95 return; 96 } 97 setRestrictBackground(true); 98 } 99} 100