Loading services/core/java/com/android/server/location/provider/LocationProviderManager.java +10 −4 Original line number Diff line number Diff line Loading @@ -2271,7 +2271,8 @@ public class LocationProviderManager extends } if (mOnLocationTagsChangeListener != null) { if (!oldState.extraAttributionTags.equals(newState.extraAttributionTags)) { if (!oldState.extraAttributionTags.equals(newState.extraAttributionTags) || !Objects.equals(oldState.identity, newState.identity)) { if (oldState.identity != null) { FgThread.getHandler().sendMessage(PooledLambda.obtainMessage( OnProviderLocationTagsChangeListener::onLocationTagsChanged, Loading @@ -2281,11 +2282,16 @@ public class LocationProviderManager extends )); } if (newState.identity != null) { ArraySet<String> attributionTags = new ArraySet<>( newState.extraAttributionTags.size() + 1); attributionTags.addAll(newState.extraAttributionTags); attributionTags.add(newState.identity.getAttributionTag()); FgThread.getHandler().sendMessage(PooledLambda.obtainMessage( OnProviderLocationTagsChangeListener::onLocationTagsChanged, mOnLocationTagsChangeListener, new LocationTagInfo( newState.identity.getUid(), newState.identity.getPackageName(), newState.extraAttributionTags) attributionTags) )); } } Loading services/tests/mockingservicestests/src/com/android/server/location/provider/LocationProviderManagerTest.java +18 −0 Original line number Diff line number Diff line Loading @@ -61,6 +61,8 @@ import android.location.ILocationListener; import android.location.LastLocationRequest; import android.location.Location; import android.location.LocationManagerInternal; import android.location.LocationManagerInternal.LocationTagInfo; import android.location.LocationManagerInternal.OnProviderLocationTagsChangeListener; import android.location.LocationManagerInternal.ProviderEnabledListener; import android.location.LocationRequest; import android.location.LocationResult; Loading Loading @@ -90,6 +92,7 @@ import org.junit.After; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.ArgumentCaptor; import org.mockito.InOrder; import org.mockito.Mock; Loading Loading @@ -215,6 +218,21 @@ public class LocationProviderManagerTest { assertThat(mManager.hasProvider()).isFalse(); } @Test public void testAttributionTags() { OnProviderLocationTagsChangeListener listener = mock( OnProviderLocationTagsChangeListener.class); mManager.setOnProviderLocationTagsChangeListener(listener); mProvider.setExtraAttributionTags(Collections.singleton("extra")); ArgumentCaptor<LocationTagInfo> captor = ArgumentCaptor.forClass(LocationTagInfo.class); verify(listener, times(2)).onLocationTagsChanged(captor.capture()); assertThat(captor.getAllValues().get(0).getTags()).isEmpty(); assertThat(captor.getAllValues().get(1).getTags()).containsExactly("extra", "attribution"); } @Test public void testRemoveProvider() { mManager.setRealProvider(null); Loading Loading
services/core/java/com/android/server/location/provider/LocationProviderManager.java +10 −4 Original line number Diff line number Diff line Loading @@ -2271,7 +2271,8 @@ public class LocationProviderManager extends } if (mOnLocationTagsChangeListener != null) { if (!oldState.extraAttributionTags.equals(newState.extraAttributionTags)) { if (!oldState.extraAttributionTags.equals(newState.extraAttributionTags) || !Objects.equals(oldState.identity, newState.identity)) { if (oldState.identity != null) { FgThread.getHandler().sendMessage(PooledLambda.obtainMessage( OnProviderLocationTagsChangeListener::onLocationTagsChanged, Loading @@ -2281,11 +2282,16 @@ public class LocationProviderManager extends )); } if (newState.identity != null) { ArraySet<String> attributionTags = new ArraySet<>( newState.extraAttributionTags.size() + 1); attributionTags.addAll(newState.extraAttributionTags); attributionTags.add(newState.identity.getAttributionTag()); FgThread.getHandler().sendMessage(PooledLambda.obtainMessage( OnProviderLocationTagsChangeListener::onLocationTagsChanged, mOnLocationTagsChangeListener, new LocationTagInfo( newState.identity.getUid(), newState.identity.getPackageName(), newState.extraAttributionTags) attributionTags) )); } } Loading
services/tests/mockingservicestests/src/com/android/server/location/provider/LocationProviderManagerTest.java +18 −0 Original line number Diff line number Diff line Loading @@ -61,6 +61,8 @@ import android.location.ILocationListener; import android.location.LastLocationRequest; import android.location.Location; import android.location.LocationManagerInternal; import android.location.LocationManagerInternal.LocationTagInfo; import android.location.LocationManagerInternal.OnProviderLocationTagsChangeListener; import android.location.LocationManagerInternal.ProviderEnabledListener; import android.location.LocationRequest; import android.location.LocationResult; Loading Loading @@ -90,6 +92,7 @@ import org.junit.After; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.ArgumentCaptor; import org.mockito.InOrder; import org.mockito.Mock; Loading Loading @@ -215,6 +218,21 @@ public class LocationProviderManagerTest { assertThat(mManager.hasProvider()).isFalse(); } @Test public void testAttributionTags() { OnProviderLocationTagsChangeListener listener = mock( OnProviderLocationTagsChangeListener.class); mManager.setOnProviderLocationTagsChangeListener(listener); mProvider.setExtraAttributionTags(Collections.singleton("extra")); ArgumentCaptor<LocationTagInfo> captor = ArgumentCaptor.forClass(LocationTagInfo.class); verify(listener, times(2)).onLocationTagsChanged(captor.capture()); assertThat(captor.getAllValues().get(0).getTags()).isEmpty(); assertThat(captor.getAllValues().get(1).getTags()).containsExactly("extra", "attribution"); } @Test public void testRemoveProvider() { mManager.setRealProvider(null); Loading