From 73406be5362100576dae362f218b624065bb9c57 Mon Sep 17 00:00:00 2001 From: Pragnya Paramita Date: Mon, 30 Nov 2015 19:51:56 +0530 Subject: frameworks/base: Addition of Changes for ZeroBalance feature --Addition of code to receive broadcast from ZeroBalanceHelper application for executing command to write block/unblock rule to Iptable. --Addition of ZeroBalanceHelper file to be accesible by other modules to notify ZeroBalanceHelper application about update on change of SIM balance. --Addition of rule to allow browser uid when rest all applications are in blocked state. --Addition of feature flag to control the zerobalance feature. CRs-Fixed: 927258 Change-Id: Ifdf4c46fd63ab78193047a9bc8b62bf41065a665 --- .../android/server/NetworkManagementService.java | 35 ++++++++++++++++++++++ 1 file changed, 35 insertions(+) (limited to 'services/core') diff --git a/services/core/java/com/android/server/NetworkManagementService.java b/services/core/java/com/android/server/NetworkManagementService.java index c063d9f..f53c4ef 100644 --- a/services/core/java/com/android/server/NetworkManagementService.java +++ b/services/core/java/com/android/server/NetworkManagementService.java @@ -46,7 +46,10 @@ import static com.android.server.NetworkManagementSocketTagger.PROP_QTAGUID_ENAB import android.annotation.NonNull; import android.app.ActivityManagerNative; +import android.content.BroadcastReceiver; import android.content.Context; +import android.content.Intent; +import android.content.IntentFilter; import android.net.ConnectivityManager; import android.net.INetworkManagementEventObserver; import android.net.InterfaceConfiguration; @@ -84,6 +87,7 @@ import android.util.Slog; import android.util.SparseBooleanArray; import android.util.SparseIntArray; +import com.android.internal.R; import com.android.internal.annotations.GuardedBy; import com.android.internal.app.IBatteryStats; import com.android.internal.net.NetworkStatsFactory; @@ -332,6 +336,12 @@ public class NetworkManagementService extends INetworkManagementService.Stub public void systemReady() { prepareNativeDaemon(); + // Register the receiver for Zerobalance blocking/unblocking + if (mContext.getResources().getBoolean(R.bool.config_zero_balance_operator)) { + final IntentFilter restrictFilter = new IntentFilter(); + restrictFilter.addAction("org.codeaurora.restrictData"); + mContext.registerReceiver(mZeroBalanceReceiver, restrictFilter); + } if (DBG) Slog.d(TAG, "Prepared"); } @@ -2674,4 +2684,29 @@ public class NetworkManagementService extends INetworkManagementService.Stub mDataInterfaceName = linkProperties.getInterfaceName(); } } + + private BroadcastReceiver mZeroBalanceReceiver = new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + boolean isBlockAllData = false; + if (intent != null + && intent.getAction().equals("org.codeaurora.restrictData")) { + isBlockAllData = intent.getBooleanExtra("Restrict", false); + Log.wtf("ZeroBalance", "Intent value to block unblock data" + isBlockAllData); + } + mContext.enforceCallingOrSelfPermission(CONNECTIVITY_INTERNAL, TAG); + + // Silently discard when control disabled + // TODO: Eventually migrate to always be enabled + if (!mBandwidthControlEnabled) return; + try { + Log.wtf("ZeroBalance", "before calling connector Intent" + + "value to block unblock data" + isBlockAllData); + mConnector.execute("bandwidth", + isBlockAllData ? "blockAllData" : "unblockAllData"); + } catch (NativeDaemonConnectorException e) { + throw e.rethrowAsParcelableException(); + } + } + }; } -- cgit v1.1