From 552aaf856d9af90f3730bfd31584ae39a2f89c08 Mon Sep 17 00:00:00 2001 From: Marvin W Date: Tue, 18 Jan 2022 18:55:28 +0100 Subject: [PATCH] Update stub services --- .../internal/IClearcutLoggerCallbacks.aidl | 8 +- .../internal/IClearcutLoggerService.aidl | 8 +- .../clearcut/internal/PlayLoggerContext.aidl | 3 + .../IAppMeasurementDynamiteService.aidl | 55 ++++ .../api/internal/IBundleReceiver.aidl | 5 + .../api/internal/IEventHandlerProxy.aidl | 6 + .../api/internal/IStringProvider.aidl | 4 + .../api/internal/InitializationParams.aidl | 3 + .../internal/IMeasurementService.aidl | 34 +-- .../phenotype/internal/IPhenotypeService.aidl | 1 + .../gms/playlog/internal/IPlayLogService.aidl | 3 +- .../playlog/internal/PlayLoggerContext.aidl | 3 - .../UsageReportingOptInOptions.aidl | 3 + .../internal/IUsageReportingCallbacks.aidl | 11 + ...eReportingOptInOptionsChangedListener.aidl | 5 + .../internal/IUsageReportingService.aidl | 12 + .../gms/clearcut/LogEventParcelable.java | 9 +- .../internal/LogVerifierResultParcelable.java | 15 ++ .../internal/PlayLoggerContext.java | 35 ++- .../api/internal/InitializationParams.java | 45 ++++ .../gms/measurement/internal/AppMetadata.java | 4 + .../gms/measurement/internal/EventParams.java | 17 ++ .../gms/measurement/internal/EventParcel.java | 9 + .../internal/UserAttributeParcel.java | 15 ++ .../gms/playlog/internal/LogEvent.java | 1 + .../UsageReportingOptInOptions.java | 15 ++ .../src/main/AndroidManifest.xml | 255 ++++++++++++++---- .../dynamite/ModuleDescriptor.java | 22 ++ .../gms/clearcut/ClearcutLoggerService.java | 38 --- .../clearcut/ClearcutLoggerServiceImpl.java | 38 --- .../measurement/MeasurementBrokerService.java | 39 --- .../measurement/MeasurementServiceImpl.java | 63 ----- .../microg/gms/playlog/PlayLogService.java | 1 + .../gms/playlog/PlayLogServiceImpl.java | 3 +- .../internal/AppMeasurementDynamiteService.kt | 198 ++++++++++++++ .../gms/clearcut/ClearcutLoggerService.kt | 80 ++++++ .../org/microg/gms/fonts/FontsProvider.kt | 2 +- .../gms/measurement/MeasurementService.kt | 58 ++++ .../microg/gms/phenotype/PhenotypeService.kt | 14 +- .../microg/gms/provision/ProvisionService.kt | 9 +- .../org/microg/gms/udc/FacsCacheService.kt | 3 + .../org/microg/gms/ui/SettingsFragment.kt | 16 +- .../usagereporting/UsageReportingService.kt | 53 ++++ 43 files changed, 924 insertions(+), 297 deletions(-) create mode 100644 play-services-api/src/main/aidl/com/google/android/gms/clearcut/internal/PlayLoggerContext.aidl create mode 100644 play-services-api/src/main/aidl/com/google/android/gms/measurement/api/internal/IAppMeasurementDynamiteService.aidl create mode 100644 play-services-api/src/main/aidl/com/google/android/gms/measurement/api/internal/IBundleReceiver.aidl create mode 100644 play-services-api/src/main/aidl/com/google/android/gms/measurement/api/internal/IEventHandlerProxy.aidl create mode 100644 play-services-api/src/main/aidl/com/google/android/gms/measurement/api/internal/IStringProvider.aidl create mode 100644 play-services-api/src/main/aidl/com/google/android/gms/measurement/api/internal/InitializationParams.aidl delete mode 100644 play-services-api/src/main/aidl/com/google/android/gms/playlog/internal/PlayLoggerContext.aidl create mode 100644 play-services-api/src/main/aidl/com/google/android/gms/usagereporting/UsageReportingOptInOptions.aidl create mode 100644 play-services-api/src/main/aidl/com/google/android/gms/usagereporting/internal/IUsageReportingCallbacks.aidl create mode 100644 play-services-api/src/main/aidl/com/google/android/gms/usagereporting/internal/IUsageReportingOptInOptionsChangedListener.aidl create mode 100644 play-services-api/src/main/aidl/com/google/android/gms/usagereporting/internal/IUsageReportingService.aidl create mode 100644 play-services-api/src/main/java/com/google/android/gms/clearcut/internal/LogVerifierResultParcelable.java rename play-services-api/src/main/java/com/google/android/gms/{playlog => clearcut}/internal/PlayLoggerContext.java (77%) create mode 100644 play-services-api/src/main/java/com/google/android/gms/measurement/api/internal/InitializationParams.java create mode 100644 play-services-api/src/main/java/com/google/android/gms/measurement/internal/EventParams.java create mode 100644 play-services-api/src/main/java/com/google/android/gms/usagereporting/UsageReportingOptInOptions.java create mode 100644 play-services-core/src/main/java/com/google/android/gms/dynamite/descriptors/com/google/android/gms/measurement/dynamite/ModuleDescriptor.java delete mode 100644 play-services-core/src/main/java/org/microg/gms/clearcut/ClearcutLoggerService.java delete mode 100644 play-services-core/src/main/java/org/microg/gms/clearcut/ClearcutLoggerServiceImpl.java delete mode 100644 play-services-core/src/main/java/org/microg/gms/measurement/MeasurementBrokerService.java delete mode 100644 play-services-core/src/main/java/org/microg/gms/measurement/MeasurementServiceImpl.java create mode 100644 play-services-core/src/main/kotlin/com/google/android/gms/measurement/internal/AppMeasurementDynamiteService.kt create mode 100644 play-services-core/src/main/kotlin/org/microg/gms/clearcut/ClearcutLoggerService.kt create mode 100644 play-services-core/src/main/kotlin/org/microg/gms/measurement/MeasurementService.kt create mode 100644 play-services-core/src/main/kotlin/org/microg/gms/usagereporting/UsageReportingService.kt diff --git a/play-services-api/src/main/aidl/com/google/android/gms/clearcut/internal/IClearcutLoggerCallbacks.aidl b/play-services-api/src/main/aidl/com/google/android/gms/clearcut/internal/IClearcutLoggerCallbacks.aidl index 31042db8..61e23cff 100644 --- a/play-services-api/src/main/aidl/com/google/android/gms/clearcut/internal/IClearcutLoggerCallbacks.aidl +++ b/play-services-api/src/main/aidl/com/google/android/gms/clearcut/internal/IClearcutLoggerCallbacks.aidl @@ -1,7 +1,13 @@ package com.google.android.gms.clearcut.internal; import com.google.android.gms.common.api.Status; +import com.google.android.gms.common.data.DataHolder; interface IClearcutLoggerCallbacks { - oneway void onStatus(in Status status) = 0; + oneway void onLogResult(in Status status) = 0; + oneway void onForceUploadResult(in Status status) = 1; + oneway void onStartCollectForDebugResult(in Status status, long l) = 2; + oneway void onStopCollectForDebugResult(in Status status) = 3; + oneway void onCollectForDebugExpiryTime(in Status status, long l) = 4; + oneway void onLogEventParcelables(in DataHolder data) = 6; } diff --git a/play-services-api/src/main/aidl/com/google/android/gms/clearcut/internal/IClearcutLoggerService.aidl b/play-services-api/src/main/aidl/com/google/android/gms/clearcut/internal/IClearcutLoggerService.aidl index b2f1b2fd..018252e0 100644 --- a/play-services-api/src/main/aidl/com/google/android/gms/clearcut/internal/IClearcutLoggerService.aidl +++ b/play-services-api/src/main/aidl/com/google/android/gms/clearcut/internal/IClearcutLoggerService.aidl @@ -4,5 +4,11 @@ import com.google.android.gms.clearcut.internal.IClearcutLoggerCallbacks; import com.google.android.gms.clearcut.LogEventParcelable; interface IClearcutLoggerService { - void log(IClearcutLoggerCallbacks callbacks, in LogEventParcelable event) = 0; + oneway void log(IClearcutLoggerCallbacks callbacks, in LogEventParcelable event) = 0; + oneway void forceUpload(IClearcutLoggerCallbacks callbacks) = 1; + oneway void startCollectForDebug(IClearcutLoggerCallbacks callbacks) = 2; + oneway void stopCollectForDebug(IClearcutLoggerCallbacks callbacks) = 3; + oneway void getCollectForDebugExpiryTime(IClearcutLoggerCallbacks callbacks) = 4; + oneway void getLogEventParcelablesLegacy(IClearcutLoggerCallbacks callbacks) = 5; + oneway void getLogEventParcelables(IClearcutLoggerCallbacks callbacks) = 6; } diff --git a/play-services-api/src/main/aidl/com/google/android/gms/clearcut/internal/PlayLoggerContext.aidl b/play-services-api/src/main/aidl/com/google/android/gms/clearcut/internal/PlayLoggerContext.aidl new file mode 100644 index 00000000..e213b96c --- /dev/null +++ b/play-services-api/src/main/aidl/com/google/android/gms/clearcut/internal/PlayLoggerContext.aidl @@ -0,0 +1,3 @@ +package com.google.android.gms.clearcut.internal; + +parcelable PlayLoggerContext; diff --git a/play-services-api/src/main/aidl/com/google/android/gms/measurement/api/internal/IAppMeasurementDynamiteService.aidl b/play-services-api/src/main/aidl/com/google/android/gms/measurement/api/internal/IAppMeasurementDynamiteService.aidl new file mode 100644 index 00000000..5df0a37f --- /dev/null +++ b/play-services-api/src/main/aidl/com/google/android/gms/measurement/api/internal/IAppMeasurementDynamiteService.aidl @@ -0,0 +1,55 @@ +package com.google.android.gms.measurement.api.internal; + +import com.google.android.gms.dynamic.IObjectWrapper; +import com.google.android.gms.measurement.api.internal.IBundleReceiver; +import com.google.android.gms.measurement.api.internal.IEventHandlerProxy; +import com.google.android.gms.measurement.api.internal.IStringProvider; +import com.google.android.gms.measurement.api.internal.InitializationParams; + +interface IAppMeasurementDynamiteService { + void initialize(in IObjectWrapper context, in InitializationParams params, long timestamp) = 0; + void logEvent(String str, String str2, in Bundle bundle, boolean z, boolean z2, long timestamp) = 1; + void logEventAndBundle(String str, String str2, in Bundle bundle, IBundleReceiver receiver, long j) = 2; + void setUserProperty(String str, String str2, in IObjectWrapper obj, boolean z, long j) = 3; + void getUserProperties(String str, String str2, boolean z, IBundleReceiver receiver) = 4; + void getMaxUserProperties(String str, IBundleReceiver receiver) = 5; + void setUserId(String str, long j) = 6; + void setConditionalUserProperty(in Bundle bundle, long j) = 7; + void clearConditionalUserProperty(String str, String str2, in Bundle bundle) = 8; + void getConditionalUserProperties(String str, String str2, IBundleReceiver receiver) = 9; + void setMeasurementEnabled(boolean z, long j) = 10; + void resetAnalyticsData(long j) = 11; + void setMinimumSessionDuration(long j) = 12; + void setSessionTimeoutDuration(long j) = 13; + void setCurrentScreen(in IObjectWrapper obj, String str, String str2, long j) = 14; + void getCurrentScreenName(IBundleReceiver receiver) = 15; + void getCurrentScreenClass(IBundleReceiver receiver) = 16; + void setInstanceIdProvider(IStringProvider provider) = 17; + void getCachedAppInstanceId(IBundleReceiver receiver) = 18; + void getAppInstanceId(IBundleReceiver receiver) = 19; + void getGmpAppId(IBundleReceiver receiver) = 20; + void generateEventId(IBundleReceiver receiver) = 21; + void beginAdUnitExposure(String str, long j) = 22; + void endAdUnitExposure(String str, long j) = 23; + void onActivityStarted(in IObjectWrapper activity, long j) = 24; + void onActivityStopped(in IObjectWrapper activity, long j) = 25; + void onActivityCreated(in IObjectWrapper activity, in Bundle bundle, long j) = 26; + void onActivityDestroyed(in IObjectWrapper activity, long j) = 27; + void onActivityPaused(in IObjectWrapper activity, long j) = 28; + void onActivityResumed(in IObjectWrapper activity, long j) = 29; + void onActivitySaveInstanceState(in IObjectWrapper activity, IBundleReceiver receiver, long j) = 30; + void performAction(in Bundle bundle, IBundleReceiver receiver, long j) = 31; + void logHealthData(int i, String str, in IObjectWrapper obj, in IObjectWrapper obj2, in IObjectWrapper obj3) = 32; + void setEventInterceptor(IEventHandlerProxy proxy) = 33; + void registerOnMeasurementEventListener(IEventHandlerProxy proxy) = 34; + void unregisterOnMeasurementEventListener(IEventHandlerProxy proxy) = 35; + void initForTests(in Map map) = 36; + void getTestFlag(IBundleReceiver receiver, int i) = 37; + void setDataCollectionEnabled(boolean z) = 38; + void isDataCollectionEnabled(IBundleReceiver receiver) = 39; + + void setDefaultEventParameters(in Bundle bundle) = 41; + void setConsent(in Bundle bundle, long j) = 43; + void setConsentThirdParty(in Bundle bundle, long j) = 44; + void clearMeasurementEnabled(long j) = 42; +} diff --git a/play-services-api/src/main/aidl/com/google/android/gms/measurement/api/internal/IBundleReceiver.aidl b/play-services-api/src/main/aidl/com/google/android/gms/measurement/api/internal/IBundleReceiver.aidl new file mode 100644 index 00000000..68d80ee8 --- /dev/null +++ b/play-services-api/src/main/aidl/com/google/android/gms/measurement/api/internal/IBundleReceiver.aidl @@ -0,0 +1,5 @@ +package com.google.android.gms.measurement.api.internal; + +interface IBundleReceiver { + void onBundle(in Bundle bundle); +} diff --git a/play-services-api/src/main/aidl/com/google/android/gms/measurement/api/internal/IEventHandlerProxy.aidl b/play-services-api/src/main/aidl/com/google/android/gms/measurement/api/internal/IEventHandlerProxy.aidl new file mode 100644 index 00000000..5325899b --- /dev/null +++ b/play-services-api/src/main/aidl/com/google/android/gms/measurement/api/internal/IEventHandlerProxy.aidl @@ -0,0 +1,6 @@ +package com.google.android.gms.measurement.api.internal; + +interface IEventHandlerProxy { + void f1(String s1, String s2, in Bundle bundle, long j) = 0; + int f2() = 1; +} diff --git a/play-services-api/src/main/aidl/com/google/android/gms/measurement/api/internal/IStringProvider.aidl b/play-services-api/src/main/aidl/com/google/android/gms/measurement/api/internal/IStringProvider.aidl new file mode 100644 index 00000000..2d8f9d17 --- /dev/null +++ b/play-services-api/src/main/aidl/com/google/android/gms/measurement/api/internal/IStringProvider.aidl @@ -0,0 +1,4 @@ +package com.google.android.gms.measurement.api.internal; + +interface IStringProvider { +} diff --git a/play-services-api/src/main/aidl/com/google/android/gms/measurement/api/internal/InitializationParams.aidl b/play-services-api/src/main/aidl/com/google/android/gms/measurement/api/internal/InitializationParams.aidl new file mode 100644 index 00000000..cce367c7 --- /dev/null +++ b/play-services-api/src/main/aidl/com/google/android/gms/measurement/api/internal/InitializationParams.aidl @@ -0,0 +1,3 @@ +package com.google.android.gms.measurement.api.internal; + +parcelable InitializationParams; diff --git a/play-services-api/src/main/aidl/com/google/android/gms/measurement/internal/IMeasurementService.aidl b/play-services-api/src/main/aidl/com/google/android/gms/measurement/internal/IMeasurementService.aidl index 8a99173a..1c78896a 100644 --- a/play-services-api/src/main/aidl/com/google/android/gms/measurement/internal/IMeasurementService.aidl +++ b/play-services-api/src/main/aidl/com/google/android/gms/measurement/internal/IMeasurementService.aidl @@ -3,23 +3,25 @@ package com.google.android.gms.measurement.internal; import com.google.android.gms.measurement.internal.AppMetadata; import com.google.android.gms.measurement.internal.ConditionalUserPropertyParcel; import com.google.android.gms.measurement.internal.EventParcel; +import com.google.android.gms.measurement.internal.UserAttributeParcel; interface IMeasurementService { - void f1(in EventParcel p0, in AppMetadata p1) = 0; -// void zza(UserAttributeParcel p0, AppMetadata p1) = 1; - void f4(in AppMetadata p0) = 3; -// void zza(EventParcel p0, String p1, String p2) = 4; -// void zzb(AppMetadata p0) = 5; -// List zza(AppMetadata p0, boolean p1) = 6; -// byte[] zza(EventParcel p0, String p1) = 8; + void f1(in EventParcel event, in AppMetadata app) = 0; + void f2(in UserAttributeParcel attribute, in AppMetadata app) = 1; + void f4(in AppMetadata app) = 3; +// void f5(in EventParcel p0, String p1, String p2) = 4; +// void f6(in AppMetadata p0) = 5; +// List f7(in AppMetadata p0, boolean p1) = 6; +// byte[] f9(in EventParcel p0, String p1) = 8; void f10(long p0, String p1, String p2, String p3) = 9; - String f11(in AppMetadata p0) = 10; - void f12(in ConditionalUserPropertyParcel p0, in AppMetadata p1) = 11; -// void zza(ConditionalUserPropertyParcel p0) = 12; -// List zza(String p0, String p1, boolean p2, AppMetadata p3) = 13; -// List zza(String p0, String p1, String p2, boolean p3) = 14; -// List zza(String p0, String p1, AppMetadata p2) = 15; -// List zza(String p0, String p1, String p2) = 16; -// void zzd(AppMetadata p0) = 17; -// void zza(Bundle p0, AppMetadata p1) = 18; + String f11(in AppMetadata app) = 10; + void f12(in ConditionalUserPropertyParcel property, in AppMetadata app) = 11; +// void f13(ConditionalUserPropertyParcel p0) = 12; +// List getUserProperties(String p0, String p1, boolean p2, in AppMetadata p3) = 13; +// List getUserPropertiesAs(String p0, String p1, String p2, boolean p3) = 14; +// List getConditionalUserProperties(String p0, String p1, in AppMetadata p2) = 15; +// List getCondtionalUserPropertiesAs(String p0, String p1, String p2) = 16; +// void f18(in AppMetadata p0) = 17; + void setDefaultEventParameters(in Bundle params, in AppMetadata app) = 18; +// void f20(in AppMetadata p0) = 19; } diff --git a/play-services-api/src/main/aidl/com/google/android/gms/phenotype/internal/IPhenotypeService.aidl b/play-services-api/src/main/aidl/com/google/android/gms/phenotype/internal/IPhenotypeService.aidl index 724969f9..abba647d 100644 --- a/play-services-api/src/main/aidl/com/google/android/gms/phenotype/internal/IPhenotypeService.aidl +++ b/play-services-api/src/main/aidl/com/google/android/gms/phenotype/internal/IPhenotypeService.aidl @@ -4,5 +4,6 @@ import com.google.android.gms.phenotype.internal.IPhenotypeCallbacks; interface IPhenotypeService { void register(IPhenotypeCallbacks callbacks, String p1, int p2, in String[] p3, in byte[] p4) = 0; + void register2(IPhenotypeCallbacks callbacks, String p1, int p2, in String[] p3, in int[] p4, in byte[] p5) = 1; void getConfigurationSnapshot(IPhenotypeCallbacks callbacks, String p1, String p2, String p3) = 10; } diff --git a/play-services-api/src/main/aidl/com/google/android/gms/playlog/internal/IPlayLogService.aidl b/play-services-api/src/main/aidl/com/google/android/gms/playlog/internal/IPlayLogService.aidl index 86169b99..9bcdee44 100644 --- a/play-services-api/src/main/aidl/com/google/android/gms/playlog/internal/IPlayLogService.aidl +++ b/play-services-api/src/main/aidl/com/google/android/gms/playlog/internal/IPlayLogService.aidl @@ -1,8 +1,9 @@ package com.google.android.gms.playlog.internal; +import com.google.android.gms.clearcut.internal.PlayLoggerContext; import com.google.android.gms.playlog.internal.LogEvent; -import com.google.android.gms.playlog.internal.PlayLoggerContext; +// Deprecated interface IPlayLogService { void onEvent(String packageName, in PlayLoggerContext context, in LogEvent event) = 1; void onMultiEvent(String packageName, in PlayLoggerContext context, in List events) = 2; diff --git a/play-services-api/src/main/aidl/com/google/android/gms/playlog/internal/PlayLoggerContext.aidl b/play-services-api/src/main/aidl/com/google/android/gms/playlog/internal/PlayLoggerContext.aidl deleted file mode 100644 index 9cc0e0e4..00000000 --- a/play-services-api/src/main/aidl/com/google/android/gms/playlog/internal/PlayLoggerContext.aidl +++ /dev/null @@ -1,3 +0,0 @@ -package com.google.android.gms.playlog.internal; - -parcelable PlayLoggerContext; diff --git a/play-services-api/src/main/aidl/com/google/android/gms/usagereporting/UsageReportingOptInOptions.aidl b/play-services-api/src/main/aidl/com/google/android/gms/usagereporting/UsageReportingOptInOptions.aidl new file mode 100644 index 00000000..a88060fb --- /dev/null +++ b/play-services-api/src/main/aidl/com/google/android/gms/usagereporting/UsageReportingOptInOptions.aidl @@ -0,0 +1,3 @@ +package com.google.android.gms.usagereporting; + +parcelable UsageReportingOptInOptions; diff --git a/play-services-api/src/main/aidl/com/google/android/gms/usagereporting/internal/IUsageReportingCallbacks.aidl b/play-services-api/src/main/aidl/com/google/android/gms/usagereporting/internal/IUsageReportingCallbacks.aidl new file mode 100644 index 00000000..3e877c25 --- /dev/null +++ b/play-services-api/src/main/aidl/com/google/android/gms/usagereporting/internal/IUsageReportingCallbacks.aidl @@ -0,0 +1,11 @@ +package com.google.android.gms.usagereporting.internal; + +import com.google.android.gms.common.api.Status; +import com.google.android.gms.usagereporting.UsageReportingOptInOptions; + +interface IUsageReportingCallbacks { + oneway void onOptInOptions(in Status status, in UsageReportingOptInOptions options) = 1; + oneway void onOptInOptionsSet(in Status status) = 2; + oneway void onOptInOptionsChangedListenerAdded(in Status status) = 3; + oneway void onOptInOptionsChangedListenerRemoved(in Status status) = 4; +} diff --git a/play-services-api/src/main/aidl/com/google/android/gms/usagereporting/internal/IUsageReportingOptInOptionsChangedListener.aidl b/play-services-api/src/main/aidl/com/google/android/gms/usagereporting/internal/IUsageReportingOptInOptionsChangedListener.aidl new file mode 100644 index 00000000..8e9c2875 --- /dev/null +++ b/play-services-api/src/main/aidl/com/google/android/gms/usagereporting/internal/IUsageReportingOptInOptionsChangedListener.aidl @@ -0,0 +1,5 @@ +package com.google.android.gms.usagereporting.internal; + +interface IUsageReportingOptInOptionsChangedListener { + oneway void onOptionsChanged() = 1; +} diff --git a/play-services-api/src/main/aidl/com/google/android/gms/usagereporting/internal/IUsageReportingService.aidl b/play-services-api/src/main/aidl/com/google/android/gms/usagereporting/internal/IUsageReportingService.aidl new file mode 100644 index 00000000..46d6265d --- /dev/null +++ b/play-services-api/src/main/aidl/com/google/android/gms/usagereporting/internal/IUsageReportingService.aidl @@ -0,0 +1,12 @@ +package com.google.android.gms.usagereporting.internal; + +import com.google.android.gms.usagereporting.internal.IUsageReportingCallbacks; +import com.google.android.gms.usagereporting.internal.IUsageReportingOptInOptionsChangedListener; +import com.google.android.gms.usagereporting.UsageReportingOptInOptions; + +interface IUsageReportingService { + oneway void getOptInOptions(IUsageReportingCallbacks callbacks) = 1; + oneway void setOptInOptions(in UsageReportingOptInOptions options, IUsageReportingCallbacks callbacks) = 2; + oneway void addOptInOptionsChangedListener(IUsageReportingOptInOptionsChangedListener listener, IUsageReportingCallbacks callbacks) = 3; + oneway void removeOptInOptionsChangedListener(IUsageReportingOptInOptionsChangedListener listener, IUsageReportingCallbacks callbacks) = 4; +} diff --git a/play-services-api/src/main/java/com/google/android/gms/clearcut/LogEventParcelable.java b/play-services-api/src/main/java/com/google/android/gms/clearcut/LogEventParcelable.java index 6ff57373..0f193b9c 100644 --- a/play-services-api/src/main/java/com/google/android/gms/clearcut/LogEventParcelable.java +++ b/play-services-api/src/main/java/com/google/android/gms/clearcut/LogEventParcelable.java @@ -18,12 +18,12 @@ package com.google.android.gms.clearcut; import android.util.Base64; +import com.google.android.gms.clearcut.internal.LogVerifierResultParcelable; import com.google.android.gms.phenotype.ExperimentToken; import com.google.android.gms.phenotype.GenericDimension; -import com.google.android.gms.playlog.internal.PlayLoggerContext; +import com.google.android.gms.clearcut.internal.PlayLoggerContext; import org.microg.safeparcel.AutoSafeParcelable; -import org.microg.safeparcel.SafeParceled; import java.nio.ByteBuffer; import java.nio.CharBuffer; @@ -62,6 +62,9 @@ public class LogEventParcelable extends AutoSafeParcelable { @Field(10) public final GenericDimension[] genericDimensions; + @Field(11) + public final LogVerifierResultParcelable logVerifierResult; + private LogEventParcelable() { context = null; bytes = null; @@ -71,6 +74,7 @@ public class LogEventParcelable extends AutoSafeParcelable { addPhenotypeExperimentTokens = false; experimentTokenParcelables = null; genericDimensions = null; + logVerifierResult = null; } public LogEventParcelable(PlayLoggerContext context, byte[] bytes, int[] testCodes, String[] mendelPackages, int[] experimentIds, byte[][] experimentTokens, boolean addPhenotypeExperimentTokens) { @@ -83,6 +87,7 @@ public class LogEventParcelable extends AutoSafeParcelable { this.addPhenotypeExperimentTokens = addPhenotypeExperimentTokens; this.experimentTokenParcelables = null; this.genericDimensions = null; + this.logVerifierResult = null; } @Override diff --git a/play-services-api/src/main/java/com/google/android/gms/clearcut/internal/LogVerifierResultParcelable.java b/play-services-api/src/main/java/com/google/android/gms/clearcut/internal/LogVerifierResultParcelable.java new file mode 100644 index 00000000..4b1fa834 --- /dev/null +++ b/play-services-api/src/main/java/com/google/android/gms/clearcut/internal/LogVerifierResultParcelable.java @@ -0,0 +1,15 @@ +/* + * SPDX-FileCopyrightText: 2022 microG Project Team + * SPDX-License-Identifier: Apache-2.0 + */ + +package com.google.android.gms.clearcut.internal; + +import org.microg.safeparcel.AutoSafeParcelable; + +public class LogVerifierResultParcelable extends AutoSafeParcelable { + @Field(1) + public boolean b; + + public static final Creator CREATOR = new AutoCreator<>(LogVerifierResultParcelable.class); +} diff --git a/play-services-api/src/main/java/com/google/android/gms/playlog/internal/PlayLoggerContext.java b/play-services-api/src/main/java/com/google/android/gms/clearcut/internal/PlayLoggerContext.java similarity index 77% rename from play-services-api/src/main/java/com/google/android/gms/playlog/internal/PlayLoggerContext.java rename to play-services-api/src/main/java/com/google/android/gms/clearcut/internal/PlayLoggerContext.java index 7f793740..0827632d 100644 --- a/play-services-api/src/main/java/com/google/android/gms/playlog/internal/PlayLoggerContext.java +++ b/play-services-api/src/main/java/com/google/android/gms/clearcut/internal/PlayLoggerContext.java @@ -1,23 +1,11 @@ /* - * Copyright (C) 2013-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. + * SPDX-FileCopyrightText: 2022 microG Project Team + * SPDX-License-Identifier: Apache-2.0 */ -package com.google.android.gms.playlog.internal; +package com.google.android.gms.clearcut.internal; import org.microg.safeparcel.AutoSafeParcelable; -import org.microg.safeparcel.SafeParceled; public class PlayLoggerContext extends AutoSafeParcelable { @@ -33,9 +21,6 @@ public class PlayLoggerContext extends AutoSafeParcelable { @Field(4) public final int logSource; - @Field(8) - public final String logSourceName; - @Field(5) public final String uploadAccount; @@ -45,6 +30,9 @@ public class PlayLoggerContext extends AutoSafeParcelable { @Field(7) public final boolean logAndroidId; + @Field(8) + public final String logSourceName; + @Field(9) public final boolean isAnonymous; @@ -57,13 +45,16 @@ public class PlayLoggerContext extends AutoSafeParcelable { @Field(12) public final boolean scrubMccMnc; + @Field(13) + public final Integer piiLevelset; + private PlayLoggerContext() { packageName = uploadAccount = logSourceName = loggingId = null; - qosTier = packageVersionCode = logSource = appMobileSpecId = -1; + qosTier = packageVersionCode = logSource = appMobileSpecId = piiLevelset = -1; isAnonymous = logAndroidId = scrubMccMnc = false; } - public PlayLoggerContext(String packageName, int packageVersionCode, int logSource, String logSourceName, String uploadAccount, String loggingId, boolean isAnonymous, int qosTier, boolean scrubMccMnc) { + public PlayLoggerContext(String packageName, int packageVersionCode, int logSource, String logSourceName, String uploadAccount, String loggingId, boolean isAnonymous, int qosTier, boolean scrubMccMnc, int piiLevelset) { this.packageName = packageName; this.packageVersionCode = packageVersionCode; this.logSource = logSource; @@ -75,6 +66,7 @@ public class PlayLoggerContext extends AutoSafeParcelable { this.qosTier = qosTier; this.appMobileSpecId = null; this.scrubMccMnc = scrubMccMnc; + this.piiLevelset = piiLevelset; } @Override @@ -89,6 +81,9 @@ public class PlayLoggerContext extends AutoSafeParcelable { sb.append(", logSourceName=").append(logSourceName); sb.append(", isAnonymous=").append(isAnonymous); sb.append(", qosTier=").append(qosTier); + sb.append(", appMobileSpecId=").append(appMobileSpecId); + sb.append(", scrubMccMnc=").append(scrubMccMnc); + sb.append(", piiLevelset=").append(piiLevelset); sb.append(']'); return sb.toString(); } diff --git a/play-services-api/src/main/java/com/google/android/gms/measurement/api/internal/InitializationParams.java b/play-services-api/src/main/java/com/google/android/gms/measurement/api/internal/InitializationParams.java new file mode 100644 index 00000000..43d7ff75 --- /dev/null +++ b/play-services-api/src/main/java/com/google/android/gms/measurement/api/internal/InitializationParams.java @@ -0,0 +1,45 @@ +/* + * SPDX-FileCopyrightText: 2022 microG Project Team + * SPDX-License-Identifier: Apache-2.0 + */ + +package com.google.android.gms.measurement.api.internal; + +import android.os.Bundle; + +import org.microg.safeparcel.AutoSafeParcelable; + +public class InitializationParams extends AutoSafeParcelable { + @Field(1) + public long field1; + @Field(2) + public long field2; + @Field(3) + public boolean field3; + @Field(4) + public String field4; + @Field(5) + public String field5; + @Field(6) + public String field6; + @Field(7) + public Bundle field7; + @Field(8) + public String field8; + + @Override + public String toString() { + return "InitializationParams{" + + "field1=" + field1 + + ", field2=" + field2 + + ", field3=" + field3 + + ", field4='" + field4 + '\'' + + ", field5='" + field5 + '\'' + + ", field6='" + field6 + '\'' + + ", field7=" + field7 + + ", field8='" + field8 + '\'' + + '}'; + } + + public static final Creator CREATOR = new AutoCreator<>(InitializationParams.class); +} diff --git a/play-services-api/src/main/java/com/google/android/gms/measurement/internal/AppMetadata.java b/play-services-api/src/main/java/com/google/android/gms/measurement/internal/AppMetadata.java index be233570..9c7c3671 100644 --- a/play-services-api/src/main/java/com/google/android/gms/measurement/internal/AppMetadata.java +++ b/play-services-api/src/main/java/com/google/android/gms/measurement/internal/AppMetadata.java @@ -57,5 +57,9 @@ public class AppMetadata extends AutoSafeParcelable { @Field(25) private String field25; + public String toString() { + return "AppMetadata[" + packageName + "]"; + } + public static final Creator CREATOR = new AutoCreator<>(AppMetadata.class); } diff --git a/play-services-api/src/main/java/com/google/android/gms/measurement/internal/EventParams.java b/play-services-api/src/main/java/com/google/android/gms/measurement/internal/EventParams.java new file mode 100644 index 00000000..54de1394 --- /dev/null +++ b/play-services-api/src/main/java/com/google/android/gms/measurement/internal/EventParams.java @@ -0,0 +1,17 @@ +/* + * SPDX-FileCopyrightText: 2020, microG Project Team + * SPDX-License-Identifier: Apache-2.0 + */ + +package com.google.android.gms.measurement.internal; + +import android.os.Bundle; + +import org.microg.safeparcel.AutoSafeParcelable; + +public class EventParams extends AutoSafeParcelable { + @Field(2) + public Bundle data; + + public static final Creator CREATOR = new AutoCreator<>(EventParams.class); +} diff --git a/play-services-api/src/main/java/com/google/android/gms/measurement/internal/EventParcel.java b/play-services-api/src/main/java/com/google/android/gms/measurement/internal/EventParcel.java index 3ff7c796..7b5b6179 100644 --- a/play-services-api/src/main/java/com/google/android/gms/measurement/internal/EventParcel.java +++ b/play-services-api/src/main/java/com/google/android/gms/measurement/internal/EventParcel.java @@ -8,5 +8,14 @@ package com.google.android.gms.measurement.internal; import org.microg.safeparcel.AutoSafeParcelable; public class EventParcel extends AutoSafeParcelable { + @Field(2) + public String name; + @Field(3) + public EventParams params; + @Field(4) + public String origin; + @Field(5) + public long timestamp; + public static final Creator CREATOR = new AutoCreator<>(EventParcel.class); } diff --git a/play-services-api/src/main/java/com/google/android/gms/measurement/internal/UserAttributeParcel.java b/play-services-api/src/main/java/com/google/android/gms/measurement/internal/UserAttributeParcel.java index 6070b923..d9c74663 100644 --- a/play-services-api/src/main/java/com/google/android/gms/measurement/internal/UserAttributeParcel.java +++ b/play-services-api/src/main/java/com/google/android/gms/measurement/internal/UserAttributeParcel.java @@ -8,5 +8,20 @@ package com.google.android.gms.measurement.internal; import org.microg.safeparcel.AutoSafeParcelable; public class UserAttributeParcel extends AutoSafeParcelable { + @Field(1) + public int field1; + @Field(2) + public String name; + @Field(3) + public long timestamp; + @Field(4) + public Long field4; + @Field(6) + public String field6; + @Field(7) + public String field7; + @Field(8) + public Double field8; + public static final Creator CREATOR = new AutoCreator<>(UserAttributeParcel.class); } diff --git a/play-services-api/src/main/java/com/google/android/gms/playlog/internal/LogEvent.java b/play-services-api/src/main/java/com/google/android/gms/playlog/internal/LogEvent.java index 791c19b8..03ccbbc5 100644 --- a/play-services-api/src/main/java/com/google/android/gms/playlog/internal/LogEvent.java +++ b/play-services-api/src/main/java/com/google/android/gms/playlog/internal/LogEvent.java @@ -21,6 +21,7 @@ import org.microg.safeparcel.SafeParceled; import java.util.Date; +@Deprecated public class LogEvent extends AutoSafeParcelable { @SafeParceled(1) diff --git a/play-services-api/src/main/java/com/google/android/gms/usagereporting/UsageReportingOptInOptions.java b/play-services-api/src/main/java/com/google/android/gms/usagereporting/UsageReportingOptInOptions.java new file mode 100644 index 00000000..0e7ec10b --- /dev/null +++ b/play-services-api/src/main/java/com/google/android/gms/usagereporting/UsageReportingOptInOptions.java @@ -0,0 +1,15 @@ +/* + * SPDX-FileCopyrightText: 2022 microG Project Team + * SPDX-License-Identifier: Apache-2.0 + */ + +package com.google.android.gms.usagereporting; + +import org.microg.safeparcel.AutoSafeParcelable; + +public class UsageReportingOptInOptions extends AutoSafeParcelable { + @Field(2) + public int optInUsageReporting; + + public static final Creator CREATOR = new AutoCreator<>(UsageReportingOptInOptions.class); +} diff --git a/play-services-core/src/main/AndroidManifest.xml b/play-services-core/src/main/AndroidManifest.xml index e4fa697d..0649e1bb 100644 --- a/play-services-core/src/main/AndroidManifest.xml +++ b/play-services-core/src/main/AndroidManifest.xml @@ -112,15 +112,15 @@ - + - - - - - - - - - - - - @@ -415,7 +401,7 @@ android:exported="true" /> @@ -423,12 +409,24 @@ - + + + + + + + + + + + + + @@ -466,7 +464,7 @@ + android:exported="true" /> + android:roundIcon="@mipmap/ic_microg_settings" + android:taskAffinity="org.microg.gms.settings"> + android:roundIcon="@mipmap/ic_microg_settings" + android:taskAffinity="org.microg.gms.settings" /> + android:targetActivity="org.microg.gms.ui.SettingsActivity" + android:taskAffinity="org.microg.gms.settings"> @@ -532,26 +533,25 @@ + android:process=":ui" + android:taskAffinity="org.microg.gms.settings" /> - - + android:process=":ui" + android:taskAffinity="org.microg.gms.settings" /> + android:process=":ui" + android:taskAffinity="org.microg.gms.settings" /> + android:process=":ui" + android:taskAffinity="org.microg.gms.settings"> @@ -564,7 +564,8 @@ + android:process=":ui" + android:taskAffinity="org.microg.gms.settings"> @@ -590,7 +591,7 @@ @@ -705,37 +706,173 @@ + + + + + + - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/play-services-core/src/main/java/com/google/android/gms/dynamite/descriptors/com/google/android/gms/measurement/dynamite/ModuleDescriptor.java b/play-services-core/src/main/java/com/google/android/gms/dynamite/descriptors/com/google/android/gms/measurement/dynamite/ModuleDescriptor.java new file mode 100644 index 00000000..0c3f0bcd --- /dev/null +++ b/play-services-core/src/main/java/com/google/android/gms/dynamite/descriptors/com/google/android/gms/measurement/dynamite/ModuleDescriptor.java @@ -0,0 +1,22 @@ +/* + * Copyright (C) 2013-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 com.google.android.gms.dynamite.descriptors.com.google.android.gms.measurement.dynamite; + +public class ModuleDescriptor { + public static final String MODULE_ID = "com.google.android.gms.measurement.dynamite"; + public static final int MODULE_VERSION = 53; +} diff --git a/play-services-core/src/main/java/org/microg/gms/clearcut/ClearcutLoggerService.java b/play-services-core/src/main/java/org/microg/gms/clearcut/ClearcutLoggerService.java deleted file mode 100644 index 02203153..00000000 --- a/play-services-core/src/main/java/org/microg/gms/clearcut/ClearcutLoggerService.java +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright (C) 2013-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.clearcut; - -import android.os.RemoteException; - -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.GmsService; - -public class ClearcutLoggerService extends BaseService { - private ClearcutLoggerServiceImpl clearcutService = new ClearcutLoggerServiceImpl(); - - public ClearcutLoggerService() { - super("GmsClearcutSvc", GmsService.CLEARCUT_LOGGER); - } - - @Override - public void handleServiceRequest(IGmsCallbacks callback, GetServiceRequest request, GmsService service) throws RemoteException { - callback.onPostInitComplete(0, clearcutService.asBinder(), null); - } -} diff --git a/play-services-core/src/main/java/org/microg/gms/clearcut/ClearcutLoggerServiceImpl.java b/play-services-core/src/main/java/org/microg/gms/clearcut/ClearcutLoggerServiceImpl.java deleted file mode 100644 index fd1a1dac..00000000 --- a/play-services-core/src/main/java/org/microg/gms/clearcut/ClearcutLoggerServiceImpl.java +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright (C) 2013-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.clearcut; - -import android.os.RemoteException; -import android.util.Log; - -import com.google.android.gms.clearcut.LogEventParcelable; -import com.google.android.gms.clearcut.internal.IClearcutLoggerCallbacks; -import com.google.android.gms.clearcut.internal.IClearcutLoggerService; -import com.google.android.gms.common.api.Status; - -public class ClearcutLoggerServiceImpl extends IClearcutLoggerService.Stub { - private static final String TAG = "GmsClearcutLogSvcImpl"; - - @Override - public void log(IClearcutLoggerCallbacks callbacks, LogEventParcelable event) throws RemoteException { - // These logs are not really helpful for us, so let's just ignore it. - try { - callbacks.onStatus(Status.SUCCESS); - } catch (Exception ignored) { - } - } -} diff --git a/play-services-core/src/main/java/org/microg/gms/measurement/MeasurementBrokerService.java b/play-services-core/src/main/java/org/microg/gms/measurement/MeasurementBrokerService.java deleted file mode 100644 index 4cd9a0f8..00000000 --- a/play-services-core/src/main/java/org/microg/gms/measurement/MeasurementBrokerService.java +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Copyright (C) 2018 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.measurement; - -import android.os.RemoteException; -import android.util.Log; - -import com.google.android.gms.common.api.CommonStatusCodes; -import com.google.android.gms.common.api.Status; -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.GmsService; - -public class MeasurementBrokerService extends BaseService { - public MeasurementBrokerService() { - super("GmsMeasureBrokerSvc", GmsService.MEASUREMENT); - } - - @Override - public void handleServiceRequest(IGmsCallbacks callback, GetServiceRequest request, GmsService service) throws RemoteException { - callback.onPostInitComplete(CommonStatusCodes.SUCCESS, new MeasurementServiceImpl().asBinder(), null); - } -} diff --git a/play-services-core/src/main/java/org/microg/gms/measurement/MeasurementServiceImpl.java b/play-services-core/src/main/java/org/microg/gms/measurement/MeasurementServiceImpl.java deleted file mode 100644 index b6fbb62b..00000000 --- a/play-services-core/src/main/java/org/microg/gms/measurement/MeasurementServiceImpl.java +++ /dev/null @@ -1,63 +0,0 @@ -/* - * Copyright (C) 2018 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.measurement; - -import android.os.Parcel; -import android.os.RemoteException; -import android.util.Log; - -import com.google.android.gms.measurement.internal.AppMetadata; -import com.google.android.gms.measurement.internal.ConditionalUserPropertyParcel; -import com.google.android.gms.measurement.internal.EventParcel; -import com.google.android.gms.measurement.internal.IMeasurementService; - -public class MeasurementServiceImpl extends IMeasurementService.Stub { - private static final String TAG = "GmsMeasureSvcImpl"; - - @Override - public boolean onTransact(int code, Parcel data, Parcel reply, int flags) throws RemoteException { - if (super.onTransact(code, data, reply, flags)) return true; - Log.d(TAG, "onTransact [unknown]: " + code + ", " + data + ", " + flags); - return false; - } - - @Override - public void f1(EventParcel p0, AppMetadata p1) throws RemoteException { - Log.d(TAG, "f1: " + p1.packageName); - } - - @Override - public void f4(AppMetadata p0) throws RemoteException { - Log.d(TAG, "f4: " + p0.packageName); - } - - @Override - public void f10(long p0, String p1, String p2, String p3) throws RemoteException { - Log.d(TAG, "f10: " + p1); - } - - @Override - public String f11(AppMetadata p0) throws RemoteException { - Log.d(TAG, "f11: " + p0.packageName); - return null; - } - - @Override - public void f12(ConditionalUserPropertyParcel p0, AppMetadata p1) throws RemoteException { - Log.d(TAG, "f12: " + p1.packageName); - } -} diff --git a/play-services-core/src/main/java/org/microg/gms/playlog/PlayLogService.java b/play-services-core/src/main/java/org/microg/gms/playlog/PlayLogService.java index 28015345..f86cd109 100644 --- a/play-services-core/src/main/java/org/microg/gms/playlog/PlayLogService.java +++ b/play-services-core/src/main/java/org/microg/gms/playlog/PlayLogService.java @@ -24,6 +24,7 @@ import com.google.android.gms.common.internal.IGmsCallbacks; import org.microg.gms.BaseService; import org.microg.gms.common.GmsService; +@Deprecated public class PlayLogService extends BaseService { private PlayLogServiceImpl playLogService = new PlayLogServiceImpl(); diff --git a/play-services-core/src/main/java/org/microg/gms/playlog/PlayLogServiceImpl.java b/play-services-core/src/main/java/org/microg/gms/playlog/PlayLogServiceImpl.java index ddf82e44..62996728 100644 --- a/play-services-core/src/main/java/org/microg/gms/playlog/PlayLogServiceImpl.java +++ b/play-services-core/src/main/java/org/microg/gms/playlog/PlayLogServiceImpl.java @@ -22,10 +22,11 @@ import android.util.Log; import com.google.android.gms.playlog.internal.IPlayLogService; import com.google.android.gms.playlog.internal.LogEvent; -import com.google.android.gms.playlog.internal.PlayLoggerContext; +import com.google.android.gms.clearcut.internal.PlayLoggerContext; import java.util.List; +@Deprecated public class PlayLogServiceImpl extends IPlayLogService.Stub { private static final String TAG = "GmsPlayLogSvcImpl"; diff --git a/play-services-core/src/main/kotlin/com/google/android/gms/measurement/internal/AppMeasurementDynamiteService.kt b/play-services-core/src/main/kotlin/com/google/android/gms/measurement/internal/AppMeasurementDynamiteService.kt new file mode 100644 index 00000000..a0f3373c --- /dev/null +++ b/play-services-core/src/main/kotlin/com/google/android/gms/measurement/internal/AppMeasurementDynamiteService.kt @@ -0,0 +1,198 @@ +/* + * SPDX-FileCopyrightText: 2022 microG Project Team + * SPDX-License-Identifier: Apache-2.0 + */ +package com.google.android.gms.measurement.internal + +import android.os.Bundle +import android.os.Parcelable +import android.util.Log +import com.google.android.gms.dynamic.IObjectWrapper +import com.google.android.gms.measurement.api.internal.* + +private const val TAG = "AppMeasurementService" + +class AppMeasurementDynamiteService : IAppMeasurementDynamiteService.Stub() { + override fun initialize(context: IObjectWrapper?, params: InitializationParams?, timestamp: Long) { + Log.d(TAG, "Not yet implemented: initialize") + } + + override fun logEvent(str: String?, str2: String?, bundle: Bundle?, z: Boolean, z2: Boolean, timestamp: Long) { + Log.d(TAG, "Not yet implemented: logEvent") + } + + override fun logEventAndBundle(str: String?, str2: String?, bundle: Bundle?, receiver: IBundleReceiver?, j: Long) { + Log.d(TAG, "Not yet implemented: logEventAndBundle") + receiver?.onBundle(Bundle().apply { putByteArray("r", ByteArray(0)) }) + } + + override fun setUserProperty(str: String?, str2: String?, obj: IObjectWrapper?, z: Boolean, j: Long) { + Log.d(TAG, "Not yet implemented: setUserProperty") + } + + override fun getUserProperties(str: String?, str2: String?, z: Boolean, receiver: IBundleReceiver?) { + Log.d(TAG, "Not yet implemented: getUserProperties") + receiver?.onBundle(Bundle()) + } + + override fun getMaxUserProperties(str: String?, receiver: IBundleReceiver?) { + Log.d(TAG, "Not yet implemented: getMaxUserProperties") + receiver?.onBundle(Bundle().apply { putInt("r", 25) }) + } + + override fun setUserId(str: String?, j: Long) { + Log.d(TAG, "Not yet implemented: setUserId") + } + + override fun setConditionalUserProperty(bundle: Bundle?, j: Long) { + Log.d(TAG, "Not yet implemented: setConditionalUserProperty") + } + + override fun clearConditionalUserProperty(str: String?, str2: String?, bundle: Bundle?) { + Log.d(TAG, "Not yet implemented: clearConditionalUserProperty") + } + + override fun getConditionalUserProperties(str: String?, str2: String?, receiver: IBundleReceiver?) { + Log.d(TAG, "Not yet implemented: getConditionalUserProperties") + receiver?.onBundle(Bundle().apply { putParcelableArrayList("r", arrayListOf()) }) + } + + override fun setMeasurementEnabled(z: Boolean, j: Long) { + Log.d(TAG, "Not yet implemented: setMeasurementEnabled") + } + + override fun resetAnalyticsData(j: Long) { + Log.d(TAG, "Not yet implemented: resetAnalyticsData") + } + + override fun setMinimumSessionDuration(j: Long) { + Log.d(TAG, "Not yet implemented: setMinimumSessionDuration") + } + + override fun setSessionTimeoutDuration(j: Long) { + Log.d(TAG, "Not yet implemented: setSessionTimeoutDuration") + } + + override fun setCurrentScreen(obj: IObjectWrapper?, str: String?, str2: String?, j: Long) { + Log.d(TAG, "Not yet implemented: setCurrentScreen") + } + + override fun getCurrentScreenName(receiver: IBundleReceiver?) { + Log.d(TAG, "Not yet implemented: getCurrentScreenName") + } + + override fun getCurrentScreenClass(receiver: IBundleReceiver?) { + Log.d(TAG, "Not yet implemented: getCurrentScreenClass") + } + + override fun setInstanceIdProvider(provider: IStringProvider?) { + Log.d(TAG, "Not yet implemented: setInstanceIdProvider") + } + + override fun getCachedAppInstanceId(receiver: IBundleReceiver?) { + Log.d(TAG, "Not yet implemented: getCachedAppInstanceId") + } + + override fun getAppInstanceId(receiver: IBundleReceiver?) { + Log.d(TAG, "Not yet implemented: getAppInstanceId") + } + + override fun getGmpAppId(receiver: IBundleReceiver?) { + Log.d(TAG, "Not yet implemented: getGmpAppId") + } + + override fun generateEventId(receiver: IBundleReceiver?) { + Log.d(TAG, "Not yet implemented: generateEventId") + } + + override fun beginAdUnitExposure(str: String?, j: Long) { + Log.d(TAG, "Not yet implemented: beginAdUnitExposure") + } + + override fun endAdUnitExposure(str: String?, j: Long) { + Log.d(TAG, "Not yet implemented: endAdUnitExposure") + } + + override fun onActivityStarted(activity: IObjectWrapper?, j: Long) { + Log.d(TAG, "Not yet implemented: onActivityStarted") + } + + override fun onActivityStopped(activity: IObjectWrapper?, j: Long) { + Log.d(TAG, "Not yet implemented: onActivityStopped") + } + + override fun onActivityCreated(activity: IObjectWrapper?, bundle: Bundle?, j: Long) { + Log.d(TAG, "Not yet implemented: onActivityCreated") + } + + override fun onActivityDestroyed(activity: IObjectWrapper?, j: Long) { + Log.d(TAG, "Not yet implemented: onActivityDestroyed") + } + + override fun onActivityPaused(activity: IObjectWrapper?, j: Long) { + Log.d(TAG, "Not yet implemented: onActivityPaused") + } + + override fun onActivityResumed(activity: IObjectWrapper?, j: Long) { + Log.d(TAG, "Not yet implemented: onActivityResumed") + } + + override fun onActivitySaveInstanceState(activity: IObjectWrapper?, receiver: IBundleReceiver?, j: Long) { + Log.d(TAG, "Not yet implemented: onActivitySaveInstanceState") + receiver?.onBundle(Bundle()) + } + + override fun performAction(bundle: Bundle?, receiver: IBundleReceiver?, j: Long) { + Log.d(TAG, "Not yet implemented: performAction") + } + + override fun logHealthData(i: Int, str: String?, obj: IObjectWrapper?, obj2: IObjectWrapper?, obj3: IObjectWrapper?) { + Log.d(TAG, "Not yet implemented: logHealthData") + } + + override fun setEventInterceptor(proxy: IEventHandlerProxy?) { + Log.d(TAG, "Not yet implemented: setEventInterceptor") + } + + override fun registerOnMeasurementEventListener(proxy: IEventHandlerProxy?) { + Log.d(TAG, "Not yet implemented: registerOnMeasurementEventListener") + } + + override fun unregisterOnMeasurementEventListener(proxy: IEventHandlerProxy?) { + Log.d(TAG, "Not yet implemented: unregisterOnMeasurementEventListener") + } + + override fun initForTests(map: MutableMap?) { + Log.d(TAG, "Not yet implemented: initForTests") + } + + override fun getTestFlag(receiver: IBundleReceiver?, i: Int) { + Log.d(TAG, "Not yet implemented: getTestFlag") + } + + override fun setDataCollectionEnabled(z: Boolean) { + Log.d(TAG, "Not yet implemented: setDataCollectionEnabled") + } + + override fun isDataCollectionEnabled(receiver: IBundleReceiver?) { + Log.d(TAG, "Not yet implemented: isDataCollectionEnabled") + receiver?.onBundle(Bundle().apply { putBoolean("r", false) }) + } + + override fun setDefaultEventParameters(bundle: Bundle?) { + Log.d(TAG, "Not yet implemented: setDefaultEventParameters") + } + + override fun setConsent(bundle: Bundle?, j: Long) { + Log.d(TAG, "Not yet implemented: setConsent") + } + + override fun setConsentThirdParty(bundle: Bundle?, j: Long) { + Log.d(TAG, "Not yet implemented: setConsentThirdParty") + } + + override fun clearMeasurementEnabled(j: Long) { + Log.d(TAG, "Not yet implemented: clearMeasurementEnabled") + } + +} diff --git a/play-services-core/src/main/kotlin/org/microg/gms/clearcut/ClearcutLoggerService.kt b/play-services-core/src/main/kotlin/org/microg/gms/clearcut/ClearcutLoggerService.kt new file mode 100644 index 00000000..afe0dc7f --- /dev/null +++ b/play-services-core/src/main/kotlin/org/microg/gms/clearcut/ClearcutLoggerService.kt @@ -0,0 +1,80 @@ +/* + * SPDX-FileCopyrightText: 2022 microG Project Team + * SPDX-License-Identifier: Apache-2.0 + */ +package org.microg.gms.clearcut + +import android.os.Parcel +import android.os.RemoteException +import androidx.lifecycle.Lifecycle +import androidx.lifecycle.LifecycleOwner +import androidx.lifecycle.lifecycleScope +import com.google.android.gms.clearcut.LogEventParcelable +import com.google.android.gms.clearcut.internal.IClearcutLoggerCallbacks +import com.google.android.gms.clearcut.internal.IClearcutLoggerService +import com.google.android.gms.common.api.CommonStatusCodes +import com.google.android.gms.common.api.Status +import com.google.android.gms.common.data.DataHolder +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.GmsService +import org.microg.gms.utils.warnOnTransactionIssues + +private const val TAG = "ClearcutLoggerService" +private const val COLLECT_FOR_DEBUG_DURATION = 24L * 60 * 60 * 1000 + +class ClearcutLoggerService : BaseService(TAG, GmsService.CLEARCUT_LOGGER) { + override fun handleServiceRequest(callback: IGmsCallbacks, request: GetServiceRequest, service: GmsService) { + callback.onPostInitComplete(0, ClearcutLoggerServiceImpl(lifecycle), null) + } +} + +class ClearcutLoggerServiceImpl(private val lifecycle: Lifecycle) : IClearcutLoggerService.Stub(), LifecycleOwner { + private var collectForDebugExpiryTime: Long = 0 + + override fun log(callbacks: IClearcutLoggerCallbacks, event: LogEventParcelable) { + lifecycleScope.launchWhenStarted { + callbacks.onLogResult(Status.SUCCESS) + } + } + + override fun forceUpload(callbacks: IClearcutLoggerCallbacks) { + lifecycleScope.launchWhenStarted { + callbacks.onLogResult(Status.SUCCESS) + } + } + + override fun startCollectForDebug(callbacks: IClearcutLoggerCallbacks) { + lifecycleScope.launchWhenStarted { + collectForDebugExpiryTime = System.currentTimeMillis() + COLLECT_FOR_DEBUG_DURATION + callbacks.onStartCollectForDebugResult(Status.SUCCESS, collectForDebugExpiryTime) + } + } + + override fun stopCollectForDebug(callbacks: IClearcutLoggerCallbacks) { + lifecycleScope.launchWhenStarted { + callbacks.onStopCollectForDebugResult(Status.SUCCESS) + } + } + + override fun getCollectForDebugExpiryTime(callbacks: IClearcutLoggerCallbacks) { + lifecycleScope.launchWhenStarted { + callbacks.onCollectForDebugExpiryTime(Status.SUCCESS, collectForDebugExpiryTime) + } + } + + override fun getLogEventParcelablesLegacy(callbacks: IClearcutLoggerCallbacks) { + getLogEventParcelables(callbacks) + } + + override fun getLogEventParcelables(callbacks: IClearcutLoggerCallbacks) { + lifecycleScope.launchWhenStarted { + callbacks.onLogEventParcelables(DataHolder.empty(CommonStatusCodes.SUCCESS)) + } + } + + override fun getLifecycle(): Lifecycle = lifecycle + + override fun onTransact(code: Int, data: Parcel, reply: Parcel?, flags: Int): Boolean = warnOnTransactionIssues(code, reply, flags) { super.onTransact(code, data, reply, flags) } +} diff --git a/play-services-core/src/main/kotlin/org/microg/gms/fonts/FontsProvider.kt b/play-services-core/src/main/kotlin/org/microg/gms/fonts/FontsProvider.kt index a15180c5..2ccf28d0 100644 --- a/play-services-core/src/main/kotlin/org/microg/gms/fonts/FontsProvider.kt +++ b/play-services-core/src/main/kotlin/org/microg/gms/fonts/FontsProvider.kt @@ -35,7 +35,7 @@ class FontsProvider : ContentProvider() { selectionArgs: Array?, sortOrder: String? ): Cursor { - Log.e(TAG, "query: $uri ${projection?.toList()} $selection") + Log.e(TAG, "query: $uri ${projection?.toList()} $selection ${selectionArgs?.joinToString(prefix = "[", postfix = "]")}") val cursor = MatrixCursor(COLUMNS) // We could also return an empty cursor here, but some apps have been reported to crash // when their expected font is not returned by Google's font provider. diff --git a/play-services-core/src/main/kotlin/org/microg/gms/measurement/MeasurementService.kt b/play-services-core/src/main/kotlin/org/microg/gms/measurement/MeasurementService.kt new file mode 100644 index 00000000..7f0a0afe --- /dev/null +++ b/play-services-core/src/main/kotlin/org/microg/gms/measurement/MeasurementService.kt @@ -0,0 +1,58 @@ +/* + * SPDX-FileCopyrightText: 2022 microG Project Team + * SPDX-License-Identifier: Apache-2.0 + */ + +package org.microg.gms.measurement + +import android.os.Bundle +import android.os.Parcel +import android.util.Log +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 com.google.android.gms.measurement.internal.* +import org.microg.gms.BaseService +import org.microg.gms.common.GmsService +import org.microg.gms.utils.warnOnTransactionIssues + +private const val TAG = "MeasurementService" + +class MeasurementService : BaseService(TAG, GmsService.MEASUREMENT) { + override fun handleServiceRequest(callback: IGmsCallbacks, request: GetServiceRequest, service: GmsService) { + callback.onPostInitComplete(CommonStatusCodes.SUCCESS, MeasurementServiceImpl(), Bundle()) + } +} + +class MeasurementServiceImpl : IMeasurementService.Stub() { + override fun f1(event: EventParcel, app: AppMetadata) { + Log.d(TAG, "f1($event) for $app") + } + + override fun f2(attribute: UserAttributeParcel?, app: AppMetadata) { + Log.d(TAG, "f2($attribute) for $app") + } + + override fun f4(app: AppMetadata) { + Log.d(TAG, "f4() for $app") + } + + override fun f10(p0: Long, p1: String?, p2: String?, p3: String?) { + Log.d(TAG, "f10($p0, $p1, $p2, $p3)") + } + + override fun f11(app: AppMetadata): String? { + Log.d(TAG, "f11() for $app") + return null + } + + override fun f12(property: ConditionalUserPropertyParcel, app: AppMetadata) { + Log.d(TAG, "f12($property) for $app") + } + + override fun setDefaultEventParameters(params: Bundle, app: AppMetadata) { + Log.d(TAG, "setDefaultEventParameters($params) for $app") + } + + override fun onTransact(code: Int, data: Parcel, reply: Parcel?, flags: Int): Boolean = warnOnTransactionIssues(code, reply, flags) { super.onTransact(code, data, reply, flags) } +} diff --git a/play-services-core/src/main/kotlin/org/microg/gms/phenotype/PhenotypeService.kt b/play-services-core/src/main/kotlin/org/microg/gms/phenotype/PhenotypeService.kt index 045d8640..ec83c681 100644 --- a/play-services-core/src/main/kotlin/org/microg/gms/phenotype/PhenotypeService.kt +++ b/play-services-core/src/main/kotlin/org/microg/gms/phenotype/PhenotypeService.kt @@ -15,6 +15,7 @@ import com.google.android.gms.phenotype.internal.IPhenotypeCallbacks import com.google.android.gms.phenotype.internal.IPhenotypeService import org.microg.gms.BaseService import org.microg.gms.common.GmsService +import org.microg.gms.utils.warnOnTransactionIssues private const val TAG = "GmsPhenotypeSvc" @@ -26,7 +27,12 @@ class PhenotypeService : BaseService(TAG, GmsService.PHENOTYPE) { class PhenotypeServiceImpl : IPhenotypeService.Stub() { override fun register(callbacks: IPhenotypeCallbacks, p1: String?, p2: Int, p3: Array?, p4: ByteArray?) { - Log.d(TAG, "register($p1, $p2, ${p3?.contentToString()}, $p4)") + Log.d(TAG, "register($p1, $p2, $p3, $p4)") + callbacks.onRegister(Status.SUCCESS) + } + + override fun register2(callbacks: IPhenotypeCallbacks, p1: String?, p2: Int, p3: Array?, p4: IntArray?, p5: ByteArray?) { + Log.d(TAG, "register2($p1, $p2, $p3, $p4, $p5)") callbacks.onRegister(Status.SUCCESS) } @@ -37,9 +43,5 @@ class PhenotypeServiceImpl : IPhenotypeService.Stub() { }) } - override fun onTransact(code: Int, data: Parcel, reply: Parcel?, flags: Int): Boolean { - if (super.onTransact(code, data, reply, flags)) return true - Log.d(TAG, "onTransact [unknown]: $code, $data, $flags") - return false - } + override fun onTransact(code: Int, data: Parcel, reply: Parcel?, flags: Int): Boolean = warnOnTransactionIssues(code, reply, flags) { super.onTransact(code, data, reply, flags) } } diff --git a/play-services-core/src/main/kotlin/org/microg/gms/provision/ProvisionService.kt b/play-services-core/src/main/kotlin/org/microg/gms/provision/ProvisionService.kt index 27230072..b7c7da70 100644 --- a/play-services-core/src/main/kotlin/org/microg/gms/provision/ProvisionService.kt +++ b/play-services-core/src/main/kotlin/org/microg/gms/provision/ProvisionService.kt @@ -14,10 +14,10 @@ import androidx.lifecycle.lifecycleScope import kotlinx.coroutines.delay import org.microg.gms.checkin.getCheckinServiceInfo import org.microg.gms.checkin.setCheckinServiceConfiguration +import org.microg.gms.droidguard.core.DroidGuardPreferences import org.microg.gms.gcm.getGcmServiceInfo import org.microg.gms.gcm.setGcmServiceConfiguration -import org.microg.gms.safetynet.getSafetyNetServiceInfo -import org.microg.gms.safetynet.setSafetyNetServiceConfiguration +import org.microg.gms.safetynet.SafetyNetPreferences class ProvisionService : LifecycleService() { private fun Bundle.getBooleanOrNull(key: String): Boolean? { @@ -34,7 +34,10 @@ class ProvisionService : LifecycleService() { intent?.extras?.getBooleanOrNull("checkin_enabled")?.let { setCheckinServiceConfiguration(this@ProvisionService, getCheckinServiceInfo(this@ProvisionService).configuration.copy(enabled = it)) } intent?.extras?.getBooleanOrNull("gcm_enabled")?.let { setGcmServiceConfiguration(this@ProvisionService, getGcmServiceInfo(this@ProvisionService).configuration.copy(enabled = it)) } - intent?.extras?.getBooleanOrNull("safetynet_enabled")?.let { setSafetyNetServiceConfiguration(this@ProvisionService, getSafetyNetServiceInfo(this@ProvisionService).configuration.copy(enabled = it)) } + intent?.extras?.getBooleanOrNull("safetynet_enabled")?.let { + SafetyNetPreferences.setEnabled(this@ProvisionService, it) + DroidGuardPreferences.setEnabled(this@ProvisionService, it) + } // What else? delay(2 * 1000) // Wait 2 seconds to give provisioning some extra time diff --git a/play-services-core/src/main/kotlin/org/microg/gms/udc/FacsCacheService.kt b/play-services-core/src/main/kotlin/org/microg/gms/udc/FacsCacheService.kt index c12b37bf..c48e0e81 100644 --- a/play-services-core/src/main/kotlin/org/microg/gms/udc/FacsCacheService.kt +++ b/play-services-core/src/main/kotlin/org/microg/gms/udc/FacsCacheService.kt @@ -5,6 +5,7 @@ package org.microg.gms.udc +import android.os.Parcel import android.util.Log import com.google.android.gms.common.api.Status import com.google.android.gms.common.internal.GetServiceRequest @@ -14,6 +15,7 @@ import com.google.android.gms.facs.cache.internal.IFacsCacheCallbacks import com.google.android.gms.facs.cache.internal.IFacsCacheService import org.microg.gms.BaseService import org.microg.gms.common.GmsService +import org.microg.gms.utils.warnOnTransactionIssues private const val TAG = "GmsFacsCache" @@ -49,4 +51,5 @@ class FacsCacheServiceImpl : IFacsCacheService.Stub() { callbacks.onWriteDeviceLevelSettingsResult(Status.CANCELED) } + override fun onTransact(code: Int, data: Parcel, reply: Parcel?, flags: Int): Boolean = warnOnTransactionIssues(code, reply, flags) { super.onTransact(code, data, reply, flags) } } diff --git a/play-services-core/src/main/kotlin/org/microg/gms/ui/SettingsFragment.kt b/play-services-core/src/main/kotlin/org/microg/gms/ui/SettingsFragment.kt index cdeb2007..196cee33 100644 --- a/play-services-core/src/main/kotlin/org/microg/gms/ui/SettingsFragment.kt +++ b/play-services-core/src/main/kotlin/org/microg/gms/ui/SettingsFragment.kt @@ -11,10 +11,12 @@ import androidx.lifecycle.lifecycleScope import androidx.navigation.fragment.findNavController import androidx.preference.Preference import com.google.android.gms.R -import org.microg.gms.checkin.getCheckinServiceInfo +import org.microg.gms.checkin.CheckinPrefs import org.microg.gms.gcm.GcmDatabase import org.microg.gms.gcm.getGcmServiceInfo -import org.microg.gms.safetynet.getSafetyNetServiceInfo +import org.microg.gms.safetynet.SafetyNetPreferences +import org.microg.nlp.client.GeocodeClient +import org.microg.nlp.client.LocationClient import org.microg.nlp.client.UnifiedLocationClient import org.microg.tools.ui.ResourceSettingsFragment @@ -68,10 +70,14 @@ class SettingsFragment : ResourceSettingsFragment() { findPreference(PREF_GCM)!!.setSummary(R.string.service_status_disabled_short) } - findPreference(PREF_CHECKIN)!!.setSummary(if (getCheckinServiceInfo(context).configuration.enabled) R.string.service_status_enabled_short else R.string.service_status_disabled_short) - findPreference(PREF_SNET)!!.setSummary(if (getSafetyNetServiceInfo(context).configuration.enabled) R.string.service_status_enabled_short else R.string.service_status_disabled_short) + findPreference(PREF_CHECKIN)!!.setSummary(if (CheckinPrefs.isEnabled(context)) R.string.service_status_enabled_short else R.string.service_status_disabled_short) + findPreference(PREF_SNET)!!.setSummary(if (SafetyNetPreferences.isEnabled(context)) R.string.service_status_enabled_short else R.string.service_status_disabled_short) - val backendCount = UnifiedLocationClient[context].getLocationBackends().size + UnifiedLocationClient[context].getGeocoderBackends().size + val backendCount = try { + LocationClient(context, lifecycle).getLocationBackends().size + GeocodeClient(context, lifecycle).getGeocodeBackends().size + } catch (e: Exception) { + 0 + } findPreference(PREF_UNIFIEDNLP)!!.summary = context.resources.getQuantityString(R.plurals.pref_unifiednlp_summary, backendCount, backendCount) findPreference(PREF_EXPOSURE)?.isVisible = NearbyPreferencesIntegration.isAvailable diff --git a/play-services-core/src/main/kotlin/org/microg/gms/usagereporting/UsageReportingService.kt b/play-services-core/src/main/kotlin/org/microg/gms/usagereporting/UsageReportingService.kt new file mode 100644 index 00000000..86831b2e --- /dev/null +++ b/play-services-core/src/main/kotlin/org/microg/gms/usagereporting/UsageReportingService.kt @@ -0,0 +1,53 @@ +/* + * SPDX-FileCopyrightText: 2022 microG Project Team + * SPDX-License-Identifier: Apache-2.0 + */ + +package org.microg.gms.usagereporting + +import android.os.Bundle +import android.os.Parcel +import android.util.Log +import com.google.android.gms.common.api.CommonStatusCodes +import com.google.android.gms.common.api.Status +import com.google.android.gms.common.internal.GetServiceRequest +import com.google.android.gms.common.internal.IGmsCallbacks +import com.google.android.gms.usagereporting.UsageReportingOptInOptions +import com.google.android.gms.usagereporting.internal.IUsageReportingCallbacks +import com.google.android.gms.usagereporting.internal.IUsageReportingOptInOptionsChangedListener +import com.google.android.gms.usagereporting.internal.IUsageReportingService +import org.microg.gms.BaseService +import org.microg.gms.common.GmsService +import org.microg.gms.utils.warnOnTransactionIssues + +private const val TAG = "UsageReportingService" + +class UsageReportingService : BaseService(TAG, GmsService.USAGE_REPORTING) { + override fun handleServiceRequest(callback: IGmsCallbacks, request: GetServiceRequest, service: GmsService) { + callback.onPostInitComplete(CommonStatusCodes.SUCCESS, UsageReportingServiceImpl(), Bundle()) + } +} + +class UsageReportingServiceImpl : IUsageReportingService.Stub() { + override fun getOptInOptions(callbacks: IUsageReportingCallbacks) { + // Don't log to prevent log spam + callbacks.onOptInOptions(Status.SUCCESS, UsageReportingOptInOptions().apply { optInUsageReporting = 2 }) + } + + override fun setOptInOptions(options: UsageReportingOptInOptions, callbacks: IUsageReportingCallbacks) { + Log.d(TAG, "setOptInOptions($options)") + callbacks.onOptInOptionsSet(Status.SUCCESS) + } + + override fun addOptInOptionsChangedListener(listener: IUsageReportingOptInOptionsChangedListener, callbacks: IUsageReportingCallbacks) { + Log.d(TAG, "addOptInOptionsChangedListener($listener)") + callbacks.onOptInOptionsChangedListenerAdded(Status.SUCCESS) + } + + override fun removeOptInOptionsChangedListener(listener: IUsageReportingOptInOptionsChangedListener, callbacks: IUsageReportingCallbacks) { + Log.d(TAG, "removeOptInOptionsChangedListener($listener)") + callbacks.onOptInOptionsChangedListenerRemoved(Status.SUCCESS) + } + + override fun onTransact(code: Int, data: Parcel, reply: Parcel?, flags: Int): Boolean = warnOnTransactionIssues(code, reply, flags) { super.onTransact(code, data, reply, flags) } +}