summaryrefslogtreecommitdiff
path: root/src/com/android/dialer/voicemail/VisualVoicemailEnabledChecker.java
blob: 3134b148628be784d3d74476820cb2a26a693c71 (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
package com.android.dialer.voicemail;


import android.content.Context;
import android.content.SharedPreferences;
import android.database.Cursor;
import android.preference.PreferenceManager;
import android.support.annotation.Nullable;

import com.android.dialer.calllog.CallLogQueryHandler;

/**
 * Helper class to check whether visual voicemail is enabled.
 *
 * Call isVisualVoicemailEnabled() to retrieve the result.
 *
 * The result is cached and saved in a SharedPreferences, stored as a boolean in
 * PREF_KEY_HAS_ACTIVE_VOICEMAIL_PROVIDER. Every time a new instance is created, it will try to
 * restore the cached result from the SharedPreferences.
 *
 * Call asyncUpdate() to make a CallLogQuery to check the actual status. This is a async call so
 * isVisualVoicemailEnabled() will not be affected immediately.
 *
 * If the status has changed as a result of asyncUpdate(),
 * Callback.onVisualVoicemailEnabledStatusChanged() will be called with the new value.
 */
public class VisualVoicemailEnabledChecker implements CallLogQueryHandler.Listener {

    public static final String PREF_KEY_HAS_ACTIVE_VOICEMAIL_PROVIDER =
            "has_active_voicemail_provider";
    private SharedPreferences mPrefs;
    private boolean mHasActiveVoicemailProvider;
    private CallLogQueryHandler mCallLogQueryHandler;
    private VoicemailStatusHelper mVoicemailStatusHelper;
    private Context mContext;

    public interface Callback {

        /**
         * Callback to notify enabled status has changed to the @param newValue
         */
        void onVisualVoicemailEnabledStatusChanged(boolean newValue);
    }

    private Callback mCallback;

    public VisualVoicemailEnabledChecker(Context context, @Nullable Callback callback) {
        mContext = context;
        mCallback = callback;
        mPrefs = PreferenceManager.getDefaultSharedPreferences(mContext);
        mVoicemailStatusHelper = new VoicemailStatusHelperImpl();
        mHasActiveVoicemailProvider = mPrefs.getBoolean(PREF_KEY_HAS_ACTIVE_VOICEMAIL_PROVIDER,
                false);
    }

    /**
     * @return whether visual voicemail is enabled. Result is cached, call asyncUpdate() to
     * update the result.
     */
    public boolean isVisualVoicemailEnabled() {
        return mHasActiveVoicemailProvider;
    }

    /**
     * Perform an async query into the system to check the status of visual voicemail.
     * If the status has changed, Callback.onVisualVoicemailEnabledStatusChanged() will be called.
     */
    public void asyncUpdate() {
        mCallLogQueryHandler =
                new CallLogQueryHandler(mContext, mContext.getContentResolver(), this);
        mCallLogQueryHandler.fetchVoicemailStatus();
    }

    @Override
    public void onVoicemailStatusFetched(Cursor statusCursor) {
        boolean hasActiveVoicemailProvider =
                mVoicemailStatusHelper.getNumberActivityVoicemailSources(statusCursor) > 0;
        if (hasActiveVoicemailProvider != mHasActiveVoicemailProvider) {
            mHasActiveVoicemailProvider = hasActiveVoicemailProvider;
            mPrefs.edit().putBoolean(PREF_KEY_HAS_ACTIVE_VOICEMAIL_PROVIDER,
                    mHasActiveVoicemailProvider);
            if (mCallback != null) {
                mCallback.onVisualVoicemailEnabledStatusChanged(mHasActiveVoicemailProvider);
            }
        }
    }

    @Override
    public void onVoicemailUnreadCountFetched(Cursor cursor) {
        // Do nothing
    }

    @Override
    public boolean onCallsFetched(Cursor combinedCursor) {
        // Do nothing
        return false;
    }
}