Search in sources :

Example 16 with GsmCellLocation

use of android.telephony.gsm.GsmCellLocation 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 17 with GsmCellLocation

use of android.telephony.gsm.GsmCellLocation in project XobotOS by xamarin.

the class GsmDataConnectionTracker method getCellLocationId.

private int getCellLocationId() {
    int cid = -1;
    CellLocation loc = mPhone.getCellLocation();
    if (loc != null) {
        if (loc instanceof GsmCellLocation) {
            cid = ((GsmCellLocation) loc).getCid();
        } else if (loc instanceof CdmaCellLocation) {
            cid = ((CdmaCellLocation) loc).getBaseStationId();
        }
    }
    return cid;
}
Also used : CdmaCellLocation(android.telephony.cdma.CdmaCellLocation) GsmCellLocation(android.telephony.gsm.GsmCellLocation) CellLocation(android.telephony.CellLocation) CdmaCellLocation(android.telephony.cdma.CdmaCellLocation) GsmCellLocation(android.telephony.gsm.GsmCellLocation)

Example 18 with GsmCellLocation

use of android.telephony.gsm.GsmCellLocation in project android_frameworks_base by DirtyUnicorns.

the class GnssLocationProvider method requestRefLocation.

/**
     * Called from native code to request reference location info
     */
private void requestRefLocation(int flags) {
    TelephonyManager phone = (TelephonyManager) mContext.getSystemService(Context.TELEPHONY_SERVICE);
    final int phoneType = phone.getPhoneType();
    if (phoneType == TelephonyManager.PHONE_TYPE_GSM) {
        GsmCellLocation gsm_cell = (GsmCellLocation) phone.getCellLocation();
        if ((gsm_cell != null) && (phone.getNetworkOperator() != null) && (phone.getNetworkOperator().length() > 3)) {
            int type;
            int mcc = Integer.parseInt(phone.getNetworkOperator().substring(0, 3));
            int mnc = Integer.parseInt(phone.getNetworkOperator().substring(3));
            int networkType = phone.getNetworkType();
            if (networkType == TelephonyManager.NETWORK_TYPE_UMTS || networkType == TelephonyManager.NETWORK_TYPE_HSDPA || networkType == TelephonyManager.NETWORK_TYPE_HSUPA || networkType == TelephonyManager.NETWORK_TYPE_HSPA || networkType == TelephonyManager.NETWORK_TYPE_HSPAP) {
                type = AGPS_REF_LOCATION_TYPE_UMTS_CELLID;
            } else {
                type = AGPS_REF_LOCATION_TYPE_GSM_CELLID;
            }
            native_agps_set_ref_location_cellid(type, mcc, mnc, gsm_cell.getLac(), gsm_cell.getCid());
        } else {
            Log.e(TAG, "Error getting cell location info.");
        }
    } else if (phoneType == TelephonyManager.PHONE_TYPE_CDMA) {
        Log.e(TAG, "CDMA not supported.");
    }
}
Also used : TelephonyManager(android.telephony.TelephonyManager) GsmCellLocation(android.telephony.gsm.GsmCellLocation)

Example 19 with GsmCellLocation

use of android.telephony.gsm.GsmCellLocation in project android_frameworks_base by ResurrectionRemix.

the class GnssLocationProvider method requestRefLocation.

/**
     * Called from native code to request reference location info
     */
private void requestRefLocation(int flags) {
    TelephonyManager phone = (TelephonyManager) mContext.getSystemService(Context.TELEPHONY_SERVICE);
    final int phoneType = phone.getPhoneType();
    if (phoneType == TelephonyManager.PHONE_TYPE_GSM) {
        GsmCellLocation gsm_cell = (GsmCellLocation) phone.getCellLocation();
        if ((gsm_cell != null) && (phone.getNetworkOperator() != null) && (phone.getNetworkOperator().length() > 3)) {
            int type;
            int mcc = Integer.parseInt(phone.getNetworkOperator().substring(0, 3));
            int mnc = Integer.parseInt(phone.getNetworkOperator().substring(3));
            int networkType = phone.getNetworkType();
            if (networkType == TelephonyManager.NETWORK_TYPE_UMTS || networkType == TelephonyManager.NETWORK_TYPE_HSDPA || networkType == TelephonyManager.NETWORK_TYPE_HSUPA || networkType == TelephonyManager.NETWORK_TYPE_HSPA || networkType == TelephonyManager.NETWORK_TYPE_HSPAP) {
                type = AGPS_REF_LOCATION_TYPE_UMTS_CELLID;
            } else {
                type = AGPS_REF_LOCATION_TYPE_GSM_CELLID;
            }
            native_agps_set_ref_location_cellid(type, mcc, mnc, gsm_cell.getLac(), gsm_cell.getCid(), gsm_cell.getPsc());
        } else {
            Log.e(TAG, "Error getting cell location info.");
        }
    } else if (phoneType == TelephonyManager.PHONE_TYPE_CDMA) {
        Log.e(TAG, "CDMA not supported.");
    }
}
Also used : TelephonyManager(android.telephony.TelephonyManager) GsmCellLocation(android.telephony.gsm.GsmCellLocation)

Aggregations

GsmCellLocation (android.telephony.gsm.GsmCellLocation)19 TelephonyManager (android.telephony.TelephonyManager)9 CdmaCellLocation (android.telephony.cdma.CdmaCellLocation)7 AsyncResult (android.os.AsyncResult)2 CellLocation (android.telephony.CellLocation)2 Realm (io.realm.Realm)2 Cleanup (lombok.Cleanup)2 SuppressLint (android.annotation.SuppressLint)1 SharedPreferences (android.content.SharedPreferences)1 Resources (android.content.res.Resources)1 ScanResult (android.net.wifi.ScanResult)1 WifiManager (android.net.wifi.WifiManager)1 Message (android.os.Message)1 NeighboringCellInfo (android.telephony.NeighboringCellInfo)1 ServiceState (android.telephony.ServiceState)1 JSONObject (com.alibaba.fastjson.JSONObject)1 GsmConnection (com.android.internal.telephony.gsm.GsmConnection)1 CellInfo (edu.berkeley.cs.amplab.carat.thrift.CellInfo)1 FileNotFoundException (java.io.FileNotFoundException)1 IOException (java.io.IOException)1