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

Commit e8fcc60a authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Fix a provider bug and remove redundant GNSS logic"

parents eae5ad7c 03616a40
Loading
Loading
Loading
Loading
+0 −35
Original line number Diff line number Diff line
@@ -155,41 +155,6 @@ public class FusedLocationServiceTest {
        assertThat(mManager.getNextLocation(TIMEOUT_MS)).isEqualTo(location);
    }

    @Test
    public void testBypassRequest() throws Exception {
        LocationRequest request = LocationRequest.createFromDeprecatedProvider(FUSED_PROVIDER, 1000,
                0, false).setQuality(LocationRequest.POWER_HIGH).setLocationSettingsIgnored(true);

        mProvider.setRequest(
                new ProviderRequest.Builder()
                        .setInterval(1000)
                        .setLocationSettingsIgnored(true)
                        .setLocationRequests(Collections.singletonList(request))
                        .build(),
                new WorkSource());

        boolean containsNetworkBypass = false;
        for (LocationRequest iRequest : mLocationManager.getTestProviderCurrentRequests(
                NETWORK_PROVIDER)) {
            if (iRequest.isLocationSettingsIgnored()) {
                containsNetworkBypass = true;
                break;
            }
        }

        boolean containsGpsBypass = false;
        for (LocationRequest iRequest : mLocationManager.getTestProviderCurrentRequests(
                GPS_PROVIDER)) {
            if (iRequest.isLocationSettingsIgnored()) {
                containsGpsBypass = true;
                break;
            }
        }

        assertThat(containsNetworkBypass).isTrue();
        assertThat(containsGpsBypass).isTrue();
    }

    private static class LocationProviderManagerCapture extends ILocationProviderManager.Stub {

        private final LinkedBlockingQueue<Location> mLocations;
+1 −1
Original line number Diff line number Diff line
@@ -1615,7 +1615,7 @@ class LocationProviderManager extends
                case LOCATION_MODE_THROTTLE_REQUESTS_WHEN_SCREEN_OFF:
                    // fall through
                case LOCATION_MODE_ALL_DISABLED_WHEN_SCREEN_OFF:
                    updateService();
                    updateRegistrations(registration -> true);
                    break;
                default:
                    break;
+0 −18
Original line number Diff line number Diff line
@@ -49,8 +49,6 @@ import android.os.Looper;
import android.os.Message;
import android.os.PersistableBundle;
import android.os.PowerManager;
import android.os.PowerManager.ServiceType;
import android.os.PowerSaveState;
import android.os.RemoteException;
import android.os.ServiceManager;
import android.os.SystemClock;
@@ -486,10 +484,6 @@ public class GnssLocationProvider extends AbstractLocationProvider implements
                        deviceIdleService.unregisterStationaryListener(
                                mDeviceIdleStationaryListener);
                    }
                    // Intentional fall-through.
                case PowerManager.ACTION_POWER_SAVE_MODE_CHANGED:
                case Intent.ACTION_SCREEN_OFF:
                case Intent.ACTION_SCREEN_ON:
                    // Call updateLowPowerMode on handler thread so it's always called from the
                    // same thread.
                    mHandler.sendEmptyMessage(UPDATE_LOW_POWER_MODE);
@@ -554,15 +548,6 @@ public class GnssLocationProvider extends AbstractLocationProvider implements
    private void updateLowPowerMode() {
        // Disable GPS if we are in device idle mode and the device is stationary.
        boolean disableGpsForPowerManager = mPowerManager.isDeviceIdleMode() && mIsDeviceStationary;
        final PowerSaveState result = mPowerManager.getPowerSaveState(ServiceType.LOCATION);
        switch (result.locationMode) {
            case PowerManager.LOCATION_MODE_GPS_DISABLED_WHEN_SCREEN_OFF:
            case PowerManager.LOCATION_MODE_ALL_DISABLED_WHEN_SCREEN_OFF:
                // If we are in battery saver mode and the screen is off, disable GPS.
                disableGpsForPowerManager |=
                        result.batterySaverEnabled && !mPowerManager.isInteractive();
                break;
        }
        if (disableGpsForPowerManager != mDisableGpsForPowerManager) {
            mDisableGpsForPowerManager = disableGpsForPowerManager;
            updateEnabled();
@@ -1959,10 +1944,7 @@ public class GnssLocationProvider extends AbstractLocationProvider implements
            IntentFilter intentFilter = new IntentFilter();
            intentFilter.addAction(ALARM_WAKEUP);
            intentFilter.addAction(ALARM_TIMEOUT);
            intentFilter.addAction(PowerManager.ACTION_POWER_SAVE_MODE_CHANGED);
            intentFilter.addAction(PowerManager.ACTION_DEVICE_IDLE_MODE_CHANGED);
            intentFilter.addAction(Intent.ACTION_SCREEN_OFF);
            intentFilter.addAction(Intent.ACTION_SCREEN_ON);
            intentFilter.addAction(CarrierConfigManager.ACTION_CARRIER_CONFIG_CHANGED);
            intentFilter.addAction(TelephonyManager.ACTION_DEFAULT_DATA_SUBSCRIPTION_CHANGED);
            mContext.registerReceiver(mBroadcastReceiver, intentFilter, null, this);
+16 −0
Original line number Diff line number Diff line
@@ -25,6 +25,7 @@ import static android.location.Criteria.ACCURACY_COARSE;
import static android.location.Criteria.ACCURACY_FINE;
import static android.location.Criteria.POWER_HIGH;
import static android.location.LocationManager.PASSIVE_PROVIDER;
import static android.os.PowerManager.LOCATION_MODE_THROTTLE_REQUESTS_WHEN_SCREEN_OFF;

import static androidx.test.ext.truth.location.LocationSubject.assertThat;

@@ -907,6 +908,21 @@ public class LocationProviderManagerTest {
        assertThat(mProvider.getRequest().interval).isEqualTo(5);
    }

    @Test
    public void testProviderRequest_BatterySaver_ScreenOnOff() {
        mInjector.getLocationPowerSaveModeHelper().setLocationPowerSaveMode(
                LOCATION_MODE_THROTTLE_REQUESTS_WHEN_SCREEN_OFF);

        ILocationListener listener = createMockLocationListener();
        LocationRequest request = LocationRequest.createFromDeprecatedProvider(NAME, 5, 0, false);
        mManager.registerLocationRequest(request, IDENTITY, PERMISSION_FINE, listener);

        assertThat(mProvider.getRequest().reportLocation).isTrue();

        mInjector.getScreenInteractiveHelper().setScreenInteractive(false);
        assertThat(mProvider.getRequest().reportLocation).isFalse();
    }

    private ILocationListener createMockLocationListener() {
        return spy(new ILocationListener.Stub() {
            @Override