mirror of
https://github.com/TeamVanced/VancedMicroG
synced 2025-01-12 20:27:31 +01:00
Add DroidGuard service API and client
This commit is contained in:
parent
2fbe0a0928
commit
3d2c7e9523
35
play-services-droidguard-api/build.gradle
Normal file
35
play-services-droidguard-api/build.gradle
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
/*
|
||||||
|
* SPDX-FileCopyrightText: 2020, microG Project Team
|
||||||
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
|
*/
|
||||||
|
|
||||||
|
apply plugin: 'com.android.library'
|
||||||
|
apply plugin: 'maven-publish'
|
||||||
|
apply plugin: 'signing'
|
||||||
|
|
||||||
|
android {
|
||||||
|
compileSdkVersion androidCompileSdk
|
||||||
|
buildToolsVersion "$androidBuildVersionTools"
|
||||||
|
|
||||||
|
defaultConfig {
|
||||||
|
versionName version
|
||||||
|
minSdkVersion androidMinSdk
|
||||||
|
targetSdkVersion androidTargetSdk
|
||||||
|
}
|
||||||
|
|
||||||
|
compileOptions {
|
||||||
|
sourceCompatibility = 1.8
|
||||||
|
targetCompatibility = 1.8
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
apply from: '../gradle/publish-android.gradle'
|
||||||
|
|
||||||
|
description = 'microG API for play-services-droidguard'
|
||||||
|
|
||||||
|
dependencies {
|
||||||
|
api project(':play-services-basement')
|
||||||
|
api project(':play-services-base-api')
|
||||||
|
|
||||||
|
implementation "androidx.annotation:annotation:$annotationVersion"
|
||||||
|
}
|
@ -0,0 +1,7 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!--
|
||||||
|
~ SPDX-FileCopyrightText: 2020, microG Project Team
|
||||||
|
~ SPDX-License-Identifier: Apache-2.0
|
||||||
|
-->
|
||||||
|
|
||||||
|
<manifest package="org.microg.gms.droidguard.api"/>
|
@ -0,0 +1,3 @@
|
|||||||
|
package com.google.android.gms.droidguard.internal;
|
||||||
|
|
||||||
|
parcelable DroidGuardInitReply;
|
@ -0,0 +1,3 @@
|
|||||||
|
package com.google.android.gms.droidguard.internal;
|
||||||
|
|
||||||
|
parcelable DroidGuardResultsRequest;
|
@ -0,0 +1,5 @@
|
|||||||
|
package com.google.android.gms.droidguard.internal;
|
||||||
|
|
||||||
|
interface IDroidGuardCallbacks {
|
||||||
|
void onResult(in byte[] res);
|
||||||
|
}
|
@ -0,0 +1,13 @@
|
|||||||
|
package com.google.android.gms.droidguard.internal;
|
||||||
|
|
||||||
|
import com.google.android.gms.droidguard.internal.DroidGuardInitReply;
|
||||||
|
import com.google.android.gms.droidguard.internal.DroidGuardResultsRequest;
|
||||||
|
|
||||||
|
interface IDroidGuardHandle {
|
||||||
|
void init(String flow) = 0;
|
||||||
|
DroidGuardInitReply initWithRequest(String flow, in DroidGuardResultsRequest request) = 4;
|
||||||
|
|
||||||
|
byte[] guard(in Map map) = 1;
|
||||||
|
|
||||||
|
void close() = 2;
|
||||||
|
}
|
@ -0,0 +1,14 @@
|
|||||||
|
package com.google.android.gms.droidguard.internal;
|
||||||
|
|
||||||
|
import com.google.android.gms.droidguard.internal.IDroidGuardCallbacks;
|
||||||
|
import com.google.android.gms.droidguard.internal.IDroidGuardHandle;
|
||||||
|
import com.google.android.gms.droidguard.internal.DroidGuardResultsRequest;
|
||||||
|
|
||||||
|
interface IDroidGuardService {
|
||||||
|
void guard(IDroidGuardCallbacks callbacks, String flow, in Map map) = 0;
|
||||||
|
void guardWithRequest(IDroidGuardCallbacks callbacks, String flow, in Map map, in DroidGuardResultsRequest request) = 3;
|
||||||
|
|
||||||
|
IDroidGuardHandle getHandle() = 1;
|
||||||
|
|
||||||
|
int getClientTimeoutMillis() = 2;
|
||||||
|
}
|
@ -0,0 +1,48 @@
|
|||||||
|
/*
|
||||||
|
* SPDX-FileCopyrightText: 2020, microG Project Team
|
||||||
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.google.android.gms.droidguard.internal;
|
||||||
|
|
||||||
|
import android.os.Parcel;
|
||||||
|
import android.os.ParcelFileDescriptor;
|
||||||
|
import android.os.Parcelable;
|
||||||
|
|
||||||
|
public class DroidGuardInitReply implements Parcelable {
|
||||||
|
public ParcelFileDescriptor pfd;
|
||||||
|
public Parcelable object;
|
||||||
|
|
||||||
|
public DroidGuardInitReply(ParcelFileDescriptor pfd, Parcelable object) {
|
||||||
|
this.pfd = pfd;
|
||||||
|
this.object = object;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int describeContents() {
|
||||||
|
return (pfd != null ? Parcelable.CONTENTS_FILE_DESCRIPTOR : 0) | (object != null ? object.describeContents() : 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void writeToParcel(Parcel dest, int flags) {
|
||||||
|
dest.writeParcelable(pfd, flags);
|
||||||
|
dest.writeParcelable(object, flags);
|
||||||
|
}
|
||||||
|
|
||||||
|
public final static Creator<DroidGuardInitReply> CREATOR = new Creator<DroidGuardInitReply>() {
|
||||||
|
@Override
|
||||||
|
public DroidGuardInitReply createFromParcel(Parcel source) {
|
||||||
|
ParcelFileDescriptor pfd = source.readParcelable(ParcelFileDescriptor.class.getClassLoader());
|
||||||
|
Parcelable object = source.readParcelable(getClass().getClassLoader());
|
||||||
|
if (pfd != null && object != null) {
|
||||||
|
return new DroidGuardInitReply(pfd, object);
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public DroidGuardInitReply[] newArray(int size) {
|
||||||
|
return new DroidGuardInitReply[size];
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
@ -0,0 +1,93 @@
|
|||||||
|
/*
|
||||||
|
* SPDX-FileCopyrightText: 2020, microG Project Team
|
||||||
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.google.android.gms.droidguard.internal;
|
||||||
|
|
||||||
|
import android.net.Network;
|
||||||
|
import android.os.Build;
|
||||||
|
import android.os.Bundle;
|
||||||
|
import android.os.ParcelFileDescriptor;
|
||||||
|
|
||||||
|
import androidx.annotation.RequiresApi;
|
||||||
|
|
||||||
|
import org.microg.gms.common.Constants;
|
||||||
|
import org.microg.safeparcel.AutoSafeParcelable;
|
||||||
|
|
||||||
|
public class DroidGuardResultsRequest extends AutoSafeParcelable {
|
||||||
|
private static final String KEY_APP_ARCHITECTURE = "appArchitecture";
|
||||||
|
private static final String KEY_CLIENT_VERSION = "clientVersion";
|
||||||
|
private static final String KEY_FD = "fd";
|
||||||
|
private static final String KEY_NETWORK_TO_USE = "networkToUse";
|
||||||
|
private static final String KEY_TIMEOUT_MS = "timeoutMs";
|
||||||
|
public static final String KEY_OPEN_HANDLES = "openHandles";
|
||||||
|
|
||||||
|
@Field(2)
|
||||||
|
public Bundle bundle;
|
||||||
|
|
||||||
|
public DroidGuardResultsRequest() {
|
||||||
|
bundle = new Bundle();
|
||||||
|
String arch;
|
||||||
|
try {
|
||||||
|
arch = System.getProperty("os.arch");
|
||||||
|
} catch (Exception ignored) {
|
||||||
|
arch = "?";
|
||||||
|
}
|
||||||
|
bundle.putString(KEY_APP_ARCHITECTURE, arch);
|
||||||
|
setClientVersion(Constants.GMS_VERSION_CODE);
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getAppArchitecture() {
|
||||||
|
return bundle.getString(KEY_APP_ARCHITECTURE);
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getTimeoutMillis() {
|
||||||
|
return bundle.getInt(KEY_TIMEOUT_MS, 60000);
|
||||||
|
}
|
||||||
|
|
||||||
|
public DroidGuardResultsRequest setTimeoutMillis(int millis) {
|
||||||
|
bundle.putInt(KEY_TIMEOUT_MS, millis);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getClientVersion() {
|
||||||
|
return bundle.getInt(KEY_CLIENT_VERSION);
|
||||||
|
}
|
||||||
|
|
||||||
|
public DroidGuardResultsRequest setClientVersion(int clientVersion) {
|
||||||
|
bundle.putInt(KEY_CLIENT_VERSION, clientVersion);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ParcelFileDescriptor getFd() {
|
||||||
|
return bundle.getParcelable(KEY_FD);
|
||||||
|
}
|
||||||
|
|
||||||
|
public DroidGuardResultsRequest setFd(ParcelFileDescriptor fd) {
|
||||||
|
bundle.putParcelable(KEY_FD, fd);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getOpenHandles() {
|
||||||
|
return bundle.getInt(KEY_OPEN_HANDLES);
|
||||||
|
}
|
||||||
|
|
||||||
|
public DroidGuardResultsRequest setOpenHandles(int openHandles) {
|
||||||
|
bundle.putInt(KEY_OPEN_HANDLES, openHandles);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@RequiresApi(api = 21)
|
||||||
|
public Network getNetworkToUse() {
|
||||||
|
return bundle.getParcelable(KEY_NETWORK_TO_USE);
|
||||||
|
}
|
||||||
|
|
||||||
|
@RequiresApi(api = 21)
|
||||||
|
public DroidGuardResultsRequest setNetworkToUse(Network networkToUse) {
|
||||||
|
bundle.putParcelable(KEY_NETWORK_TO_USE, networkToUse);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static final Creator<DroidGuardResultsRequest> CREATOR = new AutoCreator<>(DroidGuardResultsRequest.class);
|
||||||
|
}
|
42
play-services-droidguard/build.gradle
Normal file
42
play-services-droidguard/build.gradle
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
/*
|
||||||
|
* SPDX-FileCopyrightText: 2020, microG Project Team
|
||||||
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
|
*/
|
||||||
|
|
||||||
|
apply plugin: 'com.android.library'
|
||||||
|
apply plugin: 'kotlin-android'
|
||||||
|
apply plugin: 'kotlin-android-extensions'
|
||||||
|
apply plugin: 'maven-publish'
|
||||||
|
apply plugin: 'signing'
|
||||||
|
|
||||||
|
android {
|
||||||
|
compileSdkVersion androidCompileSdk
|
||||||
|
buildToolsVersion "$androidBuildVersionTools"
|
||||||
|
|
||||||
|
defaultConfig {
|
||||||
|
versionName version
|
||||||
|
minSdkVersion androidMinSdk
|
||||||
|
targetSdkVersion androidTargetSdk
|
||||||
|
}
|
||||||
|
|
||||||
|
sourceSets {
|
||||||
|
main.java.srcDirs += 'src/main/kotlin'
|
||||||
|
}
|
||||||
|
|
||||||
|
compileOptions {
|
||||||
|
sourceCompatibility = 1.8
|
||||||
|
targetCompatibility = 1.8
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
apply from: '../gradle/publish-android.gradle'
|
||||||
|
|
||||||
|
description = 'microG implementation of play-services-droidguard'
|
||||||
|
|
||||||
|
dependencies {
|
||||||
|
api project(':play-services-base')
|
||||||
|
api project(':play-services-droidguard-api')
|
||||||
|
|
||||||
|
implementation "androidx.annotation:annotation:$annotationVersion"
|
||||||
|
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlinVersion"
|
||||||
|
}
|
7
play-services-droidguard/src/main/AndroidManifest.xml
Normal file
7
play-services-droidguard/src/main/AndroidManifest.xml
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!--
|
||||||
|
~ SPDX-FileCopyrightText: 2020, microG Project Team
|
||||||
|
~ SPDX-License-Identifier: Apache-2.0
|
||||||
|
-->
|
||||||
|
|
||||||
|
<manifest package="org.microg.gms.droidguard"/>
|
@ -0,0 +1,25 @@
|
|||||||
|
/*
|
||||||
|
* SPDX-FileCopyrightText: 2020, microG Project Team
|
||||||
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.microg.gms.droidguard
|
||||||
|
|
||||||
|
import android.content.Context
|
||||||
|
import android.os.IBinder
|
||||||
|
import com.google.android.gms.droidguard.internal.IDroidGuardHandle
|
||||||
|
import com.google.android.gms.droidguard.internal.IDroidGuardService
|
||||||
|
import org.microg.gms.common.GmsClient
|
||||||
|
import org.microg.gms.common.GmsService
|
||||||
|
import org.microg.gms.common.api.ConnectionCallbacks
|
||||||
|
import org.microg.gms.common.api.OnConnectionFailedListener
|
||||||
|
|
||||||
|
class DroidGuardApiClient(context: Context, connectionCallbacks: ConnectionCallbacks, onConnectionFailedListener: OnConnectionFailedListener) : GmsClient<IDroidGuardService>(context, connectionCallbacks, onConnectionFailedListener, GmsService.DROIDGUARD.ACTION) {
|
||||||
|
init {
|
||||||
|
serviceId = GmsService.DROIDGUARD.SERVICE_ID
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun interfaceFromBinder(binder: IBinder): IDroidGuardService = IDroidGuardService.Stub.asInterface(binder)
|
||||||
|
|
||||||
|
fun getHandle() = serviceInterface.handle
|
||||||
|
}
|
@ -0,0 +1,13 @@
|
|||||||
|
/*
|
||||||
|
* SPDX-FileCopyrightText: 2020, microG Project Team
|
||||||
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.microg.gms.droidguard
|
||||||
|
|
||||||
|
import com.google.android.gms.droidguard.internal.IDroidGuardHandle
|
||||||
|
import com.google.android.gms.tasks.Task
|
||||||
|
|
||||||
|
interface DroidGuardClient {
|
||||||
|
fun getHandle(): Task<DroidGuardHandle>
|
||||||
|
}
|
@ -0,0 +1,33 @@
|
|||||||
|
/*
|
||||||
|
* SPDX-FileCopyrightText: 2020, microG Project Team
|
||||||
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.microg.gms.droidguard
|
||||||
|
|
||||||
|
import android.content.Context
|
||||||
|
import android.os.Looper
|
||||||
|
import com.google.android.gms.common.api.Api
|
||||||
|
import com.google.android.gms.common.api.Api.ApiOptions.NoOptions
|
||||||
|
import com.google.android.gms.common.api.GoogleApi
|
||||||
|
import com.google.android.gms.tasks.Task
|
||||||
|
import org.microg.gms.common.api.ApiClientBuilder
|
||||||
|
import org.microg.gms.common.api.ApiClientSettings
|
||||||
|
import org.microg.gms.common.api.ConnectionCallbacks
|
||||||
|
import org.microg.gms.common.api.OnConnectionFailedListener
|
||||||
|
|
||||||
|
class DroidGuardClientImpl(context: Context) : GoogleApi<NoOptions>(context, API), DroidGuardClient {
|
||||||
|
companion object {
|
||||||
|
private val API = Api(ApiClientBuilder { _: NoOptions?, context: Context, _: Looper?, _: ApiClientSettings?, callbacks: ConnectionCallbacks, connectionFailedListener: OnConnectionFailedListener -> DroidGuardApiClient(context, callbacks, connectionFailedListener) })
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun getHandle(): Task<DroidGuardHandle> {
|
||||||
|
return scheduleTask { client: DroidGuardApiClient, completionSource ->
|
||||||
|
try {
|
||||||
|
completionSource.setResult(DroidGuardHandle(client.getHandle()))
|
||||||
|
} catch (e: Exception) {
|
||||||
|
completionSource.setException(e)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,54 @@
|
|||||||
|
/*
|
||||||
|
* SPDX-FileCopyrightText: 2020, microG Project Team
|
||||||
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.microg.gms.droidguard
|
||||||
|
|
||||||
|
import com.google.android.gms.droidguard.internal.DroidGuardResultsRequest
|
||||||
|
import com.google.android.gms.droidguard.internal.IDroidGuardHandle
|
||||||
|
|
||||||
|
class DroidGuardHandle(private val handle: IDroidGuardHandle) {
|
||||||
|
private var state = 0
|
||||||
|
|
||||||
|
fun init(flow: String) {
|
||||||
|
if (state != 0) throw IllegalStateException("init() already called")
|
||||||
|
try {
|
||||||
|
handle.initWithRequest(flow, DroidGuardResultsRequest().setOpenHandles(openHandles++))
|
||||||
|
state = 1
|
||||||
|
} catch (e: Exception) {
|
||||||
|
state = -1
|
||||||
|
throw e
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fun guard(map: Map<String, String>): ByteArray {
|
||||||
|
if (state != 1) throw IllegalStateException("init() must be called before guard()")
|
||||||
|
try {
|
||||||
|
return handle.guard(map)
|
||||||
|
} catch (e: Exception) {
|
||||||
|
state = -1
|
||||||
|
throw e
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fun close() {
|
||||||
|
if (state != 1) throw IllegalStateException("init() must be called before close()")
|
||||||
|
try {
|
||||||
|
handle.close()
|
||||||
|
openHandles--
|
||||||
|
state = 2
|
||||||
|
} catch (e: Exception) {
|
||||||
|
state = -1
|
||||||
|
throw e
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fun finalize() {
|
||||||
|
if (state == 1) close()
|
||||||
|
}
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
private var openHandles = 0
|
||||||
|
}
|
||||||
|
}
|
@ -6,6 +6,7 @@ include ':play-services-appinvite-api'
|
|||||||
include ':play-services-base-api'
|
include ':play-services-base-api'
|
||||||
include ':play-services-cast-api'
|
include ':play-services-cast-api'
|
||||||
include ':play-services-cast-framework-api'
|
include ':play-services-cast-framework-api'
|
||||||
|
include ':play-services-droidguard-api'
|
||||||
include ':play-services-iid-api'
|
include ':play-services-iid-api'
|
||||||
include ':play-services-location-api'
|
include ':play-services-location-api'
|
||||||
include ':play-services-nearby-api'
|
include ':play-services-nearby-api'
|
||||||
@ -41,6 +42,7 @@ include ':play-services-core'
|
|||||||
|
|
||||||
include ':play-services-base'
|
include ':play-services-base'
|
||||||
include ':play-services-cast'
|
include ':play-services-cast'
|
||||||
|
include ':play-services-droidguard'
|
||||||
include ':play-services-gcm'
|
include ':play-services-gcm'
|
||||||
include ':play-services-iid'
|
include ':play-services-iid'
|
||||||
include ':play-services-location'
|
include ':play-services-location'
|
||||||
|
Loading…
x
Reference in New Issue
Block a user