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

Commit 106b24a1 authored by Tushar Janefalkar's avatar Tushar Janefalkar Committed by Steve Kondik
Browse files

Use a content observer for getting the default APN

Instead of executing a query of the database for the
default APN on every network state change, an observer
is used on the database to be notifited when the apn
has changed. This prevents unneccesary queries on the
the database.

CRs-fixed: 662137

Change-Id: I3155bd8b53a1877413ed54a861df1bfb1853b9e4
Conflicts:
services/core/java/com/android/server/location/GpsLocationProvider.java
parent 1cb04ffc
Loading
Loading
Loading
Loading
+19 −6
Original line number Diff line number Diff line
@@ -35,6 +35,7 @@ import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.database.Cursor;
import android.database.ContentObserver;
import android.hardware.location.GeofenceHardware;
import android.hardware.location.GeofenceHardwareImpl;
import android.location.Criteria;
@@ -373,6 +374,8 @@ public class GpsLocationProvider implements LocationProviderInterface {
    private final ConnectivityManager mConnMgr;
    private final GpsNetInitiatedHandler mNIHandler;

    private String mDefaultApn;

    // Wakelocks
    private final static String WAKELOCK_KEY = "GpsLocationProvider";
    private final PowerManager.WakeLock mWakeLock;
@@ -725,6 +728,9 @@ public class GpsLocationProvider implements LocationProviderInterface {
        intentFilter.addAction(TelephonyIntents.ACTION_SUBINFO_CONTENT_CHANGE);
        intentFilter.addAction(TelephonyIntents.ACTION_SUBINFO_RECORD_UPDATED);
        mContext.registerReceiver(mBroadcastReceiver, intentFilter, null, mHandler);
        Uri uri = Uri.parse("content://telephony/carriers/preferapn");
        mContext.getContentResolver().registerContentObserver(
            uri, false, mDefaultApnObserver);
    }

    /**
@@ -756,14 +762,13 @@ public class GpsLocationProvider implements LocationProviderInterface {
            boolean dataEnabled = Settings.Global.getInt(mContext.getContentResolver(),
                                                         Settings.Global.MOBILE_DATA, 1) == 1;
            boolean networkAvailable = info.isAvailable() && dataEnabled;
            String defaultApn = getSelectedApn();
            if (defaultApn == null) {
                defaultApn = "dummy-apn";
            if (mDefaultApn == null) {
                mDefaultApn = getDefaultApn();
            }

            native_update_network_state(info.isConnected(), info.getType(),
                                        info.isRoaming(), networkAvailable,
                                        info.getExtraInfo(), defaultApn);
                                        info.getExtraInfo(), mDefaultApn);
        }

        if (info != null && info.getType() == ConnectivityManager.TYPE_MOBILE_SUPL
@@ -1979,6 +1984,14 @@ public class GpsLocationProvider implements LocationProviderInterface {
        }
    };

    ContentObserver mDefaultApnObserver = new ContentObserver(mHandler) {
        @Override
        public void onChange(boolean selfChange) {
            mDefaultApn = getDefaultApn();
            if (DEBUG) Log.d(TAG, "Observer mDefaultApn=" + mDefaultApn);
        }
    };

    private final class NetworkLocationListener implements LocationListener {
        @Override
        public void onLocationChanged(Location location) {
@@ -1995,7 +2008,7 @@ public class GpsLocationProvider implements LocationProviderInterface {
        public void onProviderDisabled(String provider) { }
    }

    private String getSelectedApn() {
    private String getDefaultApn() {
        Uri uri = Uri.parse("content://telephony/carriers/preferapn");
        Cursor cursor = null;
        try {
@@ -2018,7 +2031,7 @@ public class GpsLocationProvider implements LocationProviderInterface {
            }
        }

        return null;
        return "dummy-apn";
    }

    private int getApnIpType(String apn) {