summaryrefslogtreecommitdiff
path: root/src/com/android/settings/wifi/calling/DisclaimerItem.java
blob: 6fd8b70dfc0fd0c348527095606ed78dd66ceb12 (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
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
/*
 * Copyright (C) 2018 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.android.settings.wifi.calling;

import android.content.Context;
import android.content.SharedPreferences;
import android.os.PersistableBundle;
import android.telephony.CarrierConfigManager;
import android.util.Log;

import com.android.internal.annotations.VisibleForTesting;

/**
 * Interface to control disclaimer item from {@link WifiCallingDisclaimerFragment}.
 */
@VisibleForTesting
public abstract class DisclaimerItem {
    private static final String SHARED_PREFERENCES_NAME = "wfc_disclaimer_prefs";

    protected final Context mContext;
    protected final int mSubId;
    private final CarrierConfigManager mCarrierConfigManager;

    DisclaimerItem(Context context, int subId) {
        mContext = context;
        mSubId = subId;
        mCarrierConfigManager = mContext.getSystemService(CarrierConfigManager.class);
    }

    /**
     * Called by the {@link WifiCallingDisclaimerFragment} when a user has clicked the agree button.
     */
    void onAgreed() {
        setBooleanSharedPrefs(getPrefKey(), true);
    }

    /**
     * Checks whether the disclaimer item need to be displayed or not.
     *
     * @return Returns {@code true} if disclaimer item need to be displayed,
     * {@code false} if not displayed.
     */
    boolean shouldShow() {
        if (getBooleanSharedPrefs(getPrefKey(), false)) {
            logd("shouldShow: false due to a user has already agreed.");
            return false;
        }
        logd("shouldShow: true");
        return true;
    }

    /**
     * Gets the configuration values for a particular sub id.
     *
     * @return The {@link PersistableBundle} instance containing the config value for a
     * particular phone id, or default values.
     */
    protected PersistableBundle getCarrierConfig() {
        PersistableBundle config = mCarrierConfigManager.getConfigForSubId(mSubId);
        if (config != null) {
            return config;
        }
        // Return static default defined in CarrierConfigManager.
        return CarrierConfigManager.getDefaultConfig();
    }

    protected void logd(String msg) {
        Log.d(getName(), "[" + mSubId +  "] " + msg);
    }

    /**
     * Gets a title id for disclaimer item.
     *
     * @return Title id for disclaimer item.
     */
    protected abstract int getTitleId();

    /**
     * Gets a message id for disclaimer item.
     *
     * @return Message id for disclaimer item.
     */
    protected abstract int getMessageId();

    /**
     * Gets a name of disclaimer item.
     *
     * @return Name of disclaimer item.
     */
    protected abstract String getName();

    /**
     * Gets a preference key to keep user's consent.
     *
     * @return Preference key to keep user's consent.
     */
    protected abstract String getPrefKey();

    /**
     * Gets the boolean value from shared preferences.
     *
     * @param key The key for the preference item.
     * @param defValue Value to return if this preference does not exist.
     * @return The boolean value of corresponding key, or defValue.
     */
    private boolean getBooleanSharedPrefs(String key, boolean defValue) {
        SharedPreferences prefs = mContext.getSharedPreferences(SHARED_PREFERENCES_NAME,
                Context.MODE_PRIVATE);
        return prefs.getBoolean(key + mSubId, defValue);
    }

    /**
     * Sets the boolean value to shared preferences.
     *
     * @param key The key for the preference item.
     * @param value The value to be set for shared preferences.
     */
    private void setBooleanSharedPrefs(String key, boolean value) {
        SharedPreferences prefs = mContext.getSharedPreferences(SHARED_PREFERENCES_NAME,
                Context.MODE_PRIVATE);
        prefs.edit().putBoolean(key + mSubId, value).apply();
    }
}