Search in sources :

Example 41 with ServiceState

use of android.telephony.ServiceState in project android_frameworks_base by DirtyUnicorns.

the class NetworkControllerSignalTest method testEmergencyOnlyNoSubscriptions.

public void testEmergencyOnlyNoSubscriptions() {
    setupDefaultSignal();
    setSubscriptions();
    mNetworkController.mLastServiceState = new ServiceState();
    mNetworkController.mLastServiceState.setEmergencyOnly(true);
    mNetworkController.recalculateEmergency();
    verifyEmergencyOnly(true);
}
Also used : ServiceState(android.telephony.ServiceState)

Example 42 with ServiceState

use of android.telephony.ServiceState in project android_frameworks_base by DirtyUnicorns.

the class ComprehensiveCountryDetector method addPhoneStateListener.

protected synchronized void addPhoneStateListener() {
    if (mPhoneStateListener == null) {
        mPhoneStateListener = new PhoneStateListener() {

            @Override
            public void onServiceStateChanged(ServiceState serviceState) {
                mCountServiceStateChanges++;
                mTotalCountServiceStateChanges++;
                if (!isNetworkCountryCodeAvailable()) {
                    return;
                }
                if (DEBUG)
                    Slog.d(TAG, "onServiceStateChanged: " + serviceState.getState());
                detectCountry(true, true);
            }
        };
        mTelephonyManager.listen(mPhoneStateListener, PhoneStateListener.LISTEN_SERVICE_STATE);
    }
}
Also used : ServiceState(android.telephony.ServiceState) PhoneStateListener(android.telephony.PhoneStateListener)

Example 43 with ServiceState

use of android.telephony.ServiceState in project XobotOS by xamarin.

the class CdmaServiceStateTracker method pollStateDone.

protected void pollStateDone() {
    if (DBG)
        log("pollStateDone: oldSS=[" + ss + "] newSS=[" + newSS + "]");
    boolean hasRegistered = ss.getState() != ServiceState.STATE_IN_SERVICE && newSS.getState() == ServiceState.STATE_IN_SERVICE;
    boolean hasDeregistered = ss.getState() == ServiceState.STATE_IN_SERVICE && newSS.getState() != ServiceState.STATE_IN_SERVICE;
    boolean hasCdmaDataConnectionAttached = mDataConnectionState != ServiceState.STATE_IN_SERVICE && mNewDataConnectionState == ServiceState.STATE_IN_SERVICE;
    boolean hasCdmaDataConnectionDetached = mDataConnectionState == ServiceState.STATE_IN_SERVICE && mNewDataConnectionState != ServiceState.STATE_IN_SERVICE;
    boolean hasCdmaDataConnectionChanged = mDataConnectionState != mNewDataConnectionState;
    boolean hasNetworkTypeChanged = networkType != newNetworkType;
    boolean hasChanged = !newSS.equals(ss);
    boolean hasRoamingOn = !ss.getRoaming() && newSS.getRoaming();
    boolean hasRoamingOff = ss.getRoaming() && !newSS.getRoaming();
    boolean hasLocationChanged = !newCellLoc.equals(cellLoc);
    // Add an event log when connection state changes
    if (ss.getState() != newSS.getState() || mDataConnectionState != mNewDataConnectionState) {
        EventLog.writeEvent(EventLogTags.CDMA_SERVICE_STATE_CHANGE, ss.getState(), mDataConnectionState, newSS.getState(), mNewDataConnectionState);
    }
    ServiceState tss;
    tss = ss;
    ss = newSS;
    newSS = tss;
    // clean slate for next time
    newSS.setStateOutOfService();
    CdmaCellLocation tcl = cellLoc;
    cellLoc = newCellLoc;
    newCellLoc = tcl;
    mDataConnectionState = mNewDataConnectionState;
    networkType = newNetworkType;
    // this new state has been applied - forget it until we get a new new state
    newNetworkType = 0;
    // clean slate for next time
    newSS.setStateOutOfService();
    if (hasNetworkTypeChanged) {
        phone.setSystemProperty(TelephonyProperties.PROPERTY_DATA_NETWORK_TYPE, ServiceState.radioTechnologyToString(networkType));
    }
    if (hasRegistered) {
        mNetworkAttachedRegistrants.notifyRegistrants();
    }
    if (hasChanged) {
        if (cm.getRadioState().isNVReady()) {
            String eriText;
            // Now the CDMAPhone sees the new ServiceState so it can get the new ERI text
            if (ss.getState() == ServiceState.STATE_IN_SERVICE) {
                eriText = phone.getCdmaEriText();
            } else {
                // Note that ServiceState.STATE_OUT_OF_SERVICE is valid used for
                // mRegistrationState 0,2,3 and 4
                eriText = phone.getContext().getText(com.android.internal.R.string.roamingTextSearching).toString();
            }
            ss.setOperatorAlphaLong(eriText);
        }
        String operatorNumeric;
        phone.setSystemProperty(TelephonyProperties.PROPERTY_OPERATOR_ALPHA, ss.getOperatorAlphaLong());
        operatorNumeric = ss.getOperatorNumeric();
        phone.setSystemProperty(TelephonyProperties.PROPERTY_OPERATOR_NUMERIC, operatorNumeric);
        if (operatorNumeric == null) {
            phone.setSystemProperty(TelephonyProperties.PROPERTY_OPERATOR_ISO_COUNTRY, "");
            mGotCountryCode = false;
        } else {
            String isoCountryCode = "";
            try {
                isoCountryCode = MccTable.countryCodeForMcc(Integer.parseInt(operatorNumeric.substring(0, 3)));
            } catch (NumberFormatException ex) {
                loge("pollStateDone: countryCodeForMcc error" + ex);
            } catch (StringIndexOutOfBoundsException ex) {
                loge("pollStateDone: countryCodeForMcc error" + ex);
            }
            phone.setSystemProperty(TelephonyProperties.PROPERTY_OPERATOR_ISO_COUNTRY, isoCountryCode);
            mGotCountryCode = true;
            if (mNeedFixZone) {
                fixTimeZone(isoCountryCode);
            }
        }
        phone.setSystemProperty(TelephonyProperties.PROPERTY_OPERATOR_ISROAMING, ss.getRoaming() ? "true" : "false");
        updateSpnDisplay();
        phone.notifyServiceStateChanged(ss);
    }
    if (hasCdmaDataConnectionAttached) {
        mAttachedRegistrants.notifyRegistrants();
    }
    if (hasCdmaDataConnectionDetached) {
        mDetachedRegistrants.notifyRegistrants();
    }
    if (hasCdmaDataConnectionChanged || hasNetworkTypeChanged) {
        phone.notifyDataConnection(null);
    }
    if (hasRoamingOn) {
        mRoamingOnRegistrants.notifyRegistrants();
    }
    if (hasRoamingOff) {
        mRoamingOffRegistrants.notifyRegistrants();
    }
    if (hasLocationChanged) {
        phone.notifyLocationChanged();
    }
}
Also used : ServiceState(android.telephony.ServiceState) CdmaCellLocation(android.telephony.cdma.CdmaCellLocation)

Example 44 with ServiceState

use of android.telephony.ServiceState in project XobotOS by xamarin.

the class GsmServiceStateTracker method pollStateDone.

private void pollStateDone() {
    if (DBG) {
        log("Poll ServiceState done: " + " oldSS=[" + ss + "] newSS=[" + newSS + "] oldGprs=" + gprsState + " newData=" + newGPRSState + " oldMaxDataCalls=" + mMaxDataCalls + " mNewMaxDataCalls=" + mNewMaxDataCalls + " oldReasonDataDenied=" + mReasonDataDenied + " mNewReasonDataDenied=" + mNewReasonDataDenied + " oldType=" + ServiceState.radioTechnologyToString(mRadioTechnology) + " newType=" + ServiceState.radioTechnologyToString(mNewRadioTechnology));
    }
    boolean hasRegistered = ss.getState() != ServiceState.STATE_IN_SERVICE && newSS.getState() == ServiceState.STATE_IN_SERVICE;
    boolean hasDeregistered = ss.getState() == ServiceState.STATE_IN_SERVICE && newSS.getState() != ServiceState.STATE_IN_SERVICE;
    boolean hasGprsAttached = gprsState != ServiceState.STATE_IN_SERVICE && newGPRSState == ServiceState.STATE_IN_SERVICE;
    boolean hasGprsDetached = gprsState == ServiceState.STATE_IN_SERVICE && newGPRSState != ServiceState.STATE_IN_SERVICE;
    boolean hasRadioTechnologyChanged = mRadioTechnology != mNewRadioTechnology;
    boolean hasChanged = !newSS.equals(ss);
    boolean hasRoamingOn = !ss.getRoaming() && newSS.getRoaming();
    boolean hasRoamingOff = ss.getRoaming() && !newSS.getRoaming();
    boolean hasLocationChanged = !newCellLoc.equals(cellLoc);
    // Add an event log when connection state changes
    if (ss.getState() != newSS.getState() || gprsState != newGPRSState) {
        EventLog.writeEvent(EventLogTags.GSM_SERVICE_STATE_CHANGE, ss.getState(), gprsState, newSS.getState(), newGPRSState);
    }
    ServiceState tss;
    tss = ss;
    ss = newSS;
    newSS = tss;
    // clean slate for next time
    newSS.setStateOutOfService();
    GsmCellLocation tcl = cellLoc;
    cellLoc = newCellLoc;
    newCellLoc = tcl;
    // i.e. check preferred network setting, only switch to 2G, etc
    if (hasRadioTechnologyChanged) {
        int cid = -1;
        GsmCellLocation loc = ((GsmCellLocation) phone.getCellLocation());
        if (loc != null)
            cid = loc.getCid();
        EventLog.writeEvent(EventLogTags.GSM_RAT_SWITCHED, cid, mRadioTechnology, mNewRadioTechnology);
        if (DBG) {
            log("RAT switched " + ServiceState.radioTechnologyToString(mRadioTechnology) + " -> " + ServiceState.radioTechnologyToString(mNewRadioTechnology) + " at cell " + cid);
        }
    }
    gprsState = newGPRSState;
    mReasonDataDenied = mNewReasonDataDenied;
    mMaxDataCalls = mNewMaxDataCalls;
    mRadioTechnology = mNewRadioTechnology;
    // this new state has been applied - forget it until we get a new new state
    mNewRadioTechnology = 0;
    // clean slate for next time
    newSS.setStateOutOfService();
    if (hasRadioTechnologyChanged) {
        phone.setSystemProperty(TelephonyProperties.PROPERTY_DATA_NETWORK_TYPE, ServiceState.radioTechnologyToString(mRadioTechnology));
    }
    if (hasRegistered) {
        mNetworkAttachedRegistrants.notifyRegistrants();
    }
    if (hasChanged) {
        String operatorNumeric;
        updateSpnDisplay();
        phone.setSystemProperty(TelephonyProperties.PROPERTY_OPERATOR_ALPHA, ss.getOperatorAlphaLong());
        operatorNumeric = ss.getOperatorNumeric();
        phone.setSystemProperty(TelephonyProperties.PROPERTY_OPERATOR_NUMERIC, operatorNumeric);
        if (operatorNumeric == null) {
            phone.setSystemProperty(TelephonyProperties.PROPERTY_OPERATOR_ISO_COUNTRY, "");
            mGotCountryCode = false;
        } else {
            String iso = "";
            try {
                iso = MccTable.countryCodeForMcc(Integer.parseInt(operatorNumeric.substring(0, 3)));
            } catch (NumberFormatException ex) {
                loge("countryCodeForMcc error" + ex);
            } catch (StringIndexOutOfBoundsException ex) {
                loge("countryCodeForMcc error" + ex);
            }
            phone.setSystemProperty(TelephonyProperties.PROPERTY_OPERATOR_ISO_COUNTRY, iso);
            mGotCountryCode = true;
            if (mNeedFixZone) {
                TimeZone zone = null;
                // If the offset is (0, false) and the timezone property
                // is set, use the timezone property rather than
                // GMT.
                String zoneName = SystemProperties.get(TIMEZONE_PROPERTY);
                if ((mZoneOffset == 0) && (mZoneDst == false) && (zoneName != null) && (zoneName.length() > 0) && (Arrays.binarySearch(GMT_COUNTRY_CODES, iso) < 0)) {
                    zone = TimeZone.getDefault();
                    // For NITZ string without timezone,
                    // need adjust time to reflect default timezone setting
                    long tzOffset;
                    tzOffset = zone.getOffset(System.currentTimeMillis());
                    if (getAutoTime()) {
                        setAndBroadcastNetworkSetTime(System.currentTimeMillis() - tzOffset);
                    } else {
                        // Adjust the saved NITZ time to account for tzOffset.
                        mSavedTime = mSavedTime - tzOffset;
                    }
                } else if (iso.equals("")) {
                    // Country code not found.  This is likely a test network.
                    // Get a TimeZone based only on the NITZ parameters (best guess).
                    zone = getNitzTimeZone(mZoneOffset, mZoneDst, mZoneTime);
                } else {
                    zone = TimeUtils.getTimeZone(mZoneOffset, mZoneDst, mZoneTime, iso);
                }
                mNeedFixZone = false;
                if (zone != null) {
                    if (getAutoTimeZone()) {
                        setAndBroadcastNetworkSetTimeZone(zone.getID());
                    }
                    saveNitzTimeZone(zone.getID());
                }
            }
        }
        phone.setSystemProperty(TelephonyProperties.PROPERTY_OPERATOR_ISROAMING, ss.getRoaming() ? "true" : "false");
        phone.notifyServiceStateChanged(ss);
    }
    if (hasGprsAttached) {
        mAttachedRegistrants.notifyRegistrants();
    }
    if (hasGprsDetached) {
        mDetachedRegistrants.notifyRegistrants();
    }
    if (hasRadioTechnologyChanged) {
        phone.notifyDataConnection(Phone.REASON_NW_TYPE_CHANGED);
    }
    if (hasRoamingOn) {
        mRoamingOnRegistrants.notifyRegistrants();
    }
    if (hasRoamingOff) {
        mRoamingOffRegistrants.notifyRegistrants();
    }
    if (hasLocationChanged) {
        phone.notifyLocationChanged();
    }
    if (!isGprsConsistent(gprsState, ss.getState())) {
        if (!mStartedGprsRegCheck && !mReportedGprsNoReg) {
            mStartedGprsRegCheck = true;
            int check_period = Settings.Secure.getInt(phone.getContext().getContentResolver(), Settings.Secure.GPRS_REGISTER_CHECK_PERIOD_MS, DEFAULT_GPRS_CHECK_PERIOD_MILLIS);
            sendMessageDelayed(obtainMessage(EVENT_CHECK_REPORT_GPRS), check_period);
        }
    } else {
        mReportedGprsNoReg = false;
    }
}
Also used : TimeZone(java.util.TimeZone) ServiceState(android.telephony.ServiceState) GsmCellLocation(android.telephony.gsm.GsmCellLocation)

Example 45 with ServiceState

use of android.telephony.ServiceState in project XobotOS by xamarin.

the class DefaultPhoneNotifier method notifyServiceState.

public void notifyServiceState(Phone sender) {
    ServiceState ss = sender.getServiceState();
    if (ss == null) {
        ss = new ServiceState();
        ss.setStateOutOfService();
    }
    try {
        mRegistry.notifyServiceState(ss);
    } catch (RemoteException ex) {
    // system process is dead
    }
}
Also used : ServiceState(android.telephony.ServiceState) RemoteException(android.os.RemoteException)

Aggregations

ServiceState (android.telephony.ServiceState)55 RemoteException (android.os.RemoteException)19 VoLteServiceState (android.telephony.VoLteServiceState)15 Bundle (android.os.Bundle)11 PhoneStateListener (android.telephony.PhoneStateListener)10 SubscriptionInfo (android.telephony.SubscriptionInfo)7 IBinder (android.os.IBinder)6 SignalStrength (android.telephony.SignalStrength)6 Intent (android.content.Intent)5 IntentFilter (android.content.IntentFilter)5 State (com.android.internal.telephony.IccCardConstants.State)5 TelephonyManager (android.telephony.TelephonyManager)3 Paint (android.graphics.Paint)2 Fingerprint (android.hardware.fingerprint.Fingerprint)2 CdmaCellLocation (android.telephony.cdma.CdmaCellLocation)2 BitSet (java.util.BitSet)2 LinkCapabilities (android.net.LinkCapabilities)1 LinkProperties (android.net.LinkProperties)1 GsmCellLocation (android.telephony.gsm.GsmCellLocation)1 Phone (com.android.internal.telephony.Phone)1