Various changes
- Extend Wear support - Rework Gms Services - Fix ProGuard - Add Waze to Google Whitelist (as in original Play Services, fixes #116)
This commit is contained in:
parent
62408d036c
commit
2a394f98aa
38 changed files with 799 additions and 635 deletions
2
extern/GmsApi
vendored
2
extern/GmsApi
vendored
|
|
@ -1 +1 @@
|
|||
Subproject commit 75562ce8b6d19fccde3ca46ab853513f48832a05
|
||||
Subproject commit 6aa110657beec0b3e6c26d1030943e0b97683335
|
||||
2
extern/UnifiedNlp
vendored
2
extern/UnifiedNlp
vendored
|
|
@ -1 +1 @@
|
|||
Subproject commit d184e0e7f10aaad979019d3efe5fc10a68299849
|
||||
Subproject commit 97b01d50d4fc54061ff8495e92217f31454acd0a
|
||||
2
extern/Wearable
vendored
2
extern/Wearable
vendored
|
|
@ -1 +1 @@
|
|||
Subproject commit c12fe119c8f71b4e7b458f480270f686dae34343
|
||||
Subproject commit 5c24adaa3928de68167ce31c0fa5b9b1a3256677
|
||||
2
gradle/wrapper/gradle-wrapper.properties
vendored
2
gradle/wrapper/gradle-wrapper.properties
vendored
|
|
@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME
|
|||
distributionPath=wrapper/dists
|
||||
zipStoreBase=GRADLE_USER_HOME
|
||||
zipStorePath=wrapper/dists
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-2.6-all.zip
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-2.12-all.zip
|
||||
|
|
|
|||
|
|
@ -19,7 +19,7 @@ buildscript {
|
|||
jcenter()
|
||||
}
|
||||
dependencies {
|
||||
classpath 'com.android.tools.build:gradle:1.5.0'
|
||||
classpath 'com.android.tools.build:gradle:2.0.0'
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -56,11 +56,11 @@ dependencies {
|
|||
|
||||
String getMyVersionName() {
|
||||
def stdout = new ByteArrayOutputStream()
|
||||
exec {
|
||||
commandLine 'git', 'describe', '--tags', '--always', '--dirty'
|
||||
standardOutput = stdout
|
||||
}
|
||||
return stdout.toString().trim()
|
||||
if (rootProject.file("gradlew").exists())
|
||||
exec { commandLine 'git', 'describe', '--tags', '--always', '--dirty'; standardOutput = stdout }
|
||||
else // automatic build system, don't tag dirty
|
||||
exec { commandLine 'git', 'describe', '--tags', '--always'; standardOutput = stdout }
|
||||
return stdout.toString().trim().substring(1)
|
||||
}
|
||||
|
||||
int getMyVersionCode(String ref) {
|
||||
|
|
|
|||
|
|
@ -79,7 +79,6 @@
|
|||
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE"/>
|
||||
<uses-permission android:name="com.google.android.c2dm.permission.SEND"/>
|
||||
<uses-permission android:name="org.microg.gms.STATUS_BROADCAST"/>
|
||||
<uses-permission android:name="org.microg.gms.EXTENDED_ACCESS"/>
|
||||
|
||||
<application
|
||||
android:allowBackup="false"
|
||||
|
|
|
|||
|
|
@ -29,30 +29,16 @@ import com.google.android.gms.common.internal.IGmsCallbacks;
|
|||
import com.google.android.gms.common.internal.IGmsServiceBroker;
|
||||
import com.google.android.gms.common.internal.ValidateAccountRequest;
|
||||
|
||||
import org.microg.gms.common.Services;
|
||||
import org.microg.gms.common.GmsService;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
import java.util.EnumSet;
|
||||
|
||||
public abstract class AbstractGmsServiceBroker extends IGmsServiceBroker.Stub {
|
||||
public static final int ID_ACCEPT_ALL = -1;
|
||||
|
||||
private static final String TAG = "GmsServiceBroker";
|
||||
private final Set<Integer> supportedServiceIds;
|
||||
private final EnumSet<GmsService> supportedServices;
|
||||
|
||||
public AbstractGmsServiceBroker(Integer supportedServiceId, Integer... supportedServiceIds) {
|
||||
this(combine(supportedServiceId, supportedServiceIds));
|
||||
}
|
||||
|
||||
private static Set<Integer> combine(Integer i, Integer... is) {
|
||||
Set<Integer> integers = new HashSet<Integer>(Arrays.asList(is));
|
||||
integers.add(i);
|
||||
return integers;
|
||||
}
|
||||
|
||||
public AbstractGmsServiceBroker(Set<Integer> supportedServiceIds) {
|
||||
this.supportedServiceIds = supportedServiceIds;
|
||||
public AbstractGmsServiceBroker(EnumSet<GmsService> supportedServices) {
|
||||
this.supportedServices = supportedServices;
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
|
|
@ -62,21 +48,21 @@ public abstract class AbstractGmsServiceBroker extends IGmsServiceBroker.Stub {
|
|||
throws RemoteException {
|
||||
Bundle extras = params == null ? new Bundle() : params;
|
||||
extras.putString("auth_package", authPackage);
|
||||
callGetService(Services.PLUS.SERVICE_ID, callback, versionCode, packageName, extras, accountName, scopes);
|
||||
callGetService(GmsService.PLUS, callback, versionCode, packageName, extras, accountName, scopes);
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
@Override
|
||||
public void getPanoramaService(IGmsCallbacks callback, int versionCode, String packageName,
|
||||
Bundle params) throws RemoteException {
|
||||
callGetService(Services.PANORAMA.SERVICE_ID, callback, versionCode, packageName, params);
|
||||
callGetService(GmsService.PANORAMA, callback, versionCode, packageName, params);
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
@Override
|
||||
public void getAppDataSearchService(IGmsCallbacks callback, int versionCode, String packageName)
|
||||
throws RemoteException {
|
||||
callGetService(Services.INDEX.SERVICE_ID, callback, versionCode, packageName);
|
||||
callGetService(GmsService.INDEX, callback, versionCode, packageName);
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
|
|
@ -89,28 +75,28 @@ public abstract class AbstractGmsServiceBroker extends IGmsServiceBroker.Stub {
|
|||
@Override
|
||||
public void getPeopleService(IGmsCallbacks callback, int versionCode, String packageName,
|
||||
Bundle params) throws RemoteException {
|
||||
callGetService(Services.PEOPLE.SERVICE_ID, callback, versionCode, packageName, params);
|
||||
callGetService(GmsService.PEOPLE, callback, versionCode, packageName, params);
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
@Override
|
||||
public void getReportingService(IGmsCallbacks callback, int versionCode, String packageName,
|
||||
Bundle params) throws RemoteException {
|
||||
callGetService(Services.LOCATION_REPORTING.SERVICE_ID, callback, versionCode, packageName, params);
|
||||
callGetService(GmsService.LOCATION_REPORTING, callback, versionCode, packageName, params);
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
@Override
|
||||
public void getLocationService(IGmsCallbacks callback, int versionCode, String packageName,
|
||||
Bundle params) throws RemoteException {
|
||||
callGetService(Services.LOCATION.SERVICE_ID, callback, versionCode, packageName, params);
|
||||
callGetService(GmsService.LOCATION, callback, versionCode, packageName, params);
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
@Override
|
||||
public void getGoogleLocationManagerService(IGmsCallbacks callback, int versionCode,
|
||||
String packageName, Bundle params) throws RemoteException {
|
||||
callGetService(Services.LOCATION_MANAGER.SERVICE_ID, callback, versionCode, packageName, params);
|
||||
callGetService(GmsService.LOCATION_MANAGER, callback, versionCode, packageName, params);
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
|
|
@ -123,70 +109,70 @@ public abstract class AbstractGmsServiceBroker extends IGmsServiceBroker.Stub {
|
|||
extras.putString("com.google.android.gms.games.key.gamePackageName", gamePackageName);
|
||||
extras.putString("com.google.android.gms.games.key.desiredLocale", desiredLocale);
|
||||
//extras.putParcelable("com.google.android.gms.games.key.popupWindowToken", popupWindowToken);
|
||||
callGetService(Services.GAMES.SERVICE_ID, callback, versionCode, packageName, extras, accountName, scopes);
|
||||
callGetService(GmsService.GAMES, callback, versionCode, packageName, extras, accountName, scopes);
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
@Override
|
||||
public void getAppStateService(IGmsCallbacks callback, int versionCode, String packageName,
|
||||
String accountName, String[] scopes) throws RemoteException {
|
||||
callGetService(Services.APPSTATE.SERVICE_ID, callback, versionCode, packageName, null, accountName, scopes);
|
||||
callGetService(GmsService.APPSTATE, callback, versionCode, packageName, null, accountName, scopes);
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
@Override
|
||||
public void getPlayLogService(IGmsCallbacks callback, int versionCode, String packageName,
|
||||
Bundle params) throws RemoteException {
|
||||
callGetService(Services.PLAY_LOG.SERVICE_ID, callback, versionCode, packageName, params);
|
||||
callGetService(GmsService.PLAY_LOG, callback, versionCode, packageName, params);
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
@Override
|
||||
public void getAdMobService(IGmsCallbacks callback, int versionCode, String packageName,
|
||||
Bundle params) throws RemoteException {
|
||||
callGetService(Services.ADREQUEST.SERVICE_ID, callback, versionCode, packageName, params);
|
||||
callGetService(GmsService.ADREQUEST, callback, versionCode, packageName, params);
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
@Override
|
||||
public void getDroidGuardService(IGmsCallbacks callback, int versionCode, String packageName,
|
||||
Bundle params) throws RemoteException {
|
||||
callGetService(Services.DROIDGUARD.SERVICE_ID, callback, versionCode, packageName, params);
|
||||
callGetService(GmsService.DROIDGUARD, callback, versionCode, packageName, params);
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
@Override
|
||||
public void getLockboxService(IGmsCallbacks callback, int versionCode, String packageName,
|
||||
Bundle params) throws RemoteException {
|
||||
callGetService(Services.LOCKBOX.SERVICE_ID, callback, versionCode, packageName, params);
|
||||
callGetService(GmsService.LOCKBOX, callback, versionCode, packageName, params);
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
@Override
|
||||
public void getCastMirroringService(IGmsCallbacks callback, int versionCode, String packageName,
|
||||
Bundle params) throws RemoteException {
|
||||
callGetService(Services.CAST_MIRRORING.SERVICE_ID, callback, versionCode, packageName, params);
|
||||
callGetService(GmsService.CAST_MIRRORING, callback, versionCode, packageName, params);
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
@Override
|
||||
public void getNetworkQualityService(IGmsCallbacks callback, int versionCode,
|
||||
String packageName, Bundle params) throws RemoteException {
|
||||
callGetService(Services.NETWORK_QUALITY.SERVICE_ID, callback, versionCode, packageName, params);
|
||||
callGetService(GmsService.NETWORK_QUALITY, callback, versionCode, packageName, params);
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
@Override
|
||||
public void getGoogleIdentityService(IGmsCallbacks callback, int versionCode,
|
||||
String packageName, Bundle params) throws RemoteException {
|
||||
callGetService(Services.ACCOUNT.SERVICE_ID, callback, versionCode, packageName, params);
|
||||
callGetService(GmsService.ACCOUNT, callback, versionCode, packageName, params);
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
@Override
|
||||
public void getGoogleFeedbackService(IGmsCallbacks callback, int versionCode,
|
||||
String packageName, Bundle params) throws RemoteException {
|
||||
callGetService(Services.FEEDBACK.SERVICE_ID, callback, versionCode, packageName, params);
|
||||
callGetService(GmsService.FEEDBACK, callback, versionCode, packageName, params);
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
|
|
@ -200,55 +186,55 @@ public abstract class AbstractGmsServiceBroker extends IGmsServiceBroker.Stub {
|
|||
@Override
|
||||
public void getDriveService(IGmsCallbacks callback, int versionCode, String packageName,
|
||||
String[] scopes, String accountName, Bundle params) throws RemoteException {
|
||||
callGetService(Services.DRIVE.SERVICE_ID, callback, versionCode, packageName, params, accountName, scopes);
|
||||
callGetService(GmsService.DRIVE, callback, versionCode, packageName, params, accountName, scopes);
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
@Override
|
||||
public void getLightweightAppDataSearchService(IGmsCallbacks callback, int versionCode,
|
||||
String packageName) throws RemoteException {
|
||||
callGetService(Services.LIGHTWEIGHT_INDEX.SERVICE_ID, callback, versionCode, packageName);
|
||||
callGetService(GmsService.LIGHTWEIGHT_INDEX, callback, versionCode, packageName);
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
@Override
|
||||
public void getSearchAdministrationService(IGmsCallbacks callback, int versionCode,
|
||||
String packageName) throws RemoteException {
|
||||
callGetService(Services.SEARCH_ADMINISTRATION.SERVICE_ID, callback, versionCode, packageName);
|
||||
callGetService(GmsService.SEARCH_ADMINISTRATION, callback, versionCode, packageName);
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
@Override
|
||||
public void getAutoBackupService(IGmsCallbacks callback, int versionCode, String packageName,
|
||||
Bundle params) throws RemoteException {
|
||||
callGetService(Services.PHOTO_AUTO_BACKUP.SERVICE_ID, callback, versionCode, packageName, params);
|
||||
callGetService(GmsService.PHOTO_AUTO_BACKUP, callback, versionCode, packageName, params);
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
@Override
|
||||
public void getAddressService(IGmsCallbacks callback, int versionCode, String packageName)
|
||||
throws RemoteException {
|
||||
callGetService(Services.ADDRESS.SERVICE_ID, callback, versionCode, packageName);
|
||||
callGetService(GmsService.ADDRESS, callback, versionCode, packageName);
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
@Override
|
||||
public void getWalletServiceWithPackageName(IGmsCallbacks callback, int versionCode, String packageName) throws RemoteException {
|
||||
callGetService(Services.WALLET.SERVICE_ID, callback, versionCode, packageName);
|
||||
callGetService(GmsService.WALLET, callback, versionCode, packageName);
|
||||
}
|
||||
|
||||
private void callGetService(int serviceId, IGmsCallbacks callback, int gmsVersion,
|
||||
private void callGetService(GmsService service, IGmsCallbacks callback, int gmsVersion,
|
||||
String packageName) throws RemoteException {
|
||||
callGetService(serviceId, callback, gmsVersion, packageName, null);
|
||||
callGetService(service, callback, gmsVersion, packageName, null);
|
||||
}
|
||||
|
||||
private void callGetService(int serviceId, IGmsCallbacks callback, int gmsVersion,
|
||||
private void callGetService(GmsService service, IGmsCallbacks callback, int gmsVersion,
|
||||
String packageName, Bundle extras) throws RemoteException {
|
||||
callGetService(serviceId, callback, gmsVersion, packageName, extras, null, null);
|
||||
callGetService(service, callback, gmsVersion, packageName, extras, null, null);
|
||||
}
|
||||
|
||||
private void callGetService(int serviceId, IGmsCallbacks callback, int gmsVersion, String packageName, Bundle extras, String accountName, String[] scopes) throws RemoteException {
|
||||
GetServiceRequest request = new GetServiceRequest(serviceId);
|
||||
private void callGetService(GmsService service, IGmsCallbacks callback, int gmsVersion, String packageName, Bundle extras, String accountName, String[] scopes) throws RemoteException {
|
||||
GetServiceRequest request = new GetServiceRequest(service.SERVICE_ID);
|
||||
request.gmsVersion = gmsVersion;
|
||||
request.packageName = packageName;
|
||||
request.extras = extras;
|
||||
|
|
@ -267,15 +253,16 @@ public abstract class AbstractGmsServiceBroker extends IGmsServiceBroker.Stub {
|
|||
|
||||
@Override
|
||||
public void getService(IGmsCallbacks callback, GetServiceRequest request) throws RemoteException {
|
||||
if (supportedServiceIds.contains(request.serviceId) || supportedServiceIds.contains(ID_ACCEPT_ALL)) {
|
||||
handleServiceRequest(callback, request);
|
||||
GmsService gmsService = GmsService.byServiceId(request.serviceId);
|
||||
if ((supportedServices.contains(gmsService)) || supportedServices.contains(GmsService.ANY)) {
|
||||
handleServiceRequest(callback, request, gmsService);
|
||||
} else {
|
||||
Log.d(TAG, "Service not supported: " + request);
|
||||
throw new IllegalArgumentException("Service not supported: " + request.serviceId);
|
||||
}
|
||||
}
|
||||
|
||||
public abstract void handleServiceRequest(IGmsCallbacks callback, GetServiceRequest request) throws RemoteException;
|
||||
public abstract void handleServiceRequest(IGmsCallbacks callback, GetServiceRequest request, GmsService service) throws RemoteException;
|
||||
|
||||
@Override
|
||||
public void validateAccount(IGmsCallbacks callback, ValidateAccountRequest request) throws RemoteException {
|
||||
|
|
|
|||
|
|
@ -26,22 +26,29 @@ import com.google.android.gms.common.internal.GetServiceRequest;
|
|||
import com.google.android.gms.common.internal.IGmsCallbacks;
|
||||
import com.google.android.gms.common.internal.IGmsServiceBroker;
|
||||
|
||||
import org.microg.gms.common.GmsService;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.EnumSet;
|
||||
|
||||
public abstract class BaseService extends Service {
|
||||
private final IGmsServiceBroker broker;
|
||||
protected final String TAG;
|
||||
|
||||
public BaseService(String tag, Integer supportedServiceId, Integer... supportedServiceIds) {
|
||||
public BaseService(String tag, GmsService supportedService, GmsService... supportedServices) {
|
||||
this.TAG = tag;
|
||||
broker = new AbstractGmsServiceBroker(supportedServiceId, supportedServiceIds) {
|
||||
EnumSet<GmsService> services = EnumSet.of(supportedService);
|
||||
services.addAll(Arrays.asList(supportedServices));
|
||||
broker = new AbstractGmsServiceBroker(services) {
|
||||
@Override
|
||||
public void handleServiceRequest(IGmsCallbacks callback, GetServiceRequest request) throws RemoteException {
|
||||
public void handleServiceRequest(IGmsCallbacks callback, GetServiceRequest request, GmsService service) throws RemoteException {
|
||||
try {
|
||||
request.extras.keySet(); // call to unparcel()
|
||||
} catch (Exception e) {
|
||||
// Sometimes we need to define the correct ClassLoader before unparcel(). Ignore those.
|
||||
}
|
||||
Log.d(TAG, "bound by: " + request);
|
||||
BaseService.this.handleServiceRequest(callback, request);
|
||||
BaseService.this.handleServiceRequest(callback, request, service);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
|
@ -52,5 +59,5 @@ public abstract class BaseService extends Service {
|
|||
return broker.asBinder();
|
||||
}
|
||||
|
||||
public abstract void handleServiceRequest(IGmsCallbacks callback, GetServiceRequest request) throws RemoteException;
|
||||
public abstract void handleServiceRequest(IGmsCallbacks callback, GetServiceRequest request, GmsService service) throws RemoteException;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -22,13 +22,15 @@ import com.google.android.gms.common.api.CommonStatusCodes;
|
|||
import com.google.android.gms.common.internal.GetServiceRequest;
|
||||
import com.google.android.gms.common.internal.IGmsCallbacks;
|
||||
|
||||
import org.microg.gms.common.GmsService;
|
||||
|
||||
public class DummyService extends BaseService {
|
||||
public DummyService() {
|
||||
super("GmsDummySvc", AbstractGmsServiceBroker.ID_ACCEPT_ALL);
|
||||
super("GmsDummySvc", GmsService.ANY);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handleServiceRequest(IGmsCallbacks callback, GetServiceRequest request) throws RemoteException {
|
||||
public void handleServiceRequest(IGmsCallbacks callback, GetServiceRequest request, GmsService service) throws RemoteException {
|
||||
callback.onPostInitComplete(CommonStatusCodes.ERROR, null, null);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -20,16 +20,16 @@ import com.google.android.gms.common.internal.GetServiceRequest;
|
|||
import com.google.android.gms.common.internal.IGmsCallbacks;
|
||||
|
||||
import org.microg.gms.BaseService;
|
||||
import org.microg.gms.common.Services;
|
||||
import org.microg.gms.common.GmsService;
|
||||
|
||||
public class GService extends BaseService {
|
||||
|
||||
public GService() {
|
||||
super("GmsAdsGSvc", Services.GSERVICES.SERVICE_ID, Services.ADREQUEST.SERVICE_ID);
|
||||
super("GmsAdsGSvc", GmsService.GSERVICES, GmsService.ADREQUEST);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handleServiceRequest(IGmsCallbacks callback, GetServiceRequest request) {
|
||||
public void handleServiceRequest(IGmsCallbacks callback, GetServiceRequest request, GmsService service) {
|
||||
// TODO
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -54,7 +54,7 @@ public class AccountContentProvider extends ContentProvider {
|
|||
if (!PackageUtils.callerHasExtendedAccess(getContext())) {
|
||||
String[] packagesForUid = getContext().getPackageManager().getPackagesForUid(Binder.getCallingUid());
|
||||
if (packagesForUid != null && packagesForUid.length != 0)
|
||||
Log.w(TAG, "Not granting access to " + Arrays.toString(packagesForUid)
|
||||
Log.w(TAG, "Not granting extended access to " + Arrays.toString(packagesForUid)
|
||||
+ ", signature: " + PackageUtils.firstSignatureDigest(getContext(), packagesForUid[0]));
|
||||
if (getContext().checkCallingPermission(Manifest.permission.GET_ACCOUNTS) != PackageManager.PERMISSION_GRANTED)
|
||||
throw new SecurityException("Access denied, missing GET_ACCOUNTS or EXTENDED_ACCESS permission");
|
||||
|
|
|
|||
|
|
@ -23,15 +23,15 @@ import com.google.android.gms.common.internal.GetServiceRequest;
|
|||
import com.google.android.gms.common.internal.IGmsCallbacks;
|
||||
|
||||
import org.microg.gms.BaseService;
|
||||
import org.microg.gms.common.Services;
|
||||
import org.microg.gms.common.GmsService;
|
||||
|
||||
public class SignInService extends BaseService {
|
||||
public SignInService() {
|
||||
super("GmsSignInSvc", Services.SIGN_IN.SERVICE_ID);
|
||||
super("GmsSignInSvc", GmsService.SIGN_IN);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handleServiceRequest(IGmsCallbacks callback, GetServiceRequest request) throws RemoteException {
|
||||
public void handleServiceRequest(IGmsCallbacks callback, GetServiceRequest request, GmsService service) throws RemoteException {
|
||||
Log.d(TAG, "unimplemented Method: handleServiceRequest");
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -20,15 +20,15 @@ import com.google.android.gms.common.internal.GetServiceRequest;
|
|||
import com.google.android.gms.common.internal.IGmsCallbacks;
|
||||
|
||||
import org.microg.gms.BaseService;
|
||||
import org.microg.gms.common.Services;
|
||||
import org.microg.gms.common.GmsService;
|
||||
|
||||
public class CarService extends BaseService {
|
||||
public CarService() {
|
||||
super("GmsCarSvc", Services.CAR.SERVICE_ID);
|
||||
super("GmsCarSvc", GmsService.CAR);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handleServiceRequest(IGmsCallbacks callback, GetServiceRequest request) {
|
||||
public void handleServiceRequest(IGmsCallbacks callback, GetServiceRequest request, GmsService service) {
|
||||
// TODO
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -22,17 +22,17 @@ import com.google.android.gms.common.internal.GetServiceRequest;
|
|||
import com.google.android.gms.common.internal.IGmsCallbacks;
|
||||
|
||||
import org.microg.gms.BaseService;
|
||||
import org.microg.gms.common.Services;
|
||||
import org.microg.gms.common.GmsService;
|
||||
|
||||
public class ClearcutLoggerService extends BaseService {
|
||||
private ClearcutLoggerServiceImpl clearcutService = new ClearcutLoggerServiceImpl();
|
||||
|
||||
public ClearcutLoggerService() {
|
||||
super("GmsClearcutSvc", Services.CLEARCUT_LOGGER.SERVICE_ID);
|
||||
super("GmsClearcutSvc", GmsService.CLEARCUT_LOGGER);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handleServiceRequest(IGmsCallbacks callback, GetServiceRequest request) throws RemoteException {
|
||||
public void handleServiceRequest(IGmsCallbacks callback, GetServiceRequest request, GmsService service) throws RemoteException {
|
||||
callback.onPostInitComplete(0, clearcutService.asBinder(), null);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,57 @@
|
|||
/*
|
||||
* Copyright 2013-2016 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.common;
|
||||
|
||||
import android.os.IInterface;
|
||||
import android.util.Log;
|
||||
|
||||
import java.lang.reflect.InvocationHandler;
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.lang.reflect.Method;
|
||||
import java.lang.reflect.Proxy;
|
||||
import java.util.Collection;
|
||||
import java.util.HashSet;
|
||||
|
||||
public class MultiListenerProxy<T extends IInterface> implements InvocationHandler {
|
||||
private static final String TAG = "GmsMultiListener";
|
||||
|
||||
public static <T extends IInterface> T get(Class<T> tClass, final Collection<T> listeners) {
|
||||
return (T) Proxy.newProxyInstance(tClass.getClassLoader(), new Class[]{tClass}, new MultiListenerProxy<T>(listeners));
|
||||
}
|
||||
|
||||
private final Collection<T> listeners;
|
||||
|
||||
private MultiListenerProxy(Collection<T> listeners) {
|
||||
this.listeners = listeners;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object invoke(Object proxy, Method method, Object[] args) {
|
||||
for (T listener : new HashSet<T>(listeners)) {
|
||||
try {
|
||||
method.invoke(listener, args);
|
||||
} catch (IllegalAccessException e) {
|
||||
Log.w(TAG, e);
|
||||
listeners.remove(listener);
|
||||
} catch (InvocationTargetException e) {
|
||||
Log.w(TAG, e.getTargetException());
|
||||
listeners.remove(listener);
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
|
@ -28,6 +28,7 @@ import java.security.MessageDigest;
|
|||
import java.security.NoSuchAlgorithmException;
|
||||
import java.util.Arrays;
|
||||
|
||||
import static org.microg.gms.common.Constants.GMS_PACKAGE_NAME;
|
||||
import static org.microg.gms.common.Constants.GMS_PACKAGE_SIGNATURE_SHA1;
|
||||
|
||||
public class PackageUtils {
|
||||
|
|
@ -37,7 +38,8 @@ public class PackageUtils {
|
|||
"58e1c4133f7441ec3d2c270270a14802da47ba0e" /* Android Wear */,
|
||||
"46f6c8987311e131f4f558d8e0ae145bebab6da3" /* Google Classroom */,
|
||||
"24bb24c05e47e0aefa68a58a766179d9b613a600" /* Google Fit/Glass */,
|
||||
"aa87ce1260c008d801197bb4ecea4ab8929da246" /* Google Inbox */};
|
||||
"aa87ce1260c008d801197bb4ecea4ab8929da246" /* Google Inbox */,
|
||||
"35b438fe1bc69d975dc8702dc16ab69ebf65f26f" /* Waze */};
|
||||
|
||||
public static boolean isGoogleSignedPackages(Context context, String packageName) {
|
||||
return Arrays.asList(KNOWN_GOOGLE_SIGNATURES).contains(firstSignatureDigest(context, packageName));
|
||||
|
|
@ -50,8 +52,13 @@ public class PackageUtils {
|
|||
|
||||
public static boolean callerHasExtendedAccess(Context context) {
|
||||
String[] packagesForUid = context.getPackageManager().getPackagesForUid(Binder.getCallingUid());
|
||||
return (packagesForUid != null && packagesForUid.length != 0 && isGoogleSignedPackages(context, packagesForUid[0])) ||
|
||||
context.checkCallingPermission(Manifest.permission.EXTENDED_ACCESS) == PackageManager.PERMISSION_GRANTED;
|
||||
if (packagesForUid != null && packagesForUid.length != 0) {
|
||||
for (String packageName : packagesForUid) {
|
||||
if (isGoogleSignedPackages(context, packageName) || GMS_PACKAGE_NAME.equals(packageName))
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return context.checkCallingPermission(Manifest.permission.EXTENDED_ACCESS) == PackageManager.PERMISSION_GRANTED;
|
||||
}
|
||||
|
||||
public static void checkPackageUid(Context context, String packageName, int callingUid) {
|
||||
|
|
|
|||
|
|
@ -22,17 +22,17 @@ import com.google.android.gms.common.internal.GetServiceRequest;
|
|||
import com.google.android.gms.common.internal.IGmsCallbacks;
|
||||
|
||||
import org.microg.gms.BaseService;
|
||||
import org.microg.gms.common.Services;
|
||||
import org.microg.gms.common.GmsService;
|
||||
|
||||
public class DriveApiService extends BaseService {
|
||||
private DriveServiceImpl impl = new DriveServiceImpl();
|
||||
|
||||
public DriveApiService() {
|
||||
super("GmsDriveApiSvc", Services.DRIVE.SERVICE_ID);
|
||||
super("GmsDriveApiSvc", GmsService.DRIVE);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handleServiceRequest(IGmsCallbacks callback, GetServiceRequest request) throws RemoteException {
|
||||
public void handleServiceRequest(IGmsCallbacks callback, GetServiceRequest request, GmsService service) throws RemoteException {
|
||||
callback.onPostInitComplete(0, impl.asBinder(), null);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -20,16 +20,16 @@ import com.google.android.gms.common.internal.GetServiceRequest;
|
|||
import com.google.android.gms.common.internal.IGmsCallbacks;
|
||||
|
||||
import org.microg.gms.BaseService;
|
||||
import org.microg.gms.common.Services;
|
||||
import org.microg.gms.common.GmsService;
|
||||
|
||||
public class DroidGuardService extends BaseService {
|
||||
|
||||
public DroidGuardService() {
|
||||
super("GmsDroidGuardSvc", Services.DROIDGUARD.SERVICE_ID);
|
||||
super("GmsDroidGuardSvc", GmsService.DROIDGUARD);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handleServiceRequest(IGmsCallbacks callback, GetServiceRequest request) {
|
||||
public void handleServiceRequest(IGmsCallbacks callback, GetServiceRequest request, GmsService service) {
|
||||
// TODO
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -20,15 +20,15 @@ import com.google.android.gms.common.internal.GetServiceRequest;
|
|||
import com.google.android.gms.common.internal.IGmsCallbacks;
|
||||
|
||||
import org.microg.gms.BaseService;
|
||||
import org.microg.gms.common.Services;
|
||||
import org.microg.gms.common.GmsService;
|
||||
|
||||
public class FeedbackService extends BaseService {
|
||||
public FeedbackService() {
|
||||
super("GmsFeedbackSvc", Services.FEEDBACK.SERVICE_ID);
|
||||
super("GmsFeedbackSvc", GmsService.FEEDBACK);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handleServiceRequest(IGmsCallbacks callback, GetServiceRequest request) {
|
||||
public void handleServiceRequest(IGmsCallbacks callback, GetServiceRequest request, GmsService service) {
|
||||
// TODO
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -26,7 +26,7 @@ import com.google.android.gms.common.internal.GetServiceRequest;
|
|||
import com.google.android.gms.common.internal.IGmsCallbacks;
|
||||
|
||||
import org.microg.gms.BaseService;
|
||||
import org.microg.gms.common.Services.GAMES;
|
||||
import org.microg.gms.common.GmsService;
|
||||
|
||||
import static android.app.PendingIntent.FLAG_UPDATE_CURRENT;
|
||||
import static org.microg.gms.common.Constants.GMS_PACKAGE_NAME;
|
||||
|
|
@ -38,11 +38,11 @@ public class GamesStubService extends BaseService {
|
|||
public static final String PARAM_GAME_PACKAGE_NAME = "com.google.android.gms.games.key.gamePackageName";
|
||||
|
||||
public GamesStubService() {
|
||||
super("GmsGamesSvc", GAMES.SERVICE_ID);
|
||||
super("GmsGamesSvc", GmsService.GAMES);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handleServiceRequest(IGmsCallbacks callback, GetServiceRequest request) throws RemoteException {
|
||||
public void handleServiceRequest(IGmsCallbacks callback, GetServiceRequest request, GmsService service) throws RemoteException {
|
||||
String packageName = null;
|
||||
if (request.extras != null) {
|
||||
packageName = request.extras.getString(PARAM_GAME_PACKAGE_NAME);
|
||||
|
|
|
|||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue