Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 665e9b53 authored by Chen Xu's avatar Chen Xu
Browse files

new telephonyRegistryManager

Bug: Bug: 140908357
Test: Build & Manal
Change-Id: I26abcc69b8459e8c6634a9c15865874f803b7259
(cherry picked from commit 02b77dce)
Merged-in: I26abcc69b8459e8c6634a9c15865874f803b7259
parent 3b47c9a1
Loading
Loading
Loading
Loading
+78 −188
Original line number Original line Diff line number Diff line
@@ -18,11 +18,13 @@ package com.android.internal.telephony;


import android.annotation.NonNull;
import android.annotation.NonNull;
import android.annotation.UnsupportedAppUsage;
import android.annotation.UnsupportedAppUsage;
import android.content.Context;
import android.net.LinkProperties;
import android.net.LinkProperties;
import android.net.NetworkCapabilities;
import android.net.NetworkCapabilities;
import android.os.Bundle;
import android.os.Bundle;
import android.os.RemoteException;
import android.os.RemoteException;
import android.os.ServiceManager;
import android.os.ServiceManager;
import android.os.telephony.TelephonyRegistryManager;
import android.telephony.CallQuality;
import android.telephony.CallQuality;
import android.telephony.CellInfo;
import android.telephony.CellInfo;
import android.telephony.CellLocation;
import android.telephony.CellLocation;
@@ -38,21 +40,27 @@ import android.telephony.data.ApnSetting;
import android.telephony.emergency.EmergencyNumber;
import android.telephony.emergency.EmergencyNumber;
import android.telephony.ims.ImsReasonInfo;
import android.telephony.ims.ImsReasonInfo;


import com.android.internal.telephony.PhoneInternalInterface.DataActivityState;
import java.util.List;
import java.util.List;


/**
/**
 * broadcast intents
 * broadcast intents
 */
 */
public class DefaultPhoneNotifier implements PhoneNotifier {
public class DefaultPhoneNotifier implements PhoneNotifier {

    private static final String LOG_TAG = "DefaultPhoneNotifier";
    private static final String LOG_TAG = "DefaultPhoneNotifier";
    private static final boolean DBG = false; // STOPSHIP if true
    private static final boolean DBG = false; // STOPSHIP if true


    @UnsupportedAppUsage
    @UnsupportedAppUsage
    protected ITelephonyRegistry mRegistry;
    protected ITelephonyRegistry mRegistry;
    private TelephonyRegistryManager mTelephonyRegistryMgr;



    public DefaultPhoneNotifier() {
    public DefaultPhoneNotifier(Context context) {
        mRegistry = ITelephonyRegistry.Stub.asInterface(ServiceManager.getService(
        mRegistry = ITelephonyRegistry.Stub.asInterface(ServiceManager.getService(
            "telephony.registry"));
            "telephony.registry"));
        mTelephonyRegistryMgr = (TelephonyRegistryManager) context.getSystemService(
            Context.TELEPHONY_REGISTRY_SERVICE);
    }
    }


    @Override
    @Override
@@ -64,15 +72,8 @@ public class DefaultPhoneNotifier implements PhoneNotifier {
        if (ringingCall != null && ringingCall.getEarliestConnection() != null) {
        if (ringingCall != null && ringingCall.getEarliestConnection() != null) {
            incomingNumber = ringingCall.getEarliestConnection().getAddress();
            incomingNumber = ringingCall.getEarliestConnection().getAddress();
        }
        }
        try {
        mTelephonyRegistryMgr.notifyCallStateChanged(subId, phoneId,
            if (mRegistry != null) {
            PhoneConstantConversions.convertCallState(sender.getState()), incomingNumber);
                  mRegistry.notifyCallStateForPhoneId(phoneId, subId,
                        PhoneConstantConversions.convertCallState(
                            sender.getState()), incomingNumber);
            }
        } catch (RemoteException ex) {
            // system process is dead
        }
    }
    }


    @Override
    @Override
@@ -87,13 +88,7 @@ public class DefaultPhoneNotifier implements PhoneNotifier {
            ss = new ServiceState();
            ss = new ServiceState();
            ss.setStateOutOfService();
            ss.setStateOutOfService();
        }
        }
        try {
        mTelephonyRegistryMgr.notifyServiceStateChanged(subId, phoneId, ss);
            if (mRegistry != null) {
                mRegistry.notifyServiceStateForPhoneId(phoneId, subId, ss);
            }
        } catch (RemoteException ex) {
            // system process is dead
        }
    }
    }


    @Override
    @Override
@@ -105,58 +100,35 @@ public class DefaultPhoneNotifier implements PhoneNotifier {
            Rlog.d(LOG_TAG, "notifySignalStrength: mRegistry=" + mRegistry
            Rlog.d(LOG_TAG, "notifySignalStrength: mRegistry=" + mRegistry
                + " ss=" + sender.getSignalStrength() + " sender=" + sender);
                + " ss=" + sender.getSignalStrength() + " sender=" + sender);
        }
        }
        try {
        mTelephonyRegistryMgr.notifySignalStrengthChanged(subId, phoneId,
            if (mRegistry != null) {
                mRegistry.notifySignalStrengthForPhoneId(phoneId, subId,
            sender.getSignalStrength());
            sender.getSignalStrength());
    }
    }
        } catch (RemoteException ex) {
            // system process is dead
        }
    }


    @Override
    @Override
    public void notifyMessageWaitingChanged(Phone sender) {
    public void notifyMessageWaitingChanged(Phone sender) {
        int phoneId = sender.getPhoneId();
        int phoneId = sender.getPhoneId();
        int subId = sender.getSubId();
        int subId = sender.getSubId();

        mTelephonyRegistryMgr.notifyMessageWaitingChanged(subId, phoneId,
        try {
            if (mRegistry != null) {
                mRegistry.notifyMessageWaitingChangedForPhoneId(phoneId, subId,
            sender.getMessageWaitingIndicator());
            sender.getMessageWaitingIndicator());
    }
    }
        } catch (RemoteException ex) {
            // system process is dead
        }
    }


    @Override
    @Override
    public void notifyCallForwardingChanged(Phone sender) {
    public void notifyCallForwardingChanged(Phone sender) {
        int subId = sender.getSubId();
        int subId = sender.getSubId();
        try {
            if (mRegistry != null) {
        Rlog.d(LOG_TAG, "notifyCallForwardingChanged: subId=" + subId + ", isCFActive="
        Rlog.d(LOG_TAG, "notifyCallForwardingChanged: subId=" + subId + ", isCFActive="
            + sender.getCallForwardingIndicator());
            + sender.getCallForwardingIndicator());


                mRegistry.notifyCallForwardingChangedForSubscriber(subId,
        mTelephonyRegistryMgr.notifyCallForwardingChanged(subId,
            sender.getCallForwardingIndicator());
            sender.getCallForwardingIndicator());
    }
    }
        } catch (RemoteException ex) {
            // system process is dead
        }
    }


    @Override
    @Override
    public void notifyDataActivity(Phone sender) {
    public void notifyDataActivity(Phone sender) {
        int subId = sender.getSubId();
        int subId = sender.getSubId();
        try {
        if (mRegistry != null) {
        if (mRegistry != null) {
                mRegistry.notifyDataActivityForSubscriber(subId,
            mTelephonyRegistryMgr.notifyDataActivityChanged(subId,
                convertDataActivityState(sender.getDataActivityState()));
                convertDataActivityState(sender.getDataActivityState()));
        }
        }
        } catch (RemoteException ex) {
            // system process is dead
        }
    }
    }


    @Override
    @Override
@@ -170,7 +142,9 @@ public class DefaultPhoneNotifier implements PhoneNotifier {
        int subId = sender.getSubId();
        int subId = sender.getSubId();
        int phoneId = sender.getPhoneId();
        int phoneId = sender.getPhoneId();
        long dds = SubscriptionManager.getDefaultDataSubscriptionId();
        long dds = SubscriptionManager.getDefaultDataSubscriptionId();
        if (DBG) log("subId = " + subId + ", DDS = " + dds);
        if (DBG) {
            log("subId = " + subId + ", DDS = " + dds);
        }


        // TODO
        // TODO
        // use apnType as the key to which connection we're talking about.
        // use apnType as the key to which connection we're talking about.
@@ -185,11 +159,10 @@ public class DefaultPhoneNotifier implements PhoneNotifier {
            networkCapabilities = sender.getNetworkCapabilities(apnType);
            networkCapabilities = sender.getNetworkCapabilities(apnType);
        }
        }
        ServiceState ss = sender.getServiceState();
        ServiceState ss = sender.getServiceState();
        if (ss != null) roaming = ss.getDataRoaming();
        if (ss != null) {

            roaming = ss.getDataRoaming();
        try {
        }
            if (mRegistry != null) {
        mTelephonyRegistryMgr.notifyDataConnectionForSubscriber(phoneId, subId,
                mRegistry.notifyDataConnectionForSubscriber(phoneId, subId,
            PhoneConstantConversions.convertDataState(state),
            PhoneConstantConversions.convertDataState(state),
            sender.isDataAllowed(ApnSetting.getApnTypesBitmaskFromString(apnType)),
            sender.isDataAllowed(ApnSetting.getApnTypesBitmaskFromString(apnType)),
            sender.getActiveApnHost(apnType),
            sender.getActiveApnHost(apnType),
@@ -199,21 +172,11 @@ public class DefaultPhoneNotifier implements PhoneNotifier {
            ((telephony != null) ? telephony.getDataNetworkType(subId) :
            ((telephony != null) ? telephony.getDataNetworkType(subId) :
                TelephonyManager.NETWORK_TYPE_UNKNOWN), roaming);
                TelephonyManager.NETWORK_TYPE_UNKNOWN), roaming);
    }
    }
        } catch (RemoteException ex) {
            // system process is dead
        }
    }


    @Override
    @Override
    public void notifyDataConnectionFailed(Phone sender, String apnType) {
    public void notifyDataConnectionFailed(Phone sender, String apnType) {
        try {
        mTelephonyRegistryMgr.notifyDataConnectionFailed(sender.getSubId(), sender.getPhoneId(),
            if (mRegistry != null) {
            apnType);
                mRegistry.notifyDataConnectionFailedForSubscriber(sender.getPhoneId(),
                        sender.getSubId(), apnType);
            }
        } catch (RemoteException ex) {
            // system process is dead
        }
    }
    }


    @Override
    @Override
@@ -221,25 +184,13 @@ public class DefaultPhoneNotifier implements PhoneNotifier {
        int subId = sender.getSubId();
        int subId = sender.getSubId();
        Bundle data = new Bundle();
        Bundle data = new Bundle();
        cl.fillInNotifierBundle(data);
        cl.fillInNotifierBundle(data);
        try {
        mTelephonyRegistryMgr.notifyCellLocation(subId, data);
            if (mRegistry != null) {
                mRegistry.notifyCellLocationForSubscriber(subId, data);
            }
        } catch (RemoteException ex) {
            // system process is dead
        }
    }
    }


    @Override
    @Override
    public void notifyCellInfo(Phone sender, List<CellInfo> cellInfo) {
    public void notifyCellInfo(Phone sender, List<CellInfo> cellInfo) {
        int subId = sender.getSubId();
        int subId = sender.getSubId();
        try {
        mTelephonyRegistryMgr.notifyCellInfoChanged(subId, cellInfo);
            if (mRegistry != null) {
                mRegistry.notifyCellInfoForSubscriber(subId, cellInfo);
            }
        } catch (RemoteException ex) {

        }
    }
    }


    @Override
    @Override
@@ -259,13 +210,7 @@ public class DefaultPhoneNotifier implements PhoneNotifier {
    @Override
    @Override
    public void notifyOtaspChanged(Phone sender, int otaspMode) {
    public void notifyOtaspChanged(Phone sender, int otaspMode) {
        int subId = sender.getSubId();
        int subId = sender.getSubId();
        try {
        mTelephonyRegistryMgr.notifyOtaspChanged(subId, otaspMode);
            if (mRegistry != null) {
                mRegistry.notifyOtaspChanged(subId, otaspMode);
            }
        } catch (RemoteException ex) {
            // system process is dead
        }
    }
    }


    public void notifyPreciseCallState(Phone sender) {
    public void notifyPreciseCallState(Phone sender) {
@@ -273,122 +218,73 @@ public class DefaultPhoneNotifier implements PhoneNotifier {
        Call foregroundCall = sender.getForegroundCall();
        Call foregroundCall = sender.getForegroundCall();
        Call backgroundCall = sender.getBackgroundCall();
        Call backgroundCall = sender.getBackgroundCall();
        if (ringingCall != null && foregroundCall != null && backgroundCall != null) {
        if (ringingCall != null && foregroundCall != null && backgroundCall != null) {
            try {
            mTelephonyRegistryMgr.notifyPreciseCallState(sender.getSubId(), sender.getPhoneId(),
                mRegistry.notifyPreciseCallState(sender.getPhoneId(), sender.getSubId(),
                convertPreciseCallState(ringingCall.getState()),
                convertPreciseCallState(ringingCall.getState()),
                convertPreciseCallState(foregroundCall.getState()),
                convertPreciseCallState(foregroundCall.getState()),
                convertPreciseCallState(backgroundCall.getState()));
                convertPreciseCallState(backgroundCall.getState()));
            } catch (RemoteException ex) {
                // system process is dead
            }
        }
        }
    }
    }


    public void notifyDisconnectCause(Phone sender, int cause, int preciseCause) {
    public void notifyDisconnectCause(Phone sender, int cause, int preciseCause) {
        try {
        mTelephonyRegistryMgr.notifyDisconnectCause(sender.getSubId(), sender.getPhoneId(), cause,
            mRegistry.notifyDisconnectCause(sender.getPhoneId(), sender.getSubId(), cause,
            preciseCause);
            preciseCause);
        } catch (RemoteException ex) {
            // system process is dead
        }
    }
    }


    @Override
    @Override
    public void notifyImsDisconnectCause(@NonNull Phone sender, ImsReasonInfo imsReasonInfo) {
    public void notifyImsDisconnectCause(@NonNull Phone sender, ImsReasonInfo imsReasonInfo) {
        try {
        mTelephonyRegistryMgr.notifyImsDisconnectCause(sender.getSubId(), imsReasonInfo);
            mRegistry.notifyImsDisconnectCause(sender.getSubId(), imsReasonInfo);
        } catch (RemoteException ex) {
            // system process is dead
        }
    }
    }


    public void notifyPreciseDataConnectionFailed(Phone sender, String apnType,
    public void notifyPreciseDataConnectionFailed(Phone sender, String apnType,
        String apn, @DataFailCause.FailCause int failCause) {
        String apn, @DataFailCause.FailCause int failCause) {
        try {
        mTelephonyRegistryMgr.notifyPreciseDataConnectionFailed(sender.getSubId(),
            mRegistry.notifyPreciseDataConnectionFailed(sender.getPhoneId(), sender.getSubId(),
            sender.getPhoneId(), apnType, apn, failCause);
                    apnType, apn, failCause);
        } catch (RemoteException ex) {
            // system process is dead
        }
    }
    }


    @Override
    @Override
    public void notifySrvccStateChanged(Phone sender, @TelephonyManager.SrvccState int state) {
    public void notifySrvccStateChanged(Phone sender, @TelephonyManager.SrvccState int state) {
        try {
        mTelephonyRegistryMgr.notifySrvccStateChanged(sender.getSubId(), state);
            mRegistry.notifySrvccStateChanged(sender.getSubId(), state);
        } catch (RemoteException ex) {
            // system process is dead
        }
    }
    }


    @Override
    @Override
    public void notifyDataActivationStateChanged(Phone sender, int activationState) {
    public void notifyDataActivationStateChanged(Phone sender, int activationState) {
        try {
        mTelephonyRegistryMgr.notifyDataActivationStateChanged(sender.getSubId(),
            mRegistry.notifySimActivationStateChangedForPhoneId(sender.getPhoneId(),
            sender.getPhoneId(), activationState);
                    sender.getSubId(), PhoneConstants.SIM_ACTIVATION_TYPE_DATA, activationState);
        } catch (RemoteException ex) {
            // system process is dead
        }
    }
    }


    @Override
    @Override
    public void notifyVoiceActivationStateChanged(Phone sender, int activationState) {
    public void notifyVoiceActivationStateChanged(Phone sender, int activationState) {
        try {
        mTelephonyRegistryMgr.notifyVoiceActivationStateChanged(sender.getSubId(),
            mRegistry.notifySimActivationStateChangedForPhoneId(sender.getPhoneId(),
            sender.getPhoneId(),  activationState);
                    sender.getSubId(), PhoneConstants.SIM_ACTIVATION_TYPE_VOICE, activationState);
        } catch (RemoteException ex) {
            // system process is dead
        }
    }
    }


    @Override
    @Override
    public void notifyUserMobileDataStateChanged(Phone sender, boolean state) {
    public void notifyUserMobileDataStateChanged(Phone sender, boolean state) {
        try {
        mTelephonyRegistryMgr.notifyUserMobileDataStateChanged(
            mRegistry.notifyUserMobileDataStateChangedForPhoneId(
            sender.getSubId(), sender.getPhoneId(), state);
                    sender.getPhoneId(), sender.getSubId(), state);
        } catch (RemoteException ex) {
            // system process is dead
        }
    }
    }


    @Override
    @Override
    public void notifyOemHookRawEventForSubscriber(Phone sender, byte[] rawData) {
    public void notifyOemHookRawEventForSubscriber(Phone sender, byte[] rawData) {
        try {
        mTelephonyRegistryMgr.notifyOemHookRawEventForSubscriber(sender.getSubId(),
            mRegistry.notifyOemHookRawEventForSubscriber(sender.getPhoneId(),
            sender.getPhoneId(), rawData);
                    sender.getSubId(), rawData);
        } catch (RemoteException ex) {
            // system process is dead
        }
    }
    }


    @Override
    @Override
    public void notifyPhoneCapabilityChanged(PhoneCapability capability) {
    public void notifyPhoneCapabilityChanged(PhoneCapability capability) {
        try {
        mTelephonyRegistryMgr.notifyPhoneCapabilityChanged(capability);
            mRegistry.notifyPhoneCapabilityChanged(capability);
        } catch (RemoteException ex) {
            // system process is dead
        }
    }
    }


    @Override
    @Override
    public void notifyRadioPowerStateChanged(Phone sender,
    public void notifyRadioPowerStateChanged(Phone sender,
        @TelephonyManager.RadioPowerState int state) {
        @TelephonyManager.RadioPowerState int state) {
        try {
        mTelephonyRegistryMgr.notifyRadioPowerStateChanged(sender.getSubId(), sender.getPhoneId(),
            mRegistry.notifyRadioPowerStateChanged(sender.getPhoneId(), sender.getSubId(), state);
            state);
        } catch (RemoteException ex) {
            // system process is dead
        }
    }
    }


    @Override
    @Override
    public void notifyEmergencyNumberList(Phone sender) {
    public void notifyEmergencyNumberList(Phone sender) {
        try {
        mTelephonyRegistryMgr.notifyEmergencyNumberList(sender.getSubId(), sender.getPhoneId());
            if (mRegistry != null) {
                mRegistry.notifyEmergencyNumberList(sender.getPhoneId(), sender.getSubId());
            }
        } catch (RemoteException ex) {
            // system process is dead
        }
    }
    }


    @Override
    @Override
@@ -418,21 +314,15 @@ public class DefaultPhoneNotifier implements PhoneNotifier {
    @Override
    @Override
    public void notifyCallQualityChanged(Phone sender, CallQuality callQuality,
    public void notifyCallQualityChanged(Phone sender, CallQuality callQuality,
        int callNetworkType) {
        int callNetworkType) {
        try {
        mTelephonyRegistryMgr.notifyCallQualityChanged(sender.getSubId(), sender.getPhoneId(),
            if (mRegistry != null) {
            callQuality, callNetworkType);
                mRegistry.notifyCallQualityChanged(callQuality, sender.getPhoneId(),
                        sender.getSubId(), callNetworkType);
            }
        } catch (RemoteException ex) {
            // system process is dead
        }
    }
    }


    /**
    /**
     * Convert the {@link Phone.DataActivityState} enum into the TelephonyManager.DATA_* constants
     * Convert the {@link DataActivityState} enum into the TelephonyManager.DATA_* constants for the
     * for the public API.
     * public API.
     */
     */
    public static int convertDataActivityState(Phone.DataActivityState state) {
    public static int convertDataActivityState(DataActivityState state) {
        switch (state) {
        switch (state) {
            case DATAIN:
            case DATAIN:
                return TelephonyManager.DATA_ACTIVITY_IN;
                return TelephonyManager.DATA_ACTIVITY_IN;
+0 −1
Original line number Original line Diff line number Diff line
@@ -581,7 +581,6 @@ public abstract class Phone extends Handler implements PhoneInternalInterface {
        if (getPhoneType() != PhoneConstants.PHONE_TYPE_SIP) {
        if (getPhoneType() != PhoneConstants.PHONE_TYPE_SIP) {
            mCi.registerForSrvccStateChanged(this, EVENT_SRVCC_STATE_CHANGED, null);
            mCi.registerForSrvccStateChanged(this, EVENT_SRVCC_STATE_CHANGED, null);
        }
        }
        mCi.setOnUnsolOemHookRaw(this, EVENT_UNSOL_OEM_HOOK_RAW, null);
        mCi.startLceService(DEFAULT_REPORT_INTERVAL_MS, LCE_PULL_MODE,
        mCi.startLceService(DEFAULT_REPORT_INTERVAL_MS, LCE_PULL_MODE,
                obtainMessage(EVENT_CONFIG_LCE));
                obtainMessage(EVENT_CONFIG_LCE));
    }
    }
+1 −1
Original line number Original line Diff line number Diff line
@@ -322,7 +322,7 @@ public class PhoneConfigurationManager {
    }
    }


    private void notifyCapabilityChanged() {
    private void notifyCapabilityChanged() {
        PhoneNotifier notifier = new DefaultPhoneNotifier();
        PhoneNotifier notifier = new DefaultPhoneNotifier(mContext);


        notifier.notifyPhoneCapabilityChanged(mStaticCapability);
        notifier.notifyPhoneCapabilityChanged(mStaticCapability);
    }
    }
+1 −1
Original line number Original line Diff line number Diff line
@@ -138,7 +138,7 @@ public class PhoneFactory {
                    }
                    }
                }
                }


                sPhoneNotifier = new DefaultPhoneNotifier();
                sPhoneNotifier = new DefaultPhoneNotifier(context);


                int cdmaSubscription = CdmaSubscriptionSourceManager.getDefault(context);
                int cdmaSubscription = CdmaSubscriptionSourceManager.getDefault(context);
                Rlog.i(LOG_TAG, "Cdma Subscription set to " + cdmaSubscription);
                Rlog.i(LOG_TAG, "Cdma Subscription set to " + cdmaSubscription);
+5 −0
Original line number Original line Diff line number Diff line
@@ -61,6 +61,7 @@ import android.os.IInterface;
import android.os.PersistableBundle;
import android.os.PersistableBundle;
import android.os.UserHandle;
import android.os.UserHandle;
import android.os.UserManager;
import android.os.UserManager;
import android.os.telephony.TelephonyRegistryManager;
import android.preference.PreferenceManager;
import android.preference.PreferenceManager;
import android.provider.Settings;
import android.provider.Settings;
import android.provider.Telephony.ServiceStateTable;
import android.provider.Telephony.ServiceStateTable;
@@ -247,6 +248,8 @@ public class ContextFixture implements TestFixture<Context> {
                    return mTelecomManager;
                    return mTelecomManager;
                case Context.DOWNLOAD_SERVICE:
                case Context.DOWNLOAD_SERVICE:
                    return mDownloadManager;
                    return mDownloadManager;
                case Context.TELEPHONY_REGISTRY_SERVICE:
                    return mTelephonyRegistryManager;
                case Context.DISPLAY_SERVICE:
                case Context.DISPLAY_SERVICE:
                case Context.POWER_SERVICE:
                case Context.POWER_SERVICE:
                    // PowerManager and DisplayManager are final classes so cannot be mocked,
                    // PowerManager and DisplayManager are final classes so cannot be mocked,
@@ -569,6 +572,8 @@ public class ContextFixture implements TestFixture<Context> {
    private final EuiccManager mEuiccManager = mock(EuiccManager.class);
    private final EuiccManager mEuiccManager = mock(EuiccManager.class);
    private final TelecomManager mTelecomManager = mock(TelecomManager.class);
    private final TelecomManager mTelecomManager = mock(TelecomManager.class);
    private final PackageInfo mPackageInfo = mock(PackageInfo.class);
    private final PackageInfo mPackageInfo = mock(PackageInfo.class);
    private final TelephonyRegistryManager mTelephonyRegistryManager =
        mock(TelephonyRegistryManager.class);


    private final ContentProvider mContentProvider = spy(new FakeContentProvider());
    private final ContentProvider mContentProvider = spy(new FakeContentProvider());


Loading