Merge "Include provider tag in complete attribution tag list" into sc-dev

This commit is contained in:
Soonil Nagarkar
2021-05-03 19:31:31 +00:00
committed by Android (Google) Code Review
2 changed files with 28 additions and 4 deletions

View File

@@ -2271,22 +2271,28 @@ 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,
mOnLocationTagsChangeListener, new LocationTagInfo(
oldState.identity.getUid(), oldState.identity.getPackageName(),
Collections.emptySet())
));
));
}
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)
));
}
}
}

View File

@@ -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;
@@ -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;
@@ -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);