package androidx.core.location; import android.location.Location; import androidx.annotation.DoNotInline; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.annotation.RequiresApi; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.util.concurrent.TimeUnit; public final class LocationCompat { private static final String EXTRA_IS_MOCK = "mockLocation"; @Nullable private static Method sSetIsFromMockProviderMethod; @RequiresApi(17) public static class Api17Impl { private Api17Impl() { } @DoNotInline public static long getElapsedRealtimeNanos(Location location) { return location.getElapsedRealtimeNanos(); } } @RequiresApi(18) public static class Api18Impl { private Api18Impl() { } @DoNotInline public static boolean isMock(Location location) { return location.isFromMockProvider(); } } private LocationCompat() { } public static long getElapsedRealtimeMillis(@NonNull Location location) { return TimeUnit.NANOSECONDS.toMillis(Api17Impl.getElapsedRealtimeNanos(location)); } public static long getElapsedRealtimeNanos(@NonNull Location location) { return Api17Impl.getElapsedRealtimeNanos(location); } private static Method getSetIsFromMockProviderMethod() throws NoSuchMethodException { if (sSetIsFromMockProviderMethod == null) { Method declaredMethod = Location.class.getDeclaredMethod("setIsFromMockProvider", Boolean.TYPE); sSetIsFromMockProviderMethod = declaredMethod; declaredMethod.setAccessible(true); } return sSetIsFromMockProviderMethod; } public static boolean isMock(@NonNull Location location) { return Api18Impl.isMock(location); } public static void setMock(@NonNull Location location, boolean z2) { try { getSetIsFromMockProviderMethod().invoke(location, Boolean.valueOf(z2)); } catch (NoSuchMethodException e) { NoSuchMethodError noSuchMethodError = new NoSuchMethodError(); noSuchMethodError.initCause(e); throw noSuchMethodError; } catch (IllegalAccessException e2) { IllegalAccessError illegalAccessError = new IllegalAccessError(); illegalAccessError.initCause(e2); throw illegalAccessError; } catch (InvocationTargetException e3) { throw new RuntimeException(e3); } } }