Repo Created

This commit is contained in:
Fr4nz D13trich 2025-11-15 17:44:12 +01:00
parent eb305e2886
commit a8c22c65db
4784 changed files with 329907 additions and 2 deletions

View file

@ -0,0 +1,50 @@
/*
* SPDX-FileCopyrightText: 2024 microG Project Team
* SPDX-License-Identifier: Apache-2.0
*/
apply plugin: 'com.android.library'
apply plugin: 'kotlin-android'
apply plugin: 'maven-publish'
apply plugin: 'signing'
dependencies {
api project(':play-services-fitness')
implementation project(':play-services-base-core')
}
android {
namespace "org.microg.gms.fitness.core"
compileSdkVersion androidCompileSdk
buildToolsVersion "$androidBuildVersionTools"
defaultConfig {
versionName version
minSdkVersion androidMinSdk
targetSdkVersion androidTargetSdk
}
sourceSets {
main.java.srcDirs += 'src/main/kotlin'
}
lintOptions {
disable 'MissingTranslation', 'GetLocales'
}
compileOptions {
sourceCompatibility = 1.8
targetCompatibility = 1.8
}
kotlinOptions {
jvmTarget = 1.8
}
}
// Not publishable yet
// apply from: '../../gradle/publish-android.gradle'
description = 'microG service implementation for play-services-fitness'

View file

@ -0,0 +1,47 @@
<?xml version="1.0" encoding="utf-8"?><!--
~ SPDX-FileCopyrightText: 2024 microG Project Team
~ SPDX-License-Identifier: Apache-2.0
-->
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<application>
<service
android:name="com.google.android.gms.fitness.service.config.FitConfigBroker"
android:exported="true"
android:enabled="true">
<intent-filter>
<action android:name="com.google.android.gms.fitness.ConfigApi" />
</intent-filter>
</service>
<service
android:name="com.google.android.gms.fitness.service.history.FitHistoryBroker"
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name="com.google.android.gms.fitness.HistoryApi" />
</intent-filter>
</service>
<service
android:name="com.google.android.gms.fitness.service.sessions.FitSessionsBroker"
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name="com.google.android.gms.fitness.SessionsApi" />
</intent-filter>
</service>
<service
android:name="com.google.android.gms.fitness.service.recording.FitRecordingBroker"
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name="com.google.android.gms.fitness.RecordingApi"/>
</intent-filter>
</service>
</application>
</manifest>

View file

@ -0,0 +1,56 @@
/**
* SPDX-FileCopyrightText: 2024 microG Project Team
* SPDX-License-Identifier: Apache-2.0
*/
package com.google.android.gms.fitness.service.config
import com.google.android.gms.fitness.service.FITNESS_FEATURES
import android.os.Parcel
import android.util.Log
import com.google.android.gms.common.api.CommonStatusCodes
import com.google.android.gms.common.api.Status
import com.google.android.gms.common.internal.ConnectionInfo
import com.google.android.gms.common.internal.GetServiceRequest
import com.google.android.gms.common.internal.IGmsCallbacks
import com.google.android.gms.fitness.internal.IGoogleFitConfigApi
import com.google.android.gms.fitness.request.DataTypeCreateRequest
import com.google.android.gms.fitness.request.DisableFitRequest
import com.google.android.gms.fitness.request.ReadDataTypeRequest
import org.microg.gms.BaseService
import org.microg.gms.common.GmsService
import org.microg.gms.utils.warnOnTransactionIssues
private const val TAG = "FitConfigBroker"
class FitConfigBroker : BaseService(TAG, GmsService.FITNESS_CONFIG) {
override fun handleServiceRequest(callback: IGmsCallbacks, request: GetServiceRequest, service: GmsService) {
callback.onPostInitCompleteWithConnectionInfo(CommonStatusCodes.SUCCESS, FitConfigBrokerImpl(),
ConnectionInfo().apply {
features = FITNESS_FEATURES
})
}
}
class FitConfigBrokerImpl : IGoogleFitConfigApi.Stub() {
override fun createCustomDataType(request: DataTypeCreateRequest?) {
Log.d(TAG, "Not implemented createCustomDataType: $request")
}
override fun readDataType(request: ReadDataTypeRequest?) {
Log.d(TAG, "Not implemented readDataType: $request")
}
override fun disableFit(request: DisableFitRequest?) {
Log.d(TAG, "Method <disableFit> Called: $request")
try {
request?.callback?.onResult(Status.SUCCESS)
} catch (e: Exception) {
Log.w(TAG, "disableFit Error $e")
}
}
override fun onTransact(code: Int, data: Parcel, reply: Parcel?, flags: Int): Boolean =
warnOnTransactionIssues(code, reply, flags, TAG) { super.onTransact(code, data, reply, flags) }
}

View file

@ -0,0 +1,15 @@
/*
* SPDX-FileCopyrightText: 2025 microG Project Team
* SPDX-License-Identifier: Apache-2.0
*/
package com.google.android.gms.fitness.service
import com.google.android.gms.common.Feature
val FITNESS_FEATURES = arrayOf(
Feature("temp_data_point_changelogs", 1L),
Feature("temp_session_changelogs", 1L),
Feature("temp_data_source_changelogs", 1L),
Feature("local_no_account_mode", 1L),
)

View file

@ -0,0 +1,109 @@
/*
* SPDX-FileCopyrightText: 2023 microG Project Team
* SPDX-License-Identifier: Apache-2.0
*/
package com.google.android.gms.fitness.service.history
import com.google.android.gms.fitness.service.FITNESS_FEATURES
import android.os.Parcel
import android.util.Log
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 com.google.android.gms.fitness.internal.IGoogleFitHistoryApi
import com.google.android.gms.fitness.request.DailyTotalRequest
import com.google.android.gms.fitness.request.DataDeleteRequest
import com.google.android.gms.fitness.request.DataInsertRequest
import com.google.android.gms.fitness.request.DataPointChangesRequest
import com.google.android.gms.fitness.request.DataReadRequest
import com.google.android.gms.fitness.request.DataUpdateListenerRegistrationRequest
import com.google.android.gms.fitness.request.DataUpdateListenerUnregistrationRequest
import com.google.android.gms.fitness.request.DataUpdateRequest
import com.google.android.gms.fitness.request.DebugInfoRequest
import com.google.android.gms.fitness.request.GetFileUriRequest
import com.google.android.gms.fitness.request.GetSyncInfoRequest
import com.google.android.gms.fitness.request.ReadRawRequest
import com.google.android.gms.fitness.request.ReadStatsRequest
import com.google.android.gms.fitness.request.SessionChangesRequest
import org.microg.gms.BaseService
import org.microg.gms.common.GmsService
import org.microg.gms.utils.warnOnTransactionIssues
private const val TAG = "FitHistoryBroker"
class FitHistoryBroker : BaseService(TAG, GmsService.FITNESS_HISTORY) {
override fun handleServiceRequest(callback: IGmsCallbacks, request: GetServiceRequest, service: GmsService) {
callback.onPostInitCompleteWithConnectionInfo(CommonStatusCodes.SUCCESS, FitHistoryBrokerImpl().asBinder(),
ConnectionInfo().apply {
features = FITNESS_FEATURES
})
}
}
class FitHistoryBrokerImpl : IGoogleFitHistoryApi.Stub() {
override fun readData(request: DataReadRequest?) {
Log.d(TAG, "Not implemented readData: $request")
}
override fun insertData(request: DataInsertRequest?) {
Log.d(TAG, "Not implemented insertData: $request")
}
override fun deleteData(request: DataDeleteRequest?) {
Log.d(TAG, "Not implemented deleteData: $request")
}
override fun getSyncInfo(request: GetSyncInfoRequest) {
Log.d(TAG, "Not implemented getSyncInfo: $request")
}
override fun readStats(request: ReadStatsRequest?) {
Log.d(TAG, "Not implemented readStats: $request")
}
override fun readRaw(request: ReadRawRequest?) {
Log.d(TAG, "Not implemented readRaw: $request")
}
override fun getDailyTotal(request: DailyTotalRequest?) {
Log.d(TAG, "Not implemented getDailyTotal: $request")
}
override fun insertDataPrivileged(request: DataInsertRequest?) {
Log.d(TAG, "Not implemented insertDataPrivileged: $request")
}
override fun updateData(request: DataUpdateRequest?) {
Log.d(TAG, "Not implemented updateData: $request")
}
override fun registerDataUpdateListener(request: DataUpdateListenerRegistrationRequest?) {
Log.d(TAG, "Not implemented registerDataUpdateListener: $request")
}
override fun unregisterDataUpdateListener(request: DataUpdateListenerUnregistrationRequest?) {
Log.d(TAG, "Not implemented unregisterDataUpdateListener: $request")
}
override fun getFileUri(request: GetFileUriRequest?) {
Log.d(TAG, "Not implemented getFileUri: $request")
}
override fun getDebugInfo(request: DebugInfoRequest?) {
Log.d(TAG, "Not implemented getDebugInfo: $request")
}
override fun getDataPointChanges(request: DataPointChangesRequest?) {
Log.d(TAG, "Not implemented getDataPointChanges: $request")
}
override fun getSessionChanges(request: SessionChangesRequest?) {
Log.d(TAG, "Not implemented getSessionChanges: $request")
}
override fun onTransact(code: Int, data: Parcel, reply: Parcel?, flags: Int): Boolean =
warnOnTransactionIssues(code, reply, flags, TAG) { super.onTransact(code, data, reply, flags) }
}

View file

@ -0,0 +1,55 @@
/**
* SPDX-FileCopyrightText: 2025 microG Project Team
* SPDX-License-Identifier: Apache-2.0
*/
package com.google.android.gms.fitness.service.recording
import com.google.android.gms.fitness.service.FITNESS_FEATURES
import android.util.Log
import com.google.android.gms.common.api.CommonStatusCodes
import com.google.android.gms.common.api.Status
import com.google.android.gms.common.internal.ConnectionInfo
import com.google.android.gms.common.internal.GetServiceRequest
import com.google.android.gms.common.internal.IGmsCallbacks
import com.google.android.gms.fitness.data.Subscription
import com.google.android.gms.fitness.internal.IGoogleFitRecordingApi
import com.google.android.gms.fitness.request.ListSubscriptionsRequest
import com.google.android.gms.fitness.request.SubscribeRequest
import com.google.android.gms.fitness.request.UnsubscribeRequest
import com.google.android.gms.fitness.result.ListSubscriptionsResult
import org.microg.gms.BaseService
import org.microg.gms.common.GmsService
private const val TAG = "FitRecordingBroker"
class FitRecordingBroker : BaseService(TAG, GmsService.FITNESS_RECORDING) {
override fun handleServiceRequest(callback: IGmsCallbacks, request: GetServiceRequest, service: GmsService) {
Log.d(TAG, "handleServiceRequest: account: ${request.account.name} packageName: ${request.packageName}")
callback.onPostInitCompleteWithConnectionInfo(CommonStatusCodes.SUCCESS, FitRecordingBrokerImpl(),
ConnectionInfo().apply {
features = FITNESS_FEATURES
})
}
}
class FitRecordingBrokerImpl() : IGoogleFitRecordingApi.Stub() {
override fun subscribe(request: SubscribeRequest) {
Log.d(TAG, "Not yet implemented subscribe request: $request")
return request.callback.onResult(Status.SUCCESS)
}
override fun unsubscribe(request: UnsubscribeRequest) {
Log.d(TAG, "Not yet implemented unsubscribe request: $request")
request.callback.onResult(Status.SUCCESS)
}
override fun listSubscriptions(request: ListSubscriptionsRequest) {
Log.d(TAG, "Not yet implemented listSubscriptions request: $request")
return request.callback.onListSubscriptions(ListSubscriptionsResult(emptyList<Subscription>(), Status(5008)))
}
}

View file

@ -0,0 +1,64 @@
/**
* SPDX-FileCopyrightText: 2024 microG Project Team
* SPDX-License-Identifier: Apache-2.0
*/
package com.google.android.gms.fitness.service.sessions;
import com.google.android.gms.fitness.service.FITNESS_FEATURES
import android.os.Parcel
import android.util.Log
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 com.google.android.gms.fitness.internal.IGoogleFitSessionsApi
import com.google.android.gms.fitness.request.SessionInsertRequest
import com.google.android.gms.fitness.request.SessionReadRequest
import com.google.android.gms.fitness.request.SessionRegistrationRequest
import com.google.android.gms.fitness.request.SessionStartRequest
import com.google.android.gms.fitness.request.SessionStopRequest
import com.google.android.gms.fitness.request.SessionUnregistrationRequest
import org.microg.gms.BaseService
import org.microg.gms.common.GmsService
import org.microg.gms.utils.warnOnTransactionIssues
private const val TAG = "FitSessionsBroker"
class FitSessionsBroker : BaseService(TAG, GmsService.FITNESS_SESSIONS) {
override fun handleServiceRequest(callback: IGmsCallbacks, request: GetServiceRequest, service: GmsService) {
callback.onPostInitCompleteWithConnectionInfo(CommonStatusCodes.SUCCESS, FitSessionsBrokerImpl(),
ConnectionInfo().apply {
features = FITNESS_FEATURES
})
}
}
class FitSessionsBrokerImpl : IGoogleFitSessionsApi.Stub() {
override fun startRequest(startRequest: SessionStartRequest?) {
Log.d(TAG, "Not implemented startRequest: $startRequest")
}
override fun stopRequest(stopRequest: SessionStopRequest?) {
Log.d(TAG, "Not implemented stopRequest: $stopRequest")
}
override fun insertRequest(insetRequest: SessionInsertRequest?) {
Log.d(TAG, "Not implemented insertRequest: $insetRequest")
}
override fun readRequest(readRequest: SessionReadRequest?) {
Log.d(TAG, "Not implemented readRequest: $readRequest")
}
override fun registrationRequest(registrationRequest: SessionRegistrationRequest?) {
Log.d(TAG, "Not implemented registrationRequest: $registrationRequest")
}
override fun unRegistrationRequest(unRegistrationRequest: SessionUnregistrationRequest?) {
Log.d(TAG, "Not implemented unRegistrationRequest: $unRegistrationRequest")
}
override fun onTransact(code: Int, data: Parcel, reply: Parcel?, flags: Int): Boolean =
warnOnTransactionIssues(code, reply, flags, TAG) { super.onTransact(code, data, reply, flags) }
}