diff --git a/services/core/java/com/android/server/location/LocationManagerService.java b/services/core/java/com/android/server/location/LocationManagerService.java index 2550e3a9aede2..ffef80356a66c 100644 --- a/services/core/java/com/android/server/location/LocationManagerService.java +++ b/services/core/java/com/android/server/location/LocationManagerService.java @@ -112,7 +112,6 @@ import com.android.server.location.injector.DeviceIdleHelper; import com.android.server.location.injector.DeviceStationaryHelper; import com.android.server.location.injector.EmergencyHelper; import com.android.server.location.injector.Injector; -import com.android.server.location.injector.LocationAttributionHelper; import com.android.server.location.injector.LocationPermissionsHelper; import com.android.server.location.injector.LocationPowerSaveModeHelper; import com.android.server.location.injector.LocationUsageLogger; @@ -1705,7 +1704,6 @@ public class LocationManagerService extends ILocationManager.Stub implements private final SystemScreenInteractiveHelper mScreenInteractiveHelper; private final SystemDeviceStationaryHelper mDeviceStationaryHelper; private final SystemDeviceIdleHelper mDeviceIdleHelper; - private final LocationAttributionHelper mLocationAttributionHelper; private final LocationUsageLogger mLocationUsageLogger; // lazily instantiated since they may not always be used @@ -1731,7 +1729,6 @@ public class LocationManagerService extends ILocationManager.Stub implements mScreenInteractiveHelper = new SystemScreenInteractiveHelper(context); mDeviceStationaryHelper = new SystemDeviceStationaryHelper(); mDeviceIdleHelper = new SystemDeviceIdleHelper(context); - mLocationAttributionHelper = new LocationAttributionHelper(mAppOpsHelper); mLocationUsageLogger = new LocationUsageLogger(); } @@ -1807,11 +1804,6 @@ public class LocationManagerService extends ILocationManager.Stub implements return mDeviceIdleHelper; } - @Override - public LocationAttributionHelper getLocationAttributionHelper() { - return mLocationAttributionHelper; - } - @Override public synchronized EmergencyHelper getEmergencyHelper() { if (mEmergencyCallHelper == null) { diff --git a/services/core/java/com/android/server/location/gnss/GnssMeasurementsProvider.java b/services/core/java/com/android/server/location/gnss/GnssMeasurementsProvider.java index 1781588b0ba2f..699f1439538e7 100644 --- a/services/core/java/com/android/server/location/gnss/GnssMeasurementsProvider.java +++ b/services/core/java/com/android/server/location/gnss/GnssMeasurementsProvider.java @@ -16,6 +16,8 @@ package com.android.server.location.gnss; +import static android.app.AppOpsManager.OP_MONITOR_HIGH_POWER_LOCATION; + import static com.android.server.location.gnss.GnssManagerService.D; import static com.android.server.location.gnss.GnssManagerService.TAG; @@ -32,7 +34,6 @@ import android.util.Log; import com.android.server.location.gnss.hal.GnssNative; import com.android.server.location.injector.AppOpsHelper; import com.android.server.location.injector.Injector; -import com.android.server.location.injector.LocationAttributionHelper; import com.android.server.location.injector.LocationUsageLogger; import com.android.server.location.injector.SettingsHelper; @@ -68,25 +69,23 @@ public final class GnssMeasurementsProvider extends @Nullable @Override protected void onActive() { - mLocationAttributionHelper.reportHighPowerLocationStart(getIdentity()); + mAppOpsHelper.startOpNoThrow(OP_MONITOR_HIGH_POWER_LOCATION, getIdentity()); } @Nullable @Override protected void onInactive() { - mLocationAttributionHelper.reportHighPowerLocationStop(getIdentity()); + mAppOpsHelper.finishOp(OP_MONITOR_HIGH_POWER_LOCATION, getIdentity()); } } private final AppOpsHelper mAppOpsHelper; - private final LocationAttributionHelper mLocationAttributionHelper; private final LocationUsageLogger mLogger; private final GnssNative mGnssNative; public GnssMeasurementsProvider(Injector injector, GnssNative gnssNative) { super(injector); mAppOpsHelper = injector.getAppOpsHelper(); - mLocationAttributionHelper = injector.getLocationAttributionHelper(); mLogger = injector.getLocationUsageLogger(); mGnssNative = gnssNative; diff --git a/services/core/java/com/android/server/location/injector/Injector.java b/services/core/java/com/android/server/location/injector/Injector.java index 173fd13c11a18..c0ce3a6853cfd 100644 --- a/services/core/java/com/android/server/location/injector/Injector.java +++ b/services/core/java/com/android/server/location/injector/Injector.java @@ -58,9 +58,6 @@ public interface Injector { /** Returns a DeviceIdleHelper. */ DeviceIdleHelper getDeviceIdleHelper(); - /** Returns a LocationAttributionHelper. */ - LocationAttributionHelper getLocationAttributionHelper(); - /** Returns an EmergencyHelper. */ EmergencyHelper getEmergencyHelper(); diff --git a/services/core/java/com/android/server/location/injector/LocationAttributionHelper.java b/services/core/java/com/android/server/location/injector/LocationAttributionHelper.java deleted file mode 100644 index 483875230ac40..0000000000000 --- a/services/core/java/com/android/server/location/injector/LocationAttributionHelper.java +++ /dev/null @@ -1,122 +0,0 @@ -/* - * Copyright (C) 2020 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.server.location.injector; - -import static android.app.AppOpsManager.OP_MONITOR_HIGH_POWER_LOCATION; -import static android.app.AppOpsManager.OP_MONITOR_LOCATION; - -import static com.android.server.location.LocationManagerService.D; -import static com.android.server.location.LocationManagerService.TAG; - -import android.location.util.identity.CallerIdentity; -import android.util.ArrayMap; -import android.util.Log; - -import com.android.internal.annotations.GuardedBy; - -import java.util.Map; - -/** - * Helps manage appop monitoring for multiple location clients. - */ -public class LocationAttributionHelper { - - private final AppOpsHelper mAppOpsHelper; - - @GuardedBy("this") - private final Map mAttributions; - @GuardedBy("this") - private final Map mHighPowerAttributions; - - public LocationAttributionHelper(AppOpsHelper appOpsHelper) { - mAppOpsHelper = appOpsHelper; - - mAttributions = new ArrayMap<>(); - mHighPowerAttributions = new ArrayMap<>(); - } - - /** - * Report normal location usage for the given caller in the given bucket, with a unique key. - */ - public synchronized void reportLocationStart(CallerIdentity identity) { - identity = CallerIdentity.forAggregation(identity); - - int count = mAttributions.getOrDefault(identity, 0); - if (count == 0) { - if (mAppOpsHelper.startOpNoThrow(OP_MONITOR_LOCATION, identity)) { - mAttributions.put(identity, 1); - } - } else { - mAttributions.put(identity, count + 1); - } - } - - /** - * Report normal location usage has stopped for the given caller in the given bucket, with a - * unique key. - */ - public synchronized void reportLocationStop(CallerIdentity identity) { - identity = CallerIdentity.forAggregation(identity); - - int count = mAttributions.getOrDefault(identity, 0); - if (count == 1) { - mAttributions.remove(identity); - mAppOpsHelper.finishOp(OP_MONITOR_LOCATION, identity); - } else if (count > 1) { - mAttributions.put(identity, count - 1); - } - } - - /** - * Report high power location usage for the given caller in the given bucket, with a unique - * key. - */ - public synchronized void reportHighPowerLocationStart(CallerIdentity identity) { - identity = CallerIdentity.forAggregation(identity); - - int count = mHighPowerAttributions.getOrDefault(identity, 0); - if (count == 0) { - if (D) { - Log.v(TAG, "starting high power location attribution for " + identity); - } - if (mAppOpsHelper.startOpNoThrow(OP_MONITOR_HIGH_POWER_LOCATION, identity)) { - mHighPowerAttributions.put(identity, 1); - } - } else { - mHighPowerAttributions.put(identity, count + 1); - } - } - - /** - * Report high power location usage has stopped for the given caller in the given bucket, - * with a unique key. - */ - public synchronized void reportHighPowerLocationStop(CallerIdentity identity) { - identity = CallerIdentity.forAggregation(identity); - - int count = mHighPowerAttributions.getOrDefault(identity, 0); - if (count == 1) { - if (D) { - Log.v(TAG, "stopping high power location attribution for " + identity); - } - mHighPowerAttributions.remove(identity); - mAppOpsHelper.finishOp(OP_MONITOR_HIGH_POWER_LOCATION, identity); - } else if (count > 1) { - mHighPowerAttributions.put(identity, count - 1); - } - } -} diff --git a/services/core/java/com/android/server/location/provider/LocationProviderManager.java b/services/core/java/com/android/server/location/provider/LocationProviderManager.java index ede8b32c9b11c..c1d8e78e3cd33 100644 --- a/services/core/java/com/android/server/location/provider/LocationProviderManager.java +++ b/services/core/java/com/android/server/location/provider/LocationProviderManager.java @@ -16,6 +16,8 @@ package com.android.server.location.provider; +import static android.app.AppOpsManager.OP_MONITOR_HIGH_POWER_LOCATION; +import static android.app.AppOpsManager.OP_MONITOR_LOCATION; import static android.app.compat.CompatChanges.isChangeEnabled; import static android.location.LocationManager.DELIVER_HISTORICAL_LOCATIONS; import static android.location.LocationManager.GPS_PROVIDER; @@ -32,6 +34,7 @@ import static android.os.PowerManager.LOCATION_MODE_FOREGROUND_ONLY; import static android.os.PowerManager.LOCATION_MODE_GPS_DISABLED_WHEN_SCREEN_OFF; import static android.os.PowerManager.LOCATION_MODE_THROTTLE_REQUESTS_WHEN_SCREEN_OFF; +import static com.android.internal.util.ConcurrentUtils.DIRECT_EXECUTOR; import static com.android.server.location.LocationManagerService.D; import static com.android.server.location.LocationManagerService.TAG; import static com.android.server.location.LocationPermissions.PERMISSION_COARSE; @@ -98,7 +101,6 @@ import com.android.server.location.injector.AppForegroundHelper; import com.android.server.location.injector.AppForegroundHelper.AppForegroundListener; import com.android.server.location.injector.AppOpsHelper; import com.android.server.location.injector.Injector; -import com.android.server.location.injector.LocationAttributionHelper; import com.android.server.location.injector.LocationPermissionsHelper; import com.android.server.location.injector.LocationPermissionsHelper.LocationPermissionsListener; import com.android.server.location.injector.LocationPowerSaveModeHelper; @@ -191,7 +193,7 @@ public class LocationProviderManager extends private final ILocationListener mListener; - protected LocationListenerTransport(ILocationListener listener) { + LocationListenerTransport(ILocationListener listener) { mListener = Objects.requireNonNull(listener); } @@ -300,7 +302,7 @@ public class LocationProviderManager extends private final ILocationCallback mCallback; - protected GetCurrentLocationTransport(ILocationCallback callback) { + GetCurrentLocationTransport(ILocationCallback callback) { mCallback = Objects.requireNonNull(callback); } @@ -411,7 +413,7 @@ public class LocationProviderManager extends EVENT_LOG.logProviderClientActive(mName, getIdentity()); if (!getRequest().isHiddenFromAppOps()) { - mLocationAttributionHelper.reportLocationStart(getIdentity()); + mAppOpsHelper.startOpNoThrow(OP_MONITOR_LOCATION, getIdentity()); } onHighPowerUsageChanged(); @@ -426,7 +428,7 @@ public class LocationProviderManager extends onHighPowerUsageChanged(); if (!getRequest().isHiddenFromAppOps()) { - mLocationAttributionHelper.reportLocationStop(getIdentity()); + mAppOpsHelper.finishOp(OP_MONITOR_LOCATION, getIdentity()); } onProviderListenerInactive(); @@ -500,11 +502,9 @@ public class LocationProviderManager extends if (!getRequest().isHiddenFromAppOps()) { if (mIsUsingHighPower) { - mLocationAttributionHelper.reportHighPowerLocationStart( - getIdentity()); + mAppOpsHelper.startOpNoThrow(OP_MONITOR_HIGH_POWER_LOCATION, getIdentity()); } else { - mLocationAttributionHelper.reportHighPowerLocationStop( - getIdentity()); + mAppOpsHelper.finishOp(OP_MONITOR_HIGH_POWER_LOCATION, getIdentity()); } } } @@ -1015,7 +1015,7 @@ public class LocationProviderManager extends protected final class LocationListenerRegistration extends LocationRegistration implements IBinder.DeathRecipient { - protected LocationListenerRegistration(LocationRequest request, CallerIdentity identity, + LocationListenerRegistration(LocationRequest request, CallerIdentity identity, LocationListenerTransport transport, @PermissionLevel int permissionLevel) { super(request, identity, transport, permissionLevel); } @@ -1080,7 +1080,7 @@ public class LocationProviderManager extends protected final class LocationPendingIntentRegistration extends LocationRegistration implements PendingIntent.CancelListener { - protected LocationPendingIntentRegistration(LocationRequest request, + LocationPendingIntentRegistration(LocationRequest request, CallerIdentity identity, LocationPendingIntentTransport transport, @PermissionLevel int permissionLevel) { super(request, identity, transport, permissionLevel); @@ -1089,13 +1089,15 @@ public class LocationProviderManager extends @GuardedBy("mLock") @Override protected void onLocationListenerRegister() { - ((PendingIntent) getKey()).registerCancelListener(this); + if (!((PendingIntent) getKey()).addCancelListener(DIRECT_EXECUTOR, this)) { + remove(); + } } @GuardedBy("mLock") @Override protected void onLocationListenerUnregister() { - ((PendingIntent) getKey()).unregisterCancelListener(this); + ((PendingIntent) getKey()).removeCancelListener(this); } @Override @@ -1138,7 +1140,7 @@ public class LocationProviderManager extends private long mExpirationRealtimeMs = Long.MAX_VALUE; - protected GetCurrentLocationListenerRegistration(LocationRequest request, + GetCurrentLocationListenerRegistration(LocationRequest request, CallerIdentity identity, LocationTransport transport, int permissionLevel) { super(request, identity, transport, permissionLevel); } @@ -1347,7 +1349,6 @@ public class LocationProviderManager extends protected final AppForegroundHelper mAppForegroundHelper; protected final LocationPowerSaveModeHelper mLocationPowerSaveModeHelper; protected final ScreenInteractiveHelper mScreenInteractiveHelper; - protected final LocationAttributionHelper mLocationAttributionHelper; protected final LocationUsageLogger mLocationUsageLogger; protected final LocationFudger mLocationFudger; @@ -1415,7 +1416,6 @@ public class LocationProviderManager extends mAppForegroundHelper = injector.getAppForegroundHelper(); mLocationPowerSaveModeHelper = injector.getLocationPowerSaveModeHelper(); mScreenInteractiveHelper = injector.getScreenInteractiveHelper(); - mLocationAttributionHelper = injector.getLocationAttributionHelper(); mLocationUsageLogger = injector.getLocationUsageLogger(); mLocationFudger = new LocationFudger(mSettingsHelper.getCoarseLocationAccuracyM()); diff --git a/services/tests/mockingservicestests/src/com/android/server/location/injector/FakeAppOpsHelper.java b/services/tests/mockingservicestests/src/com/android/server/location/injector/FakeAppOpsHelper.java index d728451d92b96..189396f5c727e 100644 --- a/services/tests/mockingservicestests/src/com/android/server/location/injector/FakeAppOpsHelper.java +++ b/services/tests/mockingservicestests/src/com/android/server/location/injector/FakeAppOpsHelper.java @@ -31,7 +31,7 @@ public class FakeAppOpsHelper extends AppOpsHelper { private static class AppOp { AppOp() {} boolean mAllowed = true; - boolean mStarted = false; + int mStarted = 0; int mNoteCount = 0; } @@ -49,7 +49,7 @@ public class FakeAppOpsHelper extends AppOpsHelper { public boolean isAppOpStarted(int appOp, String packageName) { AppOp myAppOp = getOp(packageName, appOp); - return myAppOp.mStarted; + return myAppOp.mStarted > 0; } public int getAppOpNoteCount(int appOp, String packageName) { @@ -63,16 +63,15 @@ public class FakeAppOpsHelper extends AppOpsHelper { if (!myAppOp.mAllowed) { return false; } - Preconditions.checkState(!myAppOp.mStarted); - myAppOp.mStarted = true; + myAppOp.mStarted++; return true; } @Override public void finishOp(int appOp, CallerIdentity callerIdentity) { AppOp myAppOp = getOp(callerIdentity.getPackageName(), appOp); - Preconditions.checkState(myAppOp.mStarted); - myAppOp.mStarted = false; + Preconditions.checkState(myAppOp.mStarted > 0); + myAppOp.mStarted--; } @Override diff --git a/services/tests/mockingservicestests/src/com/android/server/location/injector/LocationAttributionHelperTest.java b/services/tests/mockingservicestests/src/com/android/server/location/injector/LocationAttributionHelperTest.java deleted file mode 100644 index 94dcdf92d9d4d..0000000000000 --- a/services/tests/mockingservicestests/src/com/android/server/location/injector/LocationAttributionHelperTest.java +++ /dev/null @@ -1,143 +0,0 @@ -/* - * Copyright (C) 2020 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.server.location.injector; - -import static android.app.AppOpsManager.OP_MONITOR_HIGH_POWER_LOCATION; -import static android.app.AppOpsManager.OP_MONITOR_LOCATION; - -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.ArgumentMatchers.anyInt; -import static org.mockito.Mockito.never; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; -import static org.mockito.MockitoAnnotations.initMocks; - -import android.location.util.identity.CallerIdentity; -import android.platform.test.annotations.Presubmit; - -import androidx.test.filters.SmallTest; -import androidx.test.runner.AndroidJUnit4; - -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.Mock; - -@Presubmit -@SmallTest -@RunWith(AndroidJUnit4.class) -public class LocationAttributionHelperTest { - - @Mock private AppOpsHelper mAppOpsHelper; - - private LocationAttributionHelper mHelper; - - @Before - public void setUp() { - initMocks(this); - - when(mAppOpsHelper.startOpNoThrow(anyInt(), any(CallerIdentity.class))).thenReturn(true); - - mHelper = new LocationAttributionHelper(mAppOpsHelper); - } - - @Test - public void testLocationMonitoring() { - CallerIdentity caller1 = CallerIdentity.forTest(1, 1, "test1", null); - CallerIdentity caller2 = CallerIdentity.forTest(2, 2, "test2", null); - - mHelper.reportLocationStart(caller1); - verify(mAppOpsHelper).startOpNoThrow(OP_MONITOR_LOCATION, - CallerIdentity.forAggregation(caller1)); - verify(mAppOpsHelper, never()).finishOp(OP_MONITOR_LOCATION, - CallerIdentity.forAggregation(caller1)); - - mHelper.reportLocationStart(caller1); - verify(mAppOpsHelper).startOpNoThrow(OP_MONITOR_LOCATION, - CallerIdentity.forAggregation(caller1)); - verify(mAppOpsHelper, never()).finishOp(OP_MONITOR_LOCATION, - CallerIdentity.forAggregation(caller1)); - - mHelper.reportLocationStart(caller2); - verify(mAppOpsHelper).startOpNoThrow(OP_MONITOR_LOCATION, - CallerIdentity.forAggregation(caller2)); - verify(mAppOpsHelper, never()).finishOp(OP_MONITOR_LOCATION, - CallerIdentity.forAggregation(caller2)); - - mHelper.reportLocationStart(caller2); - verify(mAppOpsHelper).startOpNoThrow(OP_MONITOR_LOCATION, - CallerIdentity.forAggregation(caller2)); - verify(mAppOpsHelper, never()).finishOp(OP_MONITOR_LOCATION, - CallerIdentity.forAggregation(caller2)); - - mHelper.reportLocationStop(caller1); - verify(mAppOpsHelper, never()).finishOp(OP_MONITOR_LOCATION, - CallerIdentity.forAggregation(caller1)); - mHelper.reportLocationStop(caller1); - verify(mAppOpsHelper).finishOp(OP_MONITOR_LOCATION, CallerIdentity.forAggregation(caller1)); - - mHelper.reportLocationStop(caller2); - verify(mAppOpsHelper, never()).finishOp(OP_MONITOR_LOCATION, - CallerIdentity.forAggregation(caller2)); - mHelper.reportLocationStop(caller2); - verify(mAppOpsHelper).finishOp(OP_MONITOR_LOCATION, CallerIdentity.forAggregation(caller2)); - } - - @Test - public void testHighPowerLocationMonitoring() { - CallerIdentity caller1 = CallerIdentity.forTest(1, 1, "test1", null); - CallerIdentity caller2 = CallerIdentity.forTest(2, 2, "test2", null); - - mHelper.reportHighPowerLocationStart(caller1); - verify(mAppOpsHelper).startOpNoThrow(OP_MONITOR_HIGH_POWER_LOCATION, - CallerIdentity.forAggregation(caller1)); - verify(mAppOpsHelper, never()).finishOp(OP_MONITOR_HIGH_POWER_LOCATION, - CallerIdentity.forAggregation(caller1)); - - mHelper.reportHighPowerLocationStart(caller1); - verify(mAppOpsHelper).startOpNoThrow(OP_MONITOR_HIGH_POWER_LOCATION, - CallerIdentity.forAggregation(caller1)); - verify(mAppOpsHelper, never()).finishOp(OP_MONITOR_HIGH_POWER_LOCATION, - CallerIdentity.forAggregation(caller1)); - - mHelper.reportHighPowerLocationStart(caller2); - verify(mAppOpsHelper).startOpNoThrow(OP_MONITOR_HIGH_POWER_LOCATION, - CallerIdentity.forAggregation(caller2)); - verify(mAppOpsHelper, never()).finishOp(OP_MONITOR_HIGH_POWER_LOCATION, - CallerIdentity.forAggregation(caller2)); - - mHelper.reportHighPowerLocationStart(caller2); - verify(mAppOpsHelper).startOpNoThrow(OP_MONITOR_HIGH_POWER_LOCATION, - CallerIdentity.forAggregation(caller2)); - verify(mAppOpsHelper, never()).finishOp(OP_MONITOR_HIGH_POWER_LOCATION, - CallerIdentity.forAggregation(caller2)); - - mHelper.reportHighPowerLocationStop(caller1); - verify(mAppOpsHelper, never()).finishOp(OP_MONITOR_HIGH_POWER_LOCATION, - CallerIdentity.forAggregation(caller1)); - mHelper.reportHighPowerLocationStop(caller1); - verify(mAppOpsHelper).finishOp(OP_MONITOR_HIGH_POWER_LOCATION, - CallerIdentity.forAggregation(caller1)); - - mHelper.reportHighPowerLocationStop(caller2); - verify(mAppOpsHelper, never()).finishOp(OP_MONITOR_HIGH_POWER_LOCATION, - CallerIdentity.forAggregation(caller2)); - mHelper.reportHighPowerLocationStop(caller2); - verify(mAppOpsHelper).finishOp(OP_MONITOR_HIGH_POWER_LOCATION, - CallerIdentity.forAggregation(caller2)); - } -} diff --git a/services/tests/mockingservicestests/src/com/android/server/location/injector/TestInjector.java b/services/tests/mockingservicestests/src/com/android/server/location/injector/TestInjector.java index bd24cfd78a2cf..02cacb7bc57cd 100644 --- a/services/tests/mockingservicestests/src/com/android/server/location/injector/TestInjector.java +++ b/services/tests/mockingservicestests/src/com/android/server/location/injector/TestInjector.java @@ -33,7 +33,6 @@ public class TestInjector implements Injector { private final FakeScreenInteractiveHelper mScreenInteractiveHelper; private final FakeDeviceStationaryHelper mDeviceStationaryHelper; private final FakeDeviceIdleHelper mDeviceIdleHelper; - private final LocationAttributionHelper mLocationAttributionHelper; private final FakeEmergencyHelper mEmergencyHelper; private final LocationUsageLogger mLocationUsageLogger; @@ -49,7 +48,6 @@ public class TestInjector implements Injector { mScreenInteractiveHelper = new FakeScreenInteractiveHelper(); mDeviceStationaryHelper = new FakeDeviceStationaryHelper(); mDeviceIdleHelper = new FakeDeviceIdleHelper(); - mLocationAttributionHelper = new LocationAttributionHelper(mAppOpsHelper); mEmergencyHelper = new FakeEmergencyHelper(); mLocationUsageLogger = new LocationUsageLogger(); } @@ -109,11 +107,6 @@ public class TestInjector implements Injector { return mDeviceIdleHelper; } - @Override - public LocationAttributionHelper getLocationAttributionHelper() { - return mLocationAttributionHelper; - } - @Override public EmergencyHelper getEmergencyHelper() { return mEmergencyHelper;