diff --git a/play-services-clearcut/src/main/aidl/com/google/android/gms/clearcut/internal/IBootCountCallbacks.aidl b/play-services-clearcut/src/main/aidl/com/google/android/gms/clearcut/internal/IBootCountCallbacks.aidl new file mode 100644 index 000000000..3232c969f --- /dev/null +++ b/play-services-clearcut/src/main/aidl/com/google/android/gms/clearcut/internal/IBootCountCallbacks.aidl @@ -0,0 +1,7 @@ +package com.google.android.gms.clearcut.internal; + +import com.google.android.gms.common.api.Status; + +interface IBootCountCallbacks { + void onBootCount(in Status status, int bootCount) = 0; +} diff --git a/play-services-clearcut/src/main/aidl/com/google/android/gms/clearcut/internal/IBootCountService.aidl b/play-services-clearcut/src/main/aidl/com/google/android/gms/clearcut/internal/IBootCountService.aidl new file mode 100644 index 000000000..3ed035dde --- /dev/null +++ b/play-services-clearcut/src/main/aidl/com/google/android/gms/clearcut/internal/IBootCountService.aidl @@ -0,0 +1,7 @@ +package com.google.android.gms.clearcut.internal; + +import com.google.android.gms.clearcut.internal.IBootCountCallbacks; + +interface IBootCountService { + void getBootCount(IBootCountCallbacks callbacks) = 0; +} diff --git a/play-services-core/src/main/AndroidManifest.xml b/play-services-core/src/main/AndroidManifest.xml index 278780221..680d81777 100644 --- a/play-services-core/src/main/AndroidManifest.xml +++ b/play-services-core/src/main/AndroidManifest.xml @@ -1250,6 +1250,12 @@ + + + + + + diff --git a/play-services-core/src/main/kotlin/org/microg/gms/clearcut/BootCountService.kt b/play-services-core/src/main/kotlin/org/microg/gms/clearcut/BootCountService.kt new file mode 100644 index 000000000..4736ad429 --- /dev/null +++ b/play-services-core/src/main/kotlin/org/microg/gms/clearcut/BootCountService.kt @@ -0,0 +1,39 @@ +/* + * SPDX-FileCopyrightText: 2024 microG Project Team + * SPDX-License-Identifier: Apache-2.0 + */ +package org.microg.gms.clearcut + +import android.content.Context +import android.os.Parcel +import android.provider.Settings +import android.util.Log +import com.google.android.gms.clearcut.internal.IBootCountCallbacks +import com.google.android.gms.clearcut.internal.IBootCountService +import com.google.android.gms.common.api.CommonStatusCodes +import com.google.android.gms.common.api.Status +import com.google.android.gms.common.internal.GetServiceRequest +import com.google.android.gms.common.internal.IGmsCallbacks +import org.microg.gms.BaseService +import org.microg.gms.common.GmsService +import org.microg.gms.utils.warnOnTransactionIssues + +private const val TAG = "BootCountService" + +class BootCountService : BaseService(TAG, GmsService.BOOT_COUNT) { + override fun handleServiceRequest(callback: IGmsCallbacks, request: GetServiceRequest, service: GmsService) { + Log.d(TAG, "handleServiceRequest") + callback.onPostInitComplete(CommonStatusCodes.SUCCESS, BootCountServiceImpl(this), null) + } +} + +class BootCountServiceImpl(private val context: Context) : IBootCountService.Stub() { + override fun getBootCount(callbacks: IBootCountCallbacks?) { + Log.d(TAG, "getBootCount called") + val bootCount = Settings.Global.getInt(context.contentResolver, Settings.Global.BOOT_COUNT, 1) + callbacks?.onBootCount(Status.SUCCESS, bootCount) + } + + override fun onTransact(code: Int, data: Parcel, reply: Parcel?, flags: Int): Boolean = + warnOnTransactionIssues(code, reply, flags, TAG) { super.onTransact(code, data, reply, flags) } +}