From bc3cd9b74eb0e1faeb5db1b04485cfb5dcd498ef Mon Sep 17 00:00:00 2001 From: Jonathan Klee Date: Mon, 8 Jun 2026 19:54:16 +0200 Subject: [PATCH 01/20] fix crash for legacy AdLoader fallback for old mobile Ads sdk apps (#3330) --- .../gms/ads/AdLoaderBuilderCreatorImpl.kt | 2 +- .../android/gms/ads/LegacyAdLoaderBuilder.kt | 29 +++++++++++++++++++ .../gms/ads/internal/client/IAdLoader.aidl | 9 ++++++ .../ads/internal/client/IAdLoaderBuilder.aidl | 9 ++++++ 4 files changed, 48 insertions(+), 1 deletion(-) create mode 100644 play-services-ads-lite/core/src/main/kotlin/com/google/android/gms/ads/LegacyAdLoaderBuilder.kt create mode 100644 play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/client/IAdLoader.aidl create mode 100644 play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/client/IAdLoaderBuilder.aidl diff --git a/play-services-ads-lite/core/src/main/kotlin/com/google/android/gms/ads/AdLoaderBuilderCreatorImpl.kt b/play-services-ads-lite/core/src/main/kotlin/com/google/android/gms/ads/AdLoaderBuilderCreatorImpl.kt index dc258c2ded..d6f88b67b1 100644 --- a/play-services-ads-lite/core/src/main/kotlin/com/google/android/gms/ads/AdLoaderBuilderCreatorImpl.kt +++ b/play-services-ads-lite/core/src/main/kotlin/com/google/android/gms/ads/AdLoaderBuilderCreatorImpl.kt @@ -19,7 +19,7 @@ private const val TAG = "AdLoaderBuilder" class AdLoaderBuilderCreatorImpl : IAdLoaderBuilderCreator.Stub() { override fun newAdLoaderBuilder(context: IObjectWrapper?, adUnitId: String, adapterCreator: IAdapterCreator?, clientVersion: Int): IBinder? { Log.d(TAG, "newAdLoaderBuilder: adUnitId=$adUnitId clientVersion=$clientVersion") - return null + return LegacyAdLoaderBuilder() } override fun onTransact(code: Int, data: Parcel, reply: Parcel?, flags: Int): Boolean = warnOnTransactionIssues(code, reply, flags, TAG) { super.onTransact(code, data, reply, flags) } diff --git a/play-services-ads-lite/core/src/main/kotlin/com/google/android/gms/ads/LegacyAdLoaderBuilder.kt b/play-services-ads-lite/core/src/main/kotlin/com/google/android/gms/ads/LegacyAdLoaderBuilder.kt new file mode 100644 index 0000000000..65d4737938 --- /dev/null +++ b/play-services-ads-lite/core/src/main/kotlin/com/google/android/gms/ads/LegacyAdLoaderBuilder.kt @@ -0,0 +1,29 @@ +/* + * SPDX-FileCopyrightText: 2026 microG Project Team + * SPDX-License-Identifier: Apache-2.0 + */ +package com.google.android.gms.ads + +import android.os.IBinder +import android.util.Log +import com.google.android.gms.ads.internal.AdRequestParcel +import com.google.android.gms.ads.internal.client.IAdLoader +import com.google.android.gms.ads.internal.client.IAdLoaderBuilder + +private const val TAG = "LegacyAdLoader" + +internal class LegacyAdLoaderBuilder : IAdLoaderBuilder.Stub() { + override fun build(): IAdLoader = LegacyAdLoader + override fun setAdListener(listener: IBinder?) = Unit + override fun setUnifiedNativeAdLoadedListener(listener: IBinder?) = Unit +} + +private object LegacyAdLoader : IAdLoader.Stub() { + override fun load(request: AdRequestParcel?) { + Log.w(TAG, "load") + } + override fun isLoading(): Boolean = false + override fun loadAds(request: AdRequestParcel?, count: Int) { + Log.w(TAG, "load ads") + } +} diff --git a/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/client/IAdLoader.aidl b/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/client/IAdLoader.aidl new file mode 100644 index 0000000000..db38873665 --- /dev/null +++ b/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/client/IAdLoader.aidl @@ -0,0 +1,9 @@ +package com.google.android.gms.ads.internal.client; + +import com.google.android.gms.ads.internal.AdRequestParcel; + +interface IAdLoader { + void load(in AdRequestParcel request) = 0; + boolean isLoading() = 2; + void loadAds(in AdRequestParcel request, int count) = 4; +} diff --git a/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/client/IAdLoaderBuilder.aidl b/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/client/IAdLoaderBuilder.aidl new file mode 100644 index 0000000000..899c2a68a6 --- /dev/null +++ b/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/client/IAdLoaderBuilder.aidl @@ -0,0 +1,9 @@ +package com.google.android.gms.ads.internal.client; + +import com.google.android.gms.ads.internal.client.IAdLoader; + +interface IAdLoaderBuilder { + IAdLoader build() = 0; + void setAdListener(IBinder listener) = 1; + void setUnifiedNativeAdLoadedListener(IBinder listener) = 9; +} From 96afe5957f5c59e7d434972aed162e8ff9099d30 Mon Sep 17 00:00:00 2001 From: DaVinci9196 <150454414+DaVinci9196@users.noreply.github.com> Date: Tue, 9 Jun 2026 03:46:47 +0800 Subject: [PATCH 02/20] AdMob: Add ChimeraCreator Impl (#3536) Co-authored-by: Marvin W --- play-services-ads-lite/build.gradle | 1 + .../gms/ads/AdLoaderBuilderCreatorImpl.kt | 2 +- .../android/gms/ads/AdManagerCreatorImpl.kt | 22 ++++++- .../ads/ChimeraAdLoaderBuilderCreatorImpl.kt | 18 ++++++ .../gms/ads/ChimeraAdManagerCreatorImpl.kt | 17 ++++++ ...imeraMobileAdsSettingManagerCreatorImpl.kt | 18 ++++++ .../android/gms/ads/LegacyAdLoaderBuilder.kt | 33 +++++++++-- .../google/android/gms/ads/LegacyAdManager.kt | 56 ++++++++++++++++++ .../ads/MobileAdsSettingManagerCreatorImpl.kt | 2 +- .../ads/formats/AdManagerAdViewOptions.aidl | 8 +++ .../ads/formats/PublisherAdViewOptions.aidl | 8 +++ .../gms/ads/internal/client/AdSizeParcel.aidl | 8 +++ .../ads/internal/client/AdValueParcel.aidl | 8 +++ .../ads/internal/client/IAdClickListener.aidl | 10 ++++ .../gms/ads/internal/client/IAdListener.aidl | 19 ++++++ .../ads/internal/client/IAdLoadCallback.aidl | 13 ++++ .../gms/ads/internal/client/IAdLoader.aidl | 7 +++ .../ads/internal/client/IAdLoaderBuilder.aidl | 33 ++++++++++- .../gms/ads/internal/client/IAdManager.aidl | 38 ++++++++++++ .../internal/client/IAdManagerCreator.aidl | 15 +++++ .../internal/client/IAppEventListener.aidl | 10 ++++ .../client/ICorrelationIdProvider.aidl | 10 ++++ .../client/IFullScreenContentCallback.aidl | 16 +++++ .../internal/client/IOnPaidEventListener.aidl | 11 +++- .../ads/internal/client/IVideoController.aidl | 24 ++++++++ .../client/IVideoLifecycleCallbacks.aidl | 14 +++++ .../formats/NativeAdOptionsParcel.aidl | 8 +++ .../formats/client/IAttributionInfo.aidl | 14 +++++ .../formats/client/INativeAdImage.aidl | 17 ++++++ .../formats/client/INativeAppInstallAd.aidl | 28 +++++++++ .../formats/client/INativeContentAd.aidl | 26 ++++++++ .../client/INativeCustomTemplateAd.aidl | 22 +++++++ .../client/IOnAppInstallAdLoadedListener.aidl | 12 ++++ .../client/IOnContentAdLoadedListener.aidl | 12 ++++ .../client/IOnCustomClickListener.aidl | 12 ++++ .../IOnCustomTemplateAdLoadedListener.aidl | 12 ++++ .../IOnPublisherAdViewLoadedListener.aidl | 12 ++++ .../IOnUnifiedNativeAdLoadedListener.aidl | 12 ++++ .../formats/client/IUnifiedNativeAd.aidl | 36 +++++++++++ .../InstreamAdConfigurationParcel.aidl | 8 +++ .../internal/instream/client/IInstreamAd.aidl | 14 +++++ .../client/IInstreamAdLoadCallback.aidl | 13 ++++ .../ads/formats/AdManagerAdViewOptions.java | 28 +++++++++ .../ads/formats/PublisherAdViewOptions.java | 34 +++++++++++ .../gms/ads/internal/client/AdSizeParcel.java | 59 +++++++++++++++++++ .../ads/internal/client/AdValueParcel.java | 34 +++++++++++ .../internal/client/VideoOptionsParcel.java | 32 ++++++++++ .../formats/NativeAdOptionsParcel.java | 49 +++++++++++++++ .../InstreamAdConfigurationParcel.java | 34 +++++++++++ 49 files changed, 937 insertions(+), 12 deletions(-) create mode 100644 play-services-ads-lite/core/src/main/kotlin/com/google/android/gms/ads/ChimeraAdLoaderBuilderCreatorImpl.kt create mode 100644 play-services-ads-lite/core/src/main/kotlin/com/google/android/gms/ads/ChimeraAdManagerCreatorImpl.kt create mode 100644 play-services-ads-lite/core/src/main/kotlin/com/google/android/gms/ads/ChimeraMobileAdsSettingManagerCreatorImpl.kt create mode 100644 play-services-ads-lite/core/src/main/kotlin/com/google/android/gms/ads/LegacyAdManager.kt create mode 100644 play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/formats/AdManagerAdViewOptions.aidl create mode 100644 play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/formats/PublisherAdViewOptions.aidl create mode 100644 play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/client/AdSizeParcel.aidl create mode 100644 play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/client/AdValueParcel.aidl create mode 100644 play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/client/IAdClickListener.aidl create mode 100644 play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/client/IAdListener.aidl create mode 100644 play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/client/IAdLoadCallback.aidl create mode 100644 play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/client/IAdManager.aidl create mode 100644 play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/client/IAdManagerCreator.aidl create mode 100644 play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/client/IAppEventListener.aidl create mode 100644 play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/client/ICorrelationIdProvider.aidl create mode 100644 play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/client/IFullScreenContentCallback.aidl create mode 100644 play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/client/IVideoController.aidl create mode 100644 play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/client/IVideoLifecycleCallbacks.aidl create mode 100644 play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/formats/NativeAdOptionsParcel.aidl create mode 100644 play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/formats/client/IAttributionInfo.aidl create mode 100644 play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/formats/client/INativeAdImage.aidl create mode 100644 play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/formats/client/INativeAppInstallAd.aidl create mode 100644 play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/formats/client/INativeContentAd.aidl create mode 100644 play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/formats/client/INativeCustomTemplateAd.aidl create mode 100644 play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/formats/client/IOnAppInstallAdLoadedListener.aidl create mode 100644 play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/formats/client/IOnContentAdLoadedListener.aidl create mode 100644 play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/formats/client/IOnCustomClickListener.aidl create mode 100644 play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/formats/client/IOnCustomTemplateAdLoadedListener.aidl create mode 100644 play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/formats/client/IOnPublisherAdViewLoadedListener.aidl create mode 100644 play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/formats/client/IOnUnifiedNativeAdLoadedListener.aidl create mode 100644 play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/formats/client/IUnifiedNativeAd.aidl create mode 100644 play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/instream/InstreamAdConfigurationParcel.aidl create mode 100644 play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/instream/client/IInstreamAd.aidl create mode 100644 play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/instream/client/IInstreamAdLoadCallback.aidl create mode 100644 play-services-ads-lite/src/main/java/com/google/android/gms/ads/formats/AdManagerAdViewOptions.java create mode 100644 play-services-ads-lite/src/main/java/com/google/android/gms/ads/formats/PublisherAdViewOptions.java create mode 100644 play-services-ads-lite/src/main/java/com/google/android/gms/ads/internal/client/AdSizeParcel.java create mode 100644 play-services-ads-lite/src/main/java/com/google/android/gms/ads/internal/client/AdValueParcel.java create mode 100644 play-services-ads-lite/src/main/java/com/google/android/gms/ads/internal/client/VideoOptionsParcel.java create mode 100644 play-services-ads-lite/src/main/java/com/google/android/gms/ads/internal/formats/NativeAdOptionsParcel.java create mode 100644 play-services-ads-lite/src/main/java/com/google/android/gms/ads/internal/instream/InstreamAdConfigurationParcel.java diff --git a/play-services-ads-lite/build.gradle b/play-services-ads-lite/build.gradle index 1c8dbe17a8..61742681f7 100644 --- a/play-services-ads-lite/build.gradle +++ b/play-services-ads-lite/build.gradle @@ -37,6 +37,7 @@ dependencies { api 'androidx.work:work-runtime:2.7.0' api project(':play-services-ads-base') api project(':play-services-basement') + annotationProcessor project(':safe-parcel-processor') // api project(':play-services-measurement-sdk-api') // api project(':user-messaging-platform') } diff --git a/play-services-ads-lite/core/src/main/kotlin/com/google/android/gms/ads/AdLoaderBuilderCreatorImpl.kt b/play-services-ads-lite/core/src/main/kotlin/com/google/android/gms/ads/AdLoaderBuilderCreatorImpl.kt index d6f88b67b1..819c381bf0 100644 --- a/play-services-ads-lite/core/src/main/kotlin/com/google/android/gms/ads/AdLoaderBuilderCreatorImpl.kt +++ b/play-services-ads-lite/core/src/main/kotlin/com/google/android/gms/ads/AdLoaderBuilderCreatorImpl.kt @@ -16,7 +16,7 @@ import org.microg.gms.utils.warnOnTransactionIssues private const val TAG = "AdLoaderBuilder" @Keep -class AdLoaderBuilderCreatorImpl : IAdLoaderBuilderCreator.Stub() { +open class AdLoaderBuilderCreatorImpl : IAdLoaderBuilderCreator.Stub() { override fun newAdLoaderBuilder(context: IObjectWrapper?, adUnitId: String, adapterCreator: IAdapterCreator?, clientVersion: Int): IBinder? { Log.d(TAG, "newAdLoaderBuilder: adUnitId=$adUnitId clientVersion=$clientVersion") return LegacyAdLoaderBuilder() diff --git a/play-services-ads-lite/core/src/main/kotlin/com/google/android/gms/ads/AdManagerCreatorImpl.kt b/play-services-ads-lite/core/src/main/kotlin/com/google/android/gms/ads/AdManagerCreatorImpl.kt index 398956f8c0..acf6585316 100644 --- a/play-services-ads-lite/core/src/main/kotlin/com/google/android/gms/ads/AdManagerCreatorImpl.kt +++ b/play-services-ads-lite/core/src/main/kotlin/com/google/android/gms/ads/AdManagerCreatorImpl.kt @@ -4,14 +4,32 @@ */ package com.google.android.gms.ads +import android.content.Context +import android.os.IBinder import android.os.Parcel +import android.util.Log import androidx.annotation.Keep +import com.google.android.gms.ads.internal.client.AdSizeParcel +import com.google.android.gms.ads.internal.client.IAdManagerCreator +import com.google.android.gms.ads.internal.mediation.client.IAdapterCreator +import com.google.android.gms.dynamic.IObjectWrapper +import com.google.android.gms.dynamic.ObjectWrapper import org.microg.gms.utils.warnOnTransactionIssues -private const val TAG = "AdManager" +private const val TAG = "AdManagerCreator" @Keep -class AdManagerCreatorImpl : AdManagerCreator.Stub() { +open class AdManagerCreatorImpl : IAdManagerCreator.Stub() { + override fun newAdManager(context: IObjectWrapper?, adSize: AdSizeParcel?, adUnitId: String?, adapterCreator: IAdapterCreator?, clientVersion: Int): IBinder { + Log.d(TAG, "newAdManager: adUnitId=$adUnitId clientVersion=$clientVersion") + return LegacyAdManager(ObjectWrapper.unwrap(context) as? Context) + } + + override fun newAdManagerByType(context: IObjectWrapper?, adSize: AdSizeParcel?, adUnitId: String?, adapterCreator: IAdapterCreator?, clientVersion: Int, type: Int): IBinder { + Log.d(TAG, "newAdManagerByType: adUnitId=$adUnitId clientVersion=$clientVersion type=$type") + return LegacyAdManager(ObjectWrapper.unwrap(context) as? Context) + } + override fun onTransact(code: Int, data: Parcel, reply: Parcel?, flags: Int): Boolean = warnOnTransactionIssues(code, reply, flags, TAG) { super.onTransact(code, data, reply, flags) } } diff --git a/play-services-ads-lite/core/src/main/kotlin/com/google/android/gms/ads/ChimeraAdLoaderBuilderCreatorImpl.kt b/play-services-ads-lite/core/src/main/kotlin/com/google/android/gms/ads/ChimeraAdLoaderBuilderCreatorImpl.kt new file mode 100644 index 0000000000..6da9cbe7df --- /dev/null +++ b/play-services-ads-lite/core/src/main/kotlin/com/google/android/gms/ads/ChimeraAdLoaderBuilderCreatorImpl.kt @@ -0,0 +1,18 @@ +/* + * SPDX-FileCopyrightText: 2026 microG Project Team + * SPDX-License-Identifier: Apache-2.0 + */ +package com.google.android.gms.ads + +import androidx.annotation.Keep + +/** + * Dynamite entry point for the native-ad (AdLoader) path. + * + * The AdMob SDK loads this class from the ads dynamite module by its fully-qualified name, so it must + * exist under this exact FQCN and implement `IAdLoaderBuilderCreator`. Behaviour is identical to + * [AdLoaderBuilderCreatorImpl], which is kept under its own name for SDKs that request the un-prefixed + * class. + */ +@Keep +class ChimeraAdLoaderBuilderCreatorImpl : AdLoaderBuilderCreatorImpl() diff --git a/play-services-ads-lite/core/src/main/kotlin/com/google/android/gms/ads/ChimeraAdManagerCreatorImpl.kt b/play-services-ads-lite/core/src/main/kotlin/com/google/android/gms/ads/ChimeraAdManagerCreatorImpl.kt new file mode 100644 index 0000000000..aa42ba1b5e --- /dev/null +++ b/play-services-ads-lite/core/src/main/kotlin/com/google/android/gms/ads/ChimeraAdManagerCreatorImpl.kt @@ -0,0 +1,17 @@ +/* + * SPDX-FileCopyrightText: 2026 microG Project Team + * SPDX-License-Identifier: Apache-2.0 + */ +package com.google.android.gms.ads + +import androidx.annotation.Keep + +/** + * Dynamite entry point for the banner/interstitial (AdManager) path. + * + * The AdMob SDK loads this class from the ads dynamite module by its fully-qualified name, so it must + * exist under this exact FQCN and implement `IAdManagerCreator`. Behaviour is identical to + * [AdManagerCreatorImpl], which is kept under its own name for SDKs that request the un-prefixed class. + */ +@Keep +class ChimeraAdManagerCreatorImpl : AdManagerCreatorImpl() diff --git a/play-services-ads-lite/core/src/main/kotlin/com/google/android/gms/ads/ChimeraMobileAdsSettingManagerCreatorImpl.kt b/play-services-ads-lite/core/src/main/kotlin/com/google/android/gms/ads/ChimeraMobileAdsSettingManagerCreatorImpl.kt new file mode 100644 index 0000000000..1cd079794b --- /dev/null +++ b/play-services-ads-lite/core/src/main/kotlin/com/google/android/gms/ads/ChimeraMobileAdsSettingManagerCreatorImpl.kt @@ -0,0 +1,18 @@ +/* + * SPDX-FileCopyrightText: 2026 microG Project Team + * SPDX-License-Identifier: Apache-2.0 + */ +package com.google.android.gms.ads + +import androidx.annotation.Keep + +/** + * Dynamite entry point for the Mobile Ads initialization / settings path. + * + * The AdMob SDK loads this class from the ads dynamite module by its fully-qualified name, so it must + * exist under this exact FQCN and implement `IMobileAdsSettingManagerCreator`. This is the entry point + * that gates ad initialization. Behaviour is identical to [MobileAdsSettingManagerCreatorImpl], which is + * kept under its own name for SDKs that request the un-prefixed class. + */ +@Keep +class ChimeraMobileAdsSettingManagerCreatorImpl : MobileAdsSettingManagerCreatorImpl() diff --git a/play-services-ads-lite/core/src/main/kotlin/com/google/android/gms/ads/LegacyAdLoaderBuilder.kt b/play-services-ads-lite/core/src/main/kotlin/com/google/android/gms/ads/LegacyAdLoaderBuilder.kt index 65d4737938..0c3d392fbf 100644 --- a/play-services-ads-lite/core/src/main/kotlin/com/google/android/gms/ads/LegacyAdLoaderBuilder.kt +++ b/play-services-ads-lite/core/src/main/kotlin/com/google/android/gms/ads/LegacyAdLoaderBuilder.kt @@ -4,26 +4,51 @@ */ package com.google.android.gms.ads -import android.os.IBinder import android.util.Log +import com.google.android.gms.ads.formats.AdManagerAdViewOptions +import com.google.android.gms.ads.formats.PublisherAdViewOptions import com.google.android.gms.ads.internal.AdRequestParcel +import com.google.android.gms.ads.internal.client.AdSizeParcel +import com.google.android.gms.ads.internal.client.IAdListener import com.google.android.gms.ads.internal.client.IAdLoader import com.google.android.gms.ads.internal.client.IAdLoaderBuilder +import com.google.android.gms.ads.internal.client.ICorrelationIdProvider +import com.google.android.gms.ads.internal.formats.NativeAdOptionsParcel +import com.google.android.gms.ads.internal.formats.client.IOnAppInstallAdLoadedListener +import com.google.android.gms.ads.internal.formats.client.IOnContentAdLoadedListener +import com.google.android.gms.ads.internal.formats.client.IOnCustomClickListener +import com.google.android.gms.ads.internal.formats.client.IOnCustomTemplateAdLoadedListener +import com.google.android.gms.ads.internal.formats.client.IOnPublisherAdViewLoadedListener +import com.google.android.gms.ads.internal.formats.client.IOnUnifiedNativeAdLoadedListener +import com.google.android.gms.ads.internal.instream.InstreamAdConfigurationParcel +import com.google.android.gms.ads.internal.instream.client.IInstreamAdLoadCallback private const val TAG = "LegacyAdLoader" internal class LegacyAdLoaderBuilder : IAdLoaderBuilder.Stub() { override fun build(): IAdLoader = LegacyAdLoader - override fun setAdListener(listener: IBinder?) = Unit - override fun setUnifiedNativeAdLoadedListener(listener: IBinder?) = Unit + override fun setAdListener(listener: IAdListener?) = Unit + override fun setAppInstallAdLoadedListener(listener: IOnAppInstallAdLoadedListener?) = Unit + override fun setContentAdLoadedListener(listener: IOnContentAdLoadedListener?) = Unit + override fun forCustomFormatAd(templateId: String?, onCustomFormatAdLoadedListener: IOnCustomTemplateAdLoadedListener?, onCustomClickListener: IOnCustomClickListener?) = Unit + override fun setNativeAdOptions(options: NativeAdOptionsParcel?) = Unit + override fun setCorrelationIdProvider(provider: ICorrelationIdProvider?) = Unit + override fun forPublisherAdView(onPublisherAdViewLoadedListener: IOnPublisherAdViewLoadedListener?, adSize: AdSizeParcel?) = Unit + override fun setPublisherAdViewOptions(options: PublisherAdViewOptions?) = Unit + override fun setUnifiedNativeAdLoadedListener(listener: IOnUnifiedNativeAdLoadedListener?) = Unit + override fun forInstreamAd(config: InstreamAdConfigurationParcel?) = Unit + override fun setInstreamAdLoadCallback(callback: IInstreamAdLoadCallback?) = Unit + override fun setAdManagerAdViewOptions(options: AdManagerAdViewOptions?) = Unit } private object LegacyAdLoader : IAdLoader.Stub() { override fun load(request: AdRequestParcel?) { Log.w(TAG, "load") } + override fun getMediationAdapterClassName(): String? = null override fun isLoading(): Boolean = false + override fun getAdManagerAdapterClassName(): String? = null override fun loadAds(request: AdRequestParcel?, count: Int) { - Log.w(TAG, "load ads") + Log.w(TAG, "loadAds") } } diff --git a/play-services-ads-lite/core/src/main/kotlin/com/google/android/gms/ads/LegacyAdManager.kt b/play-services-ads-lite/core/src/main/kotlin/com/google/android/gms/ads/LegacyAdManager.kt new file mode 100644 index 0000000000..7da7f83cf5 --- /dev/null +++ b/play-services-ads-lite/core/src/main/kotlin/com/google/android/gms/ads/LegacyAdManager.kt @@ -0,0 +1,56 @@ +/* + * SPDX-FileCopyrightText: 2026 microG Project Team + * SPDX-License-Identifier: Apache-2.0 + */ +package com.google.android.gms.ads + +import android.content.Context +import android.util.Log +import android.widget.FrameLayout +import com.google.android.gms.ads.internal.AdRequestParcel +import com.google.android.gms.ads.internal.client.AdSizeParcel +import com.google.android.gms.ads.internal.client.IAdClickListener +import com.google.android.gms.ads.internal.client.IAdListener +import com.google.android.gms.ads.internal.client.IAdLoadCallback +import com.google.android.gms.ads.internal.client.IAdManager +import com.google.android.gms.ads.internal.client.IAppEventListener +import com.google.android.gms.ads.internal.client.IFullScreenContentCallback +import com.google.android.gms.ads.internal.client.IOnPaidEventListener +import com.google.android.gms.ads.internal.client.IVideoController +import com.google.android.gms.dynamic.IObjectWrapper +import com.google.android.gms.dynamic.ObjectWrapper + +private const val TAG = "LegacyAdManager" + +/** + * Minimal [IAdManager] returned by [AdManagerCreatorImpl] for the banner/interstitial path. + * + * It is a non-null ad manager so the AdMob SDK keeps using microG's remote result. No ad is served: + * [getView] returns an empty container, [loadAd] reports "no fill", and the listeners/getters are + * accepted but inert. + */ +internal class LegacyAdManager(private val context: Context?) : IAdManager.Stub() { + private val adView: FrameLayout? by lazy { context?.let { FrameLayout(it) } } + + override fun getView(): IObjectWrapper = ObjectWrapper.wrap(adView) + override fun destroy() = Unit + override fun loadAd(request: AdRequestParcel?): Boolean { + Log.w(TAG, "loadAd") + return false + } + override fun pause() = Unit + override fun resume() = Unit + override fun setAdListener(listener: IAdListener?) = Unit + override fun setAppEventListener(listener: IAppEventListener?) = Unit + override fun getAdSize(): AdSizeParcel? = null + override fun setAdSize(adSize: AdSizeParcel?) = Unit + override fun setAdClickListener(listener: IAdClickListener?) = Unit + override fun setManualImpressionFlag(flag: Int) = Unit + override fun getVideoController(): IVideoController? = null + override fun setManualImpressionsEnabled(enabled: Boolean) = Unit + override fun setOnPaidEventListener(listener: IOnPaidEventListener?) = Unit + override fun loadAdWithCallback(request: AdRequestParcel?, callback: IAdLoadCallback?) = Unit + override fun showInterstitial(activityWrapper: IObjectWrapper?) = Unit + override fun setFullScreenContentCallback(callback: IFullScreenContentCallback?) = Unit + override fun setStartTimestampMillis(timestampMillis: Long) = Unit +} diff --git a/play-services-ads-lite/core/src/main/kotlin/com/google/android/gms/ads/MobileAdsSettingManagerCreatorImpl.kt b/play-services-ads-lite/core/src/main/kotlin/com/google/android/gms/ads/MobileAdsSettingManagerCreatorImpl.kt index 176a17d83c..05866e8dfa 100644 --- a/play-services-ads-lite/core/src/main/kotlin/com/google/android/gms/ads/MobileAdsSettingManagerCreatorImpl.kt +++ b/play-services-ads-lite/core/src/main/kotlin/com/google/android/gms/ads/MobileAdsSettingManagerCreatorImpl.kt @@ -18,7 +18,7 @@ import org.microg.gms.utils.warnOnTransactionIssues private const val TAG = "AdsSettingManager" @Keep -class MobileAdsSettingManagerCreatorImpl : IMobileAdsSettingManagerCreator.Stub() { +open class MobileAdsSettingManagerCreatorImpl : IMobileAdsSettingManagerCreator.Stub() { override fun getMobileAdsSettingManager(context: IObjectWrapper?, clientVersion: Int): IBinder { Log.d(TAG, "getMobileAdsSettingManager($clientVersion)") return MobileAdsSettingManagerImpl(ObjectWrapper.unwrap(context) as Context) diff --git a/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/formats/AdManagerAdViewOptions.aidl b/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/formats/AdManagerAdViewOptions.aidl new file mode 100644 index 0000000000..2ff1efe7b3 --- /dev/null +++ b/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/formats/AdManagerAdViewOptions.aidl @@ -0,0 +1,8 @@ +/* + * SPDX-FileCopyrightText: 2026 microG Project Team + * SPDX-License-Identifier: Apache-2.0 + */ + +package com.google.android.gms.ads.formats; + +parcelable AdManagerAdViewOptions; diff --git a/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/formats/PublisherAdViewOptions.aidl b/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/formats/PublisherAdViewOptions.aidl new file mode 100644 index 0000000000..6fbfae8bde --- /dev/null +++ b/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/formats/PublisherAdViewOptions.aidl @@ -0,0 +1,8 @@ +/* + * SPDX-FileCopyrightText: 2026 microG Project Team + * SPDX-License-Identifier: Apache-2.0 + */ + +package com.google.android.gms.ads.formats; + +parcelable PublisherAdViewOptions; diff --git a/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/client/AdSizeParcel.aidl b/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/client/AdSizeParcel.aidl new file mode 100644 index 0000000000..4e437f4cd4 --- /dev/null +++ b/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/client/AdSizeParcel.aidl @@ -0,0 +1,8 @@ +/* + * SPDX-FileCopyrightText: 2026 microG Project Team + * SPDX-License-Identifier: Apache-2.0 + */ + +package com.google.android.gms.ads.internal.client; + +parcelable AdSizeParcel; diff --git a/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/client/AdValueParcel.aidl b/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/client/AdValueParcel.aidl new file mode 100644 index 0000000000..038a95e61b --- /dev/null +++ b/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/client/AdValueParcel.aidl @@ -0,0 +1,8 @@ +/* + * SPDX-FileCopyrightText: 2026 microG Project Team + * SPDX-License-Identifier: Apache-2.0 + */ + +package com.google.android.gms.ads.internal.client; + +parcelable AdValueParcel; diff --git a/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/client/IAdClickListener.aidl b/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/client/IAdClickListener.aidl new file mode 100644 index 0000000000..77843785fb --- /dev/null +++ b/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/client/IAdClickListener.aidl @@ -0,0 +1,10 @@ +/* + * SPDX-FileCopyrightText: 2026 microG Project Team + * SPDX-License-Identifier: Apache-2.0 + */ + +package com.google.android.gms.ads.internal.client; + +interface IAdClickListener { + void onAdClicked() = 0; +} diff --git a/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/client/IAdListener.aidl b/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/client/IAdListener.aidl new file mode 100644 index 0000000000..f669bbdd8c --- /dev/null +++ b/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/client/IAdListener.aidl @@ -0,0 +1,19 @@ +/* + * SPDX-FileCopyrightText: 2026 microG Project Team + * SPDX-License-Identifier: Apache-2.0 + */ + +package com.google.android.gms.ads.internal.client; + +import com.google.android.gms.ads.internal.AdErrorParcel; + +interface IAdListener { + void onAdClosed() = 0; + void onAdFailedToLoad(int errorCode) = 1; + void onAdLeftApplication() = 2; + void onAdOpened() = 3; + void onAdLoaded() = 4; + void onAdClicked() = 5; + void onAdImpression() = 6; + void onAdFailedToLoadWithAdError(in AdErrorParcel error) = 7; +} diff --git a/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/client/IAdLoadCallback.aidl b/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/client/IAdLoadCallback.aidl new file mode 100644 index 0000000000..f5e9a1216c --- /dev/null +++ b/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/client/IAdLoadCallback.aidl @@ -0,0 +1,13 @@ +/* + * SPDX-FileCopyrightText: 2026 microG Project Team + * SPDX-License-Identifier: Apache-2.0 + */ + +package com.google.android.gms.ads.internal.client; + +import com.google.android.gms.ads.internal.AdErrorParcel; + +interface IAdLoadCallback { + void onAdLoaded() = 0; + void onAdFailedToLoad(in AdErrorParcel error) = 1; +} diff --git a/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/client/IAdLoader.aidl b/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/client/IAdLoader.aidl index db38873665..79dcebb2da 100644 --- a/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/client/IAdLoader.aidl +++ b/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/client/IAdLoader.aidl @@ -1,9 +1,16 @@ +/* + * SPDX-FileCopyrightText: 2026 microG Project Team + * SPDX-License-Identifier: Apache-2.0 + */ + package com.google.android.gms.ads.internal.client; import com.google.android.gms.ads.internal.AdRequestParcel; interface IAdLoader { void load(in AdRequestParcel request) = 0; + String getMediationAdapterClassName() = 1; boolean isLoading() = 2; + String getAdManagerAdapterClassName() = 3; void loadAds(in AdRequestParcel request, int count) = 4; } diff --git a/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/client/IAdLoaderBuilder.aidl b/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/client/IAdLoaderBuilder.aidl index 899c2a68a6..f619b95fab 100644 --- a/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/client/IAdLoaderBuilder.aidl +++ b/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/client/IAdLoaderBuilder.aidl @@ -1,9 +1,38 @@ +/* + * SPDX-FileCopyrightText: 2026 microG Project Team + * SPDX-License-Identifier: Apache-2.0 + */ + package com.google.android.gms.ads.internal.client; import com.google.android.gms.ads.internal.client.IAdLoader; +import com.google.android.gms.ads.internal.client.IAdListener; +import com.google.android.gms.ads.internal.client.ICorrelationIdProvider; +import com.google.android.gms.ads.internal.client.AdSizeParcel; +import com.google.android.gms.ads.internal.formats.NativeAdOptionsParcel; +import com.google.android.gms.ads.internal.formats.client.IOnAppInstallAdLoadedListener; +import com.google.android.gms.ads.internal.formats.client.IOnContentAdLoadedListener; +import com.google.android.gms.ads.internal.formats.client.IOnCustomTemplateAdLoadedListener; +import com.google.android.gms.ads.internal.formats.client.IOnCustomClickListener; +import com.google.android.gms.ads.internal.formats.client.IOnUnifiedNativeAdLoadedListener; +import com.google.android.gms.ads.internal.formats.client.IOnPublisherAdViewLoadedListener; +import com.google.android.gms.ads.internal.instream.InstreamAdConfigurationParcel; +import com.google.android.gms.ads.internal.instream.client.IInstreamAdLoadCallback; +import com.google.android.gms.ads.formats.PublisherAdViewOptions; +import com.google.android.gms.ads.formats.AdManagerAdViewOptions; interface IAdLoaderBuilder { IAdLoader build() = 0; - void setAdListener(IBinder listener) = 1; - void setUnifiedNativeAdLoadedListener(IBinder listener) = 9; + void setAdListener(IAdListener listener) = 1; + void setAppInstallAdLoadedListener(IOnAppInstallAdLoadedListener listener) = 2; + void setContentAdLoadedListener(IOnContentAdLoadedListener listener) = 3; + void forCustomFormatAd(String templateId, IOnCustomTemplateAdLoadedListener onCustomFormatAdLoadedListener, IOnCustomClickListener onCustomClickListener) = 4; + void setNativeAdOptions(in NativeAdOptionsParcel options) = 5; + void setCorrelationIdProvider(ICorrelationIdProvider provider) = 6; + void forPublisherAdView(IOnPublisherAdViewLoadedListener onPublisherAdViewLoadedListener, in AdSizeParcel adSize) = 7; + void setPublisherAdViewOptions(in PublisherAdViewOptions options) = 8; + void setUnifiedNativeAdLoadedListener(IOnUnifiedNativeAdLoadedListener listener) = 9; + void forInstreamAd(in InstreamAdConfigurationParcel config) = 12; + void setInstreamAdLoadCallback(IInstreamAdLoadCallback callback) = 13; + void setAdManagerAdViewOptions(in AdManagerAdViewOptions options) = 14; } diff --git a/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/client/IAdManager.aidl b/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/client/IAdManager.aidl new file mode 100644 index 0000000000..8e5d997f8e --- /dev/null +++ b/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/client/IAdManager.aidl @@ -0,0 +1,38 @@ +/* + * SPDX-FileCopyrightText: 2026 microG Project Team + * SPDX-License-Identifier: Apache-2.0 + */ + +package com.google.android.gms.ads.internal.client; + +import com.google.android.gms.ads.internal.AdRequestParcel; +import com.google.android.gms.ads.internal.client.AdSizeParcel; +import com.google.android.gms.ads.internal.client.IAdListener; +import com.google.android.gms.ads.internal.client.IAppEventListener; +import com.google.android.gms.ads.internal.client.IAdClickListener; +import com.google.android.gms.ads.internal.client.IVideoController; +import com.google.android.gms.ads.internal.client.IOnPaidEventListener; +import com.google.android.gms.ads.internal.client.IAdLoadCallback; +import com.google.android.gms.ads.internal.client.IFullScreenContentCallback; +import com.google.android.gms.dynamic.IObjectWrapper; + +interface IAdManager { + IObjectWrapper getView() = 0; + void destroy() = 1; + boolean loadAd(in AdRequestParcel request) = 3; + void pause() = 4; + void resume() = 5; + void setAdListener(IAdListener listener) = 6; + void setAppEventListener(IAppEventListener listener) = 7; + AdSizeParcel getAdSize() = 11; + void setAdSize(in AdSizeParcel adSize) = 12; + void setAdClickListener(IAdClickListener listener) = 19; + void setManualImpressionFlag(int flag) = 21; + IVideoController getVideoController() = 25; + void setManualImpressionsEnabled(boolean enabled) = 33; + void setOnPaidEventListener(IOnPaidEventListener listener) = 41; + void loadAdWithCallback(in AdRequestParcel request, IAdLoadCallback callback) = 42; + void showInterstitial(IObjectWrapper activityWrapper) = 43; + void setFullScreenContentCallback(IFullScreenContentCallback callback) = 44; + void setStartTimestampMillis(long timestampMillis) = 47; +} diff --git a/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/client/IAdManagerCreator.aidl b/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/client/IAdManagerCreator.aidl new file mode 100644 index 0000000000..1aa74901d1 --- /dev/null +++ b/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/client/IAdManagerCreator.aidl @@ -0,0 +1,15 @@ +/* + * SPDX-FileCopyrightText: 2026 microG Project Team + * SPDX-License-Identifier: Apache-2.0 + */ + +package com.google.android.gms.ads.internal.client; + +import com.google.android.gms.ads.internal.client.AdSizeParcel; +import com.google.android.gms.ads.internal.mediation.client.IAdapterCreator; +import com.google.android.gms.dynamic.IObjectWrapper; + +interface IAdManagerCreator { + IBinder newAdManager(IObjectWrapper context, in AdSizeParcel adSize, String adUnitId, IAdapterCreator adapterCreator, int clientVersion) = 0; + IBinder newAdManagerByType(IObjectWrapper context, in AdSizeParcel adSize, String adUnitId, IAdapterCreator adapterCreator, int clientVersion, int type) = 1; +} diff --git a/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/client/IAppEventListener.aidl b/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/client/IAppEventListener.aidl new file mode 100644 index 0000000000..0c62f01642 --- /dev/null +++ b/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/client/IAppEventListener.aidl @@ -0,0 +1,10 @@ +/* + * SPDX-FileCopyrightText: 2026 microG Project Team + * SPDX-License-Identifier: Apache-2.0 + */ + +package com.google.android.gms.ads.internal.client; + +interface IAppEventListener { + void onAppEvent(String name, String info) = 0; +} diff --git a/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/client/ICorrelationIdProvider.aidl b/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/client/ICorrelationIdProvider.aidl new file mode 100644 index 0000000000..205f82edf4 --- /dev/null +++ b/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/client/ICorrelationIdProvider.aidl @@ -0,0 +1,10 @@ +/* + * SPDX-FileCopyrightText: 2026 microG Project Team + * SPDX-License-Identifier: Apache-2.0 + */ + +package com.google.android.gms.ads.internal.client; + +interface ICorrelationIdProvider { + String getCorrelationId() = 0; +} diff --git a/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/client/IFullScreenContentCallback.aidl b/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/client/IFullScreenContentCallback.aidl new file mode 100644 index 0000000000..0464ff16ab --- /dev/null +++ b/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/client/IFullScreenContentCallback.aidl @@ -0,0 +1,16 @@ +/* + * SPDX-FileCopyrightText: 2026 microG Project Team + * SPDX-License-Identifier: Apache-2.0 + */ + +package com.google.android.gms.ads.internal.client; + +import com.google.android.gms.ads.internal.AdErrorParcel; + +interface IFullScreenContentCallback { + void onAdFailedToShowFullScreenContent(in AdErrorParcel error) = 0; + void onAdShowedFullScreenContent() = 1; + void onAdDismissedFullScreenContent() = 2; + void onAdImpression() = 3; + void onAdClicked() = 4; +} diff --git a/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/client/IOnPaidEventListener.aidl b/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/client/IOnPaidEventListener.aidl index 8f2d342450..eabf5d201f 100644 --- a/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/client/IOnPaidEventListener.aidl +++ b/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/client/IOnPaidEventListener.aidl @@ -1,6 +1,13 @@ +/* + * SPDX-FileCopyrightText: 2026 microG Project Team + * SPDX-License-Identifier: Apache-2.0 + */ + package com.google.android.gms.ads.internal.client; -import com.google.android.gms.ads.internal.AdErrorParcel; +import com.google.android.gms.ads.internal.client.AdValueParcel; interface IOnPaidEventListener { -} \ No newline at end of file + void onPaidEvent(in AdValueParcel adValue) = 0; + boolean isLoggingLimitedToImpressionEvents() = 1; +} diff --git a/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/client/IVideoController.aidl b/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/client/IVideoController.aidl new file mode 100644 index 0000000000..643d2e8b8e --- /dev/null +++ b/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/client/IVideoController.aidl @@ -0,0 +1,24 @@ +/* + * SPDX-FileCopyrightText: 2026 microG Project Team + * SPDX-License-Identifier: Apache-2.0 + */ + +package com.google.android.gms.ads.internal.client; + +import com.google.android.gms.ads.internal.client.IVideoLifecycleCallbacks; + +interface IVideoController { + float getAspectRatio() = 0; + float getCurrentTime() = 1; + float getDuration() = 2; + int getPlaybackState() = 3; + void play() = 4; + void pause() = 5; + void stop() = 6; + IVideoLifecycleCallbacks getVideoLifecycleCallbacks() = 7; + void setVideoLifecycleCallbacks(IVideoLifecycleCallbacks callbacks) = 8; + boolean isClickToExpandEnabled() = 9; + boolean isCustomControlsEnabled() = 10; + boolean isMuted() = 11; + void mute(boolean mute) = 12; +} diff --git a/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/client/IVideoLifecycleCallbacks.aidl b/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/client/IVideoLifecycleCallbacks.aidl new file mode 100644 index 0000000000..6b0c5ba819 --- /dev/null +++ b/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/client/IVideoLifecycleCallbacks.aidl @@ -0,0 +1,14 @@ +/* + * SPDX-FileCopyrightText: 2026 microG Project Team + * SPDX-License-Identifier: Apache-2.0 + */ + +package com.google.android.gms.ads.internal.client; + +interface IVideoLifecycleCallbacks { + void onVideoStart() = 0; + void onVideoPlay() = 1; + void onVideoPause() = 2; + void onVideoEnd() = 3; + void onVideoMute(boolean muted) = 4; +} diff --git a/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/formats/NativeAdOptionsParcel.aidl b/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/formats/NativeAdOptionsParcel.aidl new file mode 100644 index 0000000000..f6f4957642 --- /dev/null +++ b/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/formats/NativeAdOptionsParcel.aidl @@ -0,0 +1,8 @@ +/* + * SPDX-FileCopyrightText: 2026 microG Project Team + * SPDX-License-Identifier: Apache-2.0 + */ + +package com.google.android.gms.ads.internal.formats; + +parcelable NativeAdOptionsParcel; diff --git a/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/formats/client/IAttributionInfo.aidl b/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/formats/client/IAttributionInfo.aidl new file mode 100644 index 0000000000..ebd8c5b500 --- /dev/null +++ b/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/formats/client/IAttributionInfo.aidl @@ -0,0 +1,14 @@ +/* + * SPDX-FileCopyrightText: 2026 microG Project Team + * SPDX-License-Identifier: Apache-2.0 + */ + +package com.google.android.gms.ads.internal.formats.client; + +import com.google.android.gms.ads.internal.formats.client.INativeAdImage; + +interface IAttributionInfo { + String getText() = 0; + INativeAdImage getImage() = 1; + IAttributionInfo getNextAttributionInfo() = 2; +} diff --git a/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/formats/client/INativeAdImage.aidl b/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/formats/client/INativeAdImage.aidl new file mode 100644 index 0000000000..ad5a69fc8f --- /dev/null +++ b/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/formats/client/INativeAdImage.aidl @@ -0,0 +1,17 @@ +/* + * SPDX-FileCopyrightText: 2026 microG Project Team + * SPDX-License-Identifier: Apache-2.0 + */ + +package com.google.android.gms.ads.internal.formats.client; + +import android.net.Uri; +import com.google.android.gms.dynamic.IObjectWrapper; + +interface INativeAdImage { + IObjectWrapper getDrawable() = 0; + Uri getUri() = 1; + double getScale() = 2; + int getWidth() = 3; + int getHeight() = 4; +} diff --git a/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/formats/client/INativeAppInstallAd.aidl b/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/formats/client/INativeAppInstallAd.aidl new file mode 100644 index 0000000000..cbe18571b4 --- /dev/null +++ b/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/formats/client/INativeAppInstallAd.aidl @@ -0,0 +1,28 @@ +/* + * SPDX-FileCopyrightText: 2026 microG Project Team + * SPDX-License-Identifier: Apache-2.0 + */ + +package com.google.android.gms.ads.internal.formats.client; + +import android.os.Bundle; +import com.google.android.gms.ads.internal.client.IVideoController; +import com.google.android.gms.ads.internal.formats.client.INativeAdImage; +import com.google.android.gms.dynamic.IObjectWrapper; + +interface INativeAppInstallAd { + String getHeadline() = 0; + List getImages() = 1; + String getBody() = 2; + INativeAdImage getIcon() = 3; + String getCallToAction() = 4; + double getStarRating() = 5; + String getStore() = 6; + String getPrice() = 7; + Bundle getExtras() = 8; + void recordImpression() = 9; + void performClick(in Bundle clickData) = 10; + void reportTouchEvent(in Bundle touchData) = 11; + IVideoController getVideoController() = 12; + IObjectWrapper getMediaContent() = 13; +} diff --git a/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/formats/client/INativeContentAd.aidl b/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/formats/client/INativeContentAd.aidl new file mode 100644 index 0000000000..d55ccbfc1a --- /dev/null +++ b/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/formats/client/INativeContentAd.aidl @@ -0,0 +1,26 @@ +/* + * SPDX-FileCopyrightText: 2026 microG Project Team + * SPDX-License-Identifier: Apache-2.0 + */ + +package com.google.android.gms.ads.internal.formats.client; + +import android.os.Bundle; +import com.google.android.gms.ads.internal.client.IVideoController; +import com.google.android.gms.ads.internal.formats.client.INativeAdImage; +import com.google.android.gms.dynamic.IObjectWrapper; + +interface INativeContentAd { + String getHeadline() = 0; + List getImages() = 1; + String getBody() = 2; + String getCallToAction() = 3; + String getAdvertiser() = 4; + INativeAdImage getLogo() = 5; + Bundle getExtras() = 6; + void recordImpression() = 7; + void performClick(in Bundle clickData) = 8; + void reportTouchEvent(in Bundle touchData) = 9; + IVideoController getVideoController() = 10; + IObjectWrapper getMediaContent() = 11; +} diff --git a/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/formats/client/INativeCustomTemplateAd.aidl b/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/formats/client/INativeCustomTemplateAd.aidl new file mode 100644 index 0000000000..8ad51cf7e7 --- /dev/null +++ b/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/formats/client/INativeCustomTemplateAd.aidl @@ -0,0 +1,22 @@ +/* + * SPDX-FileCopyrightText: 2026 microG Project Team + * SPDX-License-Identifier: Apache-2.0 + */ + +package com.google.android.gms.ads.internal.formats.client; + +import com.google.android.gms.ads.internal.client.IVideoController; +import com.google.android.gms.ads.internal.formats.client.INativeAdImage; +import com.google.android.gms.dynamic.IObjectWrapper; + +interface INativeCustomTemplateAd { + List getAvailableAssetNames() = 0; + String getCustomTemplateId() = 1; + String getText(String assetName) = 2; + INativeAdImage getImage(String assetName) = 3; + void performClick(String assetName) = 4; + void recordImpression() = 5; + IVideoController getVideoController() = 6; + IObjectWrapper getMediaContent() = 7; + IObjectWrapper getDisplayOpenMeasurement() = 8; +} diff --git a/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/formats/client/IOnAppInstallAdLoadedListener.aidl b/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/formats/client/IOnAppInstallAdLoadedListener.aidl new file mode 100644 index 0000000000..494f54faeb --- /dev/null +++ b/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/formats/client/IOnAppInstallAdLoadedListener.aidl @@ -0,0 +1,12 @@ +/* + * SPDX-FileCopyrightText: 2026 microG Project Team + * SPDX-License-Identifier: Apache-2.0 + */ + +package com.google.android.gms.ads.internal.formats.client; + +import com.google.android.gms.ads.internal.formats.client.INativeAppInstallAd; + +interface IOnAppInstallAdLoadedListener { + void onAppInstallAdLoaded(INativeAppInstallAd ad) = 0; +} diff --git a/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/formats/client/IOnContentAdLoadedListener.aidl b/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/formats/client/IOnContentAdLoadedListener.aidl new file mode 100644 index 0000000000..c35c6ed091 --- /dev/null +++ b/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/formats/client/IOnContentAdLoadedListener.aidl @@ -0,0 +1,12 @@ +/* + * SPDX-FileCopyrightText: 2026 microG Project Team + * SPDX-License-Identifier: Apache-2.0 + */ + +package com.google.android.gms.ads.internal.formats.client; + +import com.google.android.gms.ads.internal.formats.client.INativeContentAd; + +interface IOnContentAdLoadedListener { + void onContentAdLoaded(INativeContentAd ad) = 0; +} diff --git a/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/formats/client/IOnCustomClickListener.aidl b/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/formats/client/IOnCustomClickListener.aidl new file mode 100644 index 0000000000..b0ec913130 --- /dev/null +++ b/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/formats/client/IOnCustomClickListener.aidl @@ -0,0 +1,12 @@ +/* + * SPDX-FileCopyrightText: 2026 microG Project Team + * SPDX-License-Identifier: Apache-2.0 + */ + +package com.google.android.gms.ads.internal.formats.client; + +import com.google.android.gms.ads.internal.formats.client.INativeCustomTemplateAd; + +interface IOnCustomClickListener { + void onCustomClick(INativeCustomTemplateAd ad, String assetName) = 0; +} diff --git a/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/formats/client/IOnCustomTemplateAdLoadedListener.aidl b/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/formats/client/IOnCustomTemplateAdLoadedListener.aidl new file mode 100644 index 0000000000..6b82dc26f6 --- /dev/null +++ b/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/formats/client/IOnCustomTemplateAdLoadedListener.aidl @@ -0,0 +1,12 @@ +/* + * SPDX-FileCopyrightText: 2026 microG Project Team + * SPDX-License-Identifier: Apache-2.0 + */ + +package com.google.android.gms.ads.internal.formats.client; + +import com.google.android.gms.ads.internal.formats.client.INativeCustomTemplateAd; + +interface IOnCustomTemplateAdLoadedListener { + void onCustomTemplateAdLoaded(INativeCustomTemplateAd ad) = 0; +} diff --git a/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/formats/client/IOnPublisherAdViewLoadedListener.aidl b/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/formats/client/IOnPublisherAdViewLoadedListener.aidl new file mode 100644 index 0000000000..18617588b9 --- /dev/null +++ b/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/formats/client/IOnPublisherAdViewLoadedListener.aidl @@ -0,0 +1,12 @@ +/* + * SPDX-FileCopyrightText: 2026 microG Project Team + * SPDX-License-Identifier: Apache-2.0 + */ + +package com.google.android.gms.ads.internal.formats.client; + +import com.google.android.gms.dynamic.IObjectWrapper; + +interface IOnPublisherAdViewLoadedListener { + void onPublisherAdViewLoaded(IObjectWrapper view) = 0; +} diff --git a/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/formats/client/IOnUnifiedNativeAdLoadedListener.aidl b/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/formats/client/IOnUnifiedNativeAdLoadedListener.aidl new file mode 100644 index 0000000000..cfa2235d33 --- /dev/null +++ b/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/formats/client/IOnUnifiedNativeAdLoadedListener.aidl @@ -0,0 +1,12 @@ +/* + * SPDX-FileCopyrightText: 2026 microG Project Team + * SPDX-License-Identifier: Apache-2.0 + */ + +package com.google.android.gms.ads.internal.formats.client; + +import com.google.android.gms.ads.internal.formats.client.IUnifiedNativeAd; + +interface IOnUnifiedNativeAdLoadedListener { + void onUnifiedNativeAdLoaded(IUnifiedNativeAd ad) = 0; +} diff --git a/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/formats/client/IUnifiedNativeAd.aidl b/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/formats/client/IUnifiedNativeAd.aidl new file mode 100644 index 0000000000..3fc4c948a5 --- /dev/null +++ b/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/formats/client/IUnifiedNativeAd.aidl @@ -0,0 +1,36 @@ +/* + * SPDX-FileCopyrightText: 2026 microG Project Team + * SPDX-License-Identifier: Apache-2.0 + */ + +package com.google.android.gms.ads.internal.formats.client; + +import android.os.Bundle; +import com.google.android.gms.ads.internal.client.IVideoController; +import com.google.android.gms.ads.internal.client.IResponseInfo; +import com.google.android.gms.ads.internal.formats.client.INativeAdImage; +import com.google.android.gms.ads.internal.formats.client.IAttributionInfo; +import com.google.android.gms.dynamic.IObjectWrapper; + +interface IUnifiedNativeAd { + String getHeadline() = 0; + List getImages() = 1; + String getBody() = 2; + INativeAdImage getIcon() = 3; + String getCallToAction() = 4; + double getStarRating() = 5; + String getStore() = 6; + String getPrice() = 7; + String getAdvertiser() = 8; + Bundle getExtras() = 9; + IVideoController getVideoController() = 10; + float getMediaContentAspectRatio() = 11; + IResponseInfo getResponseInfo() = 12; + IAttributionInfo getAttributionInfo() = 13; + void recordImpression() = 14; + void performClick(in Bundle clickData) = 15; + void reportTouchEvent(in Bundle touchData) = 16; + void cancelUnconfirmedClick() = 17; + void recordCustomClickGesture() = 18; + IObjectWrapper getMediaContent() = 19; +} diff --git a/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/instream/InstreamAdConfigurationParcel.aidl b/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/instream/InstreamAdConfigurationParcel.aidl new file mode 100644 index 0000000000..50dd790e67 --- /dev/null +++ b/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/instream/InstreamAdConfigurationParcel.aidl @@ -0,0 +1,8 @@ +/* + * SPDX-FileCopyrightText: 2026 microG Project Team + * SPDX-License-Identifier: Apache-2.0 + */ + +package com.google.android.gms.ads.internal.instream; + +parcelable InstreamAdConfigurationParcel; diff --git a/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/instream/client/IInstreamAd.aidl b/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/instream/client/IInstreamAd.aidl new file mode 100644 index 0000000000..463828ea26 --- /dev/null +++ b/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/instream/client/IInstreamAd.aidl @@ -0,0 +1,14 @@ +/* + * SPDX-FileCopyrightText: 2026 microG Project Team + * SPDX-License-Identifier: Apache-2.0 + */ + +package com.google.android.gms.ads.internal.instream.client; + +import com.google.android.gms.dynamic.IObjectWrapper; + +interface IInstreamAd { + void destroy() = 0; + IObjectWrapper getMediaContent() = 1; + float getAspectRatio() = 2; +} diff --git a/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/instream/client/IInstreamAdLoadCallback.aidl b/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/instream/client/IInstreamAdLoadCallback.aidl new file mode 100644 index 0000000000..d66d32240a --- /dev/null +++ b/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/instream/client/IInstreamAdLoadCallback.aidl @@ -0,0 +1,13 @@ +/* + * SPDX-FileCopyrightText: 2026 microG Project Team + * SPDX-License-Identifier: Apache-2.0 + */ + +package com.google.android.gms.ads.internal.instream.client; + +import com.google.android.gms.ads.internal.instream.client.IInstreamAd; + +interface IInstreamAdLoadCallback { + void onInstreamAdLoaded(IInstreamAd ad) = 0; + void onInstreamAdFailedToLoad(int errorCode) = 1; +} diff --git a/play-services-ads-lite/src/main/java/com/google/android/gms/ads/formats/AdManagerAdViewOptions.java b/play-services-ads-lite/src/main/java/com/google/android/gms/ads/formats/AdManagerAdViewOptions.java new file mode 100644 index 0000000000..6adb37a7b6 --- /dev/null +++ b/play-services-ads-lite/src/main/java/com/google/android/gms/ads/formats/AdManagerAdViewOptions.java @@ -0,0 +1,28 @@ +/* + * SPDX-FileCopyrightText: 2026 microG Project Team + * SPDX-License-Identifier: Apache-2.0 + */ + +package com.google.android.gms.ads.formats; + +import android.os.Parcel; +import androidx.annotation.NonNull; +import com.google.android.gms.common.internal.safeparcel.AbstractSafeParcelable; +import com.google.android.gms.common.internal.safeparcel.SafeParcelable; +import com.google.android.gms.common.internal.safeparcel.SafeParcelableCreatorAndWriter; + +/** + * Ad Manager ad view options passed to {@code IAdLoaderBuilder.setAdManagerAdViewOptions}. + */ +@SafeParcelable.Class +public final class AdManagerAdViewOptions extends AbstractSafeParcelable { + @Field(1) + public boolean manualImpressionsEnabled; + + @Override + public void writeToParcel(@NonNull Parcel dest, int flags) { + CREATOR.writeToParcel(this, dest, flags); + } + + public static final SafeParcelableCreatorAndWriter CREATOR = findCreator(AdManagerAdViewOptions.class); +} diff --git a/play-services-ads-lite/src/main/java/com/google/android/gms/ads/formats/PublisherAdViewOptions.java b/play-services-ads-lite/src/main/java/com/google/android/gms/ads/formats/PublisherAdViewOptions.java new file mode 100644 index 0000000000..9bdcef6806 --- /dev/null +++ b/play-services-ads-lite/src/main/java/com/google/android/gms/ads/formats/PublisherAdViewOptions.java @@ -0,0 +1,34 @@ +/* + * SPDX-FileCopyrightText: 2026 microG Project Team + * SPDX-License-Identifier: Apache-2.0 + */ + +package com.google.android.gms.ads.formats; + +import android.os.IBinder; +import android.os.Parcel; +import androidx.annotation.NonNull; +import com.google.android.gms.common.internal.safeparcel.AbstractSafeParcelable; +import com.google.android.gms.common.internal.safeparcel.SafeParcelable; +import com.google.android.gms.common.internal.safeparcel.SafeParcelableCreatorAndWriter; + +/** + * Ad Manager publisher ad view options passed to {@code IAdLoaderBuilder.setPublisherAdViewOptions}. + */ +@Deprecated +@SafeParcelable.Class +public final class PublisherAdViewOptions extends AbstractSafeParcelable { + @Field(1) + public boolean manualImpressionsEnabled; + @Field(2) + public IBinder appEventListener; + @Field(3) + public IBinder delayedBannerAdListener; + + @Override + public void writeToParcel(@NonNull Parcel dest, int flags) { + CREATOR.writeToParcel(this, dest, flags); + } + + public static final SafeParcelableCreatorAndWriter CREATOR = findCreator(PublisherAdViewOptions.class); +} diff --git a/play-services-ads-lite/src/main/java/com/google/android/gms/ads/internal/client/AdSizeParcel.java b/play-services-ads-lite/src/main/java/com/google/android/gms/ads/internal/client/AdSizeParcel.java new file mode 100644 index 0000000000..27c3645955 --- /dev/null +++ b/play-services-ads-lite/src/main/java/com/google/android/gms/ads/internal/client/AdSizeParcel.java @@ -0,0 +1,59 @@ +/* + * SPDX-FileCopyrightText: 2026 microG Project Team + * SPDX-License-Identifier: Apache-2.0 + */ + +package com.google.android.gms.ads.internal.client; + +import android.os.Parcel; +import androidx.annotation.NonNull; +import com.google.android.gms.common.internal.safeparcel.AbstractSafeParcelable; +import com.google.android.gms.common.internal.safeparcel.SafeParcelable; +import com.google.android.gms.common.internal.safeparcel.SafeParcelableCreatorAndWriter; + +/** + * Ad size (AdMob {@code AdSize}) passed to {@code IAdLoaderBuilder.forPublisherAdView} and used by the + * banner ad manager. + */ +@SafeParcelable.Class +public class AdSizeParcel extends AbstractSafeParcelable { + @Field(2) + public String formatString; + @Field(3) + public int height; + @Field(4) + public int heightPixels; + @Field(5) + public boolean autoHeight; + @Field(6) + public int width; + @Field(7) + public int widthPixels; + @Field(8) + public AdSizeParcel[] shortcuts; + @Field(9) + public boolean isFluid; + @Field(10) + public boolean isAutoHeightSmartBanner; + @Field(11) + public boolean isDynamicBanner; + @Field(12) + public boolean isFullWidth; + @Field(13) + public boolean isAutoMediation; + @Field(14) + public boolean isParcelStateValid; + @Field(15) + public boolean isAdaptiveBanner; + @Field(16) + public boolean isInlineAdaptiveBanner; + @Field(17) + public boolean isCollapsible; + + @Override + public void writeToParcel(@NonNull Parcel dest, int flags) { + CREATOR.writeToParcel(this, dest, flags); + } + + public static final SafeParcelableCreatorAndWriter CREATOR = findCreator(AdSizeParcel.class); +} diff --git a/play-services-ads-lite/src/main/java/com/google/android/gms/ads/internal/client/AdValueParcel.java b/play-services-ads-lite/src/main/java/com/google/android/gms/ads/internal/client/AdValueParcel.java new file mode 100644 index 0000000000..2772cfe1d4 --- /dev/null +++ b/play-services-ads-lite/src/main/java/com/google/android/gms/ads/internal/client/AdValueParcel.java @@ -0,0 +1,34 @@ +/* + * SPDX-FileCopyrightText: 2026 microG Project Team + * SPDX-License-Identifier: Apache-2.0 + */ + +package com.google.android.gms.ads.internal.client; + +import android.os.Parcel; +import androidx.annotation.NonNull; +import com.google.android.gms.common.internal.safeparcel.AbstractSafeParcelable; +import com.google.android.gms.common.internal.safeparcel.SafeParcelable; +import com.google.android.gms.common.internal.safeparcel.SafeParcelableCreatorAndWriter; + +/** + * Ad value (AdMob {@code AdValue}) delivered to {@code IOnPaidEventListener.onPaidEvent}. + */ +@SafeParcelable.Class +public class AdValueParcel extends AbstractSafeParcelable { + @Field(1) + public int adType; + @Field(2) + public int precisionType; + @Field(3) + public String currencyCode; + @Field(4) + public long valueMicros; + + @Override + public void writeToParcel(@NonNull Parcel dest, int flags) { + CREATOR.writeToParcel(this, dest, flags); + } + + public static final SafeParcelableCreatorAndWriter CREATOR = findCreator(AdValueParcel.class); +} diff --git a/play-services-ads-lite/src/main/java/com/google/android/gms/ads/internal/client/VideoOptionsParcel.java b/play-services-ads-lite/src/main/java/com/google/android/gms/ads/internal/client/VideoOptionsParcel.java new file mode 100644 index 0000000000..7db887515d --- /dev/null +++ b/play-services-ads-lite/src/main/java/com/google/android/gms/ads/internal/client/VideoOptionsParcel.java @@ -0,0 +1,32 @@ +/* + * SPDX-FileCopyrightText: 2026 microG Project Team + * SPDX-License-Identifier: Apache-2.0 + */ + +package com.google.android.gms.ads.internal.client; + +import android.os.Parcel; +import androidx.annotation.NonNull; +import com.google.android.gms.common.internal.safeparcel.AbstractSafeParcelable; +import com.google.android.gms.common.internal.safeparcel.SafeParcelable; +import com.google.android.gms.common.internal.safeparcel.SafeParcelableCreatorAndWriter; + +/** + * Video options (AdMob {@code VideoOptions}) nested inside {@link NativeAdOptionsParcel}. + */ +@SafeParcelable.Class +public class VideoOptionsParcel extends AbstractSafeParcelable { + @Field(2) + public boolean startMuted; + @Field(3) + public boolean customControlsRequested; + @Field(4) + public boolean clickToExpandRequested; + + @Override + public void writeToParcel(@NonNull Parcel dest, int flags) { + CREATOR.writeToParcel(this, dest, flags); + } + + public static final SafeParcelableCreatorAndWriter CREATOR = findCreator(VideoOptionsParcel.class); +} diff --git a/play-services-ads-lite/src/main/java/com/google/android/gms/ads/internal/formats/NativeAdOptionsParcel.java b/play-services-ads-lite/src/main/java/com/google/android/gms/ads/internal/formats/NativeAdOptionsParcel.java new file mode 100644 index 0000000000..4cd3fe0d11 --- /dev/null +++ b/play-services-ads-lite/src/main/java/com/google/android/gms/ads/internal/formats/NativeAdOptionsParcel.java @@ -0,0 +1,49 @@ +/* + * SPDX-FileCopyrightText: 2026 microG Project Team + * SPDX-License-Identifier: Apache-2.0 + */ + +package com.google.android.gms.ads.internal.formats; + +import android.os.Parcel; +import androidx.annotation.NonNull; +import com.google.android.gms.ads.internal.client.VideoOptionsParcel; +import com.google.android.gms.common.internal.safeparcel.AbstractSafeParcelable; +import com.google.android.gms.common.internal.safeparcel.SafeParcelable; +import com.google.android.gms.common.internal.safeparcel.SafeParcelableCreatorAndWriter; + +/** + * Native ad options (AdMob {@code NativeAdOptions}) passed to {@code IAdLoaderBuilder.setNativeAdOptions}. + */ +@SafeParcelable.Class +public class NativeAdOptionsParcel extends AbstractSafeParcelable { + @Field(1) + public int versionCode = 6; + @Field(2) + public boolean returnUrlsForImageAssets; + @Field(3) + public int imageOrientation; + @Field(4) + public boolean requestMultipleImages; + @Field(5) + public int adChoicesPlacement; + @Field(6) + public VideoOptionsParcel videoOptions; + @Field(7) + public boolean requestCustomMuteThisAd; + @Field(8) + public int mediaAspectRatio; + @Field(9) + public int swipeGestureDirection; + @Field(10) + public boolean customClickGestureEnabled; + @Field(11) + public int customClickGestureDirection; + + @Override + public void writeToParcel(@NonNull Parcel dest, int flags) { + CREATOR.writeToParcel(this, dest, flags); + } + + public static final SafeParcelableCreatorAndWriter CREATOR = findCreator(NativeAdOptionsParcel.class); +} diff --git a/play-services-ads-lite/src/main/java/com/google/android/gms/ads/internal/instream/InstreamAdConfigurationParcel.java b/play-services-ads-lite/src/main/java/com/google/android/gms/ads/internal/instream/InstreamAdConfigurationParcel.java new file mode 100644 index 0000000000..219860d817 --- /dev/null +++ b/play-services-ads-lite/src/main/java/com/google/android/gms/ads/internal/instream/InstreamAdConfigurationParcel.java @@ -0,0 +1,34 @@ +/* + * SPDX-FileCopyrightText: 2026 microG Project Team + * SPDX-License-Identifier: Apache-2.0 + */ + +package com.google.android.gms.ads.internal.instream; + +import android.os.Parcel; +import androidx.annotation.NonNull; +import com.google.android.gms.common.internal.safeparcel.AbstractSafeParcelable; +import com.google.android.gms.common.internal.safeparcel.SafeParcelable; +import com.google.android.gms.common.internal.safeparcel.SafeParcelableCreatorAndWriter; + +/** + * Instream ad configuration passed to {@code IAdLoaderBuilder.forInstreamAd}. + */ +@SafeParcelable.Class +public class InstreamAdConfigurationParcel extends AbstractSafeParcelable { + @Field(1000) + public int versionCode; + @Field(1) + public int instreamAdType; + @Field(2) + public String adTagUrl; + @Field(3) + public int timeoutMillis; + + @Override + public void writeToParcel(@NonNull Parcel dest, int flags) { + CREATOR.writeToParcel(this, dest, flags); + } + + public static final SafeParcelableCreatorAndWriter CREATOR = findCreator(InstreamAdConfigurationParcel.class); +} From 4c4247e02e87a876dc755106f8cb206ff98f9f49 Mon Sep 17 00:00:00 2001 From: Marvin W Date: Mon, 8 Jun 2026 19:54:45 +0200 Subject: [PATCH 03/20] Introduce new play-services-ads-api package --- play-services-ads-api/build.gradle | 46 ++++++++++++++++ .../core/build.gradle | 2 +- .../core/src/main/AndroidManifest.xml | 0 .../gms/ads/AdLoaderBuilderCreatorImpl.kt | 0 .../android/gms/ads/AdManagerCreatorImpl.kt | 0 .../ads/ChimeraAdLoaderBuilderCreatorImpl.kt | 0 .../gms/ads/ChimeraAdManagerCreatorImpl.kt | 0 ...imeraMobileAdsSettingManagerCreatorImpl.kt | 0 .../android/gms/ads/LegacyAdLoaderBuilder.kt | 0 .../google/android/gms/ads/LegacyAdManager.kt | 0 .../ads/MobileAdsSettingManagerCreatorImpl.kt | 0 .../measurement/DynamiteMeasurementManager.kt | 0 .../rewarded/ChimeraRewardedAdCreatorImpl.kt | 0 .../gms/ads/MobileAdsSettingManagerImpl.kt | 0 .../gms/ads/rewarded/ResponseInfoImpl.kt | 0 .../microg/gms/ads/rewarded/RewardedAdImpl.kt | 0 .../src/main/AndroidManifest.xml | 53 +++++++++++++++++++ .../ads/formats/AdManagerAdViewOptions.aidl | 0 .../ads/formats/PublisherAdViewOptions.aidl | 0 .../gms/ads/internal/AdErrorParcel.aidl | 0 .../gms/ads/internal/AdRequestParcel.aidl | 0 .../internal/AdapterResponseInfoParcel.aidl | 0 .../gms/ads/internal/AdapterStatusParcel.aidl | 0 .../internal/RequestConfigurationParcel.aidl | 0 .../ServerSideVerificationOptionsParcel.aidl | 0 .../gms/ads/internal/client/AdSizeParcel.aidl | 0 .../ads/internal/client/AdValueParcel.aidl | 0 .../ads/internal/client/IAdClickListener.aidl | 0 .../gms/ads/internal/client/IAdListener.aidl | 0 .../ads/internal/client/IAdLoadCallback.aidl | 0 .../gms/ads/internal/client/IAdLoader.aidl | 0 .../ads/internal/client/IAdLoaderBuilder.aidl | 0 .../client/IAdLoaderBuilderCreator.aidl | 0 .../gms/ads/internal/client/IAdManager.aidl | 0 .../internal/client/IAdManagerCreator.aidl | 0 .../internal/client/IAppEventListener.aidl | 0 .../client/ICorrelationIdProvider.aidl | 0 .../client/IFullScreenContentCallback.aidl | 0 .../client/IMobileAdsSettingManager.aidl | 0 .../IMobileAdsSettingManagerCreator.aidl | 0 .../client/IOnAdInspectorClosedListener.aidl | 0 .../client/IOnAdMetadataChangedListener.aidl | 0 .../internal/client/IOnPaidEventListener.aidl | 0 .../ads/internal/client/IResponseInfo.aidl | 0 .../ads/internal/client/IVideoController.aidl | 0 .../client/IVideoLifecycleCallbacks.aidl | 0 .../formats/NativeAdOptionsParcel.aidl | 0 .../formats/client/IAttributionInfo.aidl | 0 .../formats/client/INativeAdImage.aidl | 0 .../formats/client/INativeAppInstallAd.aidl | 0 .../formats/client/INativeContentAd.aidl | 0 .../client/INativeCustomTemplateAd.aidl | 0 .../client/IOnAppInstallAdLoadedListener.aidl | 0 .../client/IOnContentAdLoadedListener.aidl | 0 .../client/IOnCustomClickListener.aidl | 0 .../IOnCustomTemplateAdLoadedListener.aidl | 0 .../IOnPublisherAdViewLoadedListener.aidl | 0 .../IOnUnifiedNativeAdLoadedListener.aidl | 0 .../formats/client/IUnifiedNativeAd.aidl | 0 .../IInitializationCallback.aidl | 0 .../InstreamAdConfigurationParcel.aidl | 0 .../internal/instream/client/IInstreamAd.aidl | 0 .../client/IInstreamAdLoadCallback.aidl | 0 .../mediation/client/IAdapterCreator.aidl | 0 .../internal/rewarded/client/IRewardItem.aidl | 0 .../internal/rewarded/client/IRewardedAd.aidl | 0 .../rewarded/client/IRewardedAdCallback.aidl | 0 .../rewarded/client/IRewardedAdCreator.aidl | 0 .../client/IRewardedAdLoadCallback.aidl | 0 .../client/IRewardedAdSkuListener.aidl | 0 .../ads/measurement/IAppMeasurementProxy.aidl | 0 .../ads/measurement/IMeasurementManager.aidl | 0 .../gms/ads/admanager/package-info.java | 0 .../ads/formats/AdManagerAdViewOptions.java | 0 .../ads/formats/PublisherAdViewOptions.java | 0 .../android/gms/ads/h5/package-info.java | 0 .../gms/ads/initialization/package-info.java | 0 .../gms/ads/internal/AdDataParcel.java | 0 .../gms/ads/internal/AdErrorParcel.java | 0 .../gms/ads/internal/AdRequestParcel.java | 0 .../internal/AdapterResponseInfoParcel.java | 0 .../gms/ads/internal/AdapterStatusParcel.java | 0 .../internal/RequestConfigurationParcel.java | 0 .../ads/internal/SearchAdRequestParcel.java | 0 .../ServerSideVerificationOptionsParcel.java | 0 .../gms/ads/internal/client/AdSizeParcel.java | 0 .../ads/internal/client/AdValueParcel.java | 0 .../internal/client/VideoOptionsParcel.java | 0 .../formats/NativeAdOptionsParcel.java | 0 .../InstreamAdConfigurationParcel.java | 0 .../gms/ads/interstitial/package-info.java | 0 .../mediation/customevent/package-info.java | 0 .../gms/ads/mediation/package-info.java | 0 .../gms/ads/mediation/rtb/package-info.java | 0 .../gms/ads/nativead/package-info.java | 0 .../google/android/gms/ads/package-info.java | 0 .../gms/ads/rewarded/package-info.java | 0 .../rewardedinterstitial/package-info.java | 0 .../android/gms/ads/search/package-info.java | 0 play-services-ads-lite/build.gradle | 10 ++-- .../src/main/AndroidManifest.xml | 18 ------- .../android/gms/ads/AdManagerCreator.aidl | 4 -- play-services-core/build.gradle | 2 +- settings.gradle | 3 +- 104 files changed, 106 insertions(+), 32 deletions(-) create mode 100644 play-services-ads-api/build.gradle rename {play-services-ads-lite => play-services-ads-api}/core/build.gradle (94%) rename {play-services-ads-lite => play-services-ads-api}/core/src/main/AndroidManifest.xml (100%) rename {play-services-ads-lite => play-services-ads-api}/core/src/main/kotlin/com/google/android/gms/ads/AdLoaderBuilderCreatorImpl.kt (100%) rename {play-services-ads-lite => play-services-ads-api}/core/src/main/kotlin/com/google/android/gms/ads/AdManagerCreatorImpl.kt (100%) rename {play-services-ads-lite => play-services-ads-api}/core/src/main/kotlin/com/google/android/gms/ads/ChimeraAdLoaderBuilderCreatorImpl.kt (100%) rename {play-services-ads-lite => play-services-ads-api}/core/src/main/kotlin/com/google/android/gms/ads/ChimeraAdManagerCreatorImpl.kt (100%) rename {play-services-ads-lite => play-services-ads-api}/core/src/main/kotlin/com/google/android/gms/ads/ChimeraMobileAdsSettingManagerCreatorImpl.kt (100%) rename {play-services-ads-lite => play-services-ads-api}/core/src/main/kotlin/com/google/android/gms/ads/LegacyAdLoaderBuilder.kt (100%) rename {play-services-ads-lite => play-services-ads-api}/core/src/main/kotlin/com/google/android/gms/ads/LegacyAdManager.kt (100%) rename {play-services-ads-lite => play-services-ads-api}/core/src/main/kotlin/com/google/android/gms/ads/MobileAdsSettingManagerCreatorImpl.kt (100%) rename {play-services-ads-lite => play-services-ads-api}/core/src/main/kotlin/com/google/android/gms/ads/measurement/DynamiteMeasurementManager.kt (100%) rename {play-services-ads-lite => play-services-ads-api}/core/src/main/kotlin/com/google/android/gms/ads/rewarded/ChimeraRewardedAdCreatorImpl.kt (100%) rename {play-services-ads-lite => play-services-ads-api}/core/src/main/kotlin/org/microg/gms/ads/MobileAdsSettingManagerImpl.kt (100%) rename {play-services-ads-lite => play-services-ads-api}/core/src/main/kotlin/org/microg/gms/ads/rewarded/ResponseInfoImpl.kt (100%) rename {play-services-ads-lite => play-services-ads-api}/core/src/main/kotlin/org/microg/gms/ads/rewarded/RewardedAdImpl.kt (100%) create mode 100644 play-services-ads-api/src/main/AndroidManifest.xml rename {play-services-ads-lite => play-services-ads-api}/src/main/aidl/com/google/android/gms/ads/formats/AdManagerAdViewOptions.aidl (100%) rename {play-services-ads-lite => play-services-ads-api}/src/main/aidl/com/google/android/gms/ads/formats/PublisherAdViewOptions.aidl (100%) rename {play-services-ads-lite => play-services-ads-api}/src/main/aidl/com/google/android/gms/ads/internal/AdErrorParcel.aidl (100%) rename {play-services-ads-lite => play-services-ads-api}/src/main/aidl/com/google/android/gms/ads/internal/AdRequestParcel.aidl (100%) rename {play-services-ads-lite => play-services-ads-api}/src/main/aidl/com/google/android/gms/ads/internal/AdapterResponseInfoParcel.aidl (100%) rename {play-services-ads-lite => play-services-ads-api}/src/main/aidl/com/google/android/gms/ads/internal/AdapterStatusParcel.aidl (100%) rename {play-services-ads-lite => play-services-ads-api}/src/main/aidl/com/google/android/gms/ads/internal/RequestConfigurationParcel.aidl (100%) rename {play-services-ads-lite => play-services-ads-api}/src/main/aidl/com/google/android/gms/ads/internal/ServerSideVerificationOptionsParcel.aidl (100%) rename {play-services-ads-lite => play-services-ads-api}/src/main/aidl/com/google/android/gms/ads/internal/client/AdSizeParcel.aidl (100%) rename {play-services-ads-lite => play-services-ads-api}/src/main/aidl/com/google/android/gms/ads/internal/client/AdValueParcel.aidl (100%) rename {play-services-ads-lite => play-services-ads-api}/src/main/aidl/com/google/android/gms/ads/internal/client/IAdClickListener.aidl (100%) rename {play-services-ads-lite => play-services-ads-api}/src/main/aidl/com/google/android/gms/ads/internal/client/IAdListener.aidl (100%) rename {play-services-ads-lite => play-services-ads-api}/src/main/aidl/com/google/android/gms/ads/internal/client/IAdLoadCallback.aidl (100%) rename {play-services-ads-lite => play-services-ads-api}/src/main/aidl/com/google/android/gms/ads/internal/client/IAdLoader.aidl (100%) rename {play-services-ads-lite => play-services-ads-api}/src/main/aidl/com/google/android/gms/ads/internal/client/IAdLoaderBuilder.aidl (100%) rename {play-services-ads-lite => play-services-ads-api}/src/main/aidl/com/google/android/gms/ads/internal/client/IAdLoaderBuilderCreator.aidl (100%) rename {play-services-ads-lite => play-services-ads-api}/src/main/aidl/com/google/android/gms/ads/internal/client/IAdManager.aidl (100%) rename {play-services-ads-lite => play-services-ads-api}/src/main/aidl/com/google/android/gms/ads/internal/client/IAdManagerCreator.aidl (100%) rename {play-services-ads-lite => play-services-ads-api}/src/main/aidl/com/google/android/gms/ads/internal/client/IAppEventListener.aidl (100%) rename {play-services-ads-lite => play-services-ads-api}/src/main/aidl/com/google/android/gms/ads/internal/client/ICorrelationIdProvider.aidl (100%) rename {play-services-ads-lite => play-services-ads-api}/src/main/aidl/com/google/android/gms/ads/internal/client/IFullScreenContentCallback.aidl (100%) rename {play-services-ads-lite => play-services-ads-api}/src/main/aidl/com/google/android/gms/ads/internal/client/IMobileAdsSettingManager.aidl (100%) rename {play-services-ads-lite => play-services-ads-api}/src/main/aidl/com/google/android/gms/ads/internal/client/IMobileAdsSettingManagerCreator.aidl (100%) rename {play-services-ads-lite => play-services-ads-api}/src/main/aidl/com/google/android/gms/ads/internal/client/IOnAdInspectorClosedListener.aidl (100%) rename {play-services-ads-lite => play-services-ads-api}/src/main/aidl/com/google/android/gms/ads/internal/client/IOnAdMetadataChangedListener.aidl (100%) rename {play-services-ads-lite => play-services-ads-api}/src/main/aidl/com/google/android/gms/ads/internal/client/IOnPaidEventListener.aidl (100%) rename {play-services-ads-lite => play-services-ads-api}/src/main/aidl/com/google/android/gms/ads/internal/client/IResponseInfo.aidl (100%) rename {play-services-ads-lite => play-services-ads-api}/src/main/aidl/com/google/android/gms/ads/internal/client/IVideoController.aidl (100%) rename {play-services-ads-lite => play-services-ads-api}/src/main/aidl/com/google/android/gms/ads/internal/client/IVideoLifecycleCallbacks.aidl (100%) rename {play-services-ads-lite => play-services-ads-api}/src/main/aidl/com/google/android/gms/ads/internal/formats/NativeAdOptionsParcel.aidl (100%) rename {play-services-ads-lite => play-services-ads-api}/src/main/aidl/com/google/android/gms/ads/internal/formats/client/IAttributionInfo.aidl (100%) rename {play-services-ads-lite => play-services-ads-api}/src/main/aidl/com/google/android/gms/ads/internal/formats/client/INativeAdImage.aidl (100%) rename {play-services-ads-lite => play-services-ads-api}/src/main/aidl/com/google/android/gms/ads/internal/formats/client/INativeAppInstallAd.aidl (100%) rename {play-services-ads-lite => play-services-ads-api}/src/main/aidl/com/google/android/gms/ads/internal/formats/client/INativeContentAd.aidl (100%) rename {play-services-ads-lite => play-services-ads-api}/src/main/aidl/com/google/android/gms/ads/internal/formats/client/INativeCustomTemplateAd.aidl (100%) rename {play-services-ads-lite => play-services-ads-api}/src/main/aidl/com/google/android/gms/ads/internal/formats/client/IOnAppInstallAdLoadedListener.aidl (100%) rename {play-services-ads-lite => play-services-ads-api}/src/main/aidl/com/google/android/gms/ads/internal/formats/client/IOnContentAdLoadedListener.aidl (100%) rename {play-services-ads-lite => play-services-ads-api}/src/main/aidl/com/google/android/gms/ads/internal/formats/client/IOnCustomClickListener.aidl (100%) rename {play-services-ads-lite => play-services-ads-api}/src/main/aidl/com/google/android/gms/ads/internal/formats/client/IOnCustomTemplateAdLoadedListener.aidl (100%) rename {play-services-ads-lite => play-services-ads-api}/src/main/aidl/com/google/android/gms/ads/internal/formats/client/IOnPublisherAdViewLoadedListener.aidl (100%) rename {play-services-ads-lite => play-services-ads-api}/src/main/aidl/com/google/android/gms/ads/internal/formats/client/IOnUnifiedNativeAdLoadedListener.aidl (100%) rename {play-services-ads-lite => play-services-ads-api}/src/main/aidl/com/google/android/gms/ads/internal/formats/client/IUnifiedNativeAd.aidl (100%) rename {play-services-ads-lite => play-services-ads-api}/src/main/aidl/com/google/android/gms/ads/internal/initialization/IInitializationCallback.aidl (100%) rename {play-services-ads-lite => play-services-ads-api}/src/main/aidl/com/google/android/gms/ads/internal/instream/InstreamAdConfigurationParcel.aidl (100%) rename {play-services-ads-lite => play-services-ads-api}/src/main/aidl/com/google/android/gms/ads/internal/instream/client/IInstreamAd.aidl (100%) rename {play-services-ads-lite => play-services-ads-api}/src/main/aidl/com/google/android/gms/ads/internal/instream/client/IInstreamAdLoadCallback.aidl (100%) rename {play-services-ads-lite => play-services-ads-api}/src/main/aidl/com/google/android/gms/ads/internal/mediation/client/IAdapterCreator.aidl (100%) rename {play-services-ads-lite => play-services-ads-api}/src/main/aidl/com/google/android/gms/ads/internal/rewarded/client/IRewardItem.aidl (100%) rename {play-services-ads-lite => play-services-ads-api}/src/main/aidl/com/google/android/gms/ads/internal/rewarded/client/IRewardedAd.aidl (100%) rename {play-services-ads-lite => play-services-ads-api}/src/main/aidl/com/google/android/gms/ads/internal/rewarded/client/IRewardedAdCallback.aidl (100%) rename {play-services-ads-lite => play-services-ads-api}/src/main/aidl/com/google/android/gms/ads/internal/rewarded/client/IRewardedAdCreator.aidl (100%) rename {play-services-ads-lite => play-services-ads-api}/src/main/aidl/com/google/android/gms/ads/internal/rewarded/client/IRewardedAdLoadCallback.aidl (100%) rename {play-services-ads-lite => play-services-ads-api}/src/main/aidl/com/google/android/gms/ads/internal/rewarded/client/IRewardedAdSkuListener.aidl (100%) rename {play-services-ads-lite => play-services-ads-api}/src/main/aidl/com/google/android/gms/ads/measurement/IAppMeasurementProxy.aidl (100%) rename {play-services-ads-lite => play-services-ads-api}/src/main/aidl/com/google/android/gms/ads/measurement/IMeasurementManager.aidl (100%) rename {play-services-ads-lite => play-services-ads-api}/src/main/java/com/google/android/gms/ads/admanager/package-info.java (100%) rename {play-services-ads-lite => play-services-ads-api}/src/main/java/com/google/android/gms/ads/formats/AdManagerAdViewOptions.java (100%) rename {play-services-ads-lite => play-services-ads-api}/src/main/java/com/google/android/gms/ads/formats/PublisherAdViewOptions.java (100%) rename {play-services-ads-lite => play-services-ads-api}/src/main/java/com/google/android/gms/ads/h5/package-info.java (100%) rename {play-services-ads-lite => play-services-ads-api}/src/main/java/com/google/android/gms/ads/initialization/package-info.java (100%) rename {play-services-ads-lite => play-services-ads-api}/src/main/java/com/google/android/gms/ads/internal/AdDataParcel.java (100%) rename {play-services-ads-lite => play-services-ads-api}/src/main/java/com/google/android/gms/ads/internal/AdErrorParcel.java (100%) rename {play-services-ads-lite => play-services-ads-api}/src/main/java/com/google/android/gms/ads/internal/AdRequestParcel.java (100%) rename {play-services-ads-lite => play-services-ads-api}/src/main/java/com/google/android/gms/ads/internal/AdapterResponseInfoParcel.java (100%) rename {play-services-ads-lite => play-services-ads-api}/src/main/java/com/google/android/gms/ads/internal/AdapterStatusParcel.java (100%) rename {play-services-ads-lite => play-services-ads-api}/src/main/java/com/google/android/gms/ads/internal/RequestConfigurationParcel.java (100%) rename {play-services-ads-lite => play-services-ads-api}/src/main/java/com/google/android/gms/ads/internal/SearchAdRequestParcel.java (100%) rename {play-services-ads-lite => play-services-ads-api}/src/main/java/com/google/android/gms/ads/internal/ServerSideVerificationOptionsParcel.java (100%) rename {play-services-ads-lite => play-services-ads-api}/src/main/java/com/google/android/gms/ads/internal/client/AdSizeParcel.java (100%) rename {play-services-ads-lite => play-services-ads-api}/src/main/java/com/google/android/gms/ads/internal/client/AdValueParcel.java (100%) rename {play-services-ads-lite => play-services-ads-api}/src/main/java/com/google/android/gms/ads/internal/client/VideoOptionsParcel.java (100%) rename {play-services-ads-lite => play-services-ads-api}/src/main/java/com/google/android/gms/ads/internal/formats/NativeAdOptionsParcel.java (100%) rename {play-services-ads-lite => play-services-ads-api}/src/main/java/com/google/android/gms/ads/internal/instream/InstreamAdConfigurationParcel.java (100%) rename {play-services-ads-lite => play-services-ads-api}/src/main/java/com/google/android/gms/ads/interstitial/package-info.java (100%) rename {play-services-ads-lite => play-services-ads-api}/src/main/java/com/google/android/gms/ads/mediation/customevent/package-info.java (100%) rename {play-services-ads-lite => play-services-ads-api}/src/main/java/com/google/android/gms/ads/mediation/package-info.java (100%) rename {play-services-ads-lite => play-services-ads-api}/src/main/java/com/google/android/gms/ads/mediation/rtb/package-info.java (100%) rename {play-services-ads-lite => play-services-ads-api}/src/main/java/com/google/android/gms/ads/nativead/package-info.java (100%) rename {play-services-ads-lite => play-services-ads-api}/src/main/java/com/google/android/gms/ads/package-info.java (100%) rename {play-services-ads-lite => play-services-ads-api}/src/main/java/com/google/android/gms/ads/rewarded/package-info.java (100%) rename {play-services-ads-lite => play-services-ads-api}/src/main/java/com/google/android/gms/ads/rewardedinterstitial/package-info.java (100%) rename {play-services-ads-lite => play-services-ads-api}/src/main/java/com/google/android/gms/ads/search/package-info.java (100%) delete mode 100644 play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/AdManagerCreator.aidl diff --git a/play-services-ads-api/build.gradle b/play-services-ads-api/build.gradle new file mode 100644 index 0000000000..4c4a826758 --- /dev/null +++ b/play-services-ads-api/build.gradle @@ -0,0 +1,46 @@ +/* + * SPDX-FileCopyrightText: 2026 microG Project Team + * SPDX-License-Identifier: Apache-2.0 + */ + +apply plugin: 'com.android.library' +apply plugin: 'maven-publish' +apply plugin: 'signing' + +android { + namespace "com.google.android.gms.ads" + + compileSdkVersion androidCompileSdk + buildToolsVersion "$androidBuildVersionTools" + + buildFeatures { + aidl = true + } + + defaultConfig { + versionName version + minSdkVersion androidMinSdk + targetSdkVersion androidTargetSdk + } + + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } +} + +apply from: '../gradle/publish-android.gradle' + +description = 'microG implementation of play-services-ads-api' + +dependencies { + // Dependencies from play-services-ads-api:25.3.0 + api 'androidx.browser:browser:1.8.0' + api 'androidx.core:core:1.10.1' + api 'androidx.datastore:datastore:1.0.0' + api 'androidx.work:work-runtime:2.7.0' + //api 'com.google.android.ump:user-messaging-platform:4.0.0' + api project(':play-services-basement') + //api project(':play-services-measurement-sdk-api') + annotationProcessor project(':safe-parcel-processor') +} diff --git a/play-services-ads-lite/core/build.gradle b/play-services-ads-api/core/build.gradle similarity index 94% rename from play-services-ads-lite/core/build.gradle rename to play-services-ads-api/core/build.gradle index 4c4832ef5e..9beb7b8c90 100644 --- a/play-services-ads-lite/core/build.gradle +++ b/play-services-ads-api/core/build.gradle @@ -7,7 +7,7 @@ apply plugin: 'com.android.library' apply plugin: 'kotlin-android' dependencies { - api project(':play-services-ads-lite') + api project(':play-services-ads-api') implementation project(':play-services-base-core') } diff --git a/play-services-ads-lite/core/src/main/AndroidManifest.xml b/play-services-ads-api/core/src/main/AndroidManifest.xml similarity index 100% rename from play-services-ads-lite/core/src/main/AndroidManifest.xml rename to play-services-ads-api/core/src/main/AndroidManifest.xml diff --git a/play-services-ads-lite/core/src/main/kotlin/com/google/android/gms/ads/AdLoaderBuilderCreatorImpl.kt b/play-services-ads-api/core/src/main/kotlin/com/google/android/gms/ads/AdLoaderBuilderCreatorImpl.kt similarity index 100% rename from play-services-ads-lite/core/src/main/kotlin/com/google/android/gms/ads/AdLoaderBuilderCreatorImpl.kt rename to play-services-ads-api/core/src/main/kotlin/com/google/android/gms/ads/AdLoaderBuilderCreatorImpl.kt diff --git a/play-services-ads-lite/core/src/main/kotlin/com/google/android/gms/ads/AdManagerCreatorImpl.kt b/play-services-ads-api/core/src/main/kotlin/com/google/android/gms/ads/AdManagerCreatorImpl.kt similarity index 100% rename from play-services-ads-lite/core/src/main/kotlin/com/google/android/gms/ads/AdManagerCreatorImpl.kt rename to play-services-ads-api/core/src/main/kotlin/com/google/android/gms/ads/AdManagerCreatorImpl.kt diff --git a/play-services-ads-lite/core/src/main/kotlin/com/google/android/gms/ads/ChimeraAdLoaderBuilderCreatorImpl.kt b/play-services-ads-api/core/src/main/kotlin/com/google/android/gms/ads/ChimeraAdLoaderBuilderCreatorImpl.kt similarity index 100% rename from play-services-ads-lite/core/src/main/kotlin/com/google/android/gms/ads/ChimeraAdLoaderBuilderCreatorImpl.kt rename to play-services-ads-api/core/src/main/kotlin/com/google/android/gms/ads/ChimeraAdLoaderBuilderCreatorImpl.kt diff --git a/play-services-ads-lite/core/src/main/kotlin/com/google/android/gms/ads/ChimeraAdManagerCreatorImpl.kt b/play-services-ads-api/core/src/main/kotlin/com/google/android/gms/ads/ChimeraAdManagerCreatorImpl.kt similarity index 100% rename from play-services-ads-lite/core/src/main/kotlin/com/google/android/gms/ads/ChimeraAdManagerCreatorImpl.kt rename to play-services-ads-api/core/src/main/kotlin/com/google/android/gms/ads/ChimeraAdManagerCreatorImpl.kt diff --git a/play-services-ads-lite/core/src/main/kotlin/com/google/android/gms/ads/ChimeraMobileAdsSettingManagerCreatorImpl.kt b/play-services-ads-api/core/src/main/kotlin/com/google/android/gms/ads/ChimeraMobileAdsSettingManagerCreatorImpl.kt similarity index 100% rename from play-services-ads-lite/core/src/main/kotlin/com/google/android/gms/ads/ChimeraMobileAdsSettingManagerCreatorImpl.kt rename to play-services-ads-api/core/src/main/kotlin/com/google/android/gms/ads/ChimeraMobileAdsSettingManagerCreatorImpl.kt diff --git a/play-services-ads-lite/core/src/main/kotlin/com/google/android/gms/ads/LegacyAdLoaderBuilder.kt b/play-services-ads-api/core/src/main/kotlin/com/google/android/gms/ads/LegacyAdLoaderBuilder.kt similarity index 100% rename from play-services-ads-lite/core/src/main/kotlin/com/google/android/gms/ads/LegacyAdLoaderBuilder.kt rename to play-services-ads-api/core/src/main/kotlin/com/google/android/gms/ads/LegacyAdLoaderBuilder.kt diff --git a/play-services-ads-lite/core/src/main/kotlin/com/google/android/gms/ads/LegacyAdManager.kt b/play-services-ads-api/core/src/main/kotlin/com/google/android/gms/ads/LegacyAdManager.kt similarity index 100% rename from play-services-ads-lite/core/src/main/kotlin/com/google/android/gms/ads/LegacyAdManager.kt rename to play-services-ads-api/core/src/main/kotlin/com/google/android/gms/ads/LegacyAdManager.kt diff --git a/play-services-ads-lite/core/src/main/kotlin/com/google/android/gms/ads/MobileAdsSettingManagerCreatorImpl.kt b/play-services-ads-api/core/src/main/kotlin/com/google/android/gms/ads/MobileAdsSettingManagerCreatorImpl.kt similarity index 100% rename from play-services-ads-lite/core/src/main/kotlin/com/google/android/gms/ads/MobileAdsSettingManagerCreatorImpl.kt rename to play-services-ads-api/core/src/main/kotlin/com/google/android/gms/ads/MobileAdsSettingManagerCreatorImpl.kt diff --git a/play-services-ads-lite/core/src/main/kotlin/com/google/android/gms/ads/measurement/DynamiteMeasurementManager.kt b/play-services-ads-api/core/src/main/kotlin/com/google/android/gms/ads/measurement/DynamiteMeasurementManager.kt similarity index 100% rename from play-services-ads-lite/core/src/main/kotlin/com/google/android/gms/ads/measurement/DynamiteMeasurementManager.kt rename to play-services-ads-api/core/src/main/kotlin/com/google/android/gms/ads/measurement/DynamiteMeasurementManager.kt diff --git a/play-services-ads-lite/core/src/main/kotlin/com/google/android/gms/ads/rewarded/ChimeraRewardedAdCreatorImpl.kt b/play-services-ads-api/core/src/main/kotlin/com/google/android/gms/ads/rewarded/ChimeraRewardedAdCreatorImpl.kt similarity index 100% rename from play-services-ads-lite/core/src/main/kotlin/com/google/android/gms/ads/rewarded/ChimeraRewardedAdCreatorImpl.kt rename to play-services-ads-api/core/src/main/kotlin/com/google/android/gms/ads/rewarded/ChimeraRewardedAdCreatorImpl.kt diff --git a/play-services-ads-lite/core/src/main/kotlin/org/microg/gms/ads/MobileAdsSettingManagerImpl.kt b/play-services-ads-api/core/src/main/kotlin/org/microg/gms/ads/MobileAdsSettingManagerImpl.kt similarity index 100% rename from play-services-ads-lite/core/src/main/kotlin/org/microg/gms/ads/MobileAdsSettingManagerImpl.kt rename to play-services-ads-api/core/src/main/kotlin/org/microg/gms/ads/MobileAdsSettingManagerImpl.kt diff --git a/play-services-ads-lite/core/src/main/kotlin/org/microg/gms/ads/rewarded/ResponseInfoImpl.kt b/play-services-ads-api/core/src/main/kotlin/org/microg/gms/ads/rewarded/ResponseInfoImpl.kt similarity index 100% rename from play-services-ads-lite/core/src/main/kotlin/org/microg/gms/ads/rewarded/ResponseInfoImpl.kt rename to play-services-ads-api/core/src/main/kotlin/org/microg/gms/ads/rewarded/ResponseInfoImpl.kt diff --git a/play-services-ads-lite/core/src/main/kotlin/org/microg/gms/ads/rewarded/RewardedAdImpl.kt b/play-services-ads-api/core/src/main/kotlin/org/microg/gms/ads/rewarded/RewardedAdImpl.kt similarity index 100% rename from play-services-ads-lite/core/src/main/kotlin/org/microg/gms/ads/rewarded/RewardedAdImpl.kt rename to play-services-ads-api/core/src/main/kotlin/org/microg/gms/ads/rewarded/RewardedAdImpl.kt diff --git a/play-services-ads-api/src/main/AndroidManifest.xml b/play-services-ads-api/src/main/AndroidManifest.xml new file mode 100644 index 0000000000..3b29c9d5f6 --- /dev/null +++ b/play-services-ads-api/src/main/AndroidManifest.xml @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/formats/AdManagerAdViewOptions.aidl b/play-services-ads-api/src/main/aidl/com/google/android/gms/ads/formats/AdManagerAdViewOptions.aidl similarity index 100% rename from play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/formats/AdManagerAdViewOptions.aidl rename to play-services-ads-api/src/main/aidl/com/google/android/gms/ads/formats/AdManagerAdViewOptions.aidl diff --git a/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/formats/PublisherAdViewOptions.aidl b/play-services-ads-api/src/main/aidl/com/google/android/gms/ads/formats/PublisherAdViewOptions.aidl similarity index 100% rename from play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/formats/PublisherAdViewOptions.aidl rename to play-services-ads-api/src/main/aidl/com/google/android/gms/ads/formats/PublisherAdViewOptions.aidl diff --git a/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/AdErrorParcel.aidl b/play-services-ads-api/src/main/aidl/com/google/android/gms/ads/internal/AdErrorParcel.aidl similarity index 100% rename from play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/AdErrorParcel.aidl rename to play-services-ads-api/src/main/aidl/com/google/android/gms/ads/internal/AdErrorParcel.aidl diff --git a/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/AdRequestParcel.aidl b/play-services-ads-api/src/main/aidl/com/google/android/gms/ads/internal/AdRequestParcel.aidl similarity index 100% rename from play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/AdRequestParcel.aidl rename to play-services-ads-api/src/main/aidl/com/google/android/gms/ads/internal/AdRequestParcel.aidl diff --git a/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/AdapterResponseInfoParcel.aidl b/play-services-ads-api/src/main/aidl/com/google/android/gms/ads/internal/AdapterResponseInfoParcel.aidl similarity index 100% rename from play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/AdapterResponseInfoParcel.aidl rename to play-services-ads-api/src/main/aidl/com/google/android/gms/ads/internal/AdapterResponseInfoParcel.aidl diff --git a/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/AdapterStatusParcel.aidl b/play-services-ads-api/src/main/aidl/com/google/android/gms/ads/internal/AdapterStatusParcel.aidl similarity index 100% rename from play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/AdapterStatusParcel.aidl rename to play-services-ads-api/src/main/aidl/com/google/android/gms/ads/internal/AdapterStatusParcel.aidl diff --git a/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/RequestConfigurationParcel.aidl b/play-services-ads-api/src/main/aidl/com/google/android/gms/ads/internal/RequestConfigurationParcel.aidl similarity index 100% rename from play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/RequestConfigurationParcel.aidl rename to play-services-ads-api/src/main/aidl/com/google/android/gms/ads/internal/RequestConfigurationParcel.aidl diff --git a/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/ServerSideVerificationOptionsParcel.aidl b/play-services-ads-api/src/main/aidl/com/google/android/gms/ads/internal/ServerSideVerificationOptionsParcel.aidl similarity index 100% rename from play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/ServerSideVerificationOptionsParcel.aidl rename to play-services-ads-api/src/main/aidl/com/google/android/gms/ads/internal/ServerSideVerificationOptionsParcel.aidl diff --git a/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/client/AdSizeParcel.aidl b/play-services-ads-api/src/main/aidl/com/google/android/gms/ads/internal/client/AdSizeParcel.aidl similarity index 100% rename from play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/client/AdSizeParcel.aidl rename to play-services-ads-api/src/main/aidl/com/google/android/gms/ads/internal/client/AdSizeParcel.aidl diff --git a/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/client/AdValueParcel.aidl b/play-services-ads-api/src/main/aidl/com/google/android/gms/ads/internal/client/AdValueParcel.aidl similarity index 100% rename from play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/client/AdValueParcel.aidl rename to play-services-ads-api/src/main/aidl/com/google/android/gms/ads/internal/client/AdValueParcel.aidl diff --git a/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/client/IAdClickListener.aidl b/play-services-ads-api/src/main/aidl/com/google/android/gms/ads/internal/client/IAdClickListener.aidl similarity index 100% rename from play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/client/IAdClickListener.aidl rename to play-services-ads-api/src/main/aidl/com/google/android/gms/ads/internal/client/IAdClickListener.aidl diff --git a/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/client/IAdListener.aidl b/play-services-ads-api/src/main/aidl/com/google/android/gms/ads/internal/client/IAdListener.aidl similarity index 100% rename from play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/client/IAdListener.aidl rename to play-services-ads-api/src/main/aidl/com/google/android/gms/ads/internal/client/IAdListener.aidl diff --git a/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/client/IAdLoadCallback.aidl b/play-services-ads-api/src/main/aidl/com/google/android/gms/ads/internal/client/IAdLoadCallback.aidl similarity index 100% rename from play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/client/IAdLoadCallback.aidl rename to play-services-ads-api/src/main/aidl/com/google/android/gms/ads/internal/client/IAdLoadCallback.aidl diff --git a/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/client/IAdLoader.aidl b/play-services-ads-api/src/main/aidl/com/google/android/gms/ads/internal/client/IAdLoader.aidl similarity index 100% rename from play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/client/IAdLoader.aidl rename to play-services-ads-api/src/main/aidl/com/google/android/gms/ads/internal/client/IAdLoader.aidl diff --git a/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/client/IAdLoaderBuilder.aidl b/play-services-ads-api/src/main/aidl/com/google/android/gms/ads/internal/client/IAdLoaderBuilder.aidl similarity index 100% rename from play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/client/IAdLoaderBuilder.aidl rename to play-services-ads-api/src/main/aidl/com/google/android/gms/ads/internal/client/IAdLoaderBuilder.aidl diff --git a/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/client/IAdLoaderBuilderCreator.aidl b/play-services-ads-api/src/main/aidl/com/google/android/gms/ads/internal/client/IAdLoaderBuilderCreator.aidl similarity index 100% rename from play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/client/IAdLoaderBuilderCreator.aidl rename to play-services-ads-api/src/main/aidl/com/google/android/gms/ads/internal/client/IAdLoaderBuilderCreator.aidl diff --git a/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/client/IAdManager.aidl b/play-services-ads-api/src/main/aidl/com/google/android/gms/ads/internal/client/IAdManager.aidl similarity index 100% rename from play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/client/IAdManager.aidl rename to play-services-ads-api/src/main/aidl/com/google/android/gms/ads/internal/client/IAdManager.aidl diff --git a/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/client/IAdManagerCreator.aidl b/play-services-ads-api/src/main/aidl/com/google/android/gms/ads/internal/client/IAdManagerCreator.aidl similarity index 100% rename from play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/client/IAdManagerCreator.aidl rename to play-services-ads-api/src/main/aidl/com/google/android/gms/ads/internal/client/IAdManagerCreator.aidl diff --git a/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/client/IAppEventListener.aidl b/play-services-ads-api/src/main/aidl/com/google/android/gms/ads/internal/client/IAppEventListener.aidl similarity index 100% rename from play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/client/IAppEventListener.aidl rename to play-services-ads-api/src/main/aidl/com/google/android/gms/ads/internal/client/IAppEventListener.aidl diff --git a/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/client/ICorrelationIdProvider.aidl b/play-services-ads-api/src/main/aidl/com/google/android/gms/ads/internal/client/ICorrelationIdProvider.aidl similarity index 100% rename from play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/client/ICorrelationIdProvider.aidl rename to play-services-ads-api/src/main/aidl/com/google/android/gms/ads/internal/client/ICorrelationIdProvider.aidl diff --git a/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/client/IFullScreenContentCallback.aidl b/play-services-ads-api/src/main/aidl/com/google/android/gms/ads/internal/client/IFullScreenContentCallback.aidl similarity index 100% rename from play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/client/IFullScreenContentCallback.aidl rename to play-services-ads-api/src/main/aidl/com/google/android/gms/ads/internal/client/IFullScreenContentCallback.aidl diff --git a/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/client/IMobileAdsSettingManager.aidl b/play-services-ads-api/src/main/aidl/com/google/android/gms/ads/internal/client/IMobileAdsSettingManager.aidl similarity index 100% rename from play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/client/IMobileAdsSettingManager.aidl rename to play-services-ads-api/src/main/aidl/com/google/android/gms/ads/internal/client/IMobileAdsSettingManager.aidl diff --git a/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/client/IMobileAdsSettingManagerCreator.aidl b/play-services-ads-api/src/main/aidl/com/google/android/gms/ads/internal/client/IMobileAdsSettingManagerCreator.aidl similarity index 100% rename from play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/client/IMobileAdsSettingManagerCreator.aidl rename to play-services-ads-api/src/main/aidl/com/google/android/gms/ads/internal/client/IMobileAdsSettingManagerCreator.aidl diff --git a/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/client/IOnAdInspectorClosedListener.aidl b/play-services-ads-api/src/main/aidl/com/google/android/gms/ads/internal/client/IOnAdInspectorClosedListener.aidl similarity index 100% rename from play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/client/IOnAdInspectorClosedListener.aidl rename to play-services-ads-api/src/main/aidl/com/google/android/gms/ads/internal/client/IOnAdInspectorClosedListener.aidl diff --git a/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/client/IOnAdMetadataChangedListener.aidl b/play-services-ads-api/src/main/aidl/com/google/android/gms/ads/internal/client/IOnAdMetadataChangedListener.aidl similarity index 100% rename from play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/client/IOnAdMetadataChangedListener.aidl rename to play-services-ads-api/src/main/aidl/com/google/android/gms/ads/internal/client/IOnAdMetadataChangedListener.aidl diff --git a/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/client/IOnPaidEventListener.aidl b/play-services-ads-api/src/main/aidl/com/google/android/gms/ads/internal/client/IOnPaidEventListener.aidl similarity index 100% rename from play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/client/IOnPaidEventListener.aidl rename to play-services-ads-api/src/main/aidl/com/google/android/gms/ads/internal/client/IOnPaidEventListener.aidl diff --git a/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/client/IResponseInfo.aidl b/play-services-ads-api/src/main/aidl/com/google/android/gms/ads/internal/client/IResponseInfo.aidl similarity index 100% rename from play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/client/IResponseInfo.aidl rename to play-services-ads-api/src/main/aidl/com/google/android/gms/ads/internal/client/IResponseInfo.aidl diff --git a/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/client/IVideoController.aidl b/play-services-ads-api/src/main/aidl/com/google/android/gms/ads/internal/client/IVideoController.aidl similarity index 100% rename from play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/client/IVideoController.aidl rename to play-services-ads-api/src/main/aidl/com/google/android/gms/ads/internal/client/IVideoController.aidl diff --git a/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/client/IVideoLifecycleCallbacks.aidl b/play-services-ads-api/src/main/aidl/com/google/android/gms/ads/internal/client/IVideoLifecycleCallbacks.aidl similarity index 100% rename from play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/client/IVideoLifecycleCallbacks.aidl rename to play-services-ads-api/src/main/aidl/com/google/android/gms/ads/internal/client/IVideoLifecycleCallbacks.aidl diff --git a/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/formats/NativeAdOptionsParcel.aidl b/play-services-ads-api/src/main/aidl/com/google/android/gms/ads/internal/formats/NativeAdOptionsParcel.aidl similarity index 100% rename from play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/formats/NativeAdOptionsParcel.aidl rename to play-services-ads-api/src/main/aidl/com/google/android/gms/ads/internal/formats/NativeAdOptionsParcel.aidl diff --git a/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/formats/client/IAttributionInfo.aidl b/play-services-ads-api/src/main/aidl/com/google/android/gms/ads/internal/formats/client/IAttributionInfo.aidl similarity index 100% rename from play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/formats/client/IAttributionInfo.aidl rename to play-services-ads-api/src/main/aidl/com/google/android/gms/ads/internal/formats/client/IAttributionInfo.aidl diff --git a/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/formats/client/INativeAdImage.aidl b/play-services-ads-api/src/main/aidl/com/google/android/gms/ads/internal/formats/client/INativeAdImage.aidl similarity index 100% rename from play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/formats/client/INativeAdImage.aidl rename to play-services-ads-api/src/main/aidl/com/google/android/gms/ads/internal/formats/client/INativeAdImage.aidl diff --git a/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/formats/client/INativeAppInstallAd.aidl b/play-services-ads-api/src/main/aidl/com/google/android/gms/ads/internal/formats/client/INativeAppInstallAd.aidl similarity index 100% rename from play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/formats/client/INativeAppInstallAd.aidl rename to play-services-ads-api/src/main/aidl/com/google/android/gms/ads/internal/formats/client/INativeAppInstallAd.aidl diff --git a/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/formats/client/INativeContentAd.aidl b/play-services-ads-api/src/main/aidl/com/google/android/gms/ads/internal/formats/client/INativeContentAd.aidl similarity index 100% rename from play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/formats/client/INativeContentAd.aidl rename to play-services-ads-api/src/main/aidl/com/google/android/gms/ads/internal/formats/client/INativeContentAd.aidl diff --git a/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/formats/client/INativeCustomTemplateAd.aidl b/play-services-ads-api/src/main/aidl/com/google/android/gms/ads/internal/formats/client/INativeCustomTemplateAd.aidl similarity index 100% rename from play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/formats/client/INativeCustomTemplateAd.aidl rename to play-services-ads-api/src/main/aidl/com/google/android/gms/ads/internal/formats/client/INativeCustomTemplateAd.aidl diff --git a/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/formats/client/IOnAppInstallAdLoadedListener.aidl b/play-services-ads-api/src/main/aidl/com/google/android/gms/ads/internal/formats/client/IOnAppInstallAdLoadedListener.aidl similarity index 100% rename from play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/formats/client/IOnAppInstallAdLoadedListener.aidl rename to play-services-ads-api/src/main/aidl/com/google/android/gms/ads/internal/formats/client/IOnAppInstallAdLoadedListener.aidl diff --git a/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/formats/client/IOnContentAdLoadedListener.aidl b/play-services-ads-api/src/main/aidl/com/google/android/gms/ads/internal/formats/client/IOnContentAdLoadedListener.aidl similarity index 100% rename from play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/formats/client/IOnContentAdLoadedListener.aidl rename to play-services-ads-api/src/main/aidl/com/google/android/gms/ads/internal/formats/client/IOnContentAdLoadedListener.aidl diff --git a/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/formats/client/IOnCustomClickListener.aidl b/play-services-ads-api/src/main/aidl/com/google/android/gms/ads/internal/formats/client/IOnCustomClickListener.aidl similarity index 100% rename from play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/formats/client/IOnCustomClickListener.aidl rename to play-services-ads-api/src/main/aidl/com/google/android/gms/ads/internal/formats/client/IOnCustomClickListener.aidl diff --git a/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/formats/client/IOnCustomTemplateAdLoadedListener.aidl b/play-services-ads-api/src/main/aidl/com/google/android/gms/ads/internal/formats/client/IOnCustomTemplateAdLoadedListener.aidl similarity index 100% rename from play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/formats/client/IOnCustomTemplateAdLoadedListener.aidl rename to play-services-ads-api/src/main/aidl/com/google/android/gms/ads/internal/formats/client/IOnCustomTemplateAdLoadedListener.aidl diff --git a/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/formats/client/IOnPublisherAdViewLoadedListener.aidl b/play-services-ads-api/src/main/aidl/com/google/android/gms/ads/internal/formats/client/IOnPublisherAdViewLoadedListener.aidl similarity index 100% rename from play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/formats/client/IOnPublisherAdViewLoadedListener.aidl rename to play-services-ads-api/src/main/aidl/com/google/android/gms/ads/internal/formats/client/IOnPublisherAdViewLoadedListener.aidl diff --git a/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/formats/client/IOnUnifiedNativeAdLoadedListener.aidl b/play-services-ads-api/src/main/aidl/com/google/android/gms/ads/internal/formats/client/IOnUnifiedNativeAdLoadedListener.aidl similarity index 100% rename from play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/formats/client/IOnUnifiedNativeAdLoadedListener.aidl rename to play-services-ads-api/src/main/aidl/com/google/android/gms/ads/internal/formats/client/IOnUnifiedNativeAdLoadedListener.aidl diff --git a/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/formats/client/IUnifiedNativeAd.aidl b/play-services-ads-api/src/main/aidl/com/google/android/gms/ads/internal/formats/client/IUnifiedNativeAd.aidl similarity index 100% rename from play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/formats/client/IUnifiedNativeAd.aidl rename to play-services-ads-api/src/main/aidl/com/google/android/gms/ads/internal/formats/client/IUnifiedNativeAd.aidl diff --git a/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/initialization/IInitializationCallback.aidl b/play-services-ads-api/src/main/aidl/com/google/android/gms/ads/internal/initialization/IInitializationCallback.aidl similarity index 100% rename from play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/initialization/IInitializationCallback.aidl rename to play-services-ads-api/src/main/aidl/com/google/android/gms/ads/internal/initialization/IInitializationCallback.aidl diff --git a/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/instream/InstreamAdConfigurationParcel.aidl b/play-services-ads-api/src/main/aidl/com/google/android/gms/ads/internal/instream/InstreamAdConfigurationParcel.aidl similarity index 100% rename from play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/instream/InstreamAdConfigurationParcel.aidl rename to play-services-ads-api/src/main/aidl/com/google/android/gms/ads/internal/instream/InstreamAdConfigurationParcel.aidl diff --git a/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/instream/client/IInstreamAd.aidl b/play-services-ads-api/src/main/aidl/com/google/android/gms/ads/internal/instream/client/IInstreamAd.aidl similarity index 100% rename from play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/instream/client/IInstreamAd.aidl rename to play-services-ads-api/src/main/aidl/com/google/android/gms/ads/internal/instream/client/IInstreamAd.aidl diff --git a/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/instream/client/IInstreamAdLoadCallback.aidl b/play-services-ads-api/src/main/aidl/com/google/android/gms/ads/internal/instream/client/IInstreamAdLoadCallback.aidl similarity index 100% rename from play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/instream/client/IInstreamAdLoadCallback.aidl rename to play-services-ads-api/src/main/aidl/com/google/android/gms/ads/internal/instream/client/IInstreamAdLoadCallback.aidl diff --git a/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/mediation/client/IAdapterCreator.aidl b/play-services-ads-api/src/main/aidl/com/google/android/gms/ads/internal/mediation/client/IAdapterCreator.aidl similarity index 100% rename from play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/mediation/client/IAdapterCreator.aidl rename to play-services-ads-api/src/main/aidl/com/google/android/gms/ads/internal/mediation/client/IAdapterCreator.aidl diff --git a/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/rewarded/client/IRewardItem.aidl b/play-services-ads-api/src/main/aidl/com/google/android/gms/ads/internal/rewarded/client/IRewardItem.aidl similarity index 100% rename from play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/rewarded/client/IRewardItem.aidl rename to play-services-ads-api/src/main/aidl/com/google/android/gms/ads/internal/rewarded/client/IRewardItem.aidl diff --git a/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/rewarded/client/IRewardedAd.aidl b/play-services-ads-api/src/main/aidl/com/google/android/gms/ads/internal/rewarded/client/IRewardedAd.aidl similarity index 100% rename from play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/rewarded/client/IRewardedAd.aidl rename to play-services-ads-api/src/main/aidl/com/google/android/gms/ads/internal/rewarded/client/IRewardedAd.aidl diff --git a/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/rewarded/client/IRewardedAdCallback.aidl b/play-services-ads-api/src/main/aidl/com/google/android/gms/ads/internal/rewarded/client/IRewardedAdCallback.aidl similarity index 100% rename from play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/rewarded/client/IRewardedAdCallback.aidl rename to play-services-ads-api/src/main/aidl/com/google/android/gms/ads/internal/rewarded/client/IRewardedAdCallback.aidl diff --git a/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/rewarded/client/IRewardedAdCreator.aidl b/play-services-ads-api/src/main/aidl/com/google/android/gms/ads/internal/rewarded/client/IRewardedAdCreator.aidl similarity index 100% rename from play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/rewarded/client/IRewardedAdCreator.aidl rename to play-services-ads-api/src/main/aidl/com/google/android/gms/ads/internal/rewarded/client/IRewardedAdCreator.aidl diff --git a/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/rewarded/client/IRewardedAdLoadCallback.aidl b/play-services-ads-api/src/main/aidl/com/google/android/gms/ads/internal/rewarded/client/IRewardedAdLoadCallback.aidl similarity index 100% rename from play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/rewarded/client/IRewardedAdLoadCallback.aidl rename to play-services-ads-api/src/main/aidl/com/google/android/gms/ads/internal/rewarded/client/IRewardedAdLoadCallback.aidl diff --git a/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/rewarded/client/IRewardedAdSkuListener.aidl b/play-services-ads-api/src/main/aidl/com/google/android/gms/ads/internal/rewarded/client/IRewardedAdSkuListener.aidl similarity index 100% rename from play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/rewarded/client/IRewardedAdSkuListener.aidl rename to play-services-ads-api/src/main/aidl/com/google/android/gms/ads/internal/rewarded/client/IRewardedAdSkuListener.aidl diff --git a/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/measurement/IAppMeasurementProxy.aidl b/play-services-ads-api/src/main/aidl/com/google/android/gms/ads/measurement/IAppMeasurementProxy.aidl similarity index 100% rename from play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/measurement/IAppMeasurementProxy.aidl rename to play-services-ads-api/src/main/aidl/com/google/android/gms/ads/measurement/IAppMeasurementProxy.aidl diff --git a/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/measurement/IMeasurementManager.aidl b/play-services-ads-api/src/main/aidl/com/google/android/gms/ads/measurement/IMeasurementManager.aidl similarity index 100% rename from play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/measurement/IMeasurementManager.aidl rename to play-services-ads-api/src/main/aidl/com/google/android/gms/ads/measurement/IMeasurementManager.aidl diff --git a/play-services-ads-lite/src/main/java/com/google/android/gms/ads/admanager/package-info.java b/play-services-ads-api/src/main/java/com/google/android/gms/ads/admanager/package-info.java similarity index 100% rename from play-services-ads-lite/src/main/java/com/google/android/gms/ads/admanager/package-info.java rename to play-services-ads-api/src/main/java/com/google/android/gms/ads/admanager/package-info.java diff --git a/play-services-ads-lite/src/main/java/com/google/android/gms/ads/formats/AdManagerAdViewOptions.java b/play-services-ads-api/src/main/java/com/google/android/gms/ads/formats/AdManagerAdViewOptions.java similarity index 100% rename from play-services-ads-lite/src/main/java/com/google/android/gms/ads/formats/AdManagerAdViewOptions.java rename to play-services-ads-api/src/main/java/com/google/android/gms/ads/formats/AdManagerAdViewOptions.java diff --git a/play-services-ads-lite/src/main/java/com/google/android/gms/ads/formats/PublisherAdViewOptions.java b/play-services-ads-api/src/main/java/com/google/android/gms/ads/formats/PublisherAdViewOptions.java similarity index 100% rename from play-services-ads-lite/src/main/java/com/google/android/gms/ads/formats/PublisherAdViewOptions.java rename to play-services-ads-api/src/main/java/com/google/android/gms/ads/formats/PublisherAdViewOptions.java diff --git a/play-services-ads-lite/src/main/java/com/google/android/gms/ads/h5/package-info.java b/play-services-ads-api/src/main/java/com/google/android/gms/ads/h5/package-info.java similarity index 100% rename from play-services-ads-lite/src/main/java/com/google/android/gms/ads/h5/package-info.java rename to play-services-ads-api/src/main/java/com/google/android/gms/ads/h5/package-info.java diff --git a/play-services-ads-lite/src/main/java/com/google/android/gms/ads/initialization/package-info.java b/play-services-ads-api/src/main/java/com/google/android/gms/ads/initialization/package-info.java similarity index 100% rename from play-services-ads-lite/src/main/java/com/google/android/gms/ads/initialization/package-info.java rename to play-services-ads-api/src/main/java/com/google/android/gms/ads/initialization/package-info.java diff --git a/play-services-ads-lite/src/main/java/com/google/android/gms/ads/internal/AdDataParcel.java b/play-services-ads-api/src/main/java/com/google/android/gms/ads/internal/AdDataParcel.java similarity index 100% rename from play-services-ads-lite/src/main/java/com/google/android/gms/ads/internal/AdDataParcel.java rename to play-services-ads-api/src/main/java/com/google/android/gms/ads/internal/AdDataParcel.java diff --git a/play-services-ads-lite/src/main/java/com/google/android/gms/ads/internal/AdErrorParcel.java b/play-services-ads-api/src/main/java/com/google/android/gms/ads/internal/AdErrorParcel.java similarity index 100% rename from play-services-ads-lite/src/main/java/com/google/android/gms/ads/internal/AdErrorParcel.java rename to play-services-ads-api/src/main/java/com/google/android/gms/ads/internal/AdErrorParcel.java diff --git a/play-services-ads-lite/src/main/java/com/google/android/gms/ads/internal/AdRequestParcel.java b/play-services-ads-api/src/main/java/com/google/android/gms/ads/internal/AdRequestParcel.java similarity index 100% rename from play-services-ads-lite/src/main/java/com/google/android/gms/ads/internal/AdRequestParcel.java rename to play-services-ads-api/src/main/java/com/google/android/gms/ads/internal/AdRequestParcel.java diff --git a/play-services-ads-lite/src/main/java/com/google/android/gms/ads/internal/AdapterResponseInfoParcel.java b/play-services-ads-api/src/main/java/com/google/android/gms/ads/internal/AdapterResponseInfoParcel.java similarity index 100% rename from play-services-ads-lite/src/main/java/com/google/android/gms/ads/internal/AdapterResponseInfoParcel.java rename to play-services-ads-api/src/main/java/com/google/android/gms/ads/internal/AdapterResponseInfoParcel.java diff --git a/play-services-ads-lite/src/main/java/com/google/android/gms/ads/internal/AdapterStatusParcel.java b/play-services-ads-api/src/main/java/com/google/android/gms/ads/internal/AdapterStatusParcel.java similarity index 100% rename from play-services-ads-lite/src/main/java/com/google/android/gms/ads/internal/AdapterStatusParcel.java rename to play-services-ads-api/src/main/java/com/google/android/gms/ads/internal/AdapterStatusParcel.java diff --git a/play-services-ads-lite/src/main/java/com/google/android/gms/ads/internal/RequestConfigurationParcel.java b/play-services-ads-api/src/main/java/com/google/android/gms/ads/internal/RequestConfigurationParcel.java similarity index 100% rename from play-services-ads-lite/src/main/java/com/google/android/gms/ads/internal/RequestConfigurationParcel.java rename to play-services-ads-api/src/main/java/com/google/android/gms/ads/internal/RequestConfigurationParcel.java diff --git a/play-services-ads-lite/src/main/java/com/google/android/gms/ads/internal/SearchAdRequestParcel.java b/play-services-ads-api/src/main/java/com/google/android/gms/ads/internal/SearchAdRequestParcel.java similarity index 100% rename from play-services-ads-lite/src/main/java/com/google/android/gms/ads/internal/SearchAdRequestParcel.java rename to play-services-ads-api/src/main/java/com/google/android/gms/ads/internal/SearchAdRequestParcel.java diff --git a/play-services-ads-lite/src/main/java/com/google/android/gms/ads/internal/ServerSideVerificationOptionsParcel.java b/play-services-ads-api/src/main/java/com/google/android/gms/ads/internal/ServerSideVerificationOptionsParcel.java similarity index 100% rename from play-services-ads-lite/src/main/java/com/google/android/gms/ads/internal/ServerSideVerificationOptionsParcel.java rename to play-services-ads-api/src/main/java/com/google/android/gms/ads/internal/ServerSideVerificationOptionsParcel.java diff --git a/play-services-ads-lite/src/main/java/com/google/android/gms/ads/internal/client/AdSizeParcel.java b/play-services-ads-api/src/main/java/com/google/android/gms/ads/internal/client/AdSizeParcel.java similarity index 100% rename from play-services-ads-lite/src/main/java/com/google/android/gms/ads/internal/client/AdSizeParcel.java rename to play-services-ads-api/src/main/java/com/google/android/gms/ads/internal/client/AdSizeParcel.java diff --git a/play-services-ads-lite/src/main/java/com/google/android/gms/ads/internal/client/AdValueParcel.java b/play-services-ads-api/src/main/java/com/google/android/gms/ads/internal/client/AdValueParcel.java similarity index 100% rename from play-services-ads-lite/src/main/java/com/google/android/gms/ads/internal/client/AdValueParcel.java rename to play-services-ads-api/src/main/java/com/google/android/gms/ads/internal/client/AdValueParcel.java diff --git a/play-services-ads-lite/src/main/java/com/google/android/gms/ads/internal/client/VideoOptionsParcel.java b/play-services-ads-api/src/main/java/com/google/android/gms/ads/internal/client/VideoOptionsParcel.java similarity index 100% rename from play-services-ads-lite/src/main/java/com/google/android/gms/ads/internal/client/VideoOptionsParcel.java rename to play-services-ads-api/src/main/java/com/google/android/gms/ads/internal/client/VideoOptionsParcel.java diff --git a/play-services-ads-lite/src/main/java/com/google/android/gms/ads/internal/formats/NativeAdOptionsParcel.java b/play-services-ads-api/src/main/java/com/google/android/gms/ads/internal/formats/NativeAdOptionsParcel.java similarity index 100% rename from play-services-ads-lite/src/main/java/com/google/android/gms/ads/internal/formats/NativeAdOptionsParcel.java rename to play-services-ads-api/src/main/java/com/google/android/gms/ads/internal/formats/NativeAdOptionsParcel.java diff --git a/play-services-ads-lite/src/main/java/com/google/android/gms/ads/internal/instream/InstreamAdConfigurationParcel.java b/play-services-ads-api/src/main/java/com/google/android/gms/ads/internal/instream/InstreamAdConfigurationParcel.java similarity index 100% rename from play-services-ads-lite/src/main/java/com/google/android/gms/ads/internal/instream/InstreamAdConfigurationParcel.java rename to play-services-ads-api/src/main/java/com/google/android/gms/ads/internal/instream/InstreamAdConfigurationParcel.java diff --git a/play-services-ads-lite/src/main/java/com/google/android/gms/ads/interstitial/package-info.java b/play-services-ads-api/src/main/java/com/google/android/gms/ads/interstitial/package-info.java similarity index 100% rename from play-services-ads-lite/src/main/java/com/google/android/gms/ads/interstitial/package-info.java rename to play-services-ads-api/src/main/java/com/google/android/gms/ads/interstitial/package-info.java diff --git a/play-services-ads-lite/src/main/java/com/google/android/gms/ads/mediation/customevent/package-info.java b/play-services-ads-api/src/main/java/com/google/android/gms/ads/mediation/customevent/package-info.java similarity index 100% rename from play-services-ads-lite/src/main/java/com/google/android/gms/ads/mediation/customevent/package-info.java rename to play-services-ads-api/src/main/java/com/google/android/gms/ads/mediation/customevent/package-info.java diff --git a/play-services-ads-lite/src/main/java/com/google/android/gms/ads/mediation/package-info.java b/play-services-ads-api/src/main/java/com/google/android/gms/ads/mediation/package-info.java similarity index 100% rename from play-services-ads-lite/src/main/java/com/google/android/gms/ads/mediation/package-info.java rename to play-services-ads-api/src/main/java/com/google/android/gms/ads/mediation/package-info.java diff --git a/play-services-ads-lite/src/main/java/com/google/android/gms/ads/mediation/rtb/package-info.java b/play-services-ads-api/src/main/java/com/google/android/gms/ads/mediation/rtb/package-info.java similarity index 100% rename from play-services-ads-lite/src/main/java/com/google/android/gms/ads/mediation/rtb/package-info.java rename to play-services-ads-api/src/main/java/com/google/android/gms/ads/mediation/rtb/package-info.java diff --git a/play-services-ads-lite/src/main/java/com/google/android/gms/ads/nativead/package-info.java b/play-services-ads-api/src/main/java/com/google/android/gms/ads/nativead/package-info.java similarity index 100% rename from play-services-ads-lite/src/main/java/com/google/android/gms/ads/nativead/package-info.java rename to play-services-ads-api/src/main/java/com/google/android/gms/ads/nativead/package-info.java diff --git a/play-services-ads-lite/src/main/java/com/google/android/gms/ads/package-info.java b/play-services-ads-api/src/main/java/com/google/android/gms/ads/package-info.java similarity index 100% rename from play-services-ads-lite/src/main/java/com/google/android/gms/ads/package-info.java rename to play-services-ads-api/src/main/java/com/google/android/gms/ads/package-info.java diff --git a/play-services-ads-lite/src/main/java/com/google/android/gms/ads/rewarded/package-info.java b/play-services-ads-api/src/main/java/com/google/android/gms/ads/rewarded/package-info.java similarity index 100% rename from play-services-ads-lite/src/main/java/com/google/android/gms/ads/rewarded/package-info.java rename to play-services-ads-api/src/main/java/com/google/android/gms/ads/rewarded/package-info.java diff --git a/play-services-ads-lite/src/main/java/com/google/android/gms/ads/rewardedinterstitial/package-info.java b/play-services-ads-api/src/main/java/com/google/android/gms/ads/rewardedinterstitial/package-info.java similarity index 100% rename from play-services-ads-lite/src/main/java/com/google/android/gms/ads/rewardedinterstitial/package-info.java rename to play-services-ads-api/src/main/java/com/google/android/gms/ads/rewardedinterstitial/package-info.java diff --git a/play-services-ads-lite/src/main/java/com/google/android/gms/ads/search/package-info.java b/play-services-ads-api/src/main/java/com/google/android/gms/ads/search/package-info.java similarity index 100% rename from play-services-ads-lite/src/main/java/com/google/android/gms/ads/search/package-info.java rename to play-services-ads-api/src/main/java/com/google/android/gms/ads/search/package-info.java diff --git a/play-services-ads-lite/build.gradle b/play-services-ads-lite/build.gradle index 61742681f7..a38f75067d 100644 --- a/play-services-ads-lite/build.gradle +++ b/play-services-ads-lite/build.gradle @@ -8,7 +8,7 @@ apply plugin: 'maven-publish' apply plugin: 'signing' android { - namespace "com.google.android.gms.ads" + namespace "com.google.android.gms.ads_lite" compileSdkVersion androidCompileSdk buildToolsVersion "$androidBuildVersionTools" @@ -34,10 +34,6 @@ apply from: '../gradle/publish-android.gradle' description = 'microG implementation of play-services-ads-lite' dependencies { - api 'androidx.work:work-runtime:2.7.0' - api project(':play-services-ads-base') - api project(':play-services-basement') - annotationProcessor project(':safe-parcel-processor') -// api project(':play-services-measurement-sdk-api') -// api project(':user-messaging-platform') + // Dependencies from play-services-ads-lite:25.0.0 + api project(':play-services-ads-api') } diff --git a/play-services-ads-lite/src/main/AndroidManifest.xml b/play-services-ads-lite/src/main/AndroidManifest.xml index 1b55c5b813..3408ac9209 100644 --- a/play-services-ads-lite/src/main/AndroidManifest.xml +++ b/play-services-ads-lite/src/main/AndroidManifest.xml @@ -4,23 +4,5 @@ --> - - - - - - - - - - - - - - - - - diff --git a/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/AdManagerCreator.aidl b/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/AdManagerCreator.aidl deleted file mode 100644 index 7e07dd018c..0000000000 --- a/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/AdManagerCreator.aidl +++ /dev/null @@ -1,4 +0,0 @@ -package com.google.android.gms.ads; - -interface AdManagerCreator { -} \ No newline at end of file diff --git a/play-services-core/build.gradle b/play-services-core/build.gradle index a348337ce1..967b2d442b 100644 --- a/play-services-core/build.gradle +++ b/play-services-core/build.gradle @@ -21,8 +21,8 @@ dependencies { implementation project(':firebase-dynamic-links') implementation project(':firebase-auth-core') implementation project(':play-services-ads-core') + implementation project(':play-services-ads-api-core') implementation project(':play-services-ads-identifier-core') - implementation project(':play-services-ads-lite-core') implementation project(':play-services-appinvite-core') implementation project(':play-services-appset-core') implementation project(':play-services-auth-api-phone-core') diff --git a/settings.gradle b/settings.gradle index 1ab99b9000..a5bc84ca3c 100644 --- a/settings.gradle +++ b/settings.gradle @@ -21,6 +21,7 @@ include ':safe-parcel-processor' include ':vending-app' include ':play-services-ads' +include ':play-services-ads-api' include ':play-services-ads-base' include ':play-services-ads-identifier' include ':play-services-ads-lite' @@ -79,8 +80,8 @@ sublude ':play-services-basement:ktx' sublude ':play-services-tasks:ktx' sublude ':play-services-ads:core' +sublude ':play-services-ads-api:core' sublude ':play-services-ads-identifier:core' -sublude ':play-services-ads-lite:core' sublude ':play-services-appinvite:core' sublude ':play-services-appset:core' sublude ':play-services-auth-api-phone:core' From fc737ad3ccf99c89557f2012fed0700aa134b98a Mon Sep 17 00:00:00 2001 From: Marvin W Date: Mon, 8 Jun 2026 21:46:16 +0200 Subject: [PATCH 04/20] Ads: Fix some API details --- .../gms/ads/AdLoaderBuilderCreatorImpl.kt | 3 +- .../android/gms/ads/AdManagerCreatorImpl.kt | 5 ++-- .../android/gms/ads/LegacyAdLoaderBuilder.kt | 18 ++++++------ .../ads/MobileAdsSettingManagerCreatorImpl.kt | 3 +- .../ads/internal/client/IAdLoaderBuilder.aidl | 20 ++++++------- .../client/IAdLoaderBuilderCreator.aidl | 3 +- .../internal/client/IAdManagerCreator.aidl | 5 ++-- .../IMobileAdsSettingManagerCreator.aidl | 3 +- .../com/google/android/gms/ads/AdLoader.java | 9 ++++++ .../ads/formats/AdManagerAdViewOptions.java | 21 ++++++++++++-- .../internal/RequestConfigurationParcel.java | 29 +++++++++++++++++-- 11 files changed, 87 insertions(+), 32 deletions(-) create mode 100644 play-services-ads-api/src/main/java/com/google/android/gms/ads/AdLoader.java diff --git a/play-services-ads-api/core/src/main/kotlin/com/google/android/gms/ads/AdLoaderBuilderCreatorImpl.kt b/play-services-ads-api/core/src/main/kotlin/com/google/android/gms/ads/AdLoaderBuilderCreatorImpl.kt index 819c381bf0..a42081b242 100644 --- a/play-services-ads-api/core/src/main/kotlin/com/google/android/gms/ads/AdLoaderBuilderCreatorImpl.kt +++ b/play-services-ads-api/core/src/main/kotlin/com/google/android/gms/ads/AdLoaderBuilderCreatorImpl.kt @@ -8,6 +8,7 @@ import android.os.IBinder import android.os.Parcel import android.util.Log import androidx.annotation.Keep +import com.google.android.gms.ads.internal.client.IAdLoaderBuilder import com.google.android.gms.ads.internal.client.IAdLoaderBuilderCreator import com.google.android.gms.ads.internal.mediation.client.IAdapterCreator import com.google.android.gms.dynamic.IObjectWrapper @@ -17,7 +18,7 @@ private const val TAG = "AdLoaderBuilder" @Keep open class AdLoaderBuilderCreatorImpl : IAdLoaderBuilderCreator.Stub() { - override fun newAdLoaderBuilder(context: IObjectWrapper?, adUnitId: String, adapterCreator: IAdapterCreator?, clientVersion: Int): IBinder? { + override fun newAdLoaderBuilder(context: IObjectWrapper?, adUnitId: String, adapterCreator: IAdapterCreator?, clientVersion: Int): IAdLoaderBuilder? { Log.d(TAG, "newAdLoaderBuilder: adUnitId=$adUnitId clientVersion=$clientVersion") return LegacyAdLoaderBuilder() } diff --git a/play-services-ads-api/core/src/main/kotlin/com/google/android/gms/ads/AdManagerCreatorImpl.kt b/play-services-ads-api/core/src/main/kotlin/com/google/android/gms/ads/AdManagerCreatorImpl.kt index acf6585316..bb51242bd7 100644 --- a/play-services-ads-api/core/src/main/kotlin/com/google/android/gms/ads/AdManagerCreatorImpl.kt +++ b/play-services-ads-api/core/src/main/kotlin/com/google/android/gms/ads/AdManagerCreatorImpl.kt @@ -10,6 +10,7 @@ import android.os.Parcel import android.util.Log import androidx.annotation.Keep import com.google.android.gms.ads.internal.client.AdSizeParcel +import com.google.android.gms.ads.internal.client.IAdManager import com.google.android.gms.ads.internal.client.IAdManagerCreator import com.google.android.gms.ads.internal.mediation.client.IAdapterCreator import com.google.android.gms.dynamic.IObjectWrapper @@ -20,12 +21,12 @@ private const val TAG = "AdManagerCreator" @Keep open class AdManagerCreatorImpl : IAdManagerCreator.Stub() { - override fun newAdManager(context: IObjectWrapper?, adSize: AdSizeParcel?, adUnitId: String?, adapterCreator: IAdapterCreator?, clientVersion: Int): IBinder { + override fun newAdManager(context: IObjectWrapper?, adSize: AdSizeParcel?, adUnitId: String?, adapterCreator: IAdapterCreator?, clientVersion: Int): IAdManager { Log.d(TAG, "newAdManager: adUnitId=$adUnitId clientVersion=$clientVersion") return LegacyAdManager(ObjectWrapper.unwrap(context) as? Context) } - override fun newAdManagerByType(context: IObjectWrapper?, adSize: AdSizeParcel?, adUnitId: String?, adapterCreator: IAdapterCreator?, clientVersion: Int, type: Int): IBinder { + override fun newAdManagerByType(context: IObjectWrapper?, adSize: AdSizeParcel?, adUnitId: String?, adapterCreator: IAdapterCreator?, clientVersion: Int, type: Int): IAdManager { Log.d(TAG, "newAdManagerByType: adUnitId=$adUnitId clientVersion=$clientVersion type=$type") return LegacyAdManager(ObjectWrapper.unwrap(context) as? Context) } diff --git a/play-services-ads-api/core/src/main/kotlin/com/google/android/gms/ads/LegacyAdLoaderBuilder.kt b/play-services-ads-api/core/src/main/kotlin/com/google/android/gms/ads/LegacyAdLoaderBuilder.kt index 0c3d392fbf..ea93115705 100644 --- a/play-services-ads-api/core/src/main/kotlin/com/google/android/gms/ads/LegacyAdLoaderBuilder.kt +++ b/play-services-ads-api/core/src/main/kotlin/com/google/android/gms/ads/LegacyAdLoaderBuilder.kt @@ -27,18 +27,18 @@ private const val TAG = "LegacyAdLoader" internal class LegacyAdLoaderBuilder : IAdLoaderBuilder.Stub() { override fun build(): IAdLoader = LegacyAdLoader - override fun setAdListener(listener: IAdListener?) = Unit - override fun setAppInstallAdLoadedListener(listener: IOnAppInstallAdLoadedListener?) = Unit - override fun setContentAdLoadedListener(listener: IOnContentAdLoadedListener?) = Unit + override fun withAdListener(listener: IAdListener?) = Unit + override fun withAppInstallAdLoadedListener(listener: IOnAppInstallAdLoadedListener?) = Unit + override fun withContentAdLoadedListener(listener: IOnContentAdLoadedListener?) = Unit override fun forCustomFormatAd(templateId: String?, onCustomFormatAdLoadedListener: IOnCustomTemplateAdLoadedListener?, onCustomClickListener: IOnCustomClickListener?) = Unit - override fun setNativeAdOptions(options: NativeAdOptionsParcel?) = Unit - override fun setCorrelationIdProvider(provider: ICorrelationIdProvider?) = Unit - override fun forPublisherAdView(onPublisherAdViewLoadedListener: IOnPublisherAdViewLoadedListener?, adSize: AdSizeParcel?) = Unit - override fun setPublisherAdViewOptions(options: PublisherAdViewOptions?) = Unit - override fun setUnifiedNativeAdLoadedListener(listener: IOnUnifiedNativeAdLoadedListener?) = Unit + override fun withNativeAdOptions(options: NativeAdOptionsParcel?) = Unit + override fun withCorrelationIdProvider(provider: ICorrelationIdProvider?) = Unit + override fun forAdView(onPublisherAdViewLoadedListener: IOnPublisherAdViewLoadedListener?, adSize: AdSizeParcel?) = Unit + override fun withPublisherAdViewOptions(options: PublisherAdViewOptions?) = Unit + override fun forNativeAd(listener: IOnUnifiedNativeAdLoadedListener?) = Unit override fun forInstreamAd(config: InstreamAdConfigurationParcel?) = Unit override fun setInstreamAdLoadCallback(callback: IInstreamAdLoadCallback?) = Unit - override fun setAdManagerAdViewOptions(options: AdManagerAdViewOptions?) = Unit + override fun withAdManagerAdViewOptions(options: AdManagerAdViewOptions?) = Unit } private object LegacyAdLoader : IAdLoader.Stub() { diff --git a/play-services-ads-api/core/src/main/kotlin/com/google/android/gms/ads/MobileAdsSettingManagerCreatorImpl.kt b/play-services-ads-api/core/src/main/kotlin/com/google/android/gms/ads/MobileAdsSettingManagerCreatorImpl.kt index 05866e8dfa..450ddd0368 100644 --- a/play-services-ads-api/core/src/main/kotlin/com/google/android/gms/ads/MobileAdsSettingManagerCreatorImpl.kt +++ b/play-services-ads-api/core/src/main/kotlin/com/google/android/gms/ads/MobileAdsSettingManagerCreatorImpl.kt @@ -9,6 +9,7 @@ import android.os.IBinder import android.os.Parcel import android.util.Log import androidx.annotation.Keep +import com.google.android.gms.ads.internal.client.IMobileAdsSettingManager import com.google.android.gms.ads.internal.client.IMobileAdsSettingManagerCreator import com.google.android.gms.dynamic.IObjectWrapper import com.google.android.gms.dynamic.ObjectWrapper @@ -19,7 +20,7 @@ private const val TAG = "AdsSettingManager" @Keep open class MobileAdsSettingManagerCreatorImpl : IMobileAdsSettingManagerCreator.Stub() { - override fun getMobileAdsSettingManager(context: IObjectWrapper?, clientVersion: Int): IBinder { + override fun getMobileAdsSettingManager(context: IObjectWrapper?, clientVersion: Int): IMobileAdsSettingManager { Log.d(TAG, "getMobileAdsSettingManager($clientVersion)") return MobileAdsSettingManagerImpl(ObjectWrapper.unwrap(context) as Context) } diff --git a/play-services-ads-api/src/main/aidl/com/google/android/gms/ads/internal/client/IAdLoaderBuilder.aidl b/play-services-ads-api/src/main/aidl/com/google/android/gms/ads/internal/client/IAdLoaderBuilder.aidl index f619b95fab..b40cc5178c 100644 --- a/play-services-ads-api/src/main/aidl/com/google/android/gms/ads/internal/client/IAdLoaderBuilder.aidl +++ b/play-services-ads-api/src/main/aidl/com/google/android/gms/ads/internal/client/IAdLoaderBuilder.aidl @@ -23,16 +23,16 @@ import com.google.android.gms.ads.formats.AdManagerAdViewOptions; interface IAdLoaderBuilder { IAdLoader build() = 0; - void setAdListener(IAdListener listener) = 1; - void setAppInstallAdLoadedListener(IOnAppInstallAdLoadedListener listener) = 2; - void setContentAdLoadedListener(IOnContentAdLoadedListener listener) = 3; - void forCustomFormatAd(String templateId, IOnCustomTemplateAdLoadedListener onCustomFormatAdLoadedListener, IOnCustomClickListener onCustomClickListener) = 4; - void setNativeAdOptions(in NativeAdOptionsParcel options) = 5; - void setCorrelationIdProvider(ICorrelationIdProvider provider) = 6; - void forPublisherAdView(IOnPublisherAdViewLoadedListener onPublisherAdViewLoadedListener, in AdSizeParcel adSize) = 7; - void setPublisherAdViewOptions(in PublisherAdViewOptions options) = 8; - void setUnifiedNativeAdLoadedListener(IOnUnifiedNativeAdLoadedListener listener) = 9; + void withAdListener(IAdListener listener) = 1; + void withAppInstallAdLoadedListener(IOnAppInstallAdLoadedListener listener) = 2; + void withContentAdLoadedListener(IOnContentAdLoadedListener listener) = 3; + void forCustomFormatAd(String customFormatId, IOnCustomTemplateAdLoadedListener onCustomFormatAdLoadedListener, IOnCustomClickListener onCustomClickListener) = 4; + void withNativeAdOptions(in NativeAdOptionsParcel options) = 5; + void withCorrelationIdProvider(ICorrelationIdProvider provider) = 6; + void forAdView(IOnPublisherAdViewLoadedListener onPublisherAdViewLoadedListener, in AdSizeParcel adSize) = 7; + void withPublisherAdViewOptions(in PublisherAdViewOptions options) = 8; + void forNativeAd(IOnUnifiedNativeAdLoadedListener listener) = 9; void forInstreamAd(in InstreamAdConfigurationParcel config) = 12; void setInstreamAdLoadCallback(IInstreamAdLoadCallback callback) = 13; - void setAdManagerAdViewOptions(in AdManagerAdViewOptions options) = 14; + void withAdManagerAdViewOptions(in AdManagerAdViewOptions options) = 14; } diff --git a/play-services-ads-api/src/main/aidl/com/google/android/gms/ads/internal/client/IAdLoaderBuilderCreator.aidl b/play-services-ads-api/src/main/aidl/com/google/android/gms/ads/internal/client/IAdLoaderBuilderCreator.aidl index b6f63ac331..baa9758f65 100644 --- a/play-services-ads-api/src/main/aidl/com/google/android/gms/ads/internal/client/IAdLoaderBuilderCreator.aidl +++ b/play-services-ads-api/src/main/aidl/com/google/android/gms/ads/internal/client/IAdLoaderBuilderCreator.aidl @@ -1,8 +1,9 @@ package com.google.android.gms.ads.internal.client; +import com.google.android.gms.ads.internal.client.IAdLoaderBuilder; import com.google.android.gms.ads.internal.mediation.client.IAdapterCreator; import com.google.android.gms.dynamic.IObjectWrapper; interface IAdLoaderBuilderCreator { - IBinder newAdLoaderBuilder(IObjectWrapper context, String adUnitId, IAdapterCreator adapterCreator, int clientVersion); + IAdLoaderBuilder newAdLoaderBuilder(IObjectWrapper context, String adUnitId, IAdapterCreator adapterCreator, int clientVersion); } \ No newline at end of file diff --git a/play-services-ads-api/src/main/aidl/com/google/android/gms/ads/internal/client/IAdManagerCreator.aidl b/play-services-ads-api/src/main/aidl/com/google/android/gms/ads/internal/client/IAdManagerCreator.aidl index 1aa74901d1..4446547d23 100644 --- a/play-services-ads-api/src/main/aidl/com/google/android/gms/ads/internal/client/IAdManagerCreator.aidl +++ b/play-services-ads-api/src/main/aidl/com/google/android/gms/ads/internal/client/IAdManagerCreator.aidl @@ -6,10 +6,11 @@ package com.google.android.gms.ads.internal.client; import com.google.android.gms.ads.internal.client.AdSizeParcel; +import com.google.android.gms.ads.internal.client.IAdManager; import com.google.android.gms.ads.internal.mediation.client.IAdapterCreator; import com.google.android.gms.dynamic.IObjectWrapper; interface IAdManagerCreator { - IBinder newAdManager(IObjectWrapper context, in AdSizeParcel adSize, String adUnitId, IAdapterCreator adapterCreator, int clientVersion) = 0; - IBinder newAdManagerByType(IObjectWrapper context, in AdSizeParcel adSize, String adUnitId, IAdapterCreator adapterCreator, int clientVersion, int type) = 1; + IAdManager newAdManager(IObjectWrapper context, in AdSizeParcel adSize, String adUnitId, IAdapterCreator adapterCreator, int clientVersion) = 0; + IAdManager newAdManagerByType(IObjectWrapper context, in AdSizeParcel adSize, String adUnitId, IAdapterCreator adapterCreator, int clientVersion, int type) = 1; } diff --git a/play-services-ads-api/src/main/aidl/com/google/android/gms/ads/internal/client/IMobileAdsSettingManagerCreator.aidl b/play-services-ads-api/src/main/aidl/com/google/android/gms/ads/internal/client/IMobileAdsSettingManagerCreator.aidl index f468200741..f68ce14c21 100644 --- a/play-services-ads-api/src/main/aidl/com/google/android/gms/ads/internal/client/IMobileAdsSettingManagerCreator.aidl +++ b/play-services-ads-api/src/main/aidl/com/google/android/gms/ads/internal/client/IMobileAdsSettingManagerCreator.aidl @@ -1,7 +1,8 @@ package com.google.android.gms.ads.internal.client; +import com.google.android.gms.ads.internal.client.IMobileAdsSettingManager; import com.google.android.gms.dynamic.IObjectWrapper; interface IMobileAdsSettingManagerCreator { - IBinder getMobileAdsSettingManager(IObjectWrapper context, int clientVersion); + IMobileAdsSettingManager getMobileAdsSettingManager(IObjectWrapper context, int clientVersion); } \ No newline at end of file diff --git a/play-services-ads-api/src/main/java/com/google/android/gms/ads/AdLoader.java b/play-services-ads-api/src/main/java/com/google/android/gms/ads/AdLoader.java new file mode 100644 index 0000000000..9232de3d25 --- /dev/null +++ b/play-services-ads-api/src/main/java/com/google/android/gms/ads/AdLoader.java @@ -0,0 +1,9 @@ +/* + * SPDX-FileCopyrightText: 2026 microG Project Team + * SPDX-License-Identifier: Apache-2.0 + */ + +package com.google.android.gms.ads; + +public class AdLoader { +} diff --git a/play-services-ads-api/src/main/java/com/google/android/gms/ads/formats/AdManagerAdViewOptions.java b/play-services-ads-api/src/main/java/com/google/android/gms/ads/formats/AdManagerAdViewOptions.java index 6adb37a7b6..f04671e553 100644 --- a/play-services-ads-api/src/main/java/com/google/android/gms/ads/formats/AdManagerAdViewOptions.java +++ b/play-services-ads-api/src/main/java/com/google/android/gms/ads/formats/AdManagerAdViewOptions.java @@ -1,23 +1,40 @@ /* * SPDX-FileCopyrightText: 2026 microG Project Team * SPDX-License-Identifier: Apache-2.0 + * Notice: Portions of this file are reproduced from work created and shared by Google and used + * according to terms described in the Creative Commons 4.0 Attribution License. + * See https://developers.google.com/readme/policies for details. */ package com.google.android.gms.ads.formats; import android.os.Parcel; import androidx.annotation.NonNull; + +import com.google.android.gms.ads.AdLoader; import com.google.android.gms.common.internal.safeparcel.AbstractSafeParcelable; import com.google.android.gms.common.internal.safeparcel.SafeParcelable; import com.google.android.gms.common.internal.safeparcel.SafeParcelableCreatorAndWriter; /** - * Ad Manager ad view options passed to {@code IAdLoaderBuilder.setAdManagerAdViewOptions}. + * Options to configure Google Ad Manager banner requests using an {@link AdLoader}. */ @SafeParcelable.Class public final class AdManagerAdViewOptions extends AbstractSafeParcelable { @Field(1) - public boolean manualImpressionsEnabled; + public final boolean manualImpressionsEnabled; + + @Constructor + AdManagerAdViewOptions(@Param(1) boolean manualImpressionsEnabled) { + this.manualImpressionsEnabled = manualImpressionsEnabled; + } + + /** + * Returns {@code true} if manual impression reporting is enabled. + */ + public boolean getManualImpressionsEnabled() { + return manualImpressionsEnabled; + } @Override public void writeToParcel(@NonNull Parcel dest, int flags) { diff --git a/play-services-ads-api/src/main/java/com/google/android/gms/ads/internal/RequestConfigurationParcel.java b/play-services-ads-api/src/main/java/com/google/android/gms/ads/internal/RequestConfigurationParcel.java index f773f34868..1e660fb6a3 100644 --- a/play-services-ads-api/src/main/java/com/google/android/gms/ads/internal/RequestConfigurationParcel.java +++ b/play-services-ads-api/src/main/java/com/google/android/gms/ads/internal/RequestConfigurationParcel.java @@ -5,8 +5,31 @@ package com.google.android.gms.ads.internal; -import org.microg.safeparcel.AutoSafeParcelable; +import android.os.Parcel; -public class RequestConfigurationParcel extends AutoSafeParcelable { - public static final Creator CREATOR = new AutoCreator<>(RequestConfigurationParcel.class); +import androidx.annotation.NonNull; + +import com.google.android.gms.common.internal.safeparcel.AbstractSafeParcelable; +import com.google.android.gms.common.internal.safeparcel.SafeParcelable; +import com.google.android.gms.common.internal.safeparcel.SafeParcelableCreatorAndWriter; + +@SafeParcelable.Class +public class RequestConfigurationParcel extends AbstractSafeParcelable { + @Field(1) + public final int tagForChildDirectedTreatment; + @Field(2) + public final int tagForUnderAgeOfConsent; + + @Constructor + RequestConfigurationParcel(@Param(1) int tagForChildDirectedTreatment, @Param(2) int tagForUnderAgeOfConsent) { + this.tagForChildDirectedTreatment = tagForChildDirectedTreatment; + this.tagForUnderAgeOfConsent = tagForUnderAgeOfConsent; + } + + @Override + public void writeToParcel(@NonNull Parcel dest, int flags) { + CREATOR.writeToParcel(this, dest, flags); + } + + public static final SafeParcelableCreatorAndWriter CREATOR = findCreator(RequestConfigurationParcel.class); } From 212de1e811433e9309fa6e7f9d774b72bb619b2d Mon Sep 17 00:00:00 2001 From: DaVinci9196 <150454414+DaVinci9196@users.noreply.github.com> Date: Tue, 9 Jun 2026 04:02:00 +0800 Subject: [PATCH 05/20] Phenotype: NotebookLM displays the "Video Overview" feature. (#3419) --- .../main/kotlin/org/microg/gms/phenotype/PhenotypeService.kt | 4 ++++ 1 file changed, 4 insertions(+) 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 c925faf26f..4ae724190f 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 @@ -78,6 +78,10 @@ private val CONFIGURATION_OPTIONS = mapOf( "com.google.android.apps.photos" to arrayOf( Flag("45617431", true, 0), ), + "com.google.labs.language.tailwind.mobile#com.google.android.apps.labs.language.tailwind" to arrayOf( + // Enable NotebookLM video overview + Flag("45741830", true, 0), + ), ) class PhenotypeServiceImpl(val packageName: String?) : IPhenotypeService.Stub() { From 50562bc8dfd8326f986a67b1a7659d4e057a30ce Mon Sep 17 00:00:00 2001 From: DaVinci9196 <150454414+DaVinci9196@users.noreply.github.com> Date: Tue, 9 Jun 2026 04:02:31 +0800 Subject: [PATCH 06/20] FACS: Show Google Contacts toggle in Maps settings (#3429) --- .../main/kotlin/org/microg/gms/udc/ActivityControlSettings.kt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/play-services-core/src/main/kotlin/org/microg/gms/udc/ActivityControlSettings.kt b/play-services-core/src/main/kotlin/org/microg/gms/udc/ActivityControlSettings.kt index 662a823194..87a2268d61 100644 --- a/play-services-core/src/main/kotlin/org/microg/gms/udc/ActivityControlSettings.kt +++ b/play-services-core/src/main/kotlin/org/microg/gms/udc/ActivityControlSettings.kt @@ -14,6 +14,7 @@ private enum class Controls(val id: Int) { CALL_LOG(6), CONTACT(9), CALENDAR(10), + LOCATION_HISTORY(13), CAMERA(15), MICROPHONE(17), STORAGE(18), @@ -31,6 +32,7 @@ private enum class Controls(val id: Int) { private val ALLOW_CONTROLS_PACKAGES = mapOf( Pair("com.google.android.googlequicksearchbox", setOf(Controls.STORAGE, Controls.MICROPHONE, Controls.SYSTEM_WINDOW_OVERLAY)), + Pair("com.google.android.apps.maps", setOf(Controls.APP_USAGE_TIME, Controls.CALENDAR, Controls.CONTACT, Controls.LOCATION_HISTORY, Controls.SYSTEM_WINDOW_OVERLAY)), ) fun getAllowControlsByPackage(packageName: String) : ByteArray? { From 0b94e8753a33280e071b053586cedccffc0d162b Mon Sep 17 00:00:00 2001 From: DaVinci9196 <150454414+DaVinci9196@users.noreply.github.com> Date: Tue, 9 Jun 2026 04:02:54 +0800 Subject: [PATCH 07/20] Phenotype: Enable Gemini temporary chat and more menus (#3447) --- .../kotlin/org/microg/gms/phenotype/PhenotypeService.kt | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) 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 4ae724190f..d971a3a70e 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 @@ -44,7 +44,14 @@ private val CONFIGURATION_OPTIONS = mapOf( // Enable Gemini sharing and video features Flag("45638955", true, 0), Flag("45621205", true, 0), - Flag("45616812", true, 0) + Flag("45616812", true, 0), + // Enable Gemini temporary chat and more menus. + Flag("45737809", true, 0), + Flag("45752052", true, 0), + Flag("45762487", true, 0), + Flag("45726191", true, 0), + // Enable Gemini show Usage-limits + Flag("45778691", true, 0), ), "com.google.android.inputmethod.latin#com.google.android.inputmethod.latin" to arrayOf( // Enable Gboard supports voice input in other languages From daed3a6b37e74a7c013fe88f8b373922892736c5 Mon Sep 17 00:00:00 2001 From: DaVinci9196 <150454414+DaVinci9196@users.noreply.github.com> Date: Tue, 9 Jun 2026 04:03:20 +0800 Subject: [PATCH 08/20] ProviderInstaller: Update defaultTlsProtocol (#3467) Co-authored-by: Marvin W --- .../android/gms/providerinstaller/ProviderInstallerImpl.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/play-services-conscrypt-provider-core/src/main/java/com/google/android/gms/providerinstaller/ProviderInstallerImpl.java b/play-services-conscrypt-provider-core/src/main/java/com/google/android/gms/providerinstaller/ProviderInstallerImpl.java index 175efc6046..818270862d 100644 --- a/play-services-conscrypt-provider-core/src/main/java/com/google/android/gms/providerinstaller/ProviderInstallerImpl.java +++ b/play-services-conscrypt-provider-core/src/main/java/com/google/android/gms/providerinstaller/ProviderInstallerImpl.java @@ -110,13 +110,13 @@ private static void initProvider(Context context, String packageName) { Log.d(TAG, "Initializing provider for " + packageName); try { - provider = Conscrypt.newProviderBuilder().setName(PROVIDER_NAME).defaultTlsProtocol("TLSv1.2").build(); + provider = Conscrypt.newProviderBuilder().setName(PROVIDER_NAME).defaultTlsProtocol("TLSv1.3").build(); } catch (UnsatisfiedLinkError e) { Log.w(TAG, "Could not link conscrypt via default loader, trying manual loading"); try { loadConscryptDirect(context, packageName); - provider = Conscrypt.newProviderBuilder().setName(PROVIDER_NAME).defaultTlsProtocol("TLSv1.2").build(); + provider = Conscrypt.newProviderBuilder().setName(PROVIDER_NAME).defaultTlsProtocol("TLSv1.3").build(); } catch (Exception e2) { Log.w(TAG, e2); } From 3a5d4abf7f2fe3f27844a82c94f3791b95ec160b Mon Sep 17 00:00:00 2001 From: DaVinci9196 <150454414+DaVinci9196@users.noreply.github.com> Date: Tue, 9 Jun 2026 04:07:34 +0800 Subject: [PATCH 09/20] Fix: GoogleIdTokenCredential ClassCastException (#3452) --- .../microg/gms/auth/credentials/provider/GoogleIdService.kt | 3 +++ .../gms/auth/credentials/provider/SignInProxyActivity.kt | 5 ++++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/play-services-core/src/main/kotlin/org/microg/gms/auth/credentials/provider/GoogleIdService.kt b/play-services-core/src/main/kotlin/org/microg/gms/auth/credentials/provider/GoogleIdService.kt index 36e00c4fdb..ed24e4cb09 100644 --- a/play-services-core/src/main/kotlin/org/microg/gms/auth/credentials/provider/GoogleIdService.kt +++ b/play-services-core/src/main/kotlin/org/microg/gms/auth/credentials/provider/GoogleIdService.kt @@ -168,6 +168,9 @@ const val GOOGLE_ID_ANDROIDX_AUTO_SELECT = "androidx.credentials.BUNDLE_KEY_IS_A const val GOOGLE_ID_BUNDLE_KEY_ID = "com.google.android.libraries.identity.googleid.BUNDLE_KEY_ID" const val GOOGLE_ID_BUNDLE_KEY_ID_TOKEN = "com.google.android.libraries.identity.googleid.BUNDLE_KEY_ID_TOKEN" const val GOOGLE_ID_BUNDLE_KEY_DISPLAY_NAME = "com.google.android.libraries.identity.googleid.BUNDLE_KEY_DISPLAY_NAME" +const val GOOGLE_ID_BUNDLE_KEY_GIVEN_NAME = "com.google.android.libraries.identity.googleid.BUNDLE_KEY_GIVEN_NAME" +const val GOOGLE_ID_BUNDLE_KEY_FAMILY_NAME = "com.google.android.libraries.identity.googleid.BUNDLE_KEY_FAMILY_NAME" +const val GOOGLE_ID_BUNDLE_KEY_PHONE_NUMBER = "com.google.android.libraries.identity.googleid.BUNDLE_KEY_PHONE_NUMBER" const val GOOGLE_ID_BUNDLE_KEY_PROFILE_PICTURE_URI = "com.google.android.libraries.identity.googleid.BUNDLE_KEY_PROFILE_PICTURE_URI" // Credential types diff --git a/play-services-core/src/main/kotlin/org/microg/gms/auth/credentials/provider/SignInProxyActivity.kt b/play-services-core/src/main/kotlin/org/microg/gms/auth/credentials/provider/SignInProxyActivity.kt index 16ff2da1f4..e598964e87 100644 --- a/play-services-core/src/main/kotlin/org/microg/gms/auth/credentials/provider/SignInProxyActivity.kt +++ b/play-services-core/src/main/kotlin/org/microg/gms/auth/credentials/provider/SignInProxyActivity.kt @@ -94,7 +94,10 @@ class SignInProxyActivity : CredentialProviderActivity() { putString(GOOGLE_ID_BUNDLE_KEY_ID, signInCredential.id) putString(GOOGLE_ID_BUNDLE_KEY_ID_TOKEN, signInCredential.googleIdToken) putString(GOOGLE_ID_BUNDLE_KEY_DISPLAY_NAME, signInCredential.displayName) - putString(GOOGLE_ID_BUNDLE_KEY_PROFILE_PICTURE_URI, signInCredential.profilePictureUri?.toString()) + putString(GOOGLE_ID_BUNDLE_KEY_GIVEN_NAME, signInCredential.givenName) + putString(GOOGLE_ID_BUNDLE_KEY_FAMILY_NAME, signInCredential.familyName) + putString(GOOGLE_ID_BUNDLE_KEY_PHONE_NUMBER, signInCredential.phoneNumber) + putParcelable(GOOGLE_ID_BUNDLE_KEY_PROFILE_PICTURE_URI, signInCredential.profilePictureUri) } val credential = CustomCredential(TYPE_GOOGLE_ID_TOKEN_CREDENTIAL, credentialData) From 3382510de8c449f6a99cf640b78aec0331b4e709 Mon Sep 17 00:00:00 2001 From: DaVinci9196 <150454414+DaVinci9196@users.noreply.github.com> Date: Tue, 9 Jun 2026 04:09:55 +0800 Subject: [PATCH 10/20] Maps: Fixed unable to enable Privacy Mode. (#3490) --- .../internal/ISemanticLocationService.aidl | 3 +++ .../gms/semanticlocation/SemanticLocationService.kt | 13 ++++++++++++- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/play-services-api/src/main/aidl/com/google/android/gms/semanticlocation/internal/ISemanticLocationService.aidl b/play-services-api/src/main/aidl/com/google/android/gms/semanticlocation/internal/ISemanticLocationService.aidl index de75deffa5..7b7e909a4f 100644 --- a/play-services-api/src/main/aidl/com/google/android/gms/semanticlocation/internal/ISemanticLocationService.aidl +++ b/play-services-api/src/main/aidl/com/google/android/gms/semanticlocation/internal/ISemanticLocationService.aidl @@ -6,6 +6,7 @@ package com.google.android.gms.semanticlocation.internal; import android.app.PendingIntent; import android.os.IInterface; +import com.google.android.gms.common.api.ApiMetadata; import com.google.android.gms.semanticlocation.SemanticLocationEventRequest; import com.google.android.gms.semanticlocation.internal.SemanticLocationParameters; import com.google.android.gms.common.api.internal.IStatusCallback; @@ -15,4 +16,6 @@ interface ISemanticLocationService { void unregisterSemanticLocationEvents(in SemanticLocationParameters params, IStatusCallback callback, in PendingIntent pendingIntent) = 1; void setIncognitoMode(in SemanticLocationParameters params, IStatusCallback callback, boolean mode) = 4; + + void setIncognitoModeWithMetadata(in SemanticLocationParameters params, IStatusCallback callback, boolean mode, in ApiMetadata metadata) = 5; } \ No newline at end of file diff --git a/play-services-core/src/main/java/com/google/android/gms/semanticlocation/SemanticLocationService.kt b/play-services-core/src/main/java/com/google/android/gms/semanticlocation/SemanticLocationService.kt index c0bd6946e5..a0c007804f 100644 --- a/play-services-core/src/main/java/com/google/android/gms/semanticlocation/SemanticLocationService.kt +++ b/play-services-core/src/main/java/com/google/android/gms/semanticlocation/SemanticLocationService.kt @@ -8,6 +8,9 @@ import android.app.PendingIntent import android.util.Log import com.google.android.gms.common.ConnectionResult import com.google.android.gms.common.Feature +import com.google.android.gms.common.api.ApiMetadata +import com.google.android.gms.common.api.CommonStatusCodes +import com.google.android.gms.common.api.Status import com.google.android.gms.common.api.internal.IStatusCallback import com.google.android.gms.common.internal.ConnectionInfo import com.google.android.gms.common.internal.GetServiceRequest @@ -47,13 +50,21 @@ class SemanticLocationServiceImpl : ISemanticLocationService.Stub() { pendingIntent: PendingIntent ) { Log.d(TAG, "registerSemanticLocationEvents: $params") + callback.onResult(Status(CommonStatusCodes.SUCCESS)) } override fun setIncognitoMode(params: SemanticLocationParameters, callback: IStatusCallback, mode: Boolean) { - Log.d(TAG, "setIncognitoMode: $params") + Log.d(TAG, "setIncognitoMode (legacy): $params mode=$mode") + callback.onResult(Status(CommonStatusCodes.SUCCESS)) + } + + override fun setIncognitoModeWithMetadata(params: SemanticLocationParameters, callback: IStatusCallback, mode: Boolean, metadata: ApiMetadata) { + Log.d(TAG, "setIncognitoModeWithMetadata: $params mode=$mode") + callback.onResult(Status(CommonStatusCodes.SUCCESS)) } override fun unregisterSemanticLocationEvents(params: SemanticLocationParameters, callback: IStatusCallback, pendingIntent: PendingIntent) { Log.d(TAG, "unregisterSemanticLocationEvents: $params") + callback.onResult(Status(CommonStatusCodes.SUCCESS)) } } From fd71e3614a3f2f2a41b78c4b2c182bd2d6816ebb Mon Sep 17 00:00:00 2001 From: DaVinci9196 <150454414+DaVinci9196@users.noreply.github.com> Date: Tue, 9 Jun 2026 04:12:23 +0800 Subject: [PATCH 11/20] Vending: Add deep link handler (#3415) --- vending-app/src/main/AndroidManifest.xml | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/vending-app/src/main/AndroidManifest.xml b/vending-app/src/main/AndroidManifest.xml index 3bb7d80b28..801549a9ef 100644 --- a/vending-app/src/main/AndroidManifest.xml +++ b/vending-app/src/main/AndroidManifest.xml @@ -123,6 +123,16 @@ android:targetActivity="org.microg.vending.MarketIntentRedirect"> + + + + + + + Date: Mon, 8 Jun 2026 22:14:21 +0200 Subject: [PATCH 12/20] Fido: Log CTAP status code with description (#3472) Co-authored-by: Marvin W --- .../HybridAuthenticatorController.kt | 18 ++--- .../microg/gms/fido/core/hybrid/extensions.kt | 3 - .../gms/fido/core/transport/CtapConnection.kt | 5 +- .../gms/fido/core/transport/CtapStatus.kt | 74 +++++++++++++++++++ 4 files changed, 85 insertions(+), 15 deletions(-) create mode 100644 play-services-fido/core/src/main/kotlin/org/microg/gms/fido/core/transport/CtapStatus.kt diff --git a/play-services-fido/core/src/main/kotlin/org/microg/gms/fido/core/hybrid/controller/HybridAuthenticatorController.kt b/play-services-fido/core/src/main/kotlin/org/microg/gms/fido/core/hybrid/controller/HybridAuthenticatorController.kt index 398d73226d..48995bb53f 100644 --- a/play-services-fido/core/src/main/kotlin/org/microg/gms/fido/core/hybrid/controller/HybridAuthenticatorController.kt +++ b/play-services-fido/core/src/main/kotlin/org/microg/gms/fido/core/hybrid/controller/HybridAuthenticatorController.kt @@ -17,7 +17,6 @@ import com.upokecenter.cbor.CBORObject import kotlinx.coroutines.runBlocking import kotlinx.coroutines.suspendCancellableCoroutine import org.microg.gms.fido.core.RequestHandlingException -import org.microg.gms.fido.core.hybrid.CtapError import org.microg.gms.fido.core.hybrid.HandshakePhase import org.microg.gms.fido.core.hybrid.ble.HybridBleAdvertiser import org.microg.gms.fido.core.hybrid.generateEcKeyPair @@ -39,6 +38,7 @@ import org.microg.gms.fido.core.protocol.msgs.AuthenticatorMakeCredentialRequest import org.microg.gms.fido.core.protocol.msgs.Ctap2CommandCode import org.microg.gms.fido.core.protocol.msgs.Ctap2Request import org.microg.gms.fido.core.protocol.msgs.Ctap2Response +import org.microg.gms.fido.core.transport.CtapStatus import java.io.ByteArrayInputStream import java.security.interfaces.ECPrivateKey import java.security.interfaces.ECPublicKey @@ -214,7 +214,7 @@ class HybridAuthenticatorController(context: Context) { val crypt = this.crypter ?: error("Crypter not initialized (handshake incomplete)") val decrypted = crypt.decrypt(data) ?: error("Failed to decrypt CTAP request") if (decrypted.isEmpty()) { - ws?.sendCtapResponse(byteArrayOf(CtapError.INVALID_LENGTH.value)) + ws?.sendCtapResponse(byteArrayOf(CtapStatus.CTAP1_ERR_INVALID_LENGTH.code)) return null } val frameType = decrypted[0].toInt() and 0xFF @@ -235,12 +235,12 @@ class HybridAuthenticatorController(context: Context) { } if (frameType == 0x01) { if (decrypted.size < 2) { - ws?.sendCtapResponse(byteArrayOf(CtapError.INVALID_CBOR.value)) + ws?.sendCtapResponse(byteArrayOf(CtapStatus.CTAP2_ERR_INVALID_CBOR.code)) return null } val commandCode = Ctap2CommandCode.entries.find { it.byte == decrypted[1] } if (commandCode == null) { - ws?.sendCtapResponse(byteArrayOf(CtapError.INVALID_COMMAND.value)) + ws?.sendCtapResponse(byteArrayOf(CtapStatus.CTAP1_ERR_INVALID_COMMAND.code)) return null } val params = if (decrypted.size > 2) { @@ -258,7 +258,7 @@ class HybridAuthenticatorController(context: Context) { val request = when (commandCode) { Ctap2CommandCode.AuthenticatorMakeCredential -> { if (params == null) { - ws?.sendCtapResponse(byteArrayOf(CtapError.MISSING_PARAMETER.value)) + ws?.sendCtapResponse(byteArrayOf(CtapStatus.CTAP2_ERR_MISSING_PARAMETER.code)) return null } AuthenticatorMakeCredentialRequest.decodeFromCbor(params) @@ -266,7 +266,7 @@ class HybridAuthenticatorController(context: Context) { Ctap2CommandCode.AuthenticatorGetAssertion -> { if (params == null) { - ws?.sendCtapResponse(byteArrayOf(CtapError.MISSING_PARAMETER.value)) + ws?.sendCtapResponse(byteArrayOf(CtapStatus.CTAP2_ERR_MISSING_PARAMETER.code)) return null } AuthenticatorGetAssertionRequest.decodeFromCbor(params) @@ -277,7 +277,7 @@ class HybridAuthenticatorController(context: Context) { } else -> { - ws?.sendCtapResponse(byteArrayOf(CtapError.INVALID_COMMAND.value)) + ws?.sendCtapResponse(byteArrayOf(CtapStatus.CTAP1_ERR_INVALID_COMMAND.code)) return null } } @@ -286,7 +286,7 @@ class HybridAuthenticatorController(context: Context) { Log.d(TAG, "Request: $request") Log.d(TAG, "Response: $response") if (response == null) { - ws?.sendCtapResponse(byteArrayOf(CtapError.OTHER_ERROR.value)) + ws?.sendCtapResponse(byteArrayOf(CtapStatus.CTAP1_ERR_OTHER.code)) return null } val responseBytes = byteArrayOf(0) + response.encodePayloadAsCbor().EncodeToBytes() @@ -294,7 +294,7 @@ class HybridAuthenticatorController(context: Context) { return responseBytes } catch (e: Exception) { Log.w(TAG, "error handling request: ", e) - ws?.sendCtapResponse(byteArrayOf(CtapError.OTHER_ERROR.value)) + ws?.sendCtapResponse(byteArrayOf(CtapStatus.CTAP1_ERR_OTHER.code)) return null } } diff --git a/play-services-fido/core/src/main/kotlin/org/microg/gms/fido/core/hybrid/extensions.kt b/play-services-fido/core/src/main/kotlin/org/microg/gms/fido/core/hybrid/extensions.kt index c89272b224..f3ded2fab3 100644 --- a/play-services-fido/core/src/main/kotlin/org/microg/gms/fido/core/hybrid/extensions.kt +++ b/play-services-fido/core/src/main/kotlin/org/microg/gms/fido/core/hybrid/extensions.kt @@ -19,9 +19,6 @@ import kotlin.coroutines.resume import kotlin.coroutines.resumeWithException enum class HandshakePhase { NONE, CLIENT_HELLO_SENT, READY } -enum class CtapError(val value: Byte) { - SUCCESS(0x00), INVALID_COMMAND(0x01), INVALID_LENGTH(0x03), INVALID_CBOR(0x12), MISSING_PARAMETER(0x14), OTHER_ERROR(0x7F), -} const val HKDF_ALGORITHM = "HmacSHA256" const val AEMK_ALGORITHM = "AES" diff --git a/play-services-fido/core/src/main/kotlin/org/microg/gms/fido/core/transport/CtapConnection.kt b/play-services-fido/core/src/main/kotlin/org/microg/gms/fido/core/transport/CtapConnection.kt index 82e1a8751d..1d6bd2a489 100644 --- a/play-services-fido/core/src/main/kotlin/org/microg/gms/fido/core/transport/CtapConnection.kt +++ b/play-services-fido/core/src/main/kotlin/org/microg/gms/fido/core/transport/CtapConnection.kt @@ -5,8 +5,6 @@ package org.microg.gms.fido.core.transport -import com.google.android.gms.fido.fido2.api.common.ErrorCode -import org.microg.gms.fido.core.RequestHandlingException import org.microg.gms.fido.core.protocol.msgs.* const val CAPABILITY_CTAP_1 = 1 shl 0 @@ -43,4 +41,5 @@ interface CtapConnection { suspend fun runCommand(command: Ctap2Command): S } -class Ctap2StatusException(val status: Byte) : Exception("Received status ${(status.toInt() and 0xff).toString(16)}") +class Ctap2StatusException(val status: Byte) : + Exception("Received ${CtapStatus.description(status)}") diff --git a/play-services-fido/core/src/main/kotlin/org/microg/gms/fido/core/transport/CtapStatus.kt b/play-services-fido/core/src/main/kotlin/org/microg/gms/fido/core/transport/CtapStatus.kt new file mode 100644 index 0000000000..820276d068 --- /dev/null +++ b/play-services-fido/core/src/main/kotlin/org/microg/gms/fido/core/transport/CtapStatus.kt @@ -0,0 +1,74 @@ +package org.microg.gms.fido.core.transport + +/** + * CTAP status code to value + * + * See https://fidoalliance.org/specs/fido-v2.2-ps-20250714/fido-client-to-authenticator-protocol-v2.2-ps-20250714.html#error-responses + */ +enum class CtapStatus(val code: Byte, val description: String) { + // CTAP2_OK + CTAP1_ERR_SUCCESS(0x00, "Indicates successful response."), + CTAP1_ERR_INVALID_COMMAND(0x01, "The command is not a valid CTAP command."), + CTAP1_ERR_INVALID_PARAMETER(0x02, "The command included an invalid parameter."), + CTAP1_ERR_INVALID_LENGTH(0x03, "Invalid message or item length."), + CTAP1_ERR_INVALID_SEQ(0x04, "Invalid message sequencing."), + CTAP1_ERR_TIMEOUT(0x05, "Message timed out."), + CTAP1_ERR_CHANNEL_BUSY(0x06, "Channel busy. Client SHOULD retry the request after a short delay."), + CTAP1_ERR_LOCK_REQUIRED(0x0A, "Command requires channel lock."), + CTAP1_ERR_INVALID_CHANNEL(0x0B, "Command not allowed on this cid."), + CTAP2_ERR_CBOR_UNEXPECTED_TYPE(0x11, "Invalid/unexpected CBOR error."), + CTAP2_ERR_INVALID_CBOR(0x12, "Error when parsing CBOR."), + CTAP2_ERR_MISSING_PARAMETER(0x14, "Missing non-optional parameter."), + CTAP2_ERR_LIMIT_EXCEEDED(0x15, "Limit for number of items exceeded."), + CTAP2_ERR_FP_DATABASE_FULL(0x17, "Fingerprint data base is full, e.g., during enrollment."), + CTAP2_ERR_LARGE_BLOB_STORAGE_FULL(0x18, "Large blob storage is full."), + CTAP2_ERR_CREDENTIAL_EXCLUDED(0x19, "Valid credential found in the exclude list."), + CTAP2_ERR_PROCESSING(0x21, "Processing (Lengthy operation is in progress)."), + CTAP2_ERR_INVALID_CREDENTIAL(0x22, "Credential not valid for the authenticator."), + CTAP2_ERR_USER_ACTION_PENDING(0x23, "Authentication is waiting for user interaction."), + CTAP2_ERR_OPERATION_PENDING(0x24, "Processing, lengthy operation is in progress."), + CTAP2_ERR_NO_OPERATIONS(0x25, "No request is pending."), + CTAP2_ERR_UNSUPPORTED_ALGORITHM(0x26, "Authenticator does not support requested algorithm."), + CTAP2_ERR_OPERATION_DENIED(0x27, "Not authorized for requested operation."), + CTAP2_ERR_KEY_STORE_FULL(0x28, "Internal key storage is full."), + CTAP2_ERR_UNSUPPORTED_OPTION(0x2B, "Unsupported option."), + CTAP2_ERR_INVALID_OPTION(0x2C, "Not a valid option for current operation."), + CTAP2_ERR_KEEPALIVE_CANCEL(0x2D, "Pending keep alive was cancelled."), + CTAP2_ERR_NO_CREDENTIALS(0x2E, "No valid credentials provided."), + CTAP2_ERR_USER_ACTION_TIMEOUT(0x2F, "A user action timeout occurred."), + CTAP2_ERR_NOT_ALLOWED(0x30, "Continuation command, such as, authenticatorGetNextAssertion not allowed."), + CTAP2_ERR_PIN_INVALID(0x31, "PIN Invalid."), + CTAP2_ERR_PIN_BLOCKED(0x32, "PIN Blocked."), + CTAP2_ERR_PIN_AUTH_INVALID(0x33, "PIN authentication,pinUvAuthParam, verification failed."), + CTAP2_ERR_PIN_AUTH_BLOCKED(0x34, "PIN authentication using pinUvAuthToken blocked. Requires power cycle to reset."), + CTAP2_ERR_PIN_NOT_SET(0x35, "No PIN has been set."), + CTAP2_ERR_PUAT_REQUIRED(0x36, "A pinUvAuthToken is required for the selected operation. See also the pinUvAuthToken option ID."), + CTAP2_ERR_PIN_POLICY_VIOLATION(0x37, "PIN policy violation. Minimum PIN length or PIN complexity may trigger this error."), + CTAP2_ERR_REQUEST_TOO_LARGE(0x39, "Authenticator cannot handle this request due to memory constraints."), + CTAP2_ERR_ACTION_TIMEOUT(0x3A, "The current operation has timed out."), + CTAP2_ERR_UP_REQUIRED(0x3B, "User presence is required for the requested operation."), + CTAP2_ERR_UV_BLOCKED(0x3C, "Built-in user verification is disabled."), + CTAP2_ERR_INTEGRITY_FAILURE(0x3D, "A checksum did not match."), + CTAP2_ERR_INVALID_SUBCOMMAND(0x3E, "The requested subcommand is either invalid or not implemented."), + CTAP2_ERR_UV_INVALID(0x3F, "Built-in user verification unsuccessful. The platform SHOULD retry."), + CTAP2_ERR_UNAUTHORIZED_PERMISSION(0x40, "The permissions parameter contains an unauthorized permission."), + CTAP1_ERR_OTHER(0x7F, "Other unspecified error."), + CTAP2_ERR_SPEC_LAST(0xDF.toByte(), "CTAP 2 spec last error."), + CTAP2_ERR_EXTENSION_FIRST(0xE0.toByte(), "Extension specific error."), + CTAP2_ERR_EXTENSION_LAST(0xEF.toByte(), "Extension specific error."), + CTAP2_ERR_VENDOR_FIRST(0xF0.toByte(), "Vendor specific error."), + CTAP2_ERR_VENDOR_LAST(0xFF.toByte(), "Vendor specific error."); + + fun fullDescription() = "$name (${(code.toInt() and 0xff).toString(16)}, $description)" + + companion object { + fun fromByte(statusCode: Byte): CtapStatus? { + return CtapStatus.entries.firstOrNull { + it.code == statusCode + } + } + + fun description(statusCode: Byte) = fromByte(statusCode)?.fullDescription() + ?: "Unknown error (status=${(statusCode.toInt() and 0xff).toString(16)})" + } +} \ No newline at end of file From 730b917a40876e20111c81bf55ee4d92e0becf2a Mon Sep 17 00:00:00 2001 From: DaVinci9196 <150454414+DaVinci9196@users.noreply.github.com> Date: Tue, 9 Jun 2026 04:14:52 +0800 Subject: [PATCH 13/20] Fixed an issue where tapping the location sharing settings redirected to the login page. (#3526) --- .../java/org/microg/gms/ui/LocationSettingsActivity.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/play-services-core/src/main/java/org/microg/gms/ui/LocationSettingsActivity.java b/play-services-core/src/main/java/org/microg/gms/ui/LocationSettingsActivity.java index 0ae8e0e06e..5d5cad784c 100644 --- a/play-services-core/src/main/java/org/microg/gms/ui/LocationSettingsActivity.java +++ b/play-services-core/src/main/java/org/microg/gms/ui/LocationSettingsActivity.java @@ -17,6 +17,7 @@ package org.microg.gms.ui; import static org.microg.gms.accountsettings.ui.ExtensionsKt.ACTION_LOCATION_SHARING; +import static org.microg.gms.accountsettings.ui.ExtensionsKt.EXTRA_ACCOUNT_NAME; import android.app.Activity; import android.content.Intent; @@ -27,6 +28,8 @@ public class LocationSettingsActivity extends Activity { + private final static String ACCOUNT_NAME = "account_name"; + @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -34,6 +37,10 @@ protected void onCreate(@Nullable Bundle savedInstanceState) { if (ACTION_LOCATION_SHARING.equals(getIntent().getAction())) { Intent intent = new Intent(this, MainActivity.class); intent.setAction(ACTION_LOCATION_SHARING); + Bundle extras = getIntent().getExtras(); + if (extras != null && extras.containsKey(ACCOUNT_NAME)) { + intent.putExtra(EXTRA_ACCOUNT_NAME, extras.getString(ACCOUNT_NAME)); + } startActivity(intent); } } catch (Exception ignore) { From c4967b018e009f12c0dafb825e881421bdbeb83d Mon Sep 17 00:00:00 2001 From: Jonathan Klee Date: Mon, 8 Jun 2026 22:15:45 +0200 Subject: [PATCH 14/20] fix: return SUCCESS with empty result when no BlockStore data exists (#3503) Returning INTERNAL_ERROR when no data is stored yet caused apps to crash on first launch, as the absence of data is a valid empty-success state. --- .../gms/auth/blockstore/BlockstoreApiService.kt | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/play-services-auth-blockstore/core/src/main/kotlin/org/microg/gms/auth/blockstore/BlockstoreApiService.kt b/play-services-auth-blockstore/core/src/main/kotlin/org/microg/gms/auth/blockstore/BlockstoreApiService.kt index 299628a836..7ef1430fab 100644 --- a/play-services-auth-blockstore/core/src/main/kotlin/org/microg/gms/auth/blockstore/BlockstoreApiService.kt +++ b/play-services-auth-blockstore/core/src/main/kotlin/org/microg/gms/auth/blockstore/BlockstoreApiService.kt @@ -78,11 +78,7 @@ class BlobstoreServiceImpl(val blockStore: BlockStoreImpl, override val lifecycl lifecycleScope.launch { runCatching { val retrieveBytes = blockStore.retrieveBytes() - if (retrieveBytes != null) { - callback?.onBytesResult(Status.SUCCESS, retrieveBytes) - } else { - callback?.onBytesResult(Status.INTERNAL_ERROR, null) - } + callback?.onBytesResult(Status.SUCCESS, retrieveBytes) } } } @@ -142,11 +138,7 @@ class BlobstoreServiceImpl(val blockStore: BlockStoreImpl, override val lifecycl runCatching { val retrieveBytesResponse = blockStore.retrieveBytesWithRequest(request) Log.d(TAG, "retrieveBytesWithRequest: retrieveBytesResponse: $retrieveBytesResponse") - if (retrieveBytesResponse != null) { - callback?.onResponseResult(Status.SUCCESS, retrieveBytesResponse) - } else { - callback?.onResponseResult(Status.INTERNAL_ERROR, RetrieveBytesResponse(Bundle.EMPTY, emptyList())) - } + callback?.onResponseResult(Status.SUCCESS, retrieveBytesResponse ?: RetrieveBytesResponse(Bundle.EMPTY, emptyList())) } } } From b98a8a4d1a37fd2902912e341b00222edf32c059 Mon Sep 17 00:00:00 2001 From: DaVinci9196 <150454414+DaVinci9196@users.noreply.github.com> Date: Tue, 9 Jun 2026 04:16:29 +0800 Subject: [PATCH 15/20] Reject isBillingSupported requests with apiVersion above 28 (#3440) --- .../java/org/microg/vending/billing/InAppBillingServiceImpl.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vending-app/src/main/java/org/microg/vending/billing/InAppBillingServiceImpl.kt b/vending-app/src/main/java/org/microg/vending/billing/InAppBillingServiceImpl.kt index 39a70ece52..7e325af29f 100644 --- a/vending-app/src/main/java/org/microg/vending/billing/InAppBillingServiceImpl.kt +++ b/vending-app/src/main/java/org/microg/vending/billing/InAppBillingServiceImpl.kt @@ -192,7 +192,7 @@ class InAppBillingServiceImpl(private val context: Context) : IInAppBillingServi Log.w(TAG, "isBillingSupported: Billing is disabled") return resultBundle(BillingResponseCode.BILLING_UNAVAILABLE, "Billing is disabled") } - if (apiVersion < 3) { + if (apiVersion !in 3..28) { return resultBundle(BillingResponseCode.BILLING_UNAVAILABLE, "Client does not support the requesting billing API.") } if (extraParams != null && apiVersion < 7) { From 877b4386e20b36f5111480bb267921658d4e532f Mon Sep 17 00:00:00 2001 From: DaVinci9196 <150454414+DaVinci9196@users.noreply.github.com> Date: Tue, 9 Jun 2026 04:17:00 +0800 Subject: [PATCH 16/20] Allow activity controls via web view (#3365) --- .../kotlin/org/microg/gms/accountsettings/ui/MainActivity.kt | 1 + 1 file changed, 1 insertion(+) diff --git a/play-services-core/src/main/kotlin/org/microg/gms/accountsettings/ui/MainActivity.kt b/play-services-core/src/main/kotlin/org/microg/gms/accountsettings/ui/MainActivity.kt index 0e35f62dc6..1ff998726d 100644 --- a/play-services-core/src/main/kotlin/org/microg/gms/accountsettings/ui/MainActivity.kt +++ b/play-services-core/src/main/kotlin/org/microg/gms/accountsettings/ui/MainActivity.kt @@ -68,6 +68,7 @@ private val SCREEN_ID_TO_URL = hashMapOf( 205 to "https://myaccount.google.com/birthday", 206 to "https://myaccount.google.com/gender", 210 to "https://myaccount.google.com/locationsharing", + 212 to "https://myactivity.google.com/activitycontrols", 214 to "https://myaccount.google.com/dashboard", 215 to "https://takeout.google.com", 216 to "https://myaccount.google.com/inactive", From ad3c413ea8ac9765375f38ced7d0dbf733e721ea Mon Sep 17 00:00:00 2001 From: DaVinci9196 <150454414+DaVinci9196@users.noreply.github.com> Date: Tue, 9 Jun 2026 04:17:29 +0800 Subject: [PATCH 17/20] Google package: Add YTCreate signature information (#3373) --- .../kotlin/org/microg/gms/common/KnownGooglePackages.kt | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/play-services-base/core/src/main/kotlin/org/microg/gms/common/KnownGooglePackages.kt b/play-services-base/core/src/main/kotlin/org/microg/gms/common/KnownGooglePackages.kt index 2e7d2a7493..6a592e6f25 100644 --- a/play-services-base/core/src/main/kotlin/org/microg/gms/common/KnownGooglePackages.kt +++ b/play-services-base/core/src/main/kotlin/org/microg/gms/common/KnownGooglePackages.kt @@ -210,6 +210,12 @@ private val KNOWN_GOOGLE_PACKAGES = mapOf( PackageAndCertHash("com.waymo.carapp", SHA256, "c600dafe48f6ee770dd814261bd4b64708bc19dd014322107b58e836d8f2634e"), setOf(ACCOUNT, AUTH, OWNER) ), + + // YT Create + Pair( + PackageAndCertHash("com.google.android.apps.youtube.producer", SHA256, "5faeab9198730e9ef1f2312f742d66095632bffa7cc74f5d5c8280cb0b184e9d"), + setOf(ACCOUNT, AUTH, OWNER) + ), ) fun isGooglePackage(pkg: PackageAndCertHash): Boolean { From 147a188c72f070635864ce6632c2ace9858862e0 Mon Sep 17 00:00:00 2001 From: DaVinci9196 <150454414+DaVinci9196@users.noreply.github.com> Date: Tue, 9 Jun 2026 04:25:01 +0800 Subject: [PATCH 18/20] Phenotype: Display NotebookLM in Gemini AttachmentMenuConfig (#3386) Co-authored-by: Marvin W --- .../main/kotlin/org/microg/gms/phenotype/PhenotypeService.kt | 5 +++++ 1 file changed, 5 insertions(+) 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 d971a3a70e..bdfa4c5123 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 @@ -45,6 +45,11 @@ private val CONFIGURATION_OPTIONS = mapOf( Flag("45638955", true, 0), Flag("45621205", true, 0), Flag("45616812", true, 0), + // Enable Gemini NotebookLM in AttachmentMenuConfig + Flag("45715239", true, 0), + Flag("45713945", true, 0), + // Enable Gemini related third-party applications + Flag("45685960", true, 0), // Enable Gemini temporary chat and more menus. Flag("45737809", true, 0), Flag("45752052", true, 0), From 6f711bba4f3acc3f99515a9b196ad1e47aab2e62 Mon Sep 17 00:00:00 2001 From: DaVinci9196 <150454414+DaVinci9196@users.noreply.github.com> Date: Tue, 9 Jun 2026 04:25:19 +0800 Subject: [PATCH 19/20] Phenotype: Displays the Practice feature. (#3381) Co-authored-by: Marvin W --- .../kotlin/org/microg/gms/phenotype/PhenotypeService.kt | 8 ++++++++ 1 file changed, 8 insertions(+) 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 bdfa4c5123..f6a82ebd5f 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 @@ -90,6 +90,14 @@ private val CONFIGURATION_OPTIONS = mapOf( "com.google.android.apps.photos" to arrayOf( Flag("45617431", true, 0), ), + "com.google.android.apps.translate" to arrayOf( + // Enable Practice Tab + Flag("SpeakEasy__enabled", true, 0), + // Enable Layout adjustment + Flag("OpenMic__enable_open_mic_2_august_launch_ui", true, 0), + // Enable Handwriting Improvements + Flag("HandwritingImprovements__enable_handwriting_improvements", true, 0), + ), "com.google.labs.language.tailwind.mobile#com.google.android.apps.labs.language.tailwind" to arrayOf( // Enable NotebookLM video overview Flag("45741830", true, 0), From 046c00b0d160f7a355c718acc9ee595ccefe2948 Mon Sep 17 00:00:00 2001 From: DaVinci9196 <150454414+DaVinci9196@users.noreply.github.com> Date: Tue, 9 Jun 2026 04:25:34 +0800 Subject: [PATCH 20/20] Phenotype: Fixed the issue of no Gemini entry point in Google Messages. (#3380) Co-authored-by: Marvin W --- .../main/kotlin/org/microg/gms/phenotype/PhenotypeService.kt | 4 ++++ 1 file changed, 4 insertions(+) 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 f6a82ebd5f..4374736975 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 @@ -102,6 +102,10 @@ private val CONFIGURATION_OPTIONS = mapOf( // Enable NotebookLM video overview Flag("45741830", true, 0), ), + "com.google.android.apps.messaging#com.google.android.apps.messaging" to arrayOf( + Flag("bugle_phenotype__enable_penpal_conversation", true, 0), + Flag("bugle_phenotype__bug_325090692_enable_penpal_dasher_check", false, 0), + ), ) class PhenotypeServiceImpl(val packageName: String?) : IPhenotypeService.Stub() {