Loading services/core/java/com/android/server/location/GnssLocationProvider.java +21 −2 Original line number Diff line number Diff line Loading @@ -387,6 +387,7 @@ public class GnssLocationProvider implements LocationProviderInterface, InjectNt private long mLastFixTime; private int mPositionMode; private GnssPositionMode mLastPositionMode; // Current request from underlying location clients. private ProviderRequest mProviderRequest = null; Loading Loading @@ -1341,7 +1342,7 @@ public class GnssLocationProvider implements LocationProviderInterface, InjectNt // apply request to GPS engine if (mStarted && hasCapability(GPS_CAPABILITY_SCHEDULING)) { // change period and/or lowPowerMode if (!native_set_position_mode(mPositionMode, GPS_POSITION_RECURRENCE_PERIODIC, if (!setPositionMode(mPositionMode, GPS_POSITION_RECURRENCE_PERIODIC, mFixInterval, 0, 0, mLowPowerMode)) { Log.e(TAG, "set_position_mode failed in updateRequirements"); } Loading @@ -1366,6 +1367,24 @@ public class GnssLocationProvider implements LocationProviderInterface, InjectNt } } private boolean setPositionMode(int mode, int recurrence, int minInterval, int preferredAccuracy, int preferredTime, boolean lowPowerMode) { GnssPositionMode positionMode = new GnssPositionMode(mode, recurrence, minInterval, preferredAccuracy, preferredTime, lowPowerMode); if (mLastPositionMode != null && mLastPositionMode.equals(positionMode)) { return true; } boolean result = native_set_position_mode(mode, recurrence, minInterval, preferredAccuracy, preferredTime, lowPowerMode); if (result) { mLastPositionMode = positionMode; } else { mLastPositionMode = null; } return result; } private void updateClientUids(WorkSource source) { if (source.equals(mClientSource)) { return; Loading Loading @@ -1525,7 +1544,7 @@ public class GnssLocationProvider implements LocationProviderInterface, InjectNt int interval = (hasCapability(GPS_CAPABILITY_SCHEDULING) ? mFixInterval : 1000); mLowPowerMode = (boolean) mProviderRequest.lowPowerMode; if (!native_set_position_mode(mPositionMode, GPS_POSITION_RECURRENCE_PERIODIC, if (!setPositionMode(mPositionMode, GPS_POSITION_RECURRENCE_PERIODIC, interval, 0, 0, mLowPowerMode)) { mStarted = false; Log.e(TAG, "set_position_mode failed in startNavigating()"); Loading services/core/java/com/android/server/location/GnssPositionMode.java 0 → 100644 +46 −0 Original line number Diff line number Diff line package com.android.server.location; import java.util.Arrays; /** * Represents a GNSS position mode. */ public class GnssPositionMode { private final int mode; private final int recurrence; private final int minInterval; private final int preferredAccuracy; private final int preferredTime; private final boolean lowPowerMode; public GnssPositionMode(int mode, int recurrence, int minInterval, int preferredAccuracy, int preferredTime, boolean lowPowerMode) { this.mode = mode; this.recurrence = recurrence; this.minInterval = minInterval; this.preferredAccuracy = preferredAccuracy; this.preferredTime = preferredTime; this.lowPowerMode = lowPowerMode; } @Override public boolean equals(Object other) { if (other instanceof GnssPositionMode) { GnssPositionMode that = (GnssPositionMode) other; return mode == that.mode && recurrence == that.recurrence && minInterval == that.minInterval && preferredAccuracy == that.preferredAccuracy && preferredTime == that.preferredTime && lowPowerMode == that.lowPowerMode && this.getClass() == that.getClass(); } return false; } @Override public int hashCode() { return Arrays.hashCode( new Object[]{mode, recurrence, minInterval, preferredAccuracy, preferredTime, lowPowerMode, getClass()}); } } services/robotests/src/com/android/server/location/GnssPositionModeTest.java 0 → 100644 +61 −0 Original line number Diff line number Diff line package com.android.server.location; import static com.google.common.truth.Truth.assertThat; import android.platform.test.annotations.Presubmit; import com.android.server.testing.FrameworkRobolectricTestRunner; import com.android.server.testing.SystemLoaderPackages; import org.junit.Test; import org.junit.runner.RunWith; import org.robolectric.annotation.Config; import java.util.HashSet; /** * Unit tests for {@link GnssPositionMode}. */ @RunWith(FrameworkRobolectricTestRunner.class) @Config( manifest = Config.NONE, sdk = 27 ) @SystemLoaderPackages({"com.android.server.location"}) @Presubmit public class GnssPositionModeTest { private GnssPositionMode positionMode1 = createGnssPositionMode(0, 1000); private GnssPositionMode positionMode2 = createGnssPositionMode(0, 1000); private GnssPositionMode positionMode3 = createGnssPositionMode(1, 1000); @Test public void testHashCode() { assertThat(positionMode1.hashCode()).isEqualTo(positionMode2.hashCode()); assertThat(positionMode1.hashCode()).isNotEqualTo(positionMode3.hashCode()); assertThat(positionMode1.hashCode()).isNotEqualTo(positionMode3.hashCode()); HashSet<Integer> hashSet = new HashSet<>(); hashSet.add(positionMode1.hashCode()); hashSet.add(positionMode2.hashCode()); assertThat(hashSet.size()).isEqualTo(1); hashSet.add(positionMode3.hashCode()); assertThat(hashSet.size()).isEqualTo(2); } @Test public void checkIfEqualsImpliesSameHashCode() { assertTEqualsImpliesSameHashCode(positionMode1, positionMode2); assertTEqualsImpliesSameHashCode(positionMode2, positionMode3); } private void assertTEqualsImpliesSameHashCode(GnssPositionMode mode1, GnssPositionMode mode2) { if (mode1.equals(mode2)) { assertThat(mode1.hashCode()).isEqualTo(mode2.hashCode()); } } private GnssPositionMode createGnssPositionMode(int mode, int minInterval) { return new GnssPositionMode(mode, 0, minInterval, 0, 0, true); } } Loading
services/core/java/com/android/server/location/GnssLocationProvider.java +21 −2 Original line number Diff line number Diff line Loading @@ -387,6 +387,7 @@ public class GnssLocationProvider implements LocationProviderInterface, InjectNt private long mLastFixTime; private int mPositionMode; private GnssPositionMode mLastPositionMode; // Current request from underlying location clients. private ProviderRequest mProviderRequest = null; Loading Loading @@ -1341,7 +1342,7 @@ public class GnssLocationProvider implements LocationProviderInterface, InjectNt // apply request to GPS engine if (mStarted && hasCapability(GPS_CAPABILITY_SCHEDULING)) { // change period and/or lowPowerMode if (!native_set_position_mode(mPositionMode, GPS_POSITION_RECURRENCE_PERIODIC, if (!setPositionMode(mPositionMode, GPS_POSITION_RECURRENCE_PERIODIC, mFixInterval, 0, 0, mLowPowerMode)) { Log.e(TAG, "set_position_mode failed in updateRequirements"); } Loading @@ -1366,6 +1367,24 @@ public class GnssLocationProvider implements LocationProviderInterface, InjectNt } } private boolean setPositionMode(int mode, int recurrence, int minInterval, int preferredAccuracy, int preferredTime, boolean lowPowerMode) { GnssPositionMode positionMode = new GnssPositionMode(mode, recurrence, minInterval, preferredAccuracy, preferredTime, lowPowerMode); if (mLastPositionMode != null && mLastPositionMode.equals(positionMode)) { return true; } boolean result = native_set_position_mode(mode, recurrence, minInterval, preferredAccuracy, preferredTime, lowPowerMode); if (result) { mLastPositionMode = positionMode; } else { mLastPositionMode = null; } return result; } private void updateClientUids(WorkSource source) { if (source.equals(mClientSource)) { return; Loading Loading @@ -1525,7 +1544,7 @@ public class GnssLocationProvider implements LocationProviderInterface, InjectNt int interval = (hasCapability(GPS_CAPABILITY_SCHEDULING) ? mFixInterval : 1000); mLowPowerMode = (boolean) mProviderRequest.lowPowerMode; if (!native_set_position_mode(mPositionMode, GPS_POSITION_RECURRENCE_PERIODIC, if (!setPositionMode(mPositionMode, GPS_POSITION_RECURRENCE_PERIODIC, interval, 0, 0, mLowPowerMode)) { mStarted = false; Log.e(TAG, "set_position_mode failed in startNavigating()"); Loading
services/core/java/com/android/server/location/GnssPositionMode.java 0 → 100644 +46 −0 Original line number Diff line number Diff line package com.android.server.location; import java.util.Arrays; /** * Represents a GNSS position mode. */ public class GnssPositionMode { private final int mode; private final int recurrence; private final int minInterval; private final int preferredAccuracy; private final int preferredTime; private final boolean lowPowerMode; public GnssPositionMode(int mode, int recurrence, int minInterval, int preferredAccuracy, int preferredTime, boolean lowPowerMode) { this.mode = mode; this.recurrence = recurrence; this.minInterval = minInterval; this.preferredAccuracy = preferredAccuracy; this.preferredTime = preferredTime; this.lowPowerMode = lowPowerMode; } @Override public boolean equals(Object other) { if (other instanceof GnssPositionMode) { GnssPositionMode that = (GnssPositionMode) other; return mode == that.mode && recurrence == that.recurrence && minInterval == that.minInterval && preferredAccuracy == that.preferredAccuracy && preferredTime == that.preferredTime && lowPowerMode == that.lowPowerMode && this.getClass() == that.getClass(); } return false; } @Override public int hashCode() { return Arrays.hashCode( new Object[]{mode, recurrence, minInterval, preferredAccuracy, preferredTime, lowPowerMode, getClass()}); } }
services/robotests/src/com/android/server/location/GnssPositionModeTest.java 0 → 100644 +61 −0 Original line number Diff line number Diff line package com.android.server.location; import static com.google.common.truth.Truth.assertThat; import android.platform.test.annotations.Presubmit; import com.android.server.testing.FrameworkRobolectricTestRunner; import com.android.server.testing.SystemLoaderPackages; import org.junit.Test; import org.junit.runner.RunWith; import org.robolectric.annotation.Config; import java.util.HashSet; /** * Unit tests for {@link GnssPositionMode}. */ @RunWith(FrameworkRobolectricTestRunner.class) @Config( manifest = Config.NONE, sdk = 27 ) @SystemLoaderPackages({"com.android.server.location"}) @Presubmit public class GnssPositionModeTest { private GnssPositionMode positionMode1 = createGnssPositionMode(0, 1000); private GnssPositionMode positionMode2 = createGnssPositionMode(0, 1000); private GnssPositionMode positionMode3 = createGnssPositionMode(1, 1000); @Test public void testHashCode() { assertThat(positionMode1.hashCode()).isEqualTo(positionMode2.hashCode()); assertThat(positionMode1.hashCode()).isNotEqualTo(positionMode3.hashCode()); assertThat(positionMode1.hashCode()).isNotEqualTo(positionMode3.hashCode()); HashSet<Integer> hashSet = new HashSet<>(); hashSet.add(positionMode1.hashCode()); hashSet.add(positionMode2.hashCode()); assertThat(hashSet.size()).isEqualTo(1); hashSet.add(positionMode3.hashCode()); assertThat(hashSet.size()).isEqualTo(2); } @Test public void checkIfEqualsImpliesSameHashCode() { assertTEqualsImpliesSameHashCode(positionMode1, positionMode2); assertTEqualsImpliesSameHashCode(positionMode2, positionMode3); } private void assertTEqualsImpliesSameHashCode(GnssPositionMode mode1, GnssPositionMode mode2) { if (mode1.equals(mode2)) { assertThat(mode1.hashCode()).isEqualTo(mode2.hashCode()); } } private GnssPositionMode createGnssPositionMode(int mode, int minInterval) { return new GnssPositionMode(mode, 0, minInterval, 0, 0, true); } }