Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
/*
* SPDX-FileCopyrightText: 2026 microG Project Team
* SPDX-License-Identifier: Apache-2.0
*/

package com.google.android.gms.inappreach.internal;

import com.google.android.gms.common.api.ApiMetadata;
import com.google.android.gms.common.api.internal.IStatusCallback;
import com.google.android.gms.inappreach.internal.IOnAccountHealthAlertsListener;
import com.google.android.gms.inappreach.internal.IOnAccountMessagesListener;
import com.google.android.gms.inappreach.internal.IOnAccountDataResponseListener;

interface IInAppReachService {
void registerAccountHealthAlerts(IStatusCallback callback, String clientPackageName, IOnAccountHealthAlertsListener listener, in ApiMetadata apiMetadata) = 0;
void unregisterAccountHealthAlerts(IStatusCallback callback, String clientPackageName, in ApiMetadata apiMetadata) = 1;
void registerAccountMessages(IStatusCallback callback, String clientPackageName, IOnAccountMessagesListener listener, in ApiMetadata apiMetadata) = 6;
void unregisterAccountMessages(IStatusCallback callback, String clientPackageName, in ApiMetadata apiMetadata) = 7;
void registerAccountDataResponse(IStatusCallback callback, String clientPackageName, IOnAccountDataResponseListener listener, in ApiMetadata apiMetadata) = 10;
void unregisterAccountDataResponse(IStatusCallback callback, String clientPackageName, in ApiMetadata apiMetadata) = 11;
void registerAccountDataResponseV2(IStatusCallback callback, String clientPackageName, IOnAccountDataResponseListener listener, in ApiMetadata apiMetadata) = 14;
void unregisterAccountDataResponseV2(IStatusCallback callback, String clientPackageName, in ApiMetadata apiMetadata) = 15;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
/*
* SPDX-FileCopyrightText: 2026 microG Project Team
* SPDX-License-Identifier: Apache-2.0
*/

package com.google.android.gms.inappreach.internal;

interface IOnAccountDataResponseListener {
oneway void onAccountDataResponse(in byte[] response) = 0;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
/*
* SPDX-FileCopyrightText: 2026 microG Project Team
* SPDX-License-Identifier: Apache-2.0
*/

package com.google.android.gms.inappreach.internal;

interface IOnAccountHealthAlertsListener {
oneway void onAccountHealthAlerts(in byte[] response) = 0;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
/*
* SPDX-FileCopyrightText: 2026 microG Project Team
* SPDX-License-Identifier: Apache-2.0
*/

package com.google.android.gms.inappreach.internal;

interface IOnAccountMessagesListener {
oneway void onAccountMessages(in byte[] response) = 0;
}
71 changes: 71 additions & 0 deletions play-services-core-proto/src/main/proto/inappreach.proto
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
/*
* SPDX-FileCopyrightText: 2026 microG Project Team
* SPDX-License-Identifier: Apache-2.0
*/

syntax = "proto2";

option java_package = "org.microg.gms.inappreach.proto";
option java_multiple_files = true;

message AccountDataResponse {
map<string, AccountData> accounts = 1;
}

message AccountData {
optional string accountName = 1;
optional AccountDataPayload payload = 2;
}

message AccountDataPayload {
optional AccountDataMetadata metadata = 1;
repeated StorageCard cards = 2;
}

message AccountDataMetadata {
optional int32 type = 1;
}

message StorageCard {
optional string title = 1;
optional int32 type = 2;
optional StorageProgress progress = 3;
optional StorageActions actions = 5;
optional StoragePayloadType payloadType = 6;
optional int32 style = 7;
optional int32 layout = 11;
optional int32 emphasis = 15;
optional int32 size = 18;
}

message StorageProgress {
optional float fraction = 1;
optional string subtitle = 2;
}

message StorageActions {
optional CallToAction primary = 1;
optional CallToAction secondary = 2;
optional int32 alignment = 3;
optional int32 arrangement = 4;
}

message StoragePayloadType {
optional string typeUrl = 1;
}

message CallToAction {
optional string typeUrl = 1;
optional CallToActionDetails details = 2;
}

message CallToActionDetails {
optional CallToActionParameters parameters = 3;
optional string label = 4;
optional int32 enabled = 6;
}

message CallToActionParameters {
optional int32 action = 3;
optional int32 source = 4;
}
7 changes: 6 additions & 1 deletion play-services-core/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -562,6 +562,12 @@
</intent-filter>
</service>

<service android:name="org.microg.gms.inappreach.InAppReachService">
<intent-filter>
<action android:name="com.google.android.gms.inappreach.service.START" />
</intent-filter>
</service>

<service android:name="org.microg.gms.auth.appcert.AppCertService">
<intent-filter>
<action android:name="com.google.android.gms.auth.be.appcert.AppCertService" />
Expand Down Expand Up @@ -1421,7 +1427,6 @@
<action android:name="com.google.android.gms.googlehelp.service.GoogleHelpService.START" />
<action android:name="com.google.android.gms.herrevad.services.LightweightNetworkQualityAndroidService.START" />
<action android:name="com.google.android.gms.identity.service.BIND" />
<action android:name="com.google.android.gms.inappreach.service.START"/>
<action android:name="com.google.android.gms.instantapps.START" />
<action android:name="com.google.android.gms.kids.service.START" />
<action android:name="com.google.android.gms.learning.internal.dynamitesupport.START" />
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
/*
* SPDX-FileCopyrightText: 2026 microG Project Team
* SPDX-License-Identifier: Apache-2.0
*/

package org.microg.gms.inappreach

import com.google.android.gms.common.Feature
import com.google.android.gms.common.api.CommonStatusCodes
import com.google.android.gms.common.internal.ConnectionInfo
import com.google.android.gms.common.internal.GetServiceRequest
import com.google.android.gms.common.internal.IGmsCallbacks
import org.microg.gms.BaseService
import org.microg.gms.common.GmsService
import org.microg.gms.common.PackageUtils

private const val TAG = "InAppReachService"
private val FEATURES = arrayOf(
Feature("account_health_alerts", 1),
Feature("account_messages", 1),
Feature("account_data_response", 1),
Feature("account_data_response_v2", 1)
)

class InAppReachService : BaseService(TAG, GmsService.INAPP_REACH) {
override fun handleServiceRequest(callback: IGmsCallbacks, request: GetServiceRequest, service: GmsService) {
val packageName = PackageUtils.getAndCheckCallingPackage(this, request.packageName)
?: throw IllegalArgumentException("Missing package name")
callback.onPostInitCompleteWithConnectionInfo(
CommonStatusCodes.SUCCESS,
InAppReachServiceImpl(this, packageName, lifecycle).asBinder(),
ConnectionInfo().apply { features = FEATURES }
)
}
}
Loading