mirror of https://github.com/YTVanced/VancedMicroG
430 lines
16 KiB
Java
430 lines
16 KiB
Java
/*
|
|
* Copyright (C) 2013-2017 microG Project Team
|
|
*
|
|
* 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 org.microg.gms.location;
|
|
|
|
import android.app.PendingIntent;
|
|
import android.content.Context;
|
|
import android.location.Location;
|
|
import android.os.Binder;
|
|
import android.os.Handler;
|
|
import android.os.IBinder;
|
|
import android.os.Looper;
|
|
import android.os.Parcel;
|
|
import android.os.RemoteException;
|
|
import android.util.Log;
|
|
|
|
import androidx.annotation.NonNull;
|
|
import androidx.lifecycle.Lifecycle;
|
|
import androidx.lifecycle.LifecycleOwner;
|
|
|
|
import com.google.android.gms.common.api.Status;
|
|
import com.google.android.gms.common.api.internal.IStatusCallback;
|
|
import com.google.android.gms.location.ActivityRecognitionResult;
|
|
import com.google.android.gms.location.GeofencingRequest;
|
|
import com.google.android.gms.location.GestureRequest;
|
|
import com.google.android.gms.location.ILocationListener;
|
|
import com.google.android.gms.location.LocationAvailability;
|
|
import com.google.android.gms.location.LocationRequest;
|
|
import com.google.android.gms.location.LocationSettingsRequest;
|
|
import com.google.android.gms.location.LocationSettingsResult;
|
|
import com.google.android.gms.location.LocationSettingsStates;
|
|
import com.google.android.gms.location.internal.DeviceOrientationRequestUpdateData;
|
|
import com.google.android.gms.location.internal.IGeofencerCallbacks;
|
|
import com.google.android.gms.location.internal.IGoogleLocationManagerService;
|
|
import com.google.android.gms.location.internal.ISettingsCallbacks;
|
|
import com.google.android.gms.location.internal.LocationRequestInternal;
|
|
import com.google.android.gms.location.internal.LocationRequestUpdateData;
|
|
import com.google.android.gms.location.internal.ParcelableGeofence;
|
|
import com.google.android.gms.location.places.AutocompleteFilter;
|
|
import com.google.android.gms.location.places.NearbyAlertRequest;
|
|
import com.google.android.gms.location.places.PlaceFilter;
|
|
import com.google.android.gms.location.places.PlaceReport;
|
|
import com.google.android.gms.location.places.PlaceRequest;
|
|
import com.google.android.gms.location.places.UserAddedPlace;
|
|
import com.google.android.gms.location.places.UserDataType;
|
|
import com.google.android.gms.location.places.internal.IPlacesCallbacks;
|
|
import com.google.android.gms.location.places.internal.PlacesParams;
|
|
import com.google.android.gms.maps.model.LatLng;
|
|
import com.google.android.gms.maps.model.LatLngBounds;
|
|
|
|
import org.microg.gms.common.PackageUtils;
|
|
|
|
import java.util.Arrays;
|
|
import java.util.List;
|
|
|
|
public class GoogleLocationManagerServiceImpl extends IGoogleLocationManagerService.Stub implements LifecycleOwner {
|
|
private static final String TAG = "GmsLocManagerSvcImpl";
|
|
|
|
private final Context context;
|
|
private final Lifecycle lifecycle;
|
|
private GoogleLocationManager locationManager;
|
|
|
|
public GoogleLocationManagerServiceImpl(Context context, Lifecycle lifecycle) {
|
|
this.context = context;
|
|
this.lifecycle = lifecycle;
|
|
}
|
|
|
|
@NonNull
|
|
@Override
|
|
public Lifecycle getLifecycle() {
|
|
return lifecycle;
|
|
}
|
|
|
|
public void invokeOnceReady(Runnable runnable) {
|
|
getLocationManager().invokeOnceReady(runnable);
|
|
}
|
|
|
|
public synchronized GoogleLocationManager getLocationManager() {
|
|
if (locationManager == null)
|
|
locationManager = new GoogleLocationManager(context, lifecycle);
|
|
return locationManager;
|
|
}
|
|
|
|
@Override
|
|
public void addGeofencesList(List<ParcelableGeofence> geofences, PendingIntent pendingIntent,
|
|
IGeofencerCallbacks callbacks, String packageName) throws RemoteException {
|
|
Log.d(TAG, "addGeofencesList: " + geofences);
|
|
PackageUtils.checkPackageUid(context, packageName, Binder.getCallingUid());
|
|
}
|
|
|
|
@Override
|
|
public void removeGeofencesByIntent(PendingIntent pendingIntent, IGeofencerCallbacks callbacks,
|
|
String packageName) throws RemoteException {
|
|
Log.d(TAG, "removeGeofencesByIntent: " + pendingIntent);
|
|
PackageUtils.checkPackageUid(context, packageName, Binder.getCallingUid());
|
|
}
|
|
|
|
@Override
|
|
public void removeGeofencesById(String[] geofenceRequestIds, IGeofencerCallbacks callbacks,
|
|
String packageName) throws RemoteException {
|
|
Log.d(TAG, "removeGeofencesById: " + Arrays.toString(geofenceRequestIds));
|
|
PackageUtils.checkPackageUid(context, packageName, Binder.getCallingUid());
|
|
}
|
|
|
|
@Override
|
|
public void removeAllGeofences(IGeofencerCallbacks callbacks, String packageName) throws RemoteException {
|
|
Log.d(TAG, "removeAllGeofences");
|
|
PackageUtils.checkPackageUid(context, packageName, Binder.getCallingUid());
|
|
}
|
|
|
|
@Override
|
|
public void requestActivityUpdates(long detectionIntervalMillis, boolean alwaysTrue,
|
|
PendingIntent callbackIntent) throws RemoteException {
|
|
Log.d(TAG, "requestActivityUpdates: " + callbackIntent);
|
|
}
|
|
|
|
@Override
|
|
public void removeActivityUpdates(PendingIntent callbackIntent) throws RemoteException {
|
|
Log.d(TAG, "removeActivityUpdates: " + callbackIntent);
|
|
}
|
|
|
|
@Override
|
|
public ActivityRecognitionResult getLastActivity(String packageName) throws RemoteException {
|
|
Log.d(TAG, "getLastActivity");
|
|
PackageUtils.checkPackageUid(context, packageName, Binder.getCallingUid());
|
|
return null;
|
|
}
|
|
|
|
@Override
|
|
public Status requestGestureUpdates(GestureRequest request, PendingIntent pendingIntent) throws RemoteException {
|
|
Log.d(TAG, "requestGestureUpdates");
|
|
return null;
|
|
}
|
|
|
|
@Override
|
|
public Status iglms61(PendingIntent pendingIntent) throws RemoteException {
|
|
Log.d(TAG, "iglms61");
|
|
return null;
|
|
}
|
|
|
|
@Override
|
|
public Location getLastLocation() throws RemoteException {
|
|
Log.d(TAG, "getLastLocation");
|
|
return getLocationManager().getLastLocation(PackageUtils.getCallingPackage(context));
|
|
}
|
|
|
|
@Override
|
|
public void requestLocationUpdatesWithListener(LocationRequest request,
|
|
final ILocationListener listener) throws RemoteException {
|
|
Log.d(TAG, "requestLocationUpdatesWithListener: " + request);
|
|
getLocationManager().requestLocationUpdates(request, listener, PackageUtils.getCallingPackage(context));
|
|
}
|
|
|
|
@Override
|
|
public void requestLocationUpdatesWithIntent(LocationRequest request,
|
|
PendingIntent callbackIntent) throws RemoteException {
|
|
Log.d(TAG, "requestLocationUpdatesWithIntent: " + request);
|
|
getLocationManager().requestLocationUpdates(request, callbackIntent, PackageUtils.packageFromPendingIntent(callbackIntent));
|
|
}
|
|
|
|
@Override
|
|
public void removeLocationUpdatesWithListener(ILocationListener listener)
|
|
throws RemoteException {
|
|
Log.d(TAG, "removeLocationUpdatesWithListener: " + listener);
|
|
getLocationManager().removeLocationUpdates(listener, PackageUtils.getCallingPackage(context));
|
|
}
|
|
|
|
@Override
|
|
public void removeLocationUpdatesWithIntent(PendingIntent callbackIntent)
|
|
throws RemoteException {
|
|
Log.d(TAG, "removeLocationUpdatesWithIntent: " + callbackIntent);
|
|
getLocationManager().removeLocationUpdates(callbackIntent, PackageUtils.packageFromPendingIntent(callbackIntent));
|
|
}
|
|
|
|
@Override
|
|
public void updateLocationRequest(LocationRequestUpdateData locationRequestUpdateData) throws RemoteException {
|
|
Log.d(TAG, "updateLocationRequest: " + locationRequestUpdateData);
|
|
getLocationManager().updateLocationRequest(locationRequestUpdateData);
|
|
}
|
|
|
|
@Override
|
|
public void setMockMode(boolean mockMode) throws RemoteException {
|
|
Log.d(TAG, "setMockMode: " + mockMode);
|
|
getLocationManager().setMockMode(mockMode);
|
|
}
|
|
|
|
@Override
|
|
public void setMockLocation(Location mockLocation) throws RemoteException {
|
|
Log.d(TAG, "setMockLocation: " + mockLocation);
|
|
getLocationManager().setMockLocation(mockLocation);
|
|
}
|
|
|
|
@Override
|
|
public void injectLocation(Location mockLocation, int injectionType) throws RemoteException {
|
|
Log.d(TAG, "injectLocation[" + injectionType + "]: " + mockLocation);
|
|
}
|
|
|
|
@Override
|
|
public void iglms14(LatLngBounds var1, int var2, PlaceFilter var3, PlacesParams var4,
|
|
IPlacesCallbacks var5) throws RemoteException {
|
|
Log.d(TAG, "iglms14: " + var1);
|
|
}
|
|
|
|
@Override
|
|
public void iglms15(String var1, PlacesParams var2, IPlacesCallbacks var3)
|
|
throws RemoteException {
|
|
Log.d(TAG, "iglms15: " + var1);
|
|
}
|
|
|
|
@Override
|
|
public void iglms16(LatLng var1, PlaceFilter var2, PlacesParams var3, IPlacesCallbacks var4)
|
|
throws RemoteException {
|
|
Log.d(TAG, "iglms16: " + var1);
|
|
}
|
|
|
|
@Override
|
|
public void iglms17(PlaceFilter var1, PlacesParams var2, IPlacesCallbacks var3)
|
|
throws RemoteException {
|
|
Log.d(TAG, "iglms17: " + var1);
|
|
}
|
|
|
|
@Override
|
|
public void iglms18(PlaceRequest var1, PlacesParams var2, PendingIntent var3)
|
|
throws RemoteException {
|
|
Log.d(TAG, "iglms18: " + var1);
|
|
}
|
|
|
|
@Override
|
|
public void iglms19(PlacesParams var1, PendingIntent var2) throws RemoteException {
|
|
Log.d(TAG, "iglms19: " + var1);
|
|
}
|
|
|
|
@Override
|
|
public void requestLocationUpdatesWithPackage(LocationRequest request, ILocationListener listener,
|
|
String packageName) throws RemoteException {
|
|
Log.d(TAG, "requestLocationUpdatesWithPackage: " + request);
|
|
PackageUtils.checkPackageUid(context, packageName, Binder.getCallingUid());
|
|
getLocationManager().requestLocationUpdates(request, listener, packageName);
|
|
}
|
|
|
|
@Override
|
|
public Location getLastLocationWithPackage(String packageName) throws RemoteException {
|
|
Log.d(TAG, "getLastLocationWithPackage: " + packageName);
|
|
PackageUtils.checkPackageUid(context, packageName, Binder.getCallingUid());
|
|
return getLocationManager().getLastLocation(packageName);
|
|
}
|
|
|
|
@Override
|
|
public Location getLastLocationWith(String s) throws RemoteException {
|
|
Log.d(TAG, "getLastLocationWith: " + s);
|
|
return getLastLocation();
|
|
}
|
|
|
|
@Override
|
|
public void iglms25(PlaceReport var1, PlacesParams var2) throws RemoteException {
|
|
Log.d(TAG, "iglms25: " + var1);
|
|
}
|
|
|
|
@Override
|
|
public LocationAvailability getLocationAvailabilityWithPackage(String packageName) throws RemoteException {
|
|
Log.d(TAG, "getLocationAvailabilityWithPackage: " + packageName);
|
|
PackageUtils.checkPackageUid(context, packageName, Binder.getCallingUid());
|
|
return new LocationAvailability();
|
|
}
|
|
|
|
@Override
|
|
public void removeSleepSegmentUpdates(PendingIntent pendingIntent, IStatusCallback callback) throws RemoteException {
|
|
Log.d(TAG, "removeSleepSegmentUpdates");
|
|
}
|
|
|
|
@Override
|
|
public void iglms42(String var1, PlacesParams var2, IPlacesCallbacks var3)
|
|
throws RemoteException {
|
|
Log.d(TAG, "iglms42: " + var1);
|
|
}
|
|
|
|
@Override
|
|
public void iglms46(UserAddedPlace var1, PlacesParams var2, IPlacesCallbacks var3)
|
|
throws RemoteException {
|
|
Log.d(TAG, "iglms46: " + var1);
|
|
}
|
|
|
|
@Override
|
|
public void iglms47(LatLngBounds var1, int var2, String var3, PlaceFilter var4,
|
|
PlacesParams var5, IPlacesCallbacks var6) throws RemoteException {
|
|
Log.d(TAG, "iglms47: " + var1);
|
|
}
|
|
|
|
@Override
|
|
public void iglms48(NearbyAlertRequest var1, PlacesParams var2, PendingIntent var3)
|
|
throws RemoteException {
|
|
Log.d(TAG, "iglms48: " + var1);
|
|
}
|
|
|
|
@Override
|
|
public void iglms49(PlacesParams var1, PendingIntent var2) throws RemoteException {
|
|
Log.d(TAG, "iglms49: " + var1);
|
|
}
|
|
|
|
@Override
|
|
public void iglms50(UserDataType var1, LatLngBounds var2, List var3, PlacesParams var4,
|
|
IPlacesCallbacks var5) throws RemoteException {
|
|
Log.d(TAG, "iglms50: " + var1);
|
|
}
|
|
|
|
@Override
|
|
public IBinder iglms51() throws RemoteException {
|
|
Log.d(TAG, "iglms51");
|
|
return null;
|
|
}
|
|
|
|
@Override
|
|
public void requestLocationSettingsDialog(LocationSettingsRequest settingsRequest, ISettingsCallbacks callback, String packageName) throws RemoteException {
|
|
Log.d(TAG, "requestLocationSettingsDialog: " + settingsRequest);
|
|
PackageUtils.getAndCheckCallingPackage(context, packageName);
|
|
(new Handler(Looper.getMainLooper())).post(() -> {
|
|
try {
|
|
callback.onLocationSettingsResult(new LocationSettingsResult(new LocationSettingsStates(true, true, true, true, true, true), Status.SUCCESS));
|
|
} catch (RemoteException e) {
|
|
Log.w(TAG, e);
|
|
}
|
|
});
|
|
}
|
|
|
|
@Override
|
|
public void removeActivityTransitionUpdates(PendingIntent pendingIntent, IStatusCallback callback) throws RemoteException {
|
|
Log.d(TAG, "removeActivityTransitionUpdates");
|
|
}
|
|
|
|
@Override
|
|
public void updateDeviceOrientationRequest(DeviceOrientationRequestUpdateData request) throws RemoteException {
|
|
Log.d(TAG, "updateDeviceOrientationRequest: " + request);
|
|
}
|
|
|
|
@Override
|
|
public boolean setActivityRecognitionMode(int mode) throws RemoteException {
|
|
Log.d(TAG, "setActivityRecognitionMode: " + mode);
|
|
return false;
|
|
}
|
|
|
|
@Override
|
|
public void requestLocationUpdatesInternalWithListener(LocationRequestInternal request,
|
|
ILocationListener listener) throws RemoteException {
|
|
Log.d(TAG, "requestLocationUpdatesInternalWithListener: " + request);
|
|
getLocationManager().requestLocationUpdates(request.request, listener, PackageUtils.getCallingPackage(context));
|
|
}
|
|
|
|
@Override
|
|
public void requestLocationUpdatesInternalWithIntent(LocationRequestInternal request,
|
|
PendingIntent callbackIntent) throws RemoteException {
|
|
Log.d(TAG, "requestLocationUpdatesInternalWithIntent: " + request);
|
|
getLocationManager().requestLocationUpdates(request.request, callbackIntent, PackageUtils.packageFromPendingIntent(callbackIntent));
|
|
}
|
|
|
|
@Override
|
|
public IBinder iglms54() throws RemoteException {
|
|
Log.d(TAG, "iglms54");
|
|
return null;
|
|
}
|
|
|
|
@Override
|
|
public void iglms55(String var1, LatLngBounds var2, AutocompleteFilter var3, PlacesParams var4,
|
|
IPlacesCallbacks var5) throws RemoteException {
|
|
Log.d(TAG, "iglms55: " + var1);
|
|
}
|
|
|
|
@Override
|
|
public void addGeofences(GeofencingRequest geofencingRequest, PendingIntent pendingIntent,
|
|
IGeofencerCallbacks callbacks) throws RemoteException {
|
|
Log.d(TAG, "addGeofences: " + geofencingRequest);
|
|
}
|
|
|
|
@Override
|
|
public void iglms58(List var1, PlacesParams var2, IPlacesCallbacks var3)
|
|
throws RemoteException {
|
|
Log.d(TAG, "iglms58: " + var1);
|
|
}
|
|
|
|
@Override
|
|
public void iglms65(PendingIntent pendingIntent, IStatusCallback callback) throws RemoteException {
|
|
Log.d(TAG, "iglms65");
|
|
}
|
|
|
|
@Override
|
|
public void iglms66(PendingIntent pendingIntent, IStatusCallback callback) throws RemoteException {
|
|
Log.d(TAG, "iglms66");
|
|
}
|
|
|
|
@Override
|
|
public void iglms68(PendingIntent pendingIntent, IStatusCallback callback) throws RemoteException {
|
|
Log.d(TAG, "iglms68");
|
|
}
|
|
|
|
@Override
|
|
public void iglms71(IStatusCallback callback) throws RemoteException {
|
|
Log.d(TAG, "iglms71");
|
|
}
|
|
|
|
@Override
|
|
public void iglms76(PendingIntent pendingIntent) throws RemoteException {
|
|
Log.d(TAG, "iglms76");
|
|
}
|
|
|
|
@Override
|
|
public int iglms78() throws RemoteException {
|
|
Log.d(TAG, "iglms78");
|
|
return 0;
|
|
}
|
|
|
|
@Override
|
|
public boolean onTransact(int code, Parcel data, Parcel reply, int flags) throws RemoteException {
|
|
if (super.onTransact(code, data, reply, flags)) return true;
|
|
Log.d(TAG, "onTransact [unknown]: " + code + ", " + data + ", " + flags);
|
|
return false;
|
|
}
|
|
}
|