@Override public Object call(final Object who, Method method, Object... args) throws Throwable { if (Build.VERSION.SDK_INT > Build.VERSION_CODES.JELLY_BEAN) { LocationRequest request = (LocationRequest) args[0]; fixLocationRequest(request); } if (isFakeLocationEnable()) { Object transport = ArrayUtils.getFirst(args, mirror.android.location.LocationManager.ListenerTransport.TYPE); if (transport != null) { Object locationManager = mirror.android.location.LocationManager.ListenerTransport.this$0.get(transport); MockLocationHelper.setGpsStatus(locationManager); GPSListenerThread.get().addListenerTransport(locationManager); } return 0; } return super.call(who, method, args); }
@Override public Object call(Object who, Method method, Object... args) throws Throwable { if (!(args[0] instanceof String)) { LocationRequest request = (LocationRequest) args[0]; fixLocationRequest(request); } if (isFakeLocationEnable()) { VLocation loc = VirtualLocationManager.get().getLocation(); if (loc != null) { return loc.toSysLocation(); } else { return null; } } return super.call(who, method, args); }
private static void fixLocationRequest(LocationRequest request) { if (request != null) { if (LocationRequestL.mHideFromAppOps != null) { LocationRequestL.mHideFromAppOps.set(request, false); } if (LocationRequestL.mWorkSource != null) { LocationRequestL.mWorkSource.set(request, null); } } }
@Override public ProviderRequest createFromParcel(Parcel in) { ProviderRequest request = new ProviderRequest(); request.reportLocation = in.readInt() == 1; request.interval = in.readLong(); int count = in.readInt(); for (int i = 0; i < count; i++) { request.locationRequests.add(LocationRequest.CREATOR.createFromParcel(in)); } return request; }
@Override public void writeToParcel(Parcel parcel, int flags) { parcel.writeInt(reportLocation ? 1 : 0); parcel.writeLong(interval); parcel.writeInt(locationRequests.size()); for (LocationRequest request : locationRequests) { request.writeToParcel(parcel, flags); } }
/** * Never null. */ public List<LocationRequestUnbundled> getLocationRequests() { List<LocationRequestUnbundled> result = new ArrayList<LocationRequestUnbundled>( mRequest.locationRequests.size()); for (LocationRequest r : mRequest.locationRequests) { result.add(new LocationRequestUnbundled(r)); } return result; }
LocationRequestUnbundled(LocationRequest delegate) { this.delegate = delegate; }