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

Commit 002a19ae authored by Romain Hunault's avatar Romain Hunault 🚴🏻
Browse files

Merge remote-tracking branch 'origin/lineage-16.0' into v1-pie

parents b19da5a9 c854c295
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -1733,6 +1733,9 @@
        -->
    </string-array>

    <!-- Component name of the combo network location provider. -->
    <string name="config_comboNetworkLocationProvider" translatable="false">@null</string>

    <!-- Boolean indicating if current platform supports bluetooth SCO for off call
    use cases -->
    <bool name="config_bluetooth_sco_off_call">true</bool>
+1 −0
Original line number Diff line number Diff line
@@ -2025,6 +2025,7 @@
  <java-symbol type="string" name="config_geocoderProviderPackageName" />
  <java-symbol type="string" name="config_geofenceProviderPackageName" />
  <java-symbol type="string" name="config_networkLocationProviderPackageName" />
  <java-symbol type="string" name="config_comboNetworkLocationProvider" />
  <java-symbol type="string" name="config_wimaxManagerClassname" />
  <java-symbol type="string" name="config_wimaxNativeLibLocation" />
  <java-symbol type="string" name="config_wimaxServiceClassname" />
+79 −0
Original line number Diff line number Diff line
@@ -171,6 +171,9 @@ public class LocationManagerService extends ILocationManager.Stub {
    private LocationFudger mLocationFudger;
    private GeofenceManager mGeofenceManager;
    private PackageManager mPackageManager;
    private String mComboNlpPackageName;
    private String mComboNlpReadyMarker;
    private String mComboNlpScreenMarker;
    private PowerManager mPowerManager;
    private ActivityManager mActivityManager;
    private UserManager mUserManager;
@@ -711,6 +714,13 @@ public class LocationManagerService extends ILocationManager.Stub {
            Slog.d(TAG, "Unable to bind ActivityRecognitionProxy.");
        }

        mComboNlpPackageName = resources.getString(
                com.android.internal.R.string.config_comboNetworkLocationProvider);
        if (mComboNlpPackageName != null) {
            mComboNlpReadyMarker = mComboNlpPackageName + ".nlp:ready";
            mComboNlpScreenMarker = mComboNlpPackageName + ".nlp:screen";
        }

        String[] testProviderStrings = resources.getStringArray(
                com.android.internal.R.array.config_testLocationProviders);
        for (String testProviderString : testProviderStrings) {
@@ -3030,6 +3040,71 @@ public class LocationManagerService extends ILocationManager.Stub {
        synchronized (mLock) {
            return mMockProviders.containsKey(provider);
        }

    }

    private Location screenLocationLocked(Location location, String provider) {
        if (isMockProvider(LocationManager.NETWORK_PROVIDER)) {
            return location;
        }
        LocationProviderProxy providerProxy =
                (LocationProviderProxy) mProvidersByName.get(LocationManager.NETWORK_PROVIDER);
        if (mComboNlpPackageName == null || providerProxy == null ||
                !provider.equals(LocationManager.NETWORK_PROVIDER) ||
                isMockProvider(LocationManager.NETWORK_PROVIDER)) {
            return location;
        }

        String connectedNlpPackage = providerProxy.getConnectedPackageName();
        if (connectedNlpPackage == null || !connectedNlpPackage.equals(mComboNlpPackageName)) {
            return location;
        }

        Bundle extras = location.getExtras();
        boolean isBeingScreened = false;

        if (extras == null || !extras.containsKey(mComboNlpReadyMarker)) {
            // see if Combo Nlp is a passive listener
            ArrayList<UpdateRecord> records =
                    mRecordsByProvider.get(LocationManager.PASSIVE_PROVIDER);
            if (records != null) {
                for (UpdateRecord r : records) {
                    if (r.mReceiver.mIdentity.mPackageName.equals(mComboNlpPackageName)) {
                        if (!isBeingScreened) {
                            isBeingScreened = true;
                            if (extras == null) {
                                location.setExtras(new Bundle());
                                extras = location.getExtras();
                            }
                            extras.putBoolean(mComboNlpScreenMarker, true);
                        }
                        // send location to Combo Nlp for screening
                        if (!r.mReceiver.callLocationChangedLocked(location)) {
                            Slog.w(TAG, "RemoteException calling onLocationChanged on "
                                   + r.mReceiver);
                        } else {
                            if (D) {
                                Log.d(TAG, "Sending location for screening");
                            }
                        }
                    }
                }
            }
            if (isBeingScreened) {
                return null;
            }
            if (D) {
                Log.d(TAG, "Not screening locations");
            }
        } else {
            if (D) {
                Log.d(TAG, "This location is marked as ready for broadcast");
            }
            // clear the ready marker
            extras.remove(mComboNlpReadyMarker);
        }

        return location;
    }

    private void handleLocationChanged(Location location, boolean passive) {
@@ -3048,6 +3123,10 @@ public class LocationManagerService extends ILocationManager.Stub {
        synchronized (mLock) {
            if (isAllowedByCurrentUserSettingsLocked(provider)) {
                if (!passive) {
                    location = screenLocationLocked(location, provider);
                    if (location == null) {
                        return;
                    }
                    // notify passive provider of the new location
                    mPassiveProvider.updateLocation(myLocation);
                }