141ff7ec82422a5b6d00892afdb3232bc0e53d851Jeff Sharkey/* 241ff7ec82422a5b6d00892afdb3232bc0e53d851Jeff Sharkey * Copyright (C) 2011 The Android Open Source Project 341ff7ec82422a5b6d00892afdb3232bc0e53d851Jeff Sharkey * 441ff7ec82422a5b6d00892afdb3232bc0e53d851Jeff Sharkey * Licensed under the Apache License, Version 2.0 (the "License"); 541ff7ec82422a5b6d00892afdb3232bc0e53d851Jeff Sharkey * you may not use this file except in compliance with the License. 641ff7ec82422a5b6d00892afdb3232bc0e53d851Jeff Sharkey * You may obtain a copy of the License at 741ff7ec82422a5b6d00892afdb3232bc0e53d851Jeff Sharkey * 841ff7ec82422a5b6d00892afdb3232bc0e53d851Jeff Sharkey * http://www.apache.org/licenses/LICENSE-2.0 941ff7ec82422a5b6d00892afdb3232bc0e53d851Jeff Sharkey * 1041ff7ec82422a5b6d00892afdb3232bc0e53d851Jeff Sharkey * Unless required by applicable law or agreed to in writing, software 1141ff7ec82422a5b6d00892afdb3232bc0e53d851Jeff Sharkey * distributed under the License is distributed on an "AS IS" BASIS, 1241ff7ec82422a5b6d00892afdb3232bc0e53d851Jeff Sharkey * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1341ff7ec82422a5b6d00892afdb3232bc0e53d851Jeff Sharkey * See the License for the specific language governing permissions and 1441ff7ec82422a5b6d00892afdb3232bc0e53d851Jeff Sharkey * limitations under the License. 1541ff7ec82422a5b6d00892afdb3232bc0e53d851Jeff Sharkey */ 1641ff7ec82422a5b6d00892afdb3232bc0e53d851Jeff Sharkey 1741ff7ec82422a5b6d00892afdb3232bc0e53d851Jeff Sharkeypackage com.android.systemui.net; 1841ff7ec82422a5b6d00892afdb3232bc0e53d851Jeff Sharkey 1941ff7ec82422a5b6d00892afdb3232bc0e53d851Jeff Sharkeyimport static android.net.NetworkPolicyManager.EXTRA_NETWORK_TEMPLATE; 2041ff7ec82422a5b6d00892afdb3232bc0e53d851Jeff Sharkeyimport static android.net.NetworkTemplate.MATCH_MOBILE_3G_LOWER; 2141ff7ec82422a5b6d00892afdb3232bc0e53d851Jeff Sharkeyimport static android.net.NetworkTemplate.MATCH_MOBILE_4G; 2241ff7ec82422a5b6d00892afdb3232bc0e53d851Jeff Sharkeyimport static android.net.NetworkTemplate.MATCH_MOBILE_ALL; 2341ff7ec82422a5b6d00892afdb3232bc0e53d851Jeff Sharkey 2441ff7ec82422a5b6d00892afdb3232bc0e53d851Jeff Sharkeyimport android.app.Activity; 2541ff7ec82422a5b6d00892afdb3232bc0e53d851Jeff Sharkeyimport android.app.AlertDialog; 2641ff7ec82422a5b6d00892afdb3232bc0e53d851Jeff Sharkeyimport android.app.Dialog; 2741ff7ec82422a5b6d00892afdb3232bc0e53d851Jeff Sharkeyimport android.content.Context; 2841ff7ec82422a5b6d00892afdb3232bc0e53d851Jeff Sharkeyimport android.content.DialogInterface; 2941ff7ec82422a5b6d00892afdb3232bc0e53d851Jeff Sharkeyimport android.net.INetworkPolicyManager; 3041ff7ec82422a5b6d00892afdb3232bc0e53d851Jeff Sharkeyimport android.net.NetworkPolicy; 3141ff7ec82422a5b6d00892afdb3232bc0e53d851Jeff Sharkeyimport android.net.NetworkTemplate; 3241ff7ec82422a5b6d00892afdb3232bc0e53d851Jeff Sharkeyimport android.os.Bundle; 3341ff7ec82422a5b6d00892afdb3232bc0e53d851Jeff Sharkeyimport android.os.RemoteException; 3441ff7ec82422a5b6d00892afdb3232bc0e53d851Jeff Sharkeyimport android.os.ServiceManager; 35cd686b5b6d4166b510df8e32138479a9559bc117John Spurlockimport android.util.Log; 36169126bf4d88514d3e05a5cb3c13d4a60c9f74cbJohn Spurlockimport android.view.WindowManager; 3741ff7ec82422a5b6d00892afdb3232bc0e53d851Jeff Sharkey 3841ff7ec82422a5b6d00892afdb3232bc0e53d851Jeff Sharkeyimport com.android.systemui.R; 3941ff7ec82422a5b6d00892afdb3232bc0e53d851Jeff Sharkey 4041ff7ec82422a5b6d00892afdb3232bc0e53d851Jeff Sharkey/** 4141ff7ec82422a5b6d00892afdb3232bc0e53d851Jeff Sharkey * Notify user that a {@link NetworkTemplate} is over its 4241ff7ec82422a5b6d00892afdb3232bc0e53d851Jeff Sharkey * {@link NetworkPolicy#limitBytes}, giving them the choice of acknowledging or 4341ff7ec82422a5b6d00892afdb3232bc0e53d851Jeff Sharkey * "snoozing" the limit. 4441ff7ec82422a5b6d00892afdb3232bc0e53d851Jeff Sharkey */ 4541ff7ec82422a5b6d00892afdb3232bc0e53d851Jeff Sharkeypublic class NetworkOverLimitActivity extends Activity { 4641ff7ec82422a5b6d00892afdb3232bc0e53d851Jeff Sharkey private static final String TAG = "NetworkOverLimitActivity"; 4741ff7ec82422a5b6d00892afdb3232bc0e53d851Jeff Sharkey 4841ff7ec82422a5b6d00892afdb3232bc0e53d851Jeff Sharkey @Override 4941ff7ec82422a5b6d00892afdb3232bc0e53d851Jeff Sharkey public void onCreate(Bundle icicle) { 5041ff7ec82422a5b6d00892afdb3232bc0e53d851Jeff Sharkey super.onCreate(icicle); 5141ff7ec82422a5b6d00892afdb3232bc0e53d851Jeff Sharkey 5241ff7ec82422a5b6d00892afdb3232bc0e53d851Jeff Sharkey final NetworkTemplate template = getIntent().getParcelableExtra(EXTRA_NETWORK_TEMPLATE); 5341ff7ec82422a5b6d00892afdb3232bc0e53d851Jeff Sharkey final AlertDialog.Builder builder = new AlertDialog.Builder(this); 5441ff7ec82422a5b6d00892afdb3232bc0e53d851Jeff Sharkey builder.setTitle(getLimitedDialogTitleForTemplate(template)); 5541ff7ec82422a5b6d00892afdb3232bc0e53d851Jeff Sharkey builder.setMessage(R.string.data_usage_disabled_dialog); 5641ff7ec82422a5b6d00892afdb3232bc0e53d851Jeff Sharkey 5741ff7ec82422a5b6d00892afdb3232bc0e53d851Jeff Sharkey builder.setPositiveButton(android.R.string.ok, null); 5841ff7ec82422a5b6d00892afdb3232bc0e53d851Jeff Sharkey builder.setNegativeButton( 5941ff7ec82422a5b6d00892afdb3232bc0e53d851Jeff Sharkey R.string.data_usage_disabled_dialog_enable, new DialogInterface.OnClickListener() { 6041ff7ec82422a5b6d00892afdb3232bc0e53d851Jeff Sharkey public void onClick(DialogInterface dialog, int which) { 6141ff7ec82422a5b6d00892afdb3232bc0e53d851Jeff Sharkey snoozePolicy(template); 6241ff7ec82422a5b6d00892afdb3232bc0e53d851Jeff Sharkey } 6341ff7ec82422a5b6d00892afdb3232bc0e53d851Jeff Sharkey }); 6441ff7ec82422a5b6d00892afdb3232bc0e53d851Jeff Sharkey 6541ff7ec82422a5b6d00892afdb3232bc0e53d851Jeff Sharkey final Dialog dialog = builder.create(); 66169126bf4d88514d3e05a5cb3c13d4a60c9f74cbJohn Spurlock dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT); 6741ff7ec82422a5b6d00892afdb3232bc0e53d851Jeff Sharkey dialog.setOnDismissListener(new DialogInterface.OnDismissListener() { 6841ff7ec82422a5b6d00892afdb3232bc0e53d851Jeff Sharkey public void onDismiss(DialogInterface dialog) { 6941ff7ec82422a5b6d00892afdb3232bc0e53d851Jeff Sharkey finish(); 7041ff7ec82422a5b6d00892afdb3232bc0e53d851Jeff Sharkey } 7141ff7ec82422a5b6d00892afdb3232bc0e53d851Jeff Sharkey }); 7241ff7ec82422a5b6d00892afdb3232bc0e53d851Jeff Sharkey 7341ff7ec82422a5b6d00892afdb3232bc0e53d851Jeff Sharkey dialog.show(); 7441ff7ec82422a5b6d00892afdb3232bc0e53d851Jeff Sharkey } 7541ff7ec82422a5b6d00892afdb3232bc0e53d851Jeff Sharkey 7641ff7ec82422a5b6d00892afdb3232bc0e53d851Jeff Sharkey private void snoozePolicy(NetworkTemplate template) { 7741ff7ec82422a5b6d00892afdb3232bc0e53d851Jeff Sharkey final INetworkPolicyManager policyService = INetworkPolicyManager.Stub.asInterface( 7841ff7ec82422a5b6d00892afdb3232bc0e53d851Jeff Sharkey ServiceManager.getService(Context.NETWORK_POLICY_SERVICE)); 7941ff7ec82422a5b6d00892afdb3232bc0e53d851Jeff Sharkey try { 800e2e5f8b564bebd5798c9fa387fbff96429ab5d2Jeff Sharkey policyService.snoozeLimit(template); 8141ff7ec82422a5b6d00892afdb3232bc0e53d851Jeff Sharkey } catch (RemoteException e) { 82cd686b5b6d4166b510df8e32138479a9559bc117John Spurlock Log.w(TAG, "problem snoozing network policy", e); 8341ff7ec82422a5b6d00892afdb3232bc0e53d851Jeff Sharkey } 8441ff7ec82422a5b6d00892afdb3232bc0e53d851Jeff Sharkey } 8541ff7ec82422a5b6d00892afdb3232bc0e53d851Jeff Sharkey 8641ff7ec82422a5b6d00892afdb3232bc0e53d851Jeff Sharkey private static int getLimitedDialogTitleForTemplate(NetworkTemplate template) { 8741ff7ec82422a5b6d00892afdb3232bc0e53d851Jeff Sharkey switch (template.getMatchRule()) { 8841ff7ec82422a5b6d00892afdb3232bc0e53d851Jeff Sharkey case MATCH_MOBILE_3G_LOWER: 8941ff7ec82422a5b6d00892afdb3232bc0e53d851Jeff Sharkey return R.string.data_usage_disabled_dialog_3g_title; 9041ff7ec82422a5b6d00892afdb3232bc0e53d851Jeff Sharkey case MATCH_MOBILE_4G: 9141ff7ec82422a5b6d00892afdb3232bc0e53d851Jeff Sharkey return R.string.data_usage_disabled_dialog_4g_title; 9241ff7ec82422a5b6d00892afdb3232bc0e53d851Jeff Sharkey case MATCH_MOBILE_ALL: 9341ff7ec82422a5b6d00892afdb3232bc0e53d851Jeff Sharkey return R.string.data_usage_disabled_dialog_mobile_title; 9441ff7ec82422a5b6d00892afdb3232bc0e53d851Jeff Sharkey default: 9541ff7ec82422a5b6d00892afdb3232bc0e53d851Jeff Sharkey return R.string.data_usage_disabled_dialog_title; 9641ff7ec82422a5b6d00892afdb3232bc0e53d851Jeff Sharkey } 9741ff7ec82422a5b6d00892afdb3232bc0e53d851Jeff Sharkey } 9841ff7ec82422a5b6d00892afdb3232bc0e53d851Jeff Sharkey} 99