Loading play-services-base-core/src/main/kotlin/org/microg/gms/utils/PackageManagerUtils.kt 0 → 100644 +32 −0 Original line number Diff line number Diff line /* * SPDX-FileCopyrightText: 2022 microG Project Team * SPDX-License-Identifier: Apache-2.0 */ package org.microg.gms.utils import android.content.pm.PackageInfo import android.content.pm.PackageManager import android.content.pm.PackageManager.NameNotFoundException import android.content.pm.Signature import android.util.Base64 import java.security.MessageDigest fun PackageManager.getSignatures(packageName: String): Array<Signature> = try { getPackageInfo(packageName, PackageManager.GET_SIGNATURES).signatures } catch (e: NameNotFoundException) { emptyArray() } fun PackageManager.getApplicationLabel(packageName: String): CharSequence = try { getApplicationLabel(getApplicationInfo(packageName, 0)) } catch (e: Exception) { packageName } fun ByteArray.toBase64(vararg flags: Int): String = Base64.encodeToString(this, flags.fold(0) { a, b -> a or b }) fun PackageManager.getFirstSignatureDigest(packageName: String, md: String): ByteArray? = getSignatures(packageName).firstOrNull()?.digest(md) fun Signature.digest(md: String): ByteArray = MessageDigest.getInstance(md).digest(toByteArray()) play-services-base/src/main/java/org/microg/gms/common/GmsClient.java +15 −8 Original line number Diff line number Diff line Loading @@ -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.api.CommonStatusCodes; import com.google.android.gms.common.internal.ConnectionInfo; import com.google.android.gms.common.internal.GetServiceRequest; import com.google.android.gms.common.internal.IGmsCallbacks; Loading Loading @@ -166,6 +167,11 @@ public abstract class GmsClient<I extends IInterface> implements ApiClient { @Override public void onPostInitComplete(int statusCode, IBinder binder, Bundle params) throws RemoteException { if (statusCode != CommonStatusCodes.SUCCESS) { state = ConnectionState.CONNECTED; disconnect(); connectionFailedListener.onConnectionFailed(new ConnectionResult(statusCode)); } else { synchronized (GmsClient.this) { if (state == ConnectionState.DISCONNECTING) { state = ConnectionState.CONNECTED; Loading @@ -178,6 +184,7 @@ 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 { Loading play-services-basement/src/main/java/org/microg/gms/utils/ToStringHelper.java 0 → 100644 +119 −0 Original line number Diff line number Diff line /* * SPDX-FileCopyrightText: 2022 microG Project Team * SPDX-License-Identifier: Apache-2.0 */ package org.microg.gms.utils; import android.util.Base64; public class ToStringHelper { private StringBuilder sb; private boolean hasField; private boolean hasValue; private boolean hasEnd; public ToStringHelper(String name) { this.sb = new StringBuilder(name).append("["); } public static ToStringHelper name(String name) { return new ToStringHelper(name); } public ToStringHelper value(String val) { if (!hasField) { if (hasValue) sb.append(','); sb.append(val); hasValue = true; } return this; } public ToStringHelper value(long val) { return value(Long.toString(val)); } public ToStringHelper value(double val) { return value(Double.toString(val)); } public ToStringHelper value(Object val) { if (val instanceof Long) value((long) val); if (val instanceof Double) value((double) val); return value(val, false); } public ToStringHelper value(Object val, boolean forceNull) { if (val == null && !forceNull) return this; return value(val == null ? "null" : val.toString()); } public ToStringHelper value(byte[] val) { return value(val, false); } public ToStringHelper value(byte[] val, boolean forceNull) { if (val == null && !forceNull) return this; return value(val == null ? "null" : Base64.encodeToString(val, Base64.NO_WRAP | Base64.NO_PADDING | Base64.URL_SAFE)); } private ToStringHelper fieldUnquoted(String name, String val) { if (hasValue || hasField) sb.append(", "); sb.append(name).append('=').append(val); hasField = true; return this; } public ToStringHelper field(String name, String val) { return field(name, val, false); } public ToStringHelper field(String name, String val, boolean forceNull) { if (val == null && !forceNull) return this; if (val == null) return fieldUnquoted(name, "null"); if (hasValue || hasField) sb.append(", "); sb.append(name).append("=\"").append(val.replace("\"", "\\\"")).append('"'); hasField = true; return this; } public ToStringHelper field(String name, long val) { return fieldUnquoted(name, Long.toString(val)); } public ToStringHelper field(String name, double val) { return fieldUnquoted(name, Double.toString(val)); } public ToStringHelper field(String name, boolean val) { return fieldUnquoted(name, Boolean.toString(val)); } public ToStringHelper field(String name, Object val) { if (val instanceof Long) return field(name, (long) val); if (val instanceof Double) return field(name, (double) val); if (val instanceof Boolean) return field(name, (boolean) val); return field(name, val, false); } public ToStringHelper field(String name, Object val, boolean forceNull) { if (val == null && !forceNull) return this; return fieldUnquoted(name, val == null ? "null" : val.toString()); } public ToStringHelper field(String name, byte[] val) { return field(name, val, false); } public ToStringHelper field(String name, byte[] val, boolean forceNull) { if (val == null && !forceNull) return this; return fieldUnquoted(name, val == null ? "null" : Base64.encodeToString(val, Base64.NO_WRAP | Base64.NO_PADDING | Base64.URL_SAFE)); } public String end() { if (!hasEnd) sb.append(']'); hasEnd = true; return sb.toString(); } } play-services-core/build.gradle +3 −1 Original line number Diff line number Diff line Loading @@ -35,6 +35,8 @@ dependencies { implementation project(':play-services-cronet-core') implementation project(':play-services-droidguard-core') implementation project(':play-services-droidguard-core-ui') implementation project(':play-services-fido-core') implementation project(':play-services-gmscompliance-core') implementation project(':play-services-location-core') withNearbyImplementation project(':play-services-nearby-core') withNearbyImplementation project(':play-services-nearby-core-ui') Loading Loading @@ -77,7 +79,7 @@ dependencies { } android { compileSdkVersion androidCompileSdk() compileSdkVersion androidCompileSdk buildToolsVersion "$androidBuildVersionTools" defaultConfig { Loading play-services-core/src/main/AndroidManifest.xml +0 −8 Original line number Diff line number Diff line Loading @@ -530,12 +530,6 @@ android:process=":ui" android:theme="@style/Theme.AppCompat.DayNight.Dialog.Alert.NoActionBar" /> <activity android:name="org.microg.gms.ui.AboutFragment$AsActivity" android:label="@string/pref_about_title" android:process=":ui" android:taskAffinity="org.microg.gms.settings" /> <activity android:name="org.microg.gms.ui.GoogleMoreFragment$AsActivity" android:label="@string/gms_settings_name" Loading Loading @@ -760,7 +754,6 @@ <action android:name="com.google.android.gms.enterprise.loader.service.START" /> <action android:name="com.google.android.gms.facs.internal.service.START" /> <action android:name="com.google.android.gms.fido.credentialstore.internal_service.START" /> <action android:name="com.google.android.gms.fido.fido2.privileged.START" /> <action android:name="com.google.android.gms.fido.fido2.regular.START" /> <action android:name="com.google.android.gms.fido.fido2.zeroparty.START" /> <action android:name="com.google.android.gms.fido.sourcedevice.service.START" /> Loading @@ -781,7 +774,6 @@ <action android:name="com.google.android.gms.freighter.service.START" /> <action android:name="com.google.android.gms.gass.START" /> <action android:name="com.google.android.gms.growth.service.START" /> <action android:name="com.google.android.gms.gmscompliance.service.START" /> <action android:name="com.google.android.gms.googlehelp.service.GoogleHelpService.START" /> <action android:name="com.google.android.gms.herrevad.services.LightweightNetworkQualityAndroidService.START" /> <action android:name="com.google.android.gms.identity.service.BIND" /> Loading Loading
play-services-base-core/src/main/kotlin/org/microg/gms/utils/PackageManagerUtils.kt 0 → 100644 +32 −0 Original line number Diff line number Diff line /* * SPDX-FileCopyrightText: 2022 microG Project Team * SPDX-License-Identifier: Apache-2.0 */ package org.microg.gms.utils import android.content.pm.PackageInfo import android.content.pm.PackageManager import android.content.pm.PackageManager.NameNotFoundException import android.content.pm.Signature import android.util.Base64 import java.security.MessageDigest fun PackageManager.getSignatures(packageName: String): Array<Signature> = try { getPackageInfo(packageName, PackageManager.GET_SIGNATURES).signatures } catch (e: NameNotFoundException) { emptyArray() } fun PackageManager.getApplicationLabel(packageName: String): CharSequence = try { getApplicationLabel(getApplicationInfo(packageName, 0)) } catch (e: Exception) { packageName } fun ByteArray.toBase64(vararg flags: Int): String = Base64.encodeToString(this, flags.fold(0) { a, b -> a or b }) fun PackageManager.getFirstSignatureDigest(packageName: String, md: String): ByteArray? = getSignatures(packageName).firstOrNull()?.digest(md) fun Signature.digest(md: String): ByteArray = MessageDigest.getInstance(md).digest(toByteArray())
play-services-base/src/main/java/org/microg/gms/common/GmsClient.java +15 −8 Original line number Diff line number Diff line Loading @@ -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.api.CommonStatusCodes; import com.google.android.gms.common.internal.ConnectionInfo; import com.google.android.gms.common.internal.GetServiceRequest; import com.google.android.gms.common.internal.IGmsCallbacks; Loading Loading @@ -166,6 +167,11 @@ public abstract class GmsClient<I extends IInterface> implements ApiClient { @Override public void onPostInitComplete(int statusCode, IBinder binder, Bundle params) throws RemoteException { if (statusCode != CommonStatusCodes.SUCCESS) { state = ConnectionState.CONNECTED; disconnect(); connectionFailedListener.onConnectionFailed(new ConnectionResult(statusCode)); } else { synchronized (GmsClient.this) { if (state == ConnectionState.DISCONNECTING) { state = ConnectionState.CONNECTED; Loading @@ -178,6 +184,7 @@ 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 { Loading
play-services-basement/src/main/java/org/microg/gms/utils/ToStringHelper.java 0 → 100644 +119 −0 Original line number Diff line number Diff line /* * SPDX-FileCopyrightText: 2022 microG Project Team * SPDX-License-Identifier: Apache-2.0 */ package org.microg.gms.utils; import android.util.Base64; public class ToStringHelper { private StringBuilder sb; private boolean hasField; private boolean hasValue; private boolean hasEnd; public ToStringHelper(String name) { this.sb = new StringBuilder(name).append("["); } public static ToStringHelper name(String name) { return new ToStringHelper(name); } public ToStringHelper value(String val) { if (!hasField) { if (hasValue) sb.append(','); sb.append(val); hasValue = true; } return this; } public ToStringHelper value(long val) { return value(Long.toString(val)); } public ToStringHelper value(double val) { return value(Double.toString(val)); } public ToStringHelper value(Object val) { if (val instanceof Long) value((long) val); if (val instanceof Double) value((double) val); return value(val, false); } public ToStringHelper value(Object val, boolean forceNull) { if (val == null && !forceNull) return this; return value(val == null ? "null" : val.toString()); } public ToStringHelper value(byte[] val) { return value(val, false); } public ToStringHelper value(byte[] val, boolean forceNull) { if (val == null && !forceNull) return this; return value(val == null ? "null" : Base64.encodeToString(val, Base64.NO_WRAP | Base64.NO_PADDING | Base64.URL_SAFE)); } private ToStringHelper fieldUnquoted(String name, String val) { if (hasValue || hasField) sb.append(", "); sb.append(name).append('=').append(val); hasField = true; return this; } public ToStringHelper field(String name, String val) { return field(name, val, false); } public ToStringHelper field(String name, String val, boolean forceNull) { if (val == null && !forceNull) return this; if (val == null) return fieldUnquoted(name, "null"); if (hasValue || hasField) sb.append(", "); sb.append(name).append("=\"").append(val.replace("\"", "\\\"")).append('"'); hasField = true; return this; } public ToStringHelper field(String name, long val) { return fieldUnquoted(name, Long.toString(val)); } public ToStringHelper field(String name, double val) { return fieldUnquoted(name, Double.toString(val)); } public ToStringHelper field(String name, boolean val) { return fieldUnquoted(name, Boolean.toString(val)); } public ToStringHelper field(String name, Object val) { if (val instanceof Long) return field(name, (long) val); if (val instanceof Double) return field(name, (double) val); if (val instanceof Boolean) return field(name, (boolean) val); return field(name, val, false); } public ToStringHelper field(String name, Object val, boolean forceNull) { if (val == null && !forceNull) return this; return fieldUnquoted(name, val == null ? "null" : val.toString()); } public ToStringHelper field(String name, byte[] val) { return field(name, val, false); } public ToStringHelper field(String name, byte[] val, boolean forceNull) { if (val == null && !forceNull) return this; return fieldUnquoted(name, val == null ? "null" : Base64.encodeToString(val, Base64.NO_WRAP | Base64.NO_PADDING | Base64.URL_SAFE)); } public String end() { if (!hasEnd) sb.append(']'); hasEnd = true; return sb.toString(); } }
play-services-core/build.gradle +3 −1 Original line number Diff line number Diff line Loading @@ -35,6 +35,8 @@ dependencies { implementation project(':play-services-cronet-core') implementation project(':play-services-droidguard-core') implementation project(':play-services-droidguard-core-ui') implementation project(':play-services-fido-core') implementation project(':play-services-gmscompliance-core') implementation project(':play-services-location-core') withNearbyImplementation project(':play-services-nearby-core') withNearbyImplementation project(':play-services-nearby-core-ui') Loading Loading @@ -77,7 +79,7 @@ dependencies { } android { compileSdkVersion androidCompileSdk() compileSdkVersion androidCompileSdk buildToolsVersion "$androidBuildVersionTools" defaultConfig { Loading
play-services-core/src/main/AndroidManifest.xml +0 −8 Original line number Diff line number Diff line Loading @@ -530,12 +530,6 @@ android:process=":ui" android:theme="@style/Theme.AppCompat.DayNight.Dialog.Alert.NoActionBar" /> <activity android:name="org.microg.gms.ui.AboutFragment$AsActivity" android:label="@string/pref_about_title" android:process=":ui" android:taskAffinity="org.microg.gms.settings" /> <activity android:name="org.microg.gms.ui.GoogleMoreFragment$AsActivity" android:label="@string/gms_settings_name" Loading Loading @@ -760,7 +754,6 @@ <action android:name="com.google.android.gms.enterprise.loader.service.START" /> <action android:name="com.google.android.gms.facs.internal.service.START" /> <action android:name="com.google.android.gms.fido.credentialstore.internal_service.START" /> <action android:name="com.google.android.gms.fido.fido2.privileged.START" /> <action android:name="com.google.android.gms.fido.fido2.regular.START" /> <action android:name="com.google.android.gms.fido.fido2.zeroparty.START" /> <action android:name="com.google.android.gms.fido.sourcedevice.service.START" /> Loading @@ -781,7 +774,6 @@ <action android:name="com.google.android.gms.freighter.service.START" /> <action android:name="com.google.android.gms.gass.START" /> <action android:name="com.google.android.gms.growth.service.START" /> <action android:name="com.google.android.gms.gmscompliance.service.START" /> <action android:name="com.google.android.gms.googlehelp.service.GoogleHelpService.START" /> <action android:name="com.google.android.gms.herrevad.services.LightweightNetworkQualityAndroidService.START" /> <action android:name="com.google.android.gms.identity.service.BIND" /> Loading