diff --git a/play-services-api/src/main/java/com/google/android/gms/fitness/data/DataPoint.java b/play-services-api/src/main/java/com/google/android/gms/fitness/data/DataPoint.java
deleted file mode 100644
index cc63ed7bac..0000000000
--- a/play-services-api/src/main/java/com/google/android/gms/fitness/data/DataPoint.java
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
- * Copyright (C) 2013-2017 microG Project Team
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.google.android.gms.fitness.data;
-
-public class DataPoint {
-}
diff --git a/play-services-api/src/main/java/com/google/android/gms/fitness/data/Device.java b/play-services-api/src/main/java/com/google/android/gms/fitness/data/Device.java
deleted file mode 100644
index 9566ef2370..0000000000
--- a/play-services-api/src/main/java/com/google/android/gms/fitness/data/Device.java
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
- * Copyright (C) 2013-2017 microG Project Team
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.google.android.gms.fitness.data;
-
-public class Device {
-}
diff --git a/play-services-api/src/main/java/com/google/android/gms/fitness/data/Field.java b/play-services-api/src/main/java/com/google/android/gms/fitness/data/Field.java
deleted file mode 100644
index e0e56bb79a..0000000000
--- a/play-services-api/src/main/java/com/google/android/gms/fitness/data/Field.java
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
- * Copyright (C) 2013-2017 microG Project Team
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.google.android.gms.fitness.data;
-
-public class Field {
-}
diff --git a/play-services-api/src/main/java/com/google/android/gms/fitness/data/Value.java b/play-services-api/src/main/java/com/google/android/gms/fitness/data/Value.java
deleted file mode 100644
index fc1b706cd5..0000000000
--- a/play-services-api/src/main/java/com/google/android/gms/fitness/data/Value.java
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
- * Copyright (C) 2013-2017 microG Project Team
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.google.android.gms.fitness.data;
-
-public class Value {
-}
diff --git a/play-services-core/build.gradle b/play-services-core/build.gradle
index 43f7ea95f3..e4a8c6e84d 100644
--- a/play-services-core/build.gradle
+++ b/play-services-core/build.gradle
@@ -63,6 +63,7 @@ dependencies {
implementation project(':play-services-recaptcha')
implementation project(':play-services-safetynet')
implementation project(':play-services-tasks-ktx')
+ implementation project(':play-services-fitness')
mapboxRuntimeOnly project(':play-services-maps-core-mapbox')
vtmRuntimeOnly project(':play-services-maps-core-vtm')
diff --git a/play-services-core/src/main/AndroidManifest.xml b/play-services-core/src/main/AndroidManifest.xml
index 004290ffa6..5922c1c926 100644
--- a/play-services-core/src/main/AndroidManifest.xml
+++ b/play-services-core/src/main/AndroidManifest.xml
@@ -900,6 +900,15 @@
+
+
+
+
+
+
@@ -955,7 +964,6 @@
-
diff --git a/play-services-core/src/main/kotlin/com/google/android/gms/fitness/service/history/FitHistoryBroker.kt b/play-services-core/src/main/kotlin/com/google/android/gms/fitness/service/history/FitHistoryBroker.kt
new file mode 100644
index 0000000000..138720ae50
--- /dev/null
+++ b/play-services-core/src/main/kotlin/com/google/android/gms/fitness/service/history/FitHistoryBroker.kt
@@ -0,0 +1,45 @@
+/*
+ * SPDX-FileCopyrightText: 2023 microG Project Team
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+package com.google.android.gms.fitness.service.history
+
+import android.os.Bundle
+import android.util.Log
+import com.google.android.gms.common.api.CommonStatusCodes
+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.DataDeleteRequest
+import com.google.android.gms.fitness.request.DataInsertRequest
+import com.google.android.gms.fitness.request.DataReadRequest
+import com.google.android.gms.fitness.request.GetSyncInfoRequest
+import org.microg.gms.BaseService
+import org.microg.gms.common.GmsService
+
+const val TAG = "FitHistoryBroker"
+
+class FitHistoryBroker : BaseService(TAG, GmsService.FITNESS_HISTORY) {
+ override fun handleServiceRequest(callback: IGmsCallbacks, request: GetServiceRequest, service: GmsService) {
+ callback.onPostInitComplete(CommonStatusCodes.SUCCESS, FitHistoryBrokerImpl().asBinder(), Bundle())
+ }
+}
+
+class FitHistoryBrokerImpl : IGoogleFitHistoryApi.Stub() {
+ override fun getDeleteData(dataDeleteRequest: DataDeleteRequest) {
+ Log.d(TAG, "Not implemented getDeleteData: $dataDeleteRequest")
+ }
+
+ override fun getSyncInfo(getSyncInfoRequest: GetSyncInfoRequest) {
+ Log.d(TAG, "Not implemented getSyncInfo: $getSyncInfoRequest")
+ }
+
+ override fun getInsertData(dataInsertRequest: DataInsertRequest) {
+ Log.d(TAG, "Not implemented getInsertData: $dataInsertRequest")
+ }
+
+ override fun getReadData(dataReadRequest: DataReadRequest) {
+ Log.d(TAG, "Not implemented getReadData: $dataReadRequest")
+ }
+}
diff --git a/play-services-fitness/.gitignore b/play-services-fitness/.gitignore
new file mode 100644
index 0000000000..42afabfd2a
--- /dev/null
+++ b/play-services-fitness/.gitignore
@@ -0,0 +1 @@
+/build
\ No newline at end of file
diff --git a/play-services-fitness/build.gradle b/play-services-fitness/build.gradle
new file mode 100644
index 0000000000..600a0d69f2
--- /dev/null
+++ b/play-services-fitness/build.gradle
@@ -0,0 +1,34 @@
+plugins {
+ id 'com.android.library'
+ id 'kotlin-android'
+}
+
+android {
+ namespace "com.google.android.gms.fitness"
+
+ compileSdkVersion androidCompileSdk
+ buildToolsVersion "$androidBuildVersionTools"
+
+ buildFeatures {
+ aidl = true
+ }
+
+ defaultConfig {
+ versionName version
+ minSdkVersion androidMinSdk
+ targetSdkVersion androidTargetSdk
+ }
+
+ compileOptions {
+ sourceCompatibility = 1.8
+ targetCompatibility = 1.8
+ }
+}
+
+dependencies {
+ api project(':play-services-base')
+ api project(':play-services-base-core')
+ api project(':play-services-basement')
+
+ annotationProcessor project(':safe-parcel-processor')
+}
\ No newline at end of file
diff --git a/play-services-fitness/src/main/AndroidManifest.xml b/play-services-fitness/src/main/AndroidManifest.xml
new file mode 100644
index 0000000000..a5918e68ab
--- /dev/null
+++ b/play-services-fitness/src/main/AndroidManifest.xml
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/play-services-fitness/src/main/aidl/com/google/android/gms/fitness/internal/IDataReadCallback.aidl b/play-services-fitness/src/main/aidl/com/google/android/gms/fitness/internal/IDataReadCallback.aidl
new file mode 100644
index 0000000000..52979b5ac1
--- /dev/null
+++ b/play-services-fitness/src/main/aidl/com/google/android/gms/fitness/internal/IDataReadCallback.aidl
@@ -0,0 +1,12 @@
+/*
+ * SPDX-FileCopyrightText: 2023 microG Project Team
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+package com.google.android.gms.fitness.internal;
+
+import com.google.android.gms.fitness.request.DataReadResult;
+
+interface IDataReadCallback {
+ void onPostResult(in DataReadResult dataReadResult) = 0;
+}
\ No newline at end of file
diff --git a/play-services-fitness/src/main/aidl/com/google/android/gms/fitness/internal/IGoogleFitHistoryApi.aidl b/play-services-fitness/src/main/aidl/com/google/android/gms/fitness/internal/IGoogleFitHistoryApi.aidl
new file mode 100644
index 0000000000..3e740d3100
--- /dev/null
+++ b/play-services-fitness/src/main/aidl/com/google/android/gms/fitness/internal/IGoogleFitHistoryApi.aidl
@@ -0,0 +1,18 @@
+/*
+ * SPDX-FileCopyrightText: 2023 microG Project Team
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+package com.google.android.gms.fitness.internal;
+
+import com.google.android.gms.fitness.request.DataDeleteRequest;
+import com.google.android.gms.fitness.request.GetSyncInfoRequest;
+import com.google.android.gms.fitness.request.DataInsertRequest;
+import com.google.android.gms.fitness.request.DataReadRequest;
+
+interface IGoogleFitHistoryApi {
+ void getDeleteData(in DataDeleteRequest dataDeleteRequest) = 0;
+ void getSyncInfo(in GetSyncInfoRequest getSyncInfoRequest) = 1;
+ void getInsertData(in DataInsertRequest dataInsertRequest) = 2;
+ void getReadData(in DataReadRequest dataReadRequest) = 3;
+}
\ No newline at end of file
diff --git a/play-services-fitness/src/main/aidl/com/google/android/gms/fitness/internal/IStatusCallback.aidl b/play-services-fitness/src/main/aidl/com/google/android/gms/fitness/internal/IStatusCallback.aidl
new file mode 100644
index 0000000000..7cb6deacb0
--- /dev/null
+++ b/play-services-fitness/src/main/aidl/com/google/android/gms/fitness/internal/IStatusCallback.aidl
@@ -0,0 +1,12 @@
+/*
+ * SPDX-FileCopyrightText: 2023 microG Project Team
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+package com.google.android.gms.fitness.internal;
+
+import com.google.android.gms.common.api.Status;
+
+interface IStatusCallback {
+ void onPostResult(in Status status) = 0;
+}
\ No newline at end of file
diff --git a/play-services-fitness/src/main/aidl/com/google/android/gms/fitness/internal/ISyncInfoCallback.aidl b/play-services-fitness/src/main/aidl/com/google/android/gms/fitness/internal/ISyncInfoCallback.aidl
new file mode 100644
index 0000000000..84cb46e2fe
--- /dev/null
+++ b/play-services-fitness/src/main/aidl/com/google/android/gms/fitness/internal/ISyncInfoCallback.aidl
@@ -0,0 +1,10 @@
+/*
+ * SPDX-FileCopyrightText: 2023 microG Project Team
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+package com.google.android.gms.fitness.internal;
+
+interface ISyncInfoCallback {
+
+}
\ No newline at end of file
diff --git a/play-services-fitness/src/main/aidl/com/google/android/gms/fitness/request/DataDeleteRequest.aidl b/play-services-fitness/src/main/aidl/com/google/android/gms/fitness/request/DataDeleteRequest.aidl
new file mode 100644
index 0000000000..cd17f302dc
--- /dev/null
+++ b/play-services-fitness/src/main/aidl/com/google/android/gms/fitness/request/DataDeleteRequest.aidl
@@ -0,0 +1,8 @@
+/*
+ * SPDX-FileCopyrightText: 2023 microG Project Team
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+package com.google.android.gms.fitness.request;
+
+parcelable DataDeleteRequest;
\ No newline at end of file
diff --git a/play-services-fitness/src/main/aidl/com/google/android/gms/fitness/request/DataInsertRequest.aidl b/play-services-fitness/src/main/aidl/com/google/android/gms/fitness/request/DataInsertRequest.aidl
new file mode 100644
index 0000000000..c6a09b76a3
--- /dev/null
+++ b/play-services-fitness/src/main/aidl/com/google/android/gms/fitness/request/DataInsertRequest.aidl
@@ -0,0 +1,8 @@
+/*
+ * SPDX-FileCopyrightText: 2023 microG Project Team
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+package com.google.android.gms.fitness.request;
+
+parcelable DataInsertRequest;
\ No newline at end of file
diff --git a/play-services-fitness/src/main/aidl/com/google/android/gms/fitness/request/DataReadRequest.aidl b/play-services-fitness/src/main/aidl/com/google/android/gms/fitness/request/DataReadRequest.aidl
new file mode 100644
index 0000000000..1ed3c7bd6f
--- /dev/null
+++ b/play-services-fitness/src/main/aidl/com/google/android/gms/fitness/request/DataReadRequest.aidl
@@ -0,0 +1,8 @@
+/*
+ * SPDX-FileCopyrightText: 2023 microG Project Team
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+package com.google.android.gms.fitness.request;
+
+parcelable DataReadRequest;
\ No newline at end of file
diff --git a/play-services-fitness/src/main/aidl/com/google/android/gms/fitness/request/DataReadResult.aidl b/play-services-fitness/src/main/aidl/com/google/android/gms/fitness/request/DataReadResult.aidl
new file mode 100644
index 0000000000..4194c07da5
--- /dev/null
+++ b/play-services-fitness/src/main/aidl/com/google/android/gms/fitness/request/DataReadResult.aidl
@@ -0,0 +1,8 @@
+/*
+ * SPDX-FileCopyrightText: 2023 microG Project Team
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+package com.google.android.gms.fitness.request;
+
+parcelable DataReadResult;
\ No newline at end of file
diff --git a/play-services-fitness/src/main/aidl/com/google/android/gms/fitness/request/GetSyncInfoRequest.aidl b/play-services-fitness/src/main/aidl/com/google/android/gms/fitness/request/GetSyncInfoRequest.aidl
new file mode 100644
index 0000000000..8116103377
--- /dev/null
+++ b/play-services-fitness/src/main/aidl/com/google/android/gms/fitness/request/GetSyncInfoRequest.aidl
@@ -0,0 +1,8 @@
+/*
+ * SPDX-FileCopyrightText: 2023 microG Project Team
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+package com.google.android.gms.fitness.request;
+
+parcelable GetSyncInfoRequest;
\ No newline at end of file
diff --git a/play-services-fitness/src/main/java/com/google/android/gms/fitness/data/AppInfo.java b/play-services-fitness/src/main/java/com/google/android/gms/fitness/data/AppInfo.java
new file mode 100644
index 0000000000..b4dea5d67d
--- /dev/null
+++ b/play-services-fitness/src/main/java/com/google/android/gms/fitness/data/AppInfo.java
@@ -0,0 +1,48 @@
+/*
+ * SPDX-FileCopyrightText: 2023 microG Project Team
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+package com.google.android.gms.fitness.data;
+
+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;
+
+import org.microg.gms.utils.ToStringHelper;
+
+@SafeParcelable.Class
+public class AppInfo extends AbstractSafeParcelable {
+
+ public static final AppInfo DEFAULT = new AppInfo("com.google.android.gms");
+
+ @Field(1)
+ public String packageName;
+
+ public AppInfo() {
+ }
+
+ public AppInfo(String packageName) {
+ this.packageName = packageName;
+ }
+
+ @NonNull
+ @Override
+ public String toString() {
+ return ToStringHelper.name("AppInfo")
+ .field("packageName", packageName)
+ .end();
+ }
+
+ @Override
+ public void writeToParcel(@NonNull Parcel dest, int flags) {
+ CREATOR.writeToParcel(this, dest, flags);
+ }
+
+ public static final SafeParcelableCreatorAndWriter CREATOR = findCreator(AppInfo.class);
+
+}
diff --git a/play-services-fitness/src/main/java/com/google/android/gms/fitness/data/Bucket.java b/play-services-fitness/src/main/java/com/google/android/gms/fitness/data/Bucket.java
new file mode 100644
index 0000000000..1eaf0c49e7
--- /dev/null
+++ b/play-services-fitness/src/main/java/com/google/android/gms/fitness/data/Bucket.java
@@ -0,0 +1,60 @@
+/*
+ * SPDX-FileCopyrightText: 2023 microG Project Team
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+package com.google.android.gms.fitness.data;
+
+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;
+
+import org.microg.gms.utils.ToStringHelper;
+
+import java.util.List;
+
+@SafeParcelable.Class
+public class Bucket extends AbstractSafeParcelable {
+
+ public static final int TYPE_TIME = 1;
+ public static final int TYPE_SESSION = 2;
+ public static final int TYPE_ACTIVITY_TYPE = 3;
+ public static final int TYPE_ACTIVITY_SEGMENT = 4;
+
+ @Field(1)
+ public long startTimeMillis;
+ @Field(2)
+ public long endTimeMillis;
+ @Field(3)
+ public Session session;
+ @Field(4)
+ public int activityType;
+ @Field(5)
+ public List dataSets;
+ @Field(6)
+ public int bucketType;
+
+ @Override
+ public void writeToParcel(@NonNull Parcel dest, int flags) {
+ CREATOR.writeToParcel(this, dest, flags);
+ }
+
+ public static final SafeParcelableCreatorAndWriter CREATOR = findCreator(Bucket.class);
+
+ @NonNull
+ @Override
+ public String toString() {
+ return ToStringHelper.name("Bucket")
+ .field("startTimeMillis", startTimeMillis)
+ .field("endTimeMillis", endTimeMillis)
+ .field("session", session)
+ .field("activityType", activityType)
+ .field("dataSets", dataSets)
+ .field("bucketType", bucketType)
+ .end();
+ }
+}
diff --git a/play-services-fitness/src/main/java/com/google/android/gms/fitness/data/DataSet.java b/play-services-fitness/src/main/java/com/google/android/gms/fitness/data/DataSet.java
new file mode 100644
index 0000000000..e96d311ed6
--- /dev/null
+++ b/play-services-fitness/src/main/java/com/google/android/gms/fitness/data/DataSet.java
@@ -0,0 +1,31 @@
+/*
+ * SPDX-FileCopyrightText: 2023 microG Project Team
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+package com.google.android.gms.fitness.data;
+
+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 DataSet extends AbstractSafeParcelable {
+
+ @Field(1000)
+ public int versionCode;
+ @Field(1)
+ public DataSource dataSource;
+
+ @Override
+ public void writeToParcel(@NonNull Parcel dest, int flags) {
+ CREATOR.writeToParcel(this, dest, flags);
+ }
+
+ public static final SafeParcelableCreatorAndWriter CREATOR = findCreator(DataSet.class);
+
+}
diff --git a/play-services-fitness/src/main/java/com/google/android/gms/fitness/data/DataSource.java b/play-services-fitness/src/main/java/com/google/android/gms/fitness/data/DataSource.java
new file mode 100644
index 0000000000..93d0aa6f89
--- /dev/null
+++ b/play-services-fitness/src/main/java/com/google/android/gms/fitness/data/DataSource.java
@@ -0,0 +1,37 @@
+/*
+ * SPDX-FileCopyrightText: 2023 microG Project Team
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+package com.google.android.gms.fitness.data;
+
+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 DataSource extends AbstractSafeParcelable {
+
+ @Field(1)
+ public DataType dataType;
+ @Field(3)
+ public int type;
+ @Field(4)
+ public Device device;
+ @Field(5)
+ public AppInfo appInfo;
+ @Field(6)
+ public String info;
+
+ @Override
+ public void writeToParcel(@NonNull Parcel dest, int flags) {
+ CREATOR.writeToParcel(this, dest, flags);
+ }
+
+ public static final SafeParcelableCreatorAndWriter CREATOR = findCreator(DataSource.class);
+
+}
diff --git a/play-services-fitness/src/main/java/com/google/android/gms/fitness/data/DataType.java b/play-services-fitness/src/main/java/com/google/android/gms/fitness/data/DataType.java
new file mode 100644
index 0000000000..10cbe66472
--- /dev/null
+++ b/play-services-fitness/src/main/java/com/google/android/gms/fitness/data/DataType.java
@@ -0,0 +1,102 @@
+/*
+ * SPDX-FileCopyrightText: 2023 microG Project Team
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+package com.google.android.gms.fitness.data;
+
+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;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+@SafeParcelable.Class
+public class DataType extends AbstractSafeParcelable {
+
+ public static final DataType TYPE_STEP_COUNT_DELTA = new DataType("com.google.step_count.delta", "https://www.googleapis.com/auth/fitness.activity.read", "https://www.googleapis.com/auth/fitness.activity.write", com.google.android.gms.fitness.data.Field.FIELD_STEPS);
+ public static final DataType TYPE_STEP_COUNT_CUMULATIVE = new DataType("com.google.step_count.cumulative", "https://www.googleapis.com/auth/fitness.activity.read", "https://www.googleapis.com/auth/fitness.activity.write", com.google.android.gms.fitness.data.Field.FIELD_STEPS);
+ public static final DataType TYPE_STEP_COUNT_CADENCE = new DataType("com.google.step_count.cadence", "https://www.googleapis.com/auth/fitness.activity.read", "https://www.googleapis.com/auth/fitness.activity.write", com.google.android.gms.fitness.data.Field.FIELD_RPM);
+ public static final DataType TYPE_INTERNAL_GOAL = new DataType("com.google.internal.goal", "https://www.googleapis.com/auth/fitness.activity.read", "https://www.googleapis.com/auth/fitness.activity.write", com.google.android.gms.fitness.data.Field.FIELD_FITNESS_GOAL_V2);
+ public static final DataType TYPE_ACTIVITY_SEGMENT = new DataType("com.google.activity.segment", "https://www.googleapis.com/auth/fitness.activity.read", "https://www.googleapis.com/auth/fitness.activity.write", com.google.android.gms.fitness.data.Field.FIELD_ACTIVITY);
+ public static final DataType TYPE_SLEEP_SEGMENT = new DataType("com.google.sleep.segment", "https://www.googleapis.com/auth/fitness.sleep.read", "https://www.googleapis.com/auth/fitness.sleep.write", com.google.android.gms.fitness.data.Field.FIELD_SLEEP_SEGMENT_TYPE);
+ public static final DataType TYPE_CALORIES_EXPENDED = new DataType("com.google.calories.expended", "https://www.googleapis.com/auth/fitness.activity.read", "https://www.googleapis.com/auth/fitness.activity.write", com.google.android.gms.fitness.data.Field.FIELD_CALORIES);
+ public static final DataType TYPE_BASAL_METABOLIC_RATE = new DataType("com.google.calories.bmr", "https://www.googleapis.com/auth/fitness.activity.read", "https://www.googleapis.com/auth/fitness.activity.write", com.google.android.gms.fitness.data.Field.FIELD_CALORIES);
+ public static final DataType TYPE_POWER_SAMPLE = new DataType("com.google.power.sample", "https://www.googleapis.com/auth/fitness.activity.read", "https://www.googleapis.com/auth/fitness.activity.write", com.google.android.gms.fitness.data.Field.FIELD_WATTS);
+ public static final DataType TYPE_SENSOR_EVENTS = new DataType("com.google.sensor.events", "https://www.googleapis.com/auth/fitness.activity.read", "https://www.googleapis.com/auth/fitness.activity.write", com.google.android.gms.fitness.data.Field.FIELD_SENSOR_TYPE, com.google.android.gms.fitness.data.Field.FIELD_TIMESTAMPS, com.google.android.gms.fitness.data.Field.FIELD_SENSOR_VALUES);
+ public static final DataType TYPE_HEART_RATE_BPM = new DataType("com.google.heart_rate.bpm", "https://www.googleapis.com/auth/fitness.heart_rate.read", "https://www.googleapis.com/auth/fitness.heart_rate.write", com.google.android.gms.fitness.data.Field.FIELD_BPM);
+ public static final DataType TYPE_RESPIRATORY_RATE = new DataType("com.google.respiratory_rate", "https://www.googleapis.com/auth/fitness.respiratory_rate.read", "https://www.googleapis.com/auth/fitness.respiratory_rate.write", com.google.android.gms.fitness.data.Field.FIELD_RESPIRATORY_RATE);
+ public static final DataType TYPE_LOCATION_SAMPLE = new DataType("com.google.location.sample", "https://www.googleapis.com/auth/fitness.location.read", "https://www.googleapis.com/auth/fitness.location.write", com.google.android.gms.fitness.data.Field.FIELD_LATITUDE, com.google.android.gms.fitness.data.Field.FIELD_LONGITUDE, com.google.android.gms.fitness.data.Field.FIELD_ACCURACY, com.google.android.gms.fitness.data.Field.FIELD_ALTITUDE);
+ @Deprecated
+ public static final DataType TYPE_LOCATION_TRACK = new DataType("com.google.location.track", "https://www.googleapis.com/auth/fitness.location.read", "https://www.googleapis.com/auth/fitness.location.write", com.google.android.gms.fitness.data.Field.FIELD_LATITUDE, com.google.android.gms.fitness.data.Field.FIELD_LONGITUDE, com.google.android.gms.fitness.data.Field.FIELD_ACCURACY, com.google.android.gms.fitness.data.Field.FIELD_ALTITUDE);
+ public static final DataType TYPE_DISTANCE_DELTA = new DataType("com.google.distance.delta", "https://www.googleapis.com/auth/fitness.location.read", "https://www.googleapis.com/auth/fitness.location.write", com.google.android.gms.fitness.data.Field.FIELD_DISTANCE);
+ public static final DataType TYPE_SPEED = new DataType("com.google.speed", "https://www.googleapis.com/auth/fitness.location.read", "https://www.googleapis.com/auth/fitness.location.write", com.google.android.gms.fitness.data.Field.FIELD_SPEED);
+ public static final DataType TYPE_CYCLING_WHEEL_REVOLUTION = new DataType("com.google.cycling.wheel_revolution.cumulative", "https://www.googleapis.com/auth/fitness.location.read", "https://www.googleapis.com/auth/fitness.location.write", com.google.android.gms.fitness.data.Field.FIELD_REVOLUTIONS);
+ public static final DataType TYPE_CYCLING_WHEEL_RPM = new DataType("com.google.cycling.wheel_revolution.rpm", "https://www.googleapis.com/auth/fitness.location.read", "https://www.googleapis.com/auth/fitness.location.write", com.google.android.gms.fitness.data.Field.FIELD_RPM);
+ public static final DataType TYPE_CYCLING_PEDALING_CUMULATIVE = new DataType("com.google.cycling.pedaling.cumulative", "https://www.googleapis.com/auth/fitness.activity.read", "https://www.googleapis.com/auth/fitness.activity.write", com.google.android.gms.fitness.data.Field.FIELD_REVOLUTIONS);
+ public static final DataType TYPE_CYCLING_PEDALING_CADENCE = new DataType("com.google.cycling.pedaling.cadence", "https://www.googleapis.com/auth/fitness.activity.read", "https://www.googleapis.com/auth/fitness.activity.write", com.google.android.gms.fitness.data.Field.FIELD_RPM);
+ public static final DataType TYPE_HEIGHT = new DataType("com.google.height", "https://www.googleapis.com/auth/fitness.body.read", "https://www.googleapis.com/auth/fitness.body.write", com.google.android.gms.fitness.data.Field.FIELD_HEIGHT);
+ public static final DataType TYPE_WEIGHT = new DataType("com.google.weight", "https://www.googleapis.com/auth/fitness.body.read", "https://www.googleapis.com/auth/fitness.body.write", com.google.android.gms.fitness.data.Field.FIELD_WEIGHT);
+ public static final DataType TYPE_BODY_FAT_PERCENTAGE = new DataType("com.google.body.fat.percentage", "https://www.googleapis.com/auth/fitness.body.read", "https://www.googleapis.com/auth/fitness.body.write", com.google.android.gms.fitness.data.Field.FIELD_PERCENTAGE);
+ public static final DataType TYPE_NUTRITION = new DataType("com.google.nutrition", "https://www.googleapis.com/auth/fitness.nutrition.read", "https://www.googleapis.com/auth/fitness.nutrition.write", com.google.android.gms.fitness.data.Field.FIELD_NUTRIENTS, com.google.android.gms.fitness.data.Field.FIELD_MEAL_TYPE, com.google.android.gms.fitness.data.Field.FIELD_FOOD_ITEM);
+ public static final DataType AGGREGATE_HYDRATION = new DataType("com.google.hydration", "https://www.googleapis.com/auth/fitness.nutrition.read", "https://www.googleapis.com/auth/fitness.nutrition.write", com.google.android.gms.fitness.data.Field.FIELD_VOLUME);
+ public static final DataType TYPE_WORKOUT_EXERCISE = new DataType("com.google.activity.exercise", "https://www.googleapis.com/auth/fitness.activity.read", "https://www.googleapis.com/auth/fitness.activity.write", com.google.android.gms.fitness.data.Field.FIELD_EXERCISE, com.google.android.gms.fitness.data.Field.FIELD_REPETITIONS, com.google.android.gms.fitness.data.Field.FIELD_DURATION_OPTIONAL, com.google.android.gms.fitness.data.Field.FIELD_RESISTANCE_TYPE, com.google.android.gms.fitness.data.Field.FIELD_RESISTANCE);
+ public static final DataType TYPE_MOVE_MINUTES = new DataType("com.google.active_minutes", "https://www.googleapis.com/auth/fitness.activity.read", "https://www.googleapis.com/auth/fitness.activity.write", com.google.android.gms.fitness.data.Field.FIELD_DURATION);
+ public static final DataType AGGREGATE_MOVE_MINUTES = TYPE_MOVE_MINUTES;
+ public static final DataType TYPE_DEVICE_ON_BODY = new DataType("com.google.device_on_body", "https://www.googleapis.com/auth/fitness.activity.read", "https://www.googleapis.com/auth/fitness.activity.write", com.google.android.gms.fitness.data.Field.FIELD_PROBABILITY);
+ public static final DataType AGGREGATE_ACTIVITY_SUMMARY = new DataType("com.google.activity.summary", "https://www.googleapis.com/auth/fitness.activity.read", "https://www.googleapis.com/auth/fitness.activity.write", com.google.android.gms.fitness.data.Field.FIELD_ACTIVITY, com.google.android.gms.fitness.data.Field.FIELD_DURATION, com.google.android.gms.fitness.data.Field.FIELD_NUM_SEGMENTS);
+ public static final DataType AGGREGATE_BASAL_METABOLIC_RATE_SUMMARY = new DataType("com.google.calories.bmr.summary", "https://www.googleapis.com/auth/fitness.activity.read", "https://www.googleapis.com/auth/fitness.activity.write", com.google.android.gms.fitness.data.Field.FIELD_AVERAGE, com.google.android.gms.fitness.data.Field.FIELD_MAX, com.google.android.gms.fitness.data.Field.FIELD_MIN);
+ public static final DataType AGGREGATE_STEP_COUNT_DELTA = TYPE_STEP_COUNT_DELTA;
+ public static final DataType AGGREGATE_DISTANCE_DELTA = TYPE_DISTANCE_DELTA;
+ public static final DataType AGGREGATE_CALORIES_EXPENDED = TYPE_CALORIES_EXPENDED;
+ public static final DataType TYPE_HEART_POINTS = new DataType("com.google.heart_minutes", "https://www.googleapis.com/auth/fitness.activity.read", "https://www.googleapis.com/auth/fitness.activity.write", com.google.android.gms.fitness.data.Field.FIELD_INTENSITY);
+ public static final DataType AGGREGATE_HEART_POINTS = new DataType("com.google.heart_minutes.summary", "https://www.googleapis.com/auth/fitness.activity.read", "https://www.googleapis.com/auth/fitness.activity.write", com.google.android.gms.fitness.data.Field.FIELD_INTENSITY, com.google.android.gms.fitness.data.Field.FIELD_DURATION);
+ public static final DataType AGGREGATE_HEART_RATE_SUMMARY = new DataType("com.google.heart_rate.summary", "https://www.googleapis.com/auth/fitness.heart_rate.read", "https://www.googleapis.com/auth/fitness.heart_rate.write", com.google.android.gms.fitness.data.Field.FIELD_AVERAGE, com.google.android.gms.fitness.data.Field.FIELD_MAX, com.google.android.gms.fitness.data.Field.FIELD_MIN);
+ public static final DataType AGGREGATE_LOCATION_BOUNDING_BOX = new DataType("com.google.location.bounding_box", "https://www.googleapis.com/auth/fitness.location.read", "https://www.googleapis.com/auth/fitness.location.write", com.google.android.gms.fitness.data.Field.FIELD_LOW_LATITUDE, com.google.android.gms.fitness.data.Field.FIELD_LOW_LONGITUDE, com.google.android.gms.fitness.data.Field.FIELD_HIGH_LATITUDE, com.google.android.gms.fitness.data.Field.FIELD_HIGH_LONGITUDE);
+ public static final DataType AGGREGATE_POWER_SUMMARY = new DataType("com.google.power.summary", "https://www.googleapis.com/auth/fitness.activity.read", "https://www.googleapis.com/auth/fitness.activity.write", com.google.android.gms.fitness.data.Field.FIELD_AVERAGE, com.google.android.gms.fitness.data.Field.FIELD_MAX, com.google.android.gms.fitness.data.Field.FIELD_MIN);
+ public static final DataType AGGREGATE_SPEED_SUMMARY = new DataType("com.google.speed.summary", "https://www.googleapis.com/auth/fitness.location.read", "https://www.googleapis.com/auth/fitness.location.write", com.google.android.gms.fitness.data.Field.FIELD_AVERAGE, com.google.android.gms.fitness.data.Field.FIELD_MAX, com.google.android.gms.fitness.data.Field.FIELD_MIN);
+ public static final DataType AGGREGATE_BODY_FAT_PERCENTAGE_SUMMARY = new DataType("com.google.body.fat.percentage.summary", "https://www.googleapis.com/auth/fitness.body.read", "https://www.googleapis.com/auth/fitness.body.write", com.google.android.gms.fitness.data.Field.FIELD_AVERAGE, com.google.android.gms.fitness.data.Field.FIELD_MAX, com.google.android.gms.fitness.data.Field.FIELD_MIN);
+ public static final DataType AGGREGATE_WEIGHT_SUMMARY = new DataType("com.google.weight.summary", "https://www.googleapis.com/auth/fitness.body.read", "https://www.googleapis.com/auth/fitness.body.write", com.google.android.gms.fitness.data.Field.FIELD_AVERAGE, com.google.android.gms.fitness.data.Field.FIELD_MAX, com.google.android.gms.fitness.data.Field.FIELD_MIN);
+ public static final DataType AGGREGATE_HEIGHT_SUMMARY = new DataType("com.google.height.summary", "https://www.googleapis.com/auth/fitness.body.read", "https://www.googleapis.com/auth/fitness.body.write", com.google.android.gms.fitness.data.Field.FIELD_AVERAGE, com.google.android.gms.fitness.data.Field.FIELD_MAX, com.google.android.gms.fitness.data.Field.FIELD_MIN);
+ public static final DataType AGGREGATE_NUTRITION_SUMMARY = new DataType("com.google.nutrition.summary", "https://www.googleapis.com/auth/fitness.nutrition.read", "https://www.googleapis.com/auth/fitness.nutrition.write", com.google.android.gms.fitness.data.Field.FIELD_NUTRIENTS, com.google.android.gms.fitness.data.Field.FIELD_MEAL_TYPE);
+ public static final DataType TYPE_HYDRATION = AGGREGATE_HYDRATION;
+ public static final DataType TYPE_WORKOUT_SAMPLES = new DataType("com.google.activity.samples", "https://www.googleapis.com/auth/fitness.activity.read", "https://www.googleapis.com/auth/fitness.activity.write", com.google.android.gms.fitness.data.Field.FIELD_ACTIVITY_CONFIDENCE);
+ public static final DataType TYPE_SLEEP_ATTRIBUTES = new DataType("com.google.internal.sleep_attributes", "https://www.googleapis.com/auth/fitness.sleep.read", "https://www.googleapis.com/auth/fitness.sleep.write", com.google.android.gms.fitness.data.Field.FIELD_FITNESS_SLEEP_ATTRIBUTES);
+ public static final DataType TYPE_SLEEP_SCHEDULE = new DataType("com.google.internal.sleep_schedule", "https://www.googleapis.com/auth/fitness.sleep.read", "https://www.googleapis.com/auth/fitness.sleep.write", com.google.android.gms.fitness.data.Field.FIELD_FITNESS_SLEEP_SCHEDULE);
+ public static final DataType TYPE_PACED_WALKING_ATTRIBUTES = new DataType("com.google.internal.paced_walking_attributes", "https://www.googleapis.com/auth/fitness.activity.read", "https://www.googleapis.com/auth/fitness.activity.write", com.google.android.gms.fitness.data.Field.FIELD_FITNESS_PACED_WALKING_ATTRIBUTES);
+ public static final DataType TYPE_TIME_ZONE_CHANGE = new DataType("com.google.time_zone_change", "https://www.googleapis.com/auth/fitness.location.read", "https://www.googleapis.com/auth/fitness.location.write", com.google.android.gms.fitness.data.Field.FIELD_ZONE_ID);
+ public static final DataType TYPE_MET = new DataType("com.google.internal.met", "https://www.googleapis.com/auth/fitness.location.read", "https://www.googleapis.com/auth/fitness.location.write", com.google.android.gms.fitness.data.Field.FIELD_MET);
+
+ @Field(1)
+ public String packageName;
+ @Field(2)
+ public List fields;
+ @Field(3)
+ public String name;
+ @Field(4)
+ public String value;
+
+ public DataType(String packageName, String name, String value, com.google.android.gms.fitness.data.Field... fieldArr) {
+ this.packageName = packageName;
+ this.fields = Collections.unmodifiableList(Arrays.asList(fieldArr));
+ this.name = name;
+ this.value = value;
+ }
+
+ public DataType() {
+ }
+
+ @Override
+ public void writeToParcel(@NonNull Parcel dest, int flags) {
+ CREATOR.writeToParcel(this, dest, flags);
+ }
+
+ public static final SafeParcelableCreatorAndWriter CREATOR = findCreator(DataType.class);
+
+}
diff --git a/play-services-fitness/src/main/java/com/google/android/gms/fitness/data/Device.java b/play-services-fitness/src/main/java/com/google/android/gms/fitness/data/Device.java
new file mode 100644
index 0000000000..558569cde7
--- /dev/null
+++ b/play-services-fitness/src/main/java/com/google/android/gms/fitness/data/Device.java
@@ -0,0 +1,35 @@
+/*
+ * SPDX-FileCopyrightText: 2023 microG Project Team
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+package com.google.android.gms.fitness.data;
+
+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 Device extends AbstractSafeParcelable {
+
+ @Field(1)
+ public String manufacturer;
+ @Field(2)
+ public String model;
+ @Field(4)
+ public String uid;
+ @Field(5)
+ public int type;
+
+ @Override
+ public void writeToParcel(@NonNull Parcel dest, int flags) {
+ CREATOR.writeToParcel(this, dest, flags);
+ }
+
+ public static final SafeParcelableCreatorAndWriter CREATOR = findCreator(Device.class);
+
+}
diff --git a/play-services-fitness/src/main/java/com/google/android/gms/fitness/data/Field.java b/play-services-fitness/src/main/java/com/google/android/gms/fitness/data/Field.java
new file mode 100644
index 0000000000..a8b951a1d6
--- /dev/null
+++ b/play-services-fitness/src/main/java/com/google/android/gms/fitness/data/Field.java
@@ -0,0 +1,152 @@
+/*
+ * SPDX-FileCopyrightText: 2023 microG Project Team
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+package com.google.android.gms.fitness.data;
+
+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 Field extends AbstractSafeParcelable {
+
+ public static final com.google.android.gms.fitness.data.Field FIELD_ACTIVITY = formatIntField("activity");
+ public static final com.google.android.gms.fitness.data.Field FIELD_SLEEP_SEGMENT_TYPE = formatIntField("sleep_segment_type");
+ public static final com.google.android.gms.fitness.data.Field FIELD_CONFIDENCE = formatFloatField("confidence");
+ public static final com.google.android.gms.fitness.data.Field FIELD_STEPS = formatIntField("steps");
+ @Deprecated
+ public static final com.google.android.gms.fitness.data.Field FIELD_STEP_LENGTH = formatFloatField("step_length");
+ public static final com.google.android.gms.fitness.data.Field FIELD_DURATION = formatIntField("duration");
+ public static final com.google.android.gms.fitness.data.Field FIELD_DURATION_OPTIONAL = formatIntOptionalField("duration");
+ public static final com.google.android.gms.fitness.data.Field FIELD_ACTIVITY_DURATION_ASCENDING = formatMapField("activity_duration.ascending");
+ public static final com.google.android.gms.fitness.data.Field FIELD_ACTIVITY_DURATION_DESCENDING = formatMapField("activity_duration.descending");
+ public static final com.google.android.gms.fitness.data.Field FIELD_BPM = formatFloatField("bpm");
+ public static final com.google.android.gms.fitness.data.Field FIELD_RESPIRATORY_RATE = formatFloatField("respiratory_rate");
+ public static final com.google.android.gms.fitness.data.Field FIELD_LATITUDE = formatFloatField("latitude");
+ public static final com.google.android.gms.fitness.data.Field FIELD_LONGITUDE = formatFloatField("longitude");
+ public static final com.google.android.gms.fitness.data.Field FIELD_ACCURACY = formatFloatField("accuracy");
+ public static final com.google.android.gms.fitness.data.Field FIELD_ALTITUDE = formatFloatOptionalField("altitude");
+ public static final com.google.android.gms.fitness.data.Field FIELD_DISTANCE = formatFloatField("distance");
+ public static final com.google.android.gms.fitness.data.Field FIELD_HEIGHT = formatFloatField("height");
+ public static final com.google.android.gms.fitness.data.Field FIELD_WEIGHT = formatFloatField("weight");
+ public static final com.google.android.gms.fitness.data.Field FIELD_PERCENTAGE = formatFloatField("percentage");
+ public static final com.google.android.gms.fitness.data.Field FIELD_SPEED = formatFloatField("speed");
+ public static final com.google.android.gms.fitness.data.Field FIELD_RPM = formatFloatField("rpm");
+ public static final com.google.android.gms.fitness.data.Field FIELD_FITNESS_GOAL_V2 = formatObjectField("google.android.fitness.GoalV2");
+ public static final com.google.android.gms.fitness.data.Field FIELD_FITNESS_DEVICE = formatObjectField("google.android.fitness.Device");
+ public static final com.google.android.gms.fitness.data.Field FIELD_REVOLUTIONS = formatIntField("revolutions");
+ public static final com.google.android.gms.fitness.data.Field FIELD_CALORIES = formatFloatField("calories");
+ public static final com.google.android.gms.fitness.data.Field FIELD_WATTS = formatFloatField("watts");
+ public static final com.google.android.gms.fitness.data.Field FIELD_VOLUME = formatFloatField("volume");
+ public static final com.google.android.gms.fitness.data.Field FIELD_MEAL_TYPE = formatIntOptionalField("meal_type");
+ public static final com.google.android.gms.fitness.data.Field FIELD_FOOD_ITEM = formatStringOptionalField("food_item");
+ public static final com.google.android.gms.fitness.data.Field FIELD_NUTRIENTS = formatMapField("nutrients");
+ public static final com.google.android.gms.fitness.data.Field FIELD_EXERCISE = formatStringField("exercise");
+ public static final com.google.android.gms.fitness.data.Field FIELD_REPETITIONS = formatIntOptionalField("repetitions");
+ public static final com.google.android.gms.fitness.data.Field FIELD_RESISTANCE = formatFloatOptionalField("resistance");
+ public static final com.google.android.gms.fitness.data.Field FIELD_RESISTANCE_TYPE = formatIntOptionalField("resistance_type");
+ public static final com.google.android.gms.fitness.data.Field FIELD_NUM_SEGMENTS = formatIntField("num_segments");
+ public static final com.google.android.gms.fitness.data.Field FIELD_AVERAGE = formatFloatField("average");
+ public static final com.google.android.gms.fitness.data.Field FIELD_MAX = formatFloatField("max");
+ public static final com.google.android.gms.fitness.data.Field FIELD_MIN = formatFloatField("min");
+ public static final com.google.android.gms.fitness.data.Field FIELD_LOW_LATITUDE = formatFloatField("low_latitude");
+ public static final com.google.android.gms.fitness.data.Field FIELD_LOW_LONGITUDE = formatFloatField("low_longitude");
+ public static final com.google.android.gms.fitness.data.Field FIELD_HIGH_LATITUDE = formatFloatField("high_latitude");
+ public static final com.google.android.gms.fitness.data.Field FIELD_HIGH_LONGITUDE = formatFloatField("high_longitude");
+ public static final com.google.android.gms.fitness.data.Field FIELD_OCCURRENCES = formatIntField("occurrences");
+ public static final com.google.android.gms.fitness.data.Field FIELD_SENSOR_TYPE = formatIntField("sensor_type");
+ public static final com.google.android.gms.fitness.data.Field FIELD_TIMESTAMPS = formatLongField("timestamps");
+ public static final com.google.android.gms.fitness.data.Field FIELD_SENSOR_VALUES = formatDoubleField("sensor_values");
+ public static final com.google.android.gms.fitness.data.Field FIELD_INTENSITY = formatFloatField("intensity");
+ public static final com.google.android.gms.fitness.data.Field FIELD_ACTIVITY_CONFIDENCE = formatMapField("activity_confidence");
+ public static final com.google.android.gms.fitness.data.Field FIELD_PROBABILITY = formatFloatField("probability");
+ public static final com.google.android.gms.fitness.data.Field FIELD_FITNESS_SLEEP_ATTRIBUTES = formatObjectField("google.android.fitness.SleepAttributes");
+ public static final com.google.android.gms.fitness.data.Field FIELD_FITNESS_SLEEP_SCHEDULE = formatObjectField("google.android.fitness.SleepSchedule");
+ @Deprecated
+ public static final com.google.android.gms.fitness.data.Field FIELD_CIRCUMFERENCE = formatFloatField("circumference");
+ public static final com.google.android.gms.fitness.data.Field FIELD_FITNESS_PACED_WALKING_ATTRIBUTES = formatObjectField("google.android.fitness.PacedWalkingAttributes");
+ public static final com.google.android.gms.fitness.data.Field FIELD_ZONE_ID = formatStringField("zone_id");
+ public static final com.google.android.gms.fitness.data.Field FIELD_MET = formatFloatField("met");
+
+ public static final int FORMAT_INT32 = 1;
+ public static final int FORMAT_FLOAT = 2;
+ public static final int FORMAT_STRING = 3;
+ public static final int FORMAT_MAP = 4;
+ public static final int FORMAT_LONG = 5;
+ public static final int FORMAT_DOUBLE = 6;
+ public static final int FORMAT_OBJECT = 7;
+
+ @Field(1)
+ public String name;
+ @Field(2)
+ public int format;
+ @Field(3)
+ public Boolean optional;
+
+ public Field() {
+ }
+
+ public Field(String name, int format, Boolean optional) {
+ this.name = name;
+ this.format = format;
+ this.optional = optional;
+ }
+
+ public Field(String name, int format) {
+ this(name, format, null);
+ }
+
+ public static com.google.android.gms.fitness.data.Field formatIntField(String name) {
+ return new com.google.android.gms.fitness.data.Field(name, FORMAT_INT32);
+ }
+
+ public static com.google.android.gms.fitness.data.Field formatFloatField(String name) {
+ return new com.google.android.gms.fitness.data.Field(name, FORMAT_FLOAT);
+ }
+
+ public static com.google.android.gms.fitness.data.Field formatStringField(String name) {
+ return new com.google.android.gms.fitness.data.Field(name, FORMAT_STRING);
+ }
+
+ public static com.google.android.gms.fitness.data.Field formatMapField(String name) {
+ return new com.google.android.gms.fitness.data.Field(name, FORMAT_MAP);
+ }
+
+ public static com.google.android.gms.fitness.data.Field formatLongField(String name) {
+ return new com.google.android.gms.fitness.data.Field(name, FORMAT_LONG);
+ }
+
+ public static com.google.android.gms.fitness.data.Field formatDoubleField(String name) {
+ return new com.google.android.gms.fitness.data.Field(name, FORMAT_DOUBLE);
+ }
+
+ public static com.google.android.gms.fitness.data.Field formatObjectField(String name) {
+ return new com.google.android.gms.fitness.data.Field(name, FORMAT_OBJECT);
+ }
+
+ public static com.google.android.gms.fitness.data.Field formatIntOptionalField(String name) {
+ return new com.google.android.gms.fitness.data.Field(name, FORMAT_INT32, true);
+ }
+
+ public static com.google.android.gms.fitness.data.Field formatFloatOptionalField(String name) {
+ return new com.google.android.gms.fitness.data.Field(name, FORMAT_FLOAT, true);
+ }
+
+ public static com.google.android.gms.fitness.data.Field formatStringOptionalField(String name) {
+ return new com.google.android.gms.fitness.data.Field(name, FORMAT_STRING, true);
+ }
+
+ @Override
+ public void writeToParcel(@NonNull Parcel dest, int flags) {
+ CREATOR.writeToParcel(this, dest, flags);
+ }
+
+ public static final SafeParcelableCreatorAndWriter CREATOR = findCreator(com.google.android.gms.fitness.data.Field.class);
+
+}
diff --git a/play-services-fitness/src/main/java/com/google/android/gms/fitness/data/Session.java b/play-services-fitness/src/main/java/com/google/android/gms/fitness/data/Session.java
new file mode 100644
index 0000000000..33132cb9b3
--- /dev/null
+++ b/play-services-fitness/src/main/java/com/google/android/gms/fitness/data/Session.java
@@ -0,0 +1,24 @@
+/*
+ * SPDX-FileCopyrightText: 2023 microG Project Team
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+package com.google.android.gms.fitness.data;
+
+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 Session extends AbstractSafeParcelable {
+ @Override
+ public void writeToParcel(@NonNull Parcel dest, int flags) {
+ CREATOR.writeToParcel(this, dest, flags);
+ }
+
+ public static final SafeParcelableCreatorAndWriter CREATOR = findCreator(Session.class);
+}
diff --git a/play-services-fitness/src/main/java/com/google/android/gms/fitness/request/DataDeleteRequest.java b/play-services-fitness/src/main/java/com/google/android/gms/fitness/request/DataDeleteRequest.java
new file mode 100644
index 0000000000..56f22e2522
--- /dev/null
+++ b/play-services-fitness/src/main/java/com/google/android/gms/fitness/request/DataDeleteRequest.java
@@ -0,0 +1,70 @@
+/*
+ * SPDX-FileCopyrightText: 2023 microG Project Team
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+package com.google.android.gms.fitness.request;
+
+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;
+import com.google.android.gms.fitness.data.DataSource;
+import com.google.android.gms.fitness.data.DataType;
+import com.google.android.gms.fitness.data.Session;
+import com.google.android.gms.fitness.internal.IStatusCallback;
+
+import org.microg.gms.utils.ToStringHelper;
+
+import java.util.List;
+
+@SafeParcelable.Class
+public class DataDeleteRequest extends AbstractSafeParcelable {
+ @Field(1)
+ public long startTimeMillis;
+ @Field(2)
+ public long endTimeMillis;
+ @Field(3)
+ public List dataSources;
+ @Field(4)
+ public List dataTypes;
+ @Field(5)
+ public List sessions;
+ @Field(6)
+ public boolean deleteAllData;
+ @Field(7)
+ public boolean deleteAllSessions;
+ @Field(8)
+ public IStatusCallback callback;
+ @Field(10)
+ public boolean deleteByTimeRange;
+ @Field(11)
+ public boolean enableLocationCleanup;
+
+ @NonNull
+ @Override
+ public String toString() {
+ return ToStringHelper.name("DataDeleteRequest")
+ .field("startTimeMillis", startTimeMillis)
+ .field("endTimeMillis", endTimeMillis)
+ .field("dataSources", dataSources)
+ .field("dataTypes", dataTypes)
+ .field("sessions", sessions)
+ .field("deleteAllData", deleteAllData)
+ .field("deleteAllSessions", deleteAllSessions)
+ .field("callback", callback)
+ .field("deleteByTimeRange", deleteByTimeRange)
+ .field("enableLocationCleanup", enableLocationCleanup)
+ .end();
+ }
+
+ @Override
+ public void writeToParcel(@NonNull Parcel dest, int flags) {
+ CREATOR.writeToParcel(this, dest, flags);
+ }
+
+ public static final SafeParcelableCreatorAndWriter CREATOR = findCreator(DataDeleteRequest.class);
+}
diff --git a/play-services-fitness/src/main/java/com/google/android/gms/fitness/request/DataInsertRequest.java b/play-services-fitness/src/main/java/com/google/android/gms/fitness/request/DataInsertRequest.java
new file mode 100644
index 0000000000..504dd0c487
--- /dev/null
+++ b/play-services-fitness/src/main/java/com/google/android/gms/fitness/request/DataInsertRequest.java
@@ -0,0 +1,34 @@
+/*
+ * SPDX-FileCopyrightText: 2023 microG Project Team
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+package com.google.android.gms.fitness.request;
+
+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;
+import com.google.android.gms.fitness.data.DataSet;
+import com.google.android.gms.fitness.internal.IStatusCallback;
+
+@SafeParcelable.Class
+public class DataInsertRequest extends AbstractSafeParcelable {
+ @Field(1)
+ public DataSet dataSet;
+ @Field(2)
+ public IStatusCallback callback;
+ @Field(4)
+ public boolean isPrimary;
+
+ @Override
+ public void writeToParcel(@NonNull Parcel dest, int flags) {
+ CREATOR.writeToParcel(this, dest, flags);
+ }
+
+ public static final SafeParcelableCreatorAndWriter CREATOR = findCreator(DataInsertRequest.class);
+
+}
diff --git a/play-services-fitness/src/main/java/com/google/android/gms/fitness/request/DataReadRequest.java b/play-services-fitness/src/main/java/com/google/android/gms/fitness/request/DataReadRequest.java
new file mode 100644
index 0000000000..513f9e73ea
--- /dev/null
+++ b/play-services-fitness/src/main/java/com/google/android/gms/fitness/request/DataReadRequest.java
@@ -0,0 +1,59 @@
+/*
+ * SPDX-FileCopyrightText: 2023 microG Project Team
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+package com.google.android.gms.fitness.request;
+
+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;
+import com.google.android.gms.fitness.data.DataSource;
+
+import com.google.android.gms.fitness.data.DataType;
+import com.google.android.gms.fitness.internal.IDataReadCallback;
+
+import java.util.List;
+
+@SafeParcelable.Class
+public class DataReadRequest extends AbstractSafeParcelable {
+
+ @Field(1)
+ public List dataTypes;
+ @Field(2)
+ public List dataSources;
+ @Field(3)
+ public long startTimeMillis;
+ @Field(4)
+ public long endTimeMillis;
+ @Field(5)
+ public List aggregatedDataTypes;
+ @Field(6)
+ public List aggregatedDataSources;
+ @Field(7)
+ public int bucketType;
+ @Field(8)
+ public long bucketDurationMillis;
+ @Field(9)
+ public DataSource activityDataSource;
+ @Field(10)
+ public int limit;
+ @Field(12)
+ public boolean flushBufferBeforeRead;
+ @Field(13)
+ public boolean areServerQueriesEnabled;
+ @Field(14)
+ public IDataReadCallback callback;
+
+ @Override
+ public void writeToParcel(@NonNull Parcel dest, int flags) {
+ CREATOR.writeToParcel(this, dest, flags);
+ }
+
+ public static final SafeParcelableCreatorAndWriter CREATOR = findCreator(DataReadRequest.class);
+
+}
diff --git a/play-services-fitness/src/main/java/com/google/android/gms/fitness/request/DataReadResult.java b/play-services-fitness/src/main/java/com/google/android/gms/fitness/request/DataReadResult.java
new file mode 100644
index 0000000000..dd091a6543
--- /dev/null
+++ b/play-services-fitness/src/main/java/com/google/android/gms/fitness/request/DataReadResult.java
@@ -0,0 +1,42 @@
+/*
+ * SPDX-FileCopyrightText: 2023 microG Project Team
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+package com.google.android.gms.fitness.request;
+
+import android.os.Parcel;
+
+import androidx.annotation.NonNull;
+
+import com.google.android.gms.common.api.Status;
+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;
+import com.google.android.gms.fitness.data.Bucket;
+import com.google.android.gms.fitness.data.DataSet;
+
+import java.util.List;
+
+@SafeParcelable.Class
+public class DataReadResult extends AbstractSafeParcelable {
+
+ @Field(1)
+ public List rawDataSets;
+ @Field(2)
+ public Status status;
+ @Field(3)
+ public List rawBuckets;
+ @Field(5)
+ public int batchCount;
+ @Field(6)
+ public List uniqueDataSources;
+
+ @Override
+ public void writeToParcel(@NonNull Parcel dest, int flags) {
+ CREATOR.writeToParcel(this, dest, flags);
+ }
+
+ public static final SafeParcelableCreatorAndWriter CREATOR = findCreator(DataReadResult.class);
+
+}
diff --git a/play-services-fitness/src/main/java/com/google/android/gms/fitness/request/GetSyncInfoRequest.java b/play-services-fitness/src/main/java/com/google/android/gms/fitness/request/GetSyncInfoRequest.java
new file mode 100644
index 0000000000..1954dc4fb3
--- /dev/null
+++ b/play-services-fitness/src/main/java/com/google/android/gms/fitness/request/GetSyncInfoRequest.java
@@ -0,0 +1,30 @@
+/*
+ * SPDX-FileCopyrightText: 2023 microG Project Team
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+package com.google.android.gms.fitness.request;
+
+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;
+import com.google.android.gms.fitness.internal.ISyncInfoCallback;
+
+@SafeParcelable.Class
+public class GetSyncInfoRequest extends AbstractSafeParcelable {
+
+ @Field(1)
+ public ISyncInfoCallback callback;
+
+ @Override
+ public void writeToParcel(@NonNull Parcel dest, int flags) {
+ CREATOR.writeToParcel(this, dest, flags);
+ }
+
+ public static final SafeParcelableCreatorAndWriter CREATOR = findCreator(GetSyncInfoRequest.class);
+}
+
diff --git a/settings.gradle b/settings.gradle
index 8da636b3a1..0c2ee077ef 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -59,6 +59,7 @@ include ':play-services-tasks'
include ':play-services-vision'
include ':play-services-vision-common'
include ':play-services-wearable'
+include ':play-services-fitness'
include ':play-services-api'
include ':play-services'