mirror of
https://github.com/TeamVanced/VancedMicroG
synced 2025-01-23 01:17:32 +01:00
Update chimera service provider
This commit is contained in:
parent
3c2119ce79
commit
af28a78bba
@ -1,67 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 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;
|
||||
|
||||
import android.content.ContentProvider;
|
||||
import android.content.ContentValues;
|
||||
import android.database.Cursor;
|
||||
import android.database.MatrixCursor;
|
||||
import android.net.Uri;
|
||||
import android.util.Log;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
public class ChimeraSpoofProvider extends ContentProvider {
|
||||
private static final String TAG = "GmsChimeraSpoof";
|
||||
private static final String[] COLUMNS = new String[]{"version", "apkPath", "loaderPath", "apkDescStr"};
|
||||
|
||||
@Override
|
||||
public boolean onCreate() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public Cursor query(@NonNull Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {
|
||||
MatrixCursor cursor = new MatrixCursor(COLUMNS);
|
||||
Log.d(TAG, "query: " + uri);
|
||||
return cursor;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public String getType(@NonNull Uri uri) {
|
||||
return "vnd.android.cursor.item/com.google.android.gms.chimera";
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public Uri insert(@NonNull Uri uri, ContentValues values) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int delete(@NonNull Uri uri, String selection, String[] selectionArgs) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int update(@NonNull Uri uri, ContentValues values, String selection, String[] selectionArgs) {
|
||||
return 0;
|
||||
}
|
||||
}
|
@ -27,6 +27,7 @@ import android.os.RemoteException;
|
||||
import android.util.Log;
|
||||
|
||||
import com.google.android.gms.common.ConnectionResult;
|
||||
import com.google.android.gms.common.internal.ConnectionInfo;
|
||||
import com.google.android.gms.common.internal.GetServiceRequest;
|
||||
import com.google.android.gms.common.internal.IGmsCallbacks;
|
||||
import com.google.android.gms.common.internal.IGmsServiceBroker;
|
||||
@ -177,6 +178,16 @@ public abstract class GmsClient<I extends IInterface> implements ApiClient {
|
||||
Log.d(TAG, "GmsCallbacks : onPostInitComplete(" + serviceInterface + ")");
|
||||
callbacks.onConnected(params);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onAccountValidationComplete(int statusCode, Bundle params) throws RemoteException {
|
||||
Log.d(TAG, "GmsCallbacks : onAccountValidationComplete");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPostInitCompleteWithConnectionInfo(int statusCode, IBinder binder, ConnectionInfo info) throws RemoteException {
|
||||
onPostInitComplete(statusCode, binder, info == null ? null : info.params);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -0,0 +1,7 @@
|
||||
/*
|
||||
* SPDX-FileCopyrightText: 2020, microG Project Team
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
package com.google.android.gms.common.internal;
|
||||
parcelable ConnectionInfo;
|
@ -1,7 +1,15 @@
|
||||
/*
|
||||
* SPDX-FileCopyrightText: 2020, microG Project Team
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
package com.google.android.gms.common.internal;
|
||||
|
||||
import android.os.Bundle;
|
||||
import com.google.android.gms.common.internal.ConnectionInfo;
|
||||
|
||||
interface IGmsCallbacks {
|
||||
void onPostInitComplete(int statusCode, IBinder binder, in Bundle params);
|
||||
void onAccountValidationComplete(int statusCode, in Bundle params);
|
||||
void onPostInitCompleteWithConnectionInfo(int statusCode, IBinder binder, in ConnectionInfo info);
|
||||
}
|
||||
|
@ -0,0 +1,36 @@
|
||||
/*
|
||||
* SPDX-FileCopyrightText: 2020, microG Project Team
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
package com.google.android.gms.common;
|
||||
|
||||
import org.microg.safeparcel.AutoSafeParcelable;
|
||||
|
||||
public class Feature extends AutoSafeParcelable {
|
||||
@Field(1)
|
||||
private String name;
|
||||
@Field(2)
|
||||
private int oldVersion;
|
||||
@Field(3)
|
||||
private long version = -1;
|
||||
|
||||
private Feature() {
|
||||
}
|
||||
|
||||
public Feature(String name, long version) {
|
||||
this.name = name;
|
||||
this.version = version;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public long getVersion() {
|
||||
if (version == -1) return oldVersion;
|
||||
return version;
|
||||
}
|
||||
|
||||
public static final Creator<Feature> CREATOR = new AutoSafeParcelable.AutoCreator<>(Feature.class);
|
||||
}
|
@ -0,0 +1,23 @@
|
||||
/*
|
||||
* SPDX-FileCopyrightText: 2020, microG Project Team
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
package com.google.android.gms.common.internal;
|
||||
|
||||
import android.os.Bundle;
|
||||
|
||||
import com.google.android.gms.common.Feature;
|
||||
|
||||
import org.microg.safeparcel.AutoSafeParcelable;
|
||||
|
||||
public class ConnectionInfo extends AutoSafeParcelable {
|
||||
@Field(1)
|
||||
public Bundle params;
|
||||
@Field(2)
|
||||
public Feature[] features;
|
||||
@Field(3)
|
||||
public int unknown3;
|
||||
|
||||
public static final Creator<ConnectionInfo> CREATOR = new AutoSafeParcelable.AutoCreator<>(ConnectionInfo.class);
|
||||
}
|
@ -125,6 +125,15 @@ public enum GmsService {
|
||||
return UNKNOWN;
|
||||
}
|
||||
|
||||
public static GmsService byAction(String action) {
|
||||
for (GmsService service : values()) {
|
||||
for (String serviceAction : service.SECONDARY_ACTIONS) {
|
||||
if (serviceAction.equals(action)) return service;
|
||||
}
|
||||
}
|
||||
return UNKNOWN;
|
||||
}
|
||||
|
||||
public static String nameFromServiceId(int serviceId) {
|
||||
return byServiceId(serviceId).toString(serviceId);
|
||||
}
|
||||
|
@ -411,9 +411,9 @@
|
||||
</intent-filter>
|
||||
</service>
|
||||
|
||||
<!-- Chimera spoof -->
|
||||
<!-- Chimera -->
|
||||
<provider
|
||||
android:name="org.microg.gms.ChimeraSpoofProvider"
|
||||
android:name="org.microg.gms.chimera.ServiceProvider"
|
||||
android:authorities="com.google.android.gms.chimera"
|
||||
android:exported="true" />
|
||||
|
||||
@ -476,10 +476,6 @@
|
||||
android:name="org.microg.gms.ui.GoogleMoreFragment$AsActivity"
|
||||
android:label="@string/gms_settings_name" />
|
||||
|
||||
<activity
|
||||
android:name="org.microg.gms.ui.SafetyNetFragment$AsActivity"
|
||||
android:label="@string/service_name_snet" />
|
||||
|
||||
<activity
|
||||
android:name="org.microg.gms.ui.SafetyNetAdvancedFragment$AsActivity"
|
||||
android:label="@string/service_name_snet" />
|
||||
@ -625,13 +621,13 @@
|
||||
|
||||
<service android:name="org.microg.gms.appinvite.AppInviteService">
|
||||
<intent-filter>
|
||||
<action android:name="com.google.android.gms.appinvite.service.START"/>
|
||||
<action android:name="com.google.android.gms.appinvite.service.START" />
|
||||
</intent-filter>
|
||||
</service>
|
||||
|
||||
<service android:name="org.microg.gms.firebase.dynamiclinks.DynamicLinksService">
|
||||
<intent-filter>
|
||||
<action android:name="com.google.firebase.dynamiclinks.service.START"/>
|
||||
<action android:name="com.google.firebase.dynamiclinks.service.START" />
|
||||
</intent-filter>
|
||||
</service>
|
||||
|
||||
|
@ -0,0 +1,84 @@
|
||||
/*
|
||||
* SPDX-FileCopyrightText: 2020, microG Project Team
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
package org.microg.gms.chimera
|
||||
|
||||
import android.content.ContentProvider
|
||||
import android.content.ContentValues
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import android.database.Cursor
|
||||
import android.database.MatrixCursor
|
||||
import android.net.Uri
|
||||
import android.os.Bundle
|
||||
import android.util.Log
|
||||
import androidx.core.os.bundleOf
|
||||
import org.microg.gms.DummyService
|
||||
import org.microg.gms.common.GmsService
|
||||
import org.microg.gms.common.RemoteListenerProxy
|
||||
|
||||
class ServiceProvider : ContentProvider() {
|
||||
|
||||
override fun onCreate(): Boolean {
|
||||
Log.d(TAG, "onCreate")
|
||||
return true
|
||||
}
|
||||
|
||||
override fun call(method: String, arg: String?, extras: Bundle?): Bundle? {
|
||||
when (method) {
|
||||
"serviceIntentCall" -> {
|
||||
val serviceAction = extras?.getString("serviceActionBundleKey") ?: return null
|
||||
val ourServiceAction = GmsService.byAction(serviceAction)?.takeIf { it.SERVICE_ID > 0 }?.ACTION
|
||||
val context = context!!
|
||||
val intent = Intent(ourServiceAction).apply { `package` = context.packageName }
|
||||
val resolveInfo = context.packageManager.resolveService(intent, 0)
|
||||
if (resolveInfo != null) {
|
||||
intent.setClassName(resolveInfo.serviceInfo.packageName, resolveInfo.serviceInfo.name)
|
||||
} else {
|
||||
intent.setClass(context, DummyService::class.java)
|
||||
}
|
||||
Log.d(TAG, "$method: $serviceAction -> $intent")
|
||||
return bundleOf(
|
||||
"serviceResponseIntentKey" to intent
|
||||
)
|
||||
}
|
||||
else -> {
|
||||
Log.d(TAG, "$method: $arg, $extras")
|
||||
return super.call(method, arg, extras)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun query(uri: Uri, projection: Array<out String>?, selection: String?, selectionArgs: Array<out String>?, sortOrder: String?): Cursor? {
|
||||
val cursor = MatrixCursor(COLUMNS)
|
||||
Log.d(TAG, "query: $uri")
|
||||
return cursor
|
||||
}
|
||||
|
||||
override fun insert(uri: Uri, values: ContentValues?): Uri? {
|
||||
Log.d(TAG, "insert: $uri, $values")
|
||||
return uri
|
||||
}
|
||||
|
||||
override fun update(uri: Uri, values: ContentValues?, selection: String?, selectionArgs: Array<out String>?): Int {
|
||||
Log.d(TAG, "update: $uri, $values, $selection, $selectionArgs")
|
||||
return 0
|
||||
}
|
||||
|
||||
override fun delete(uri: Uri, selection: String?, selectionArgs: Array<out String>?): Int {
|
||||
Log.d(TAG, "delete: $uri, $selection, $selectionArgs")
|
||||
return 0
|
||||
}
|
||||
|
||||
override fun getType(uri: Uri): String {
|
||||
Log.d(TAG, "getType: $uri")
|
||||
return "vnd.android.cursor.item/com.google.android.gms.chimera"
|
||||
}
|
||||
|
||||
companion object {
|
||||
private const val TAG = "ChimeraServiceProvider"
|
||||
private val COLUMNS = arrayOf("version", "apkPath", "loaderPath", "apkDescStr")
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user