summaryrefslogtreecommitdiffstats
path: root/core/java/android/net/ZeroBalanceHelper.java
blob: e0ffca5a0518dbaac22080cac23d2f9afc8cea26 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
/*
 ** Copyright (c) 2015, The Linux Foundation. All rights reserved.

 ** Redistribution and use in source and binary forms, with or without
 ** modification, are permitted provided that the following conditions are
 ** met:
 **     * Redistributions of source code must retain the above copyright
 **       notice, this list of conditions and the following disclaimer.
 **     * Redistributions in binary form must reproduce the above
 **       copyright notice, this list of conditions and the following
 **       disclaimer in the documentation and/or other materials provided
 **       with the distribution.
 **     * Neither the name of The Linux Foundation nor the names of its
 **       contributors may be used to endorse or promote products derived
 **       from this software without specific prior written permission.

 ** THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
 ** WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
 ** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
 ** ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
 ** BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 ** CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 ** SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
 ** BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
 ** WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
 ** OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
 ** IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */

package android.net;

import android.app.ActivityThread;
import android.content.Context;
import android.content.Intent;
import android.os.SystemProperties;
import android.os.UserHandle;
import android.util.Log;

import com.android.internal.R;

/** @hide */
public final class ZeroBalanceHelper {

    public static final String BACKGROUND_DATA_PROPERTY = "sys.background.data.disable";
    public static final String BACKGROUND_DATA_BROADCAST = "org.codeaurora.background.data";
    public static final String TAG = "ZeroBalance";

    private static int sRedirectCount = 0;
    private static int sRedirectMaxCount = 3;

    private Context mContext = null;

    public ZeroBalanceHelper() {
        mContext = ActivityThread.currentApplication();
    }

    public void setBgDataProperty(String enabled) {
        Intent intent = new Intent();
        intent.setAction(BACKGROUND_DATA_BROADCAST);
        intent.putExtra("enabled", enabled);
        mContext.sendBroadcast(intent);
    }

    public String getBgDataProperty() {
        String isBgDataPropertySet = SystemProperties.get(BACKGROUND_DATA_PROPERTY, "false");
        if (Boolean.parseBoolean(isBgDataPropertySet)) {
            sRedirectCount = 0;
        }
        return isBgDataPropertySet;
    }

    private String getConfiguredRedirectURL() {
        String redirectURL = mContext.getResources().getString(
                com.android.internal.R.string.operator_config_url);
        Log.d(TAG, "Returning the configured redirect URL   :   "
                + redirectURL);
        return redirectURL;
    }

    public synchronized void setHttpRedirectCount(String url) {
        String redirectUrl = getConfiguredRedirectURL();
        if (redirectUrl != null && url.contains(redirectUrl)) {
            sRedirectCount++;
            Log.d(TAG, "http:sRedirectCount="+sRedirectCount);
            if (sRedirectCount >= sRedirectMaxCount) {
                Log.d(TAG,"http:Background Data will be disabled" );
                setBgDataProperty("true");
                sRedirectCount = 0;
            }
        } else {
            Log.d(TAG,"http: resetting the counter ");
            sRedirectCount = 0;
        }
    }

    public boolean getFeatureConfigValue() {
        return mContext.getResources().getBoolean(R.bool.config_zero_balance_operator);
    }
}