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 82% 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 index dc258c2ded..a42081b242 100644 --- 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 @@ -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 @@ -16,10 +17,10 @@ import org.microg.gms.utils.warnOnTransactionIssues private const val TAG = "AdLoaderBuilder" @Keep -class AdLoaderBuilderCreatorImpl : IAdLoaderBuilderCreator.Stub() { - override fun newAdLoaderBuilder(context: IObjectWrapper?, adUnitId: String, adapterCreator: IAdapterCreator?, clientVersion: Int): IBinder? { +open class AdLoaderBuilderCreatorImpl : IAdLoaderBuilderCreator.Stub() { + override fun newAdLoaderBuilder(context: IObjectWrapper?, adUnitId: String, adapterCreator: IAdapterCreator?, clientVersion: Int): IAdLoaderBuilder? { 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-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 new file mode 100644 index 0000000000..bb51242bd7 --- /dev/null +++ b/play-services-ads-api/core/src/main/kotlin/com/google/android/gms/ads/AdManagerCreatorImpl.kt @@ -0,0 +1,36 @@ +/* + * SPDX-FileCopyrightText: 2023 microG Project Team + * SPDX-License-Identifier: Apache-2.0 + */ +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.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 +import com.google.android.gms.dynamic.ObjectWrapper +import org.microg.gms.utils.warnOnTransactionIssues + +private const val TAG = "AdManagerCreator" + +@Keep +open class AdManagerCreatorImpl : IAdManagerCreator.Stub() { + 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): IAdManager { + 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-api/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 new file mode 100644 index 0000000000..6da9cbe7df --- /dev/null +++ b/play-services-ads-api/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-api/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 new file mode 100644 index 0000000000..aa42ba1b5e --- /dev/null +++ b/play-services-ads-api/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-api/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 new file mode 100644 index 0000000000..1cd079794b --- /dev/null +++ b/play-services-ads-api/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-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 new file mode 100644 index 0000000000..ea93115705 --- /dev/null +++ b/play-services-ads-api/core/src/main/kotlin/com/google/android/gms/ads/LegacyAdLoaderBuilder.kt @@ -0,0 +1,54 @@ +/* + * SPDX-FileCopyrightText: 2026 microG Project Team + * SPDX-License-Identifier: Apache-2.0 + */ +package com.google.android.gms.ads + +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 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 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 withAdManagerAdViewOptions(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, "loadAds") + } +} diff --git a/play-services-ads-api/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 new file mode 100644 index 0000000000..7da7f83cf5 --- /dev/null +++ b/play-services-ads-api/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-api/core/src/main/kotlin/com/google/android/gms/ads/MobileAdsSettingManagerCreatorImpl.kt similarity index 82% 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 index 176a17d83c..450ddd0368 100644 --- 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 @@ -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 @@ -18,8 +19,8 @@ import org.microg.gms.utils.warnOnTransactionIssues private const val TAG = "AdsSettingManager" @Keep -class MobileAdsSettingManagerCreatorImpl : IMobileAdsSettingManagerCreator.Stub() { - override fun getMobileAdsSettingManager(context: IObjectWrapper?, clientVersion: Int): IBinder { +open class MobileAdsSettingManagerCreatorImpl : IMobileAdsSettingManagerCreator.Stub() { + 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-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-api/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 new file mode 100644 index 0000000000..2ff1efe7b3 --- /dev/null +++ b/play-services-ads-api/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-api/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 new file mode 100644 index 0000000000..6fbfae8bde --- /dev/null +++ b/play-services-ads-api/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/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-api/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 new file mode 100644 index 0000000000..4e437f4cd4 --- /dev/null +++ b/play-services-ads-api/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-api/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 new file mode 100644 index 0000000000..038a95e61b --- /dev/null +++ b/play-services-ads-api/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-api/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 new file mode 100644 index 0000000000..77843785fb --- /dev/null +++ b/play-services-ads-api/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-api/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 new file mode 100644 index 0000000000..f669bbdd8c --- /dev/null +++ b/play-services-ads-api/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-api/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 new file mode 100644 index 0000000000..f5e9a1216c --- /dev/null +++ b/play-services-ads-api/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-api/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 new file mode 100644 index 0000000000..79dcebb2da --- /dev/null +++ b/play-services-ads-api/src/main/aidl/com/google/android/gms/ads/internal/client/IAdLoader.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.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-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 new file mode 100644 index 0000000000..b40cc5178c --- /dev/null +++ b/play-services-ads-api/src/main/aidl/com/google/android/gms/ads/internal/client/IAdLoaderBuilder.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.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 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 withAdManagerAdViewOptions(in AdManagerAdViewOptions options) = 14; +} 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 52% 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 index b6f63ac331..baa9758f65 100644 --- 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 @@ -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/IAdManager.aidl b/play-services-ads-api/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-api/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-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 new file mode 100644 index 0000000000..4446547d23 --- /dev/null +++ b/play-services-ads-api/src/main/aidl/com/google/android/gms/ads/internal/client/IAdManagerCreator.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.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 { + 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/IAppEventListener.aidl b/play-services-ads-api/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-api/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-api/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 new file mode 100644 index 0000000000..205f82edf4 --- /dev/null +++ b/play-services-ads-api/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-api/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 new file mode 100644 index 0000000000..0464ff16ab --- /dev/null +++ b/play-services-ads-api/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/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-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 new file mode 100644 index 0000000000..f68ce14c21 --- /dev/null +++ b/play-services-ads-api/src/main/aidl/com/google/android/gms/ads/internal/client/IMobileAdsSettingManagerCreator.aidl @@ -0,0 +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 { + IMobileAdsSettingManager getMobileAdsSettingManager(IObjectWrapper context, int clientVersion); +} \ No newline at end of file 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-api/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 new file mode 100644 index 0000000000..eabf5d201f --- /dev/null +++ b/play-services-ads-api/src/main/aidl/com/google/android/gms/ads/internal/client/IOnPaidEventListener.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.client.AdValueParcel; + +interface IOnPaidEventListener { + 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/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-api/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 new file mode 100644 index 0000000000..643d2e8b8e --- /dev/null +++ b/play-services-ads-api/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-api/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 new file mode 100644 index 0000000000..6b0c5ba819 --- /dev/null +++ b/play-services-ads-api/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-api/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 new file mode 100644 index 0000000000..f6f4957642 --- /dev/null +++ b/play-services-ads-api/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-api/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 new file mode 100644 index 0000000000..ebd8c5b500 --- /dev/null +++ b/play-services-ads-api/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-api/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 new file mode 100644 index 0000000000..ad5a69fc8f --- /dev/null +++ b/play-services-ads-api/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-api/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 new file mode 100644 index 0000000000..cbe18571b4 --- /dev/null +++ b/play-services-ads-api/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-api/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 new file mode 100644 index 0000000000..d55ccbfc1a --- /dev/null +++ b/play-services-ads-api/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-api/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 new file mode 100644 index 0000000000..8ad51cf7e7 --- /dev/null +++ b/play-services-ads-api/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-api/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 new file mode 100644 index 0000000000..494f54faeb --- /dev/null +++ b/play-services-ads-api/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-api/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 new file mode 100644 index 0000000000..c35c6ed091 --- /dev/null +++ b/play-services-ads-api/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-api/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 new file mode 100644 index 0000000000..b0ec913130 --- /dev/null +++ b/play-services-ads-api/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-api/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 new file mode 100644 index 0000000000..6b82dc26f6 --- /dev/null +++ b/play-services-ads-api/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-api/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 new file mode 100644 index 0000000000..18617588b9 --- /dev/null +++ b/play-services-ads-api/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-api/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 new file mode 100644 index 0000000000..cfa2235d33 --- /dev/null +++ b/play-services-ads-api/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-api/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 new file mode 100644 index 0000000000..3fc4c948a5 --- /dev/null +++ b/play-services-ads-api/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/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-api/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 new file mode 100644 index 0000000000..50dd790e67 --- /dev/null +++ b/play-services-ads-api/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-api/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 new file mode 100644 index 0000000000..463828ea26 --- /dev/null +++ b/play-services-ads-api/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-api/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 new file mode 100644 index 0000000000..d66d32240a --- /dev/null +++ b/play-services-ads-api/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/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-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-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-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 new file mode 100644 index 0000000000..f04671e553 --- /dev/null +++ b/play-services-ads-api/src/main/java/com/google/android/gms/ads/formats/AdManagerAdViewOptions.java @@ -0,0 +1,45 @@ +/* + * 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; + +/** + * Options to configure Google Ad Manager banner requests using an {@link AdLoader}. + */ +@SafeParcelable.Class +public final class AdManagerAdViewOptions extends AbstractSafeParcelable { + @Field(1) + 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) { + CREATOR.writeToParcel(this, dest, flags); + } + + public static final SafeParcelableCreatorAndWriter CREATOR = findCreator(AdManagerAdViewOptions.class); +} diff --git a/play-services-ads-api/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 new file mode 100644 index 0000000000..9bdcef6806 --- /dev/null +++ b/play-services-ads-api/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/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-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 new file mode 100644 index 0000000000..1e660fb6a3 --- /dev/null +++ b/play-services-ads-api/src/main/java/com/google/android/gms/ads/internal/RequestConfigurationParcel.java @@ -0,0 +1,35 @@ +/* + * SPDX-FileCopyrightText: 2023 microG Project Team + * SPDX-License-Identifier: Apache-2.0 + */ + +package com.google.android.gms.ads.internal; + +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; + +@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); +} 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-api/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 new file mode 100644 index 0000000000..27c3645955 --- /dev/null +++ b/play-services-ads-api/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-api/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 new file mode 100644 index 0000000000..2772cfe1d4 --- /dev/null +++ b/play-services-ads-api/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-api/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 new file mode 100644 index 0000000000..7db887515d --- /dev/null +++ b/play-services-ads-api/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-api/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 new file mode 100644 index 0000000000..4cd3fe0d11 --- /dev/null +++ b/play-services-ads-api/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-api/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 new file mode 100644 index 0000000000..219860d817 --- /dev/null +++ b/play-services-ads-api/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); +} 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 1c8dbe17a8..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,9 +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') -// 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/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 deleted file mode 100644 index 398956f8c0..0000000000 --- a/play-services-ads-lite/core/src/main/kotlin/com/google/android/gms/ads/AdManagerCreatorImpl.kt +++ /dev/null @@ -1,17 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2023 microG Project Team - * SPDX-License-Identifier: Apache-2.0 - */ -package com.google.android.gms.ads - -import android.os.Parcel -import androidx.annotation.Keep -import org.microg.gms.utils.warnOnTransactionIssues - -private const val TAG = "AdManager" - -@Keep -class AdManagerCreatorImpl : AdManagerCreator.Stub() { - 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/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-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/client/IMobileAdsSettingManagerCreator.aidl b/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/client/IMobileAdsSettingManagerCreator.aidl deleted file mode 100644 index f468200741..0000000000 --- a/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/client/IMobileAdsSettingManagerCreator.aidl +++ /dev/null @@ -1,7 +0,0 @@ -package com.google.android.gms.ads.internal.client; - -import com.google.android.gms.dynamic.IObjectWrapper; - -interface IMobileAdsSettingManagerCreator { - IBinder getMobileAdsSettingManager(IObjectWrapper context, int clientVersion); -} \ No newline at end of file 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 deleted file mode 100644 index 8f2d342450..0000000000 --- a/play-services-ads-lite/src/main/aidl/com/google/android/gms/ads/internal/client/IOnPaidEventListener.aidl +++ /dev/null @@ -1,6 +0,0 @@ -package com.google.android.gms.ads.internal.client; - -import com.google.android.gms.ads.internal.AdErrorParcel; - -interface IOnPaidEventListener { -} \ No newline at end of file diff --git a/play-services-ads-lite/src/main/java/com/google/android/gms/ads/internal/RequestConfigurationParcel.java b/play-services-ads-lite/src/main/java/com/google/android/gms/ads/internal/RequestConfigurationParcel.java deleted file mode 100644 index f773f34868..0000000000 --- a/play-services-ads-lite/src/main/java/com/google/android/gms/ads/internal/RequestConfigurationParcel.java +++ /dev/null @@ -1,12 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2023 microG Project Team - * SPDX-License-Identifier: Apache-2.0 - */ - -package com.google.android.gms.ads.internal; - -import org.microg.safeparcel.AutoSafeParcelable; - -public class RequestConfigurationParcel extends AutoSafeParcelable { - public static final Creator CREATOR = new AutoCreator<>(RequestConfigurationParcel.class); -} 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-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())) } } } 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 { 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); } 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/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)) } } 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) { 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", 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) 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..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 @@ -44,7 +44,19 @@ 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 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), + 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 @@ -78,6 +90,22 @@ 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), + ), + "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() { 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? { 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 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' 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"> + + + + + + +