Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f6dca1f1 authored by Marvin W.'s avatar Marvin W. 🐿️
Browse files

Migrate to newer API

parent e4b9198d
Loading
Loading
Loading
Loading
Compare 70419935 to a0e9645c
Original line number Diff line number Diff line
Subproject commit 704199355e1c6f8b14402e01063fbae7b187b35b
Subproject commit a0e9645c796dfd8af38f8cdedf21f5a299c9c5b0
+1 −1
Original line number Diff line number Diff line
@@ -15,7 +15,7 @@
-->
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.google.android.gms"
    android:versionCode="6772000"
    android:versionCode="7099448"
    android:versionName="1.0">

    <uses-sdk
+134 −27
Original line number Diff line number Diff line
@@ -16,161 +16,268 @@

package org.microg.gms;

import android.accounts.Account;
import android.os.Bundle;
import android.os.IBinder;
import android.os.Parcel;
import android.os.RemoteException;
import android.util.Log;

import com.google.android.gms.common.api.Scope;
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 com.google.android.gms.common.internal.ValidateAccountRequest;

import org.microg.gms.common.Services;

import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;

public abstract class AbstractGmsServiceBroker extends IGmsServiceBroker.Stub {
    private static final String TAG = "GmsServiceBroker";
    private final Set<Integer> supportedServiceIds;

    public AbstractGmsServiceBroker(Integer supportedServiceId, Integer... supportedServiceIds) {
        this(new HashSet<>(combine(supportedServiceId, supportedServiceIds)));
    }

    private static Set<Integer> combine(Integer i, Integer... is) {
        Set<Integer> integers = new HashSet<>(Arrays.asList(is));
        integers.add(i);
        return integers;
    }

    public AbstractGmsServiceBroker(Set<Integer> supportedServiceIds) {
        this.supportedServiceIds = supportedServiceIds;
    }

    @Deprecated
    @Override
    public void getPlusService(IGmsCallbacks callback, int versionCode, String packageName,
                               String str2, String[] paramArrayOfString, String str3, Bundle params)
                               String authPackage, String[] scopes, String accountName, Bundle params)
            throws RemoteException {
        throw new IllegalArgumentException("Plus service not supported");
        Bundle extras = params == null ? new Bundle() : params;
        extras.putString("auth_package", authPackage);
        callGetService(Services.PLUS.SERVICE_ID, callback, versionCode, packageName, extras, accountName, scopes);
    }

    @Deprecated
    @Override
    public void getPanoramaService(IGmsCallbacks callback, int versionCode, String packageName,
                                   Bundle params) throws RemoteException {
        throw new IllegalArgumentException("Panorama service not supported");
        callGetService(Services.PANORAMA.SERVICE_ID, callback, versionCode, packageName, params);
    }

    @Deprecated
    @Override
    public void getAppDataSearchService(IGmsCallbacks callback, int versionCode, String packageName)
            throws RemoteException {
        throw new IllegalArgumentException("App Data Search service not supported");
        callGetService(Services.INDEX.SERVICE_ID, callback, versionCode, packageName);
    }

    @Deprecated
    @Override
    public void getWalletService(IGmsCallbacks callback, int versionCode) throws RemoteException {
        throw new IllegalArgumentException("Wallet service not supported");
        getWalletServiceWithPackageName(callback, versionCode, null);
    }

    @Deprecated
    @Override
    public void getPeopleService(IGmsCallbacks callback, int versionCode, String packageName,
                                 Bundle params) throws RemoteException {
        throw new IllegalArgumentException("People service not supported");
        callGetService(Services.PEOPLE.SERVICE_ID, callback, versionCode, packageName, params);
    }

    @Deprecated
    @Override
    public void getReportingService(IGmsCallbacks callback, int versionCode, String packageName,
                                    Bundle params) throws RemoteException {
        throw new IllegalArgumentException("Reporting service not supported");
        callGetService(Services.LOCATION_REPORTING.SERVICE_ID, callback, versionCode, packageName, params);
    }

    @Deprecated
    @Override
    public void getLocationService(IGmsCallbacks callback, int versionCode, String packageName,
                                   Bundle params) throws RemoteException {
        throw new IllegalArgumentException("Location service not supported");
        callGetService(Services.LOCATION.SERVICE_ID, callback, versionCode, packageName, params);
    }

    @Deprecated
    @Override
    public void getGoogleLocationManagerService(IGmsCallbacks callback, int versionCode,
                                                String packageName, Bundle params) throws RemoteException {
        throw new IllegalArgumentException("Google Location Manager service not supported");
        callGetService(Services.LOCATION_MANAGER.SERVICE_ID, callback, versionCode, packageName, params);
    }

    @Deprecated
    @Override
    public void getGamesService(IGmsCallbacks callback, int versionCode, String packageName,
                                String str2, String[] args, String str3, IBinder binder, String str4, Bundle params)
                                String accountName, String[] scopes, String gamePackageName,
                                IBinder popupWindowToken, String desiredLocale, Bundle params)
            throws RemoteException {
        throw new IllegalArgumentException("Games service not supported");
        Bundle extras = params == null ? new Bundle() : params;
        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);
    }

    @Deprecated
    @Override
    public void getAppStateService(IGmsCallbacks callback, int versionCode, String packageName,
                                   String str2, String[] args) throws RemoteException {
        throw new IllegalArgumentException("App State service not supported");
                                   String accountName, String[] scopes) throws RemoteException {
        callGetService(Services.APPSTATE.SERVICE_ID, callback, versionCode, packageName, null, accountName, scopes);
    }

    @Deprecated
    @Override
    public void getPlayLogService(IGmsCallbacks callback, int versionCode, String packageName,
                                  Bundle params) throws RemoteException {
        throw new IllegalArgumentException("Play Log service not supported");
        callGetService(Services.PLAY_LOG.SERVICE_ID, callback, versionCode, packageName, params);
    }

    @Deprecated
    @Override
    public void getAdMobService(IGmsCallbacks callback, int versionCode, String packageName,
                                Bundle params) throws RemoteException {
        throw new IllegalArgumentException("AdMob service not supported");
        callGetService(Services.ADREQUEST.SERVICE_ID, callback, versionCode, packageName, params);
    }

    @Deprecated
    @Override
    public void getDroidGuardService(IGmsCallbacks callback, int versionCode, String packageName,
                                     Bundle params) throws RemoteException {
        throw new IllegalArgumentException("DroidGuard service not supported");
        callGetService(Services.DROIDGUARD.SERVICE_ID, callback, versionCode, packageName, params);
    }

    @Deprecated
    @Override
    public void getLockboxService(IGmsCallbacks callback, int versionCode, String packageName,
                                  Bundle params) throws RemoteException {
        throw new IllegalArgumentException("Lockbox service not supported");
        callGetService(Services.LOCKBOX.SERVICE_ID, callback, versionCode, packageName, params);
    }

    @Deprecated
    @Override
    public void getCastMirroringService(IGmsCallbacks callback, int versionCode, String packageName,
                                        Bundle params) throws RemoteException {
        throw new IllegalArgumentException("Cast Mirroring service not supported");
        callGetService(Services.CAST_MIRRORING.SERVICE_ID, callback, versionCode, packageName, params);
    }

    @Deprecated
    @Override
    public void getNetworkQualityService(IGmsCallbacks callback, int versionCode,
                                         String packageName, Bundle params) throws RemoteException {
        throw new IllegalArgumentException("Network Quality service not supported");
        callGetService(Services.NETWORK_QUALITY.SERVICE_ID, callback, versionCode, packageName, params);
    }

    @Deprecated
    @Override
    public void getGoogleIdentityService(IGmsCallbacks callback, int versionCode,
                                         String packageName, Bundle params) throws RemoteException {
        throw new IllegalArgumentException("Google Identity service not supported");
        callGetService(Services.ACCOUNT.SERVICE_ID, callback, versionCode, packageName, params);
    }

    @Deprecated
    @Override
    public void getGoogleFeedbackService(IGmsCallbacks callback, int versionCode,
                                         String packageName, Bundle params) throws RemoteException {
        throw new IllegalArgumentException("Google Feedback service not supported");
        callGetService(Services.FEEDBACK.SERVICE_ID, callback, versionCode, packageName, params);
    }

    @Deprecated
    @Override
    public void getCastService(IGmsCallbacks callback, int versionCode, String packageName,
                               IBinder binder, Bundle params) throws RemoteException {
        throw new IllegalArgumentException("Cast service not supported");
    }

    @Deprecated
    @Override
    public void getDriveService(IGmsCallbacks callback, int versionCode, String packageName,
                                String[] args, String str2, Bundle params) throws RemoteException {
        throw new IllegalArgumentException("Drive service not supported");
                                String[] scopes, String accountName, Bundle params) throws RemoteException {
        callGetService(Services.DRIVE.SERVICE_ID, callback, versionCode, packageName, params, accountName, scopes);
    }

    @Deprecated
    @Override
    public void getLightweightAppDataSearchService(IGmsCallbacks callback, int versionCode,
                                                   String packageName) throws RemoteException {
        throw new IllegalArgumentException("Lightweight App Data Search service not supported");
        callGetService(Services.LIGHTWEIGHT_INDEX.SERVICE_ID, callback, versionCode, packageName);
    }

    @Deprecated
    @Override
    public void getSearchAdministrationService(IGmsCallbacks callback, int versionCode,
                                               String packageName) throws RemoteException {
        throw new IllegalArgumentException("Search Administration service not supported");
        callGetService(Services.SEARCH_ADMINISTRATION.SERVICE_ID, callback, versionCode, packageName);
    }

    @Deprecated
    @Override
    public void getAutoBackupService(IGmsCallbacks callback, int versionCode, String packageName,
                                     Bundle params) throws RemoteException {
        throw new IllegalArgumentException("Auto Backup service not supported");
        callGetService(Services.PHOTO_AUTO_BACKUP.SERVICE_ID, callback, versionCode, packageName, params);
    }

    @Deprecated
    @Override
    public void getAddressService(IGmsCallbacks callback, int versionCode, String packageName)
            throws RemoteException {
        throw new IllegalArgumentException("Address service not supported");
        callGetService(Services.ADDRESS.SERVICE_ID, callback, versionCode, packageName);
    }

    @Deprecated
    @Override
    public void getWalletServiceWithPackageName(IGmsCallbacks callback, int versionCode, String packageName) throws RemoteException {
        callGetService(Services.WALLET.SERVICE_ID, callback, versionCode, packageName);
    }

    private void callGetService(int serviceId, IGmsCallbacks callback, int gmsVersion,
                                String packageName) throws RemoteException {
        callGetService(serviceId, callback, gmsVersion, packageName, null);
    }

    private void callGetService(int serviceId, IGmsCallbacks callback, int gmsVersion,
                                String packageName, Bundle extras) throws RemoteException {
        callGetService(serviceId, 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);
        request.gmsVersion = gmsVersion;
        request.packageName = packageName;
        request.extras = extras;
        request.account = accountName == null ? null : new Account(accountName, "com.google");
        request.scopes = scopes == null ? null : scopesFromStringArray(scopes);
        getService(callback, request);
    }

    private Scope[] scopesFromStringArray(String[] arr) {
        Scope[] scopes = new Scope[arr.length];
        for (int i = 0; i < arr.length; i++) {
            scopes[i] = new Scope(arr[i]);
        }
        return scopes;
    }

    @Override
    public void getService(IGmsCallbacks callback, GetServiceRequest request) throws RemoteException {
        if (supportedServiceIds.contains(request.serviceId)) {
            handleServiceRequest(callback, request);
        } 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;

    @Override
    public void validateAccount(IGmsCallbacks callback, ValidateAccountRequest request) throws RemoteException {
        throw new IllegalArgumentException("ValidateAccountRequest not supported");
    }

    @Override
+5 −3
Original line number Diff line number Diff line
@@ -23,17 +23,19 @@ import android.os.IBinder;
import android.os.RemoteException;
import android.util.Log;

import com.google.android.gms.common.internal.GetServiceRequest;
import com.google.android.gms.common.internal.IGmsCallbacks;

import org.microg.gms.AbstractGmsServiceBroker;
import org.microg.gms.common.Services;

public class DroidGuardService extends Service {
    private static final String TAG = "GmsDroidGuardSvc";

    private AbstractGmsServiceBroker broker = new AbstractGmsServiceBroker() {
    private AbstractGmsServiceBroker broker = new AbstractGmsServiceBroker(Services.DROIDGUARD.SERVICE_ID) {
        @Override
        public void getDroidGuardService(IGmsCallbacks callback, int versionCode, String packageName, Bundle params) throws RemoteException {
            Log.d(TAG, "getDroidGuardService for " + packageName);
        public void handleServiceRequest(IGmsCallbacks callback, GetServiceRequest request) {
            Log.d(TAG, "getDroidGuardService for " + request);
        }
    };

+8 −3
Original line number Diff line number Diff line
@@ -22,18 +22,23 @@ import android.os.IBinder;
import android.os.RemoteException;
import android.util.Log;

import com.google.android.gms.common.internal.GetServiceRequest;
import com.google.android.gms.common.internal.IGmsCallbacks;

import org.microg.gms.AbstractGmsServiceBroker;
import org.microg.gms.common.Services;

public class IndexService extends Service {
    private static final String TAG = "GmsIcingIndexSvc";

    private AppDataSearchImpl appDataSearch = new AppDataSearchImpl();
    private AbstractGmsServiceBroker broker = new AbstractGmsServiceBroker() {
    private AbstractGmsServiceBroker broker = new AbstractGmsServiceBroker(
            Services.INDEX.SERVICE_ID, Services.SEARCH_ADMINISTRATION.SERVICE_ID,
            Services.SEARCH_CORPORA.SERVICE_ID, Services.SEARCH_GLOBAL.SERVICE_ID,
            Services.SEARCH_IME.SERVICE_ID, Services.SEARCH_QUERIES.SERVICE_ID) {
        @Override
        public void getAppDataSearchService(IGmsCallbacks callback, int versionCode, String packageName) throws RemoteException {
            Log.d(TAG, "bound by: " + packageName);
        public void handleServiceRequest(IGmsCallbacks callback, GetServiceRequest request) throws RemoteException {
            Log.d(TAG, "bound by: " + request);
            callback.onPostInitComplete(0, appDataSearch.asBinder(), null);
        }
    };
Loading