diff --git a/play-services-api/src/main/aidl/com/google/android/gms/semanticlocationhistory/DeletionRange.aidl b/play-services-api/src/main/aidl/com/google/android/gms/semanticlocationhistory/DeletionRange.aidl new file mode 100644 index 0000000000..8f30de2272 --- /dev/null +++ b/play-services-api/src/main/aidl/com/google/android/gms/semanticlocationhistory/DeletionRange.aidl @@ -0,0 +1,7 @@ +/* + * SPDX-FileCopyrightText: 2025 microG Project Team + * SPDX-License-Identifier: Apache-2.0 + */ +package com.google.android.gms.semanticlocationhistory; + +parcelable DeletionRange; diff --git a/play-services-api/src/main/aidl/com/google/android/gms/semanticlocationhistory/ExperimentVisitsResponse.aidl b/play-services-api/src/main/aidl/com/google/android/gms/semanticlocationhistory/ExperimentVisitsResponse.aidl new file mode 100644 index 0000000000..0445e86ee3 --- /dev/null +++ b/play-services-api/src/main/aidl/com/google/android/gms/semanticlocationhistory/ExperimentVisitsResponse.aidl @@ -0,0 +1,7 @@ +/* + * SPDX-FileCopyrightText: 2025 microG Project Team + * SPDX-License-Identifier: Apache-2.0 + */ +package com.google.android.gms.semanticlocationhistory; + +parcelable ExperimentVisitsResponse; diff --git a/play-services-api/src/main/aidl/com/google/android/gms/semanticlocationhistory/LocationHistorySettings.aidl b/play-services-api/src/main/aidl/com/google/android/gms/semanticlocationhistory/LocationHistorySettings.aidl new file mode 100644 index 0000000000..89b27f93b2 --- /dev/null +++ b/play-services-api/src/main/aidl/com/google/android/gms/semanticlocationhistory/LocationHistorySettings.aidl @@ -0,0 +1,7 @@ +/* + * SPDX-FileCopyrightText: 2025 microG Project Team + * SPDX-License-Identifier: Apache-2.0 + */ +package com.google.android.gms.semanticlocationhistory; + +parcelable LocationHistorySettings; diff --git a/play-services-api/src/main/aidl/com/google/android/gms/semanticlocationhistory/internal/ISemanticLocationHistoryCallbacks.aidl b/play-services-api/src/main/aidl/com/google/android/gms/semanticlocationhistory/internal/ISemanticLocationHistoryCallbacks.aidl index 18784fe087..e911e50eaa 100644 --- a/play-services-api/src/main/aidl/com/google/android/gms/semanticlocationhistory/internal/ISemanticLocationHistoryCallbacks.aidl +++ b/play-services-api/src/main/aidl/com/google/android/gms/semanticlocationhistory/internal/ISemanticLocationHistoryCallbacks.aidl @@ -9,6 +9,9 @@ import com.google.android.gms.common.api.Status; import com.google.android.gms.common.data.DataHolder; import com.google.android.gms.semanticlocationhistory.InferredPlace; import com.google.android.gms.semanticlocationhistory.UserLocationProfile; +import com.google.android.gms.semanticlocationhistory.ExperimentVisitsResponse; +import com.google.android.gms.semanticlocationhistory.LocationHistorySettings; +import com.google.android.gms.common.api.ApiMetadata; interface ISemanticLocationHistoryCallbacks { void onSegmentsReturn(in DataHolder dataHolder) = 4; @@ -18,4 +21,6 @@ interface ISemanticLocationHistoryCallbacks { void onGetInferredHomeReturn(in Status status, in InferredPlace inferredPlace) = 1; void onGetInferredWorkReturn(in Status status, in InferredPlace inferredPlace) = 2; void onGetUserLocationProfileReturn(in Status status, in UserLocationProfile userLocationProfile) = 6; + void onExperimentVisitsReturn(in Status status, in ExperimentVisitsResponse experimentVisitsResponse, in ApiMetadata apiMetadata) = 8; + void onLocationHistorySettingsReturn(in Status status, in LocationHistorySettings locationHistorySettings, in ApiMetadata apiMetadata) = 9; } \ No newline at end of file diff --git a/play-services-api/src/main/aidl/com/google/android/gms/semanticlocationhistory/internal/ISemanticLocationHistoryService.aidl b/play-services-api/src/main/aidl/com/google/android/gms/semanticlocationhistory/internal/ISemanticLocationHistoryService.aidl index 8377cc188c..caa348f142 100644 --- a/play-services-api/src/main/aidl/com/google/android/gms/semanticlocationhistory/internal/ISemanticLocationHistoryService.aidl +++ b/play-services-api/src/main/aidl/com/google/android/gms/semanticlocationhistory/internal/ISemanticLocationHistoryService.aidl @@ -22,4 +22,6 @@ interface ISemanticLocationHistoryService { void getUserLocationProfile(in IStatusCallback callback, in ApiMetadata apiMetadata, in RequestCredentials requestCredentials) = 7; void getBackupSummary(in IStatusCallback callback, in ApiMetadata apiMetadata, in RequestCredentials requestCredentials) = 8; void deleteBackups(in IStatusCallback callback, in RequestCredentials requestCredentials, in List list, in ApiMetadata apiMetadata) = 9; + void getLocationHistorySettingsOperation(in ISemanticLocationHistoryCallbacks callback, in RequestCredentials requestCredentials, in ApiMetadata apiMetadata) = 10; + void getExperimentVisits(in ISemanticLocationHistoryCallbacks callback, in RequestCredentials requestCredentials, in ApiMetadata apiMetadata) = 11; } \ No newline at end of file diff --git a/play-services-api/src/main/java/com/google/android/gms/semanticlocationhistory/DeletionRange.java b/play-services-api/src/main/java/com/google/android/gms/semanticlocationhistory/DeletionRange.java new file mode 100644 index 0000000000..22f857a194 --- /dev/null +++ b/play-services-api/src/main/java/com/google/android/gms/semanticlocationhistory/DeletionRange.java @@ -0,0 +1,34 @@ +/** + * SPDX-FileCopyrightText: 2025 microG Project Team + * SPDX-License-Identifier: Apache-2.0 + */ +package com.google.android.gms.semanticlocationhistory; + +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 DeletionRange extends AbstractSafeParcelable { + @Field(1) + public final long startTimestampSeconds; + @Field(2) + public final long endTimestampSeconds; + + @Constructor + public DeletionRange(@Param(1) long startTimestampSeconds, @Param(2) long endTimestampSeconds) { + this.startTimestampSeconds = startTimestampSeconds; + this.endTimestampSeconds = endTimestampSeconds; + } + + @Override + public void writeToParcel(@NonNull Parcel dest, int flags) { + CREATOR.writeToParcel(this, dest, flags); + } + + public static final SafeParcelableCreatorAndWriter CREATOR = findCreator(DeletionRange.class); +} diff --git a/play-services-api/src/main/java/com/google/android/gms/semanticlocationhistory/DeviceMetadata.java b/play-services-api/src/main/java/com/google/android/gms/semanticlocationhistory/DeviceMetadata.java new file mode 100644 index 0000000000..6166d00548 --- /dev/null +++ b/play-services-api/src/main/java/com/google/android/gms/semanticlocationhistory/DeviceMetadata.java @@ -0,0 +1,46 @@ +/** + * SPDX-FileCopyrightText: 2025 microG Project Team + * SPDX-License-Identifier: Apache-2.0 + */ +package com.google.android.gms.semanticlocationhistory; + +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.List; + +@SafeParcelable.Class +public class DeviceMetadata extends AbstractSafeParcelable { + @Field(1) + public final List deviceTags; + @Field(2) + public final boolean hasFineLocationPermission; + @Field(3) + public final boolean isTestAccount; + @Field(4) + public final List deletionRangeList; + @Field(5) + public final int accountDeviceTag; + + @Constructor + public DeviceMetadata(@Param(1) List deviceTags, @Param(2) boolean hasFineLocationPermission, + @Param(3) boolean isTestAccount, @Param(4) List deletionRangeList, @Param(5) int accountDeviceTag) { + this.deviceTags = deviceTags; + this.hasFineLocationPermission = hasFineLocationPermission; + this.isTestAccount = isTestAccount; + this.deletionRangeList = deletionRangeList; + this.accountDeviceTag = accountDeviceTag; + } + + @Override + public void writeToParcel(@NonNull Parcel dest, int flags) { + CREATOR.writeToParcel(this, dest, flags); + } + + public static final SafeParcelableCreatorAndWriter CREATOR = findCreator(DeviceMetadata.class); +} diff --git a/play-services-api/src/main/java/com/google/android/gms/semanticlocationhistory/ExperimentVisitsResponse.java b/play-services-api/src/main/java/com/google/android/gms/semanticlocationhistory/ExperimentVisitsResponse.java new file mode 100644 index 0000000000..1ee7a37bb1 --- /dev/null +++ b/play-services-api/src/main/java/com/google/android/gms/semanticlocationhistory/ExperimentVisitsResponse.java @@ -0,0 +1,39 @@ +/** + * SPDX-FileCopyrightText: 2025 microG Project Team + * SPDX-License-Identifier: Apache-2.0 + */ +package com.google.android.gms.semanticlocationhistory; + +import android.os.Parcel; + +import androidx.annotation.NonNull; + +import com.google.android.gms.common.internal.safeparcel.SafeParcelable; +import com.google.android.gms.common.internal.safeparcel.AbstractSafeParcelable; +import com.google.android.gms.common.internal.safeparcel.SafeParcelableCreatorAndWriter; + +import java.util.List; + +@SafeParcelable.Class +public class ExperimentVisitsResponse extends AbstractSafeParcelable { + @Field(1) + public final List locationHistorySegmentList; + @Field(2) + public final int unknownFiled2; + @Field(3) + public final DeviceMetadata deviceMetadata; + + @Constructor + public ExperimentVisitsResponse(@Param(1) List locationHistorySegmentList, @Param(2) int unknownFiled2, @Param(3) DeviceMetadata deviceMetadata) { + this.locationHistorySegmentList = locationHistorySegmentList; + this.unknownFiled2 = unknownFiled2; + this.deviceMetadata = deviceMetadata; + } + + @Override + public void writeToParcel(@NonNull Parcel dest, int flags) { + CREATOR.writeToParcel(this, dest, flags); + } + + public static final SafeParcelableCreatorAndWriter CREATOR = findCreator(ExperimentVisitsResponse.class); +} diff --git a/play-services-api/src/main/java/com/google/android/gms/semanticlocationhistory/LocationHistorySettings.java b/play-services-api/src/main/java/com/google/android/gms/semanticlocationhistory/LocationHistorySettings.java new file mode 100644 index 0000000000..7643ce21d9 --- /dev/null +++ b/play-services-api/src/main/java/com/google/android/gms/semanticlocationhistory/LocationHistorySettings.java @@ -0,0 +1,38 @@ +/** + * SPDX-FileCopyrightText: 2025 microG Project Team + * SPDX-License-Identifier: Apache-2.0 + */ +package com.google.android.gms.semanticlocationhistory; + +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.location.reporting.ReportingState; + +@SafeParcelable.Class +public class LocationHistorySettings extends AbstractSafeParcelable { + @Field(1) + public final boolean historyEnabled; + @Field(2) + public final int deviceTag; + @Field(3) + public final ReportingState reportingState; + + @Constructor + public LocationHistorySettings(@Param(1) boolean historyEnabled, @Param(2) int deviceTag, @Param(3) ReportingState reportingState) { + this.historyEnabled = historyEnabled; + this.deviceTag = deviceTag; + this.reportingState = reportingState; + } + + @Override + public void writeToParcel(@NonNull Parcel dest, int flags) { + CREATOR.writeToParcel(this, dest, flags); + } + + public static final SafeParcelableCreatorAndWriter CREATOR = findCreator(LocationHistorySettings.class); +} diff --git a/play-services-location/src/main/aidl/com/google/android/gms/location/reporting/ReportingState.aidl b/play-services-base/src/main/aidl/com/google/android/gms/location/reporting/ReportingState.aidl similarity index 100% rename from play-services-location/src/main/aidl/com/google/android/gms/location/reporting/ReportingState.aidl rename to play-services-base/src/main/aidl/com/google/android/gms/location/reporting/ReportingState.aidl diff --git a/play-services-location/src/main/java/com/google/android/gms/location/reporting/ReportingState.java b/play-services-base/src/main/java/com/google/android/gms/location/reporting/ReportingState.java similarity index 100% rename from play-services-location/src/main/java/com/google/android/gms/location/reporting/ReportingState.java rename to play-services-base/src/main/java/com/google/android/gms/location/reporting/ReportingState.java diff --git a/play-services-core/src/main/kotlin/com/google/android/gms/semanticlocationhistory/SemanticLocationHistoryService.kt b/play-services-core/src/main/kotlin/com/google/android/gms/semanticlocationhistory/SemanticLocationHistoryService.kt index 5a031f2376..992955c01a 100644 --- a/play-services-core/src/main/kotlin/com/google/android/gms/semanticlocationhistory/SemanticLocationHistoryService.kt +++ b/play-services-core/src/main/kotlin/com/google/android/gms/semanticlocationhistory/SemanticLocationHistoryService.kt @@ -32,6 +32,10 @@ private val FEATURES = arrayOf( Feature("odlh_get_backup_summary", 2L), Feature("odlh_delete_backups", 1L), Feature("odlh_delete_history", 1L), + Feature("read_api_fprint_filter", 1L), + Feature("get_location_history_settings", 1L), + Feature("get_experiment_visits", 1L), + Feature("edit_csl", 1L), ) class SemanticLocationHistoryService : BaseService(TAG, GmsService.SEMANTIC_LOCATION_HISTORY) { @@ -149,6 +153,22 @@ class SemanticLocationHistoryServiceImpl : ISemanticLocationHistoryService.Stub( callback?.onResult(Status.SUCCESS) } + override fun getLocationHistorySettingsOperation( + callback: ISemanticLocationHistoryCallbacks?, + requestCredentials: RequestCredentials?, + apiMetadata: ApiMetadata? + ) { + Log.d(TAG, "Not implemented getLocationHistorySettingsOperation apiMetadata:$apiMetadata requestCredentials:$requestCredentials") + } + + override fun getExperimentVisits( + callback: ISemanticLocationHistoryCallbacks?, + requestCredentials: RequestCredentials?, + apiMetadata: ApiMetadata? + ) { + Log.d(TAG, "Not implemented getExperimentVisits apiMetadata:$apiMetadata requestCredentials:$requestCredentials") + } + override fun onTransact(code: Int, data: Parcel, reply: Parcel?, flags: Int): Boolean { return warnOnTransactionIssues(code, reply, flags, TAG) { super.onTransact(code, data, reply, flags) } }