From caf17abaf6a50c54329d4a313c30384077567fc5 Mon Sep 17 00:00:00 2001 From: Marvin W Date: Tue, 20 Feb 2024 13:23:35 +0100 Subject: [PATCH 1/5] Vending: Redirect intents targeted and vending package Redirect all intents opening market://, https://market.android.com and https://play.google.com with target package set to com.android.vending. Some apps hardcode the intent to have the target package com.android.vending. Additionally, also has minimal rewriting logic to change the URI from market:// to a web URL in case no handler for market:// exists on the system, so it can still be handled by web browsers. --- vending-app/src/main/AndroidManifest.xml | 21 ++++++ .../microg/vending/MarketIntentRedirect.java | 74 +++++++++++++++++++ 2 files changed, 95 insertions(+) create mode 100644 vending-app/src/main/java/org/microg/vending/MarketIntentRedirect.java diff --git a/vending-app/src/main/AndroidManifest.xml b/vending-app/src/main/AndroidManifest.xml index bfc542132b..e63b85803a 100644 --- a/vending-app/src/main/AndroidManifest.xml +++ b/vending-app/src/main/AndroidManifest.xml @@ -68,6 +68,27 @@ + + + + + + + + + + + + + + + + + + + Date: Tue, 20 Feb 2024 21:57:54 +0800 Subject: [PATCH 2/5] Location: handle invalid or dead old binder on location request update (#2190) --- .../microg/gms/location/manager/LocationRequestManager.kt | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/play-services-location/core/src/main/kotlin/org/microg/gms/location/manager/LocationRequestManager.kt b/play-services-location/core/src/main/kotlin/org/microg/gms/location/manager/LocationRequestManager.kt index 2354bd4413..a56e96a4d0 100644 --- a/play-services-location/core/src/main/kotlin/org/microg/gms/location/manager/LocationRequestManager.kt +++ b/play-services-location/core/src/main/kotlin/org/microg/gms/location/manager/LocationRequestManager.kt @@ -83,7 +83,11 @@ class LocationRequestManager(private val context: Context, private val lifecycle suspend fun update(oldBinder: IBinder, binder: IBinder, clientIdentity: ClientIdentity, callback: ILocationCallback, request: LocationRequest, lastLocationCapsule: LastLocationCapsule) { lock.withLock { - oldBinder.unlinkToDeath(this, 0) + try { + oldBinder.unlinkToDeath(this, 0) + } catch (e: Exception) { + Log.w(TAG, "update: ", e) + } val holder = binderRequests.remove(oldBinder) try { val startedHolder = holder?.update(callback, request) ?: LocationRequestHolder(context, clientIdentity, request, callback, null).start().also { From 64670de2e71056c77fd0542211d56596ddc9ac4d Mon Sep 17 00:00:00 2001 From: DaVinci9196 <150454414+DaVinci9196@users.noreply.github.com> Date: Tue, 20 Feb 2024 21:59:44 +0800 Subject: [PATCH 3/5] Improve dummy for feedback service (#2185) --- .../gms/common/data/BitmapTeleporter.aidl | 8 ++ .../android/gms/feedback/ErrorReport.aidl | 8 ++ .../android/gms/feedback/FileTeleporter.aidl | 8 ++ .../android/gms/feedback/LogOptions.aidl | 8 ++ .../android/gms/feedback/ThemeSettings.aidl | 8 ++ .../feedback/internal/IFeedbackCallbacks.aidl | 10 ++ .../feedback/internal/IFeedbackService.aidl | 33 +++++ .../gms/common/data/BitmapTeleporter.java | 110 ++++++++++++++++ .../android/gms/feedback/ErrorReport.java | 123 +++++++++++++++--- .../android/gms/feedback/FeedbackOptions.java | 38 +++++- .../android/gms/feedback/FileTeleporter.java | 23 +++- .../android/gms/feedback/LogOptions.java | 31 ++++- .../microg/gms/feedback/FeedbackService.java | 34 ----- .../microg/gms/feedback/FeedbackService.kt | 86 ++++++++++++ .../src/main/res/values-zh-rCN/strings.xml | 2 + .../src/main/res/values/strings.xml | 3 + 16 files changed, 471 insertions(+), 62 deletions(-) create mode 100644 play-services-api/src/main/aidl/com/google/android/gms/common/data/BitmapTeleporter.aidl create mode 100644 play-services-api/src/main/aidl/com/google/android/gms/feedback/ErrorReport.aidl create mode 100644 play-services-api/src/main/aidl/com/google/android/gms/feedback/FileTeleporter.aidl create mode 100644 play-services-api/src/main/aidl/com/google/android/gms/feedback/LogOptions.aidl create mode 100644 play-services-api/src/main/aidl/com/google/android/gms/feedback/ThemeSettings.aidl create mode 100644 play-services-api/src/main/aidl/com/google/android/gms/feedback/internal/IFeedbackCallbacks.aidl create mode 100644 play-services-api/src/main/aidl/com/google/android/gms/feedback/internal/IFeedbackService.aidl create mode 100644 play-services-api/src/main/java/com/google/android/gms/common/data/BitmapTeleporter.java delete mode 100644 play-services-core/src/main/java/org/microg/gms/feedback/FeedbackService.java create mode 100644 play-services-core/src/main/kotlin/org/microg/gms/feedback/FeedbackService.kt diff --git a/play-services-api/src/main/aidl/com/google/android/gms/common/data/BitmapTeleporter.aidl b/play-services-api/src/main/aidl/com/google/android/gms/common/data/BitmapTeleporter.aidl new file mode 100644 index 0000000000..832f0fd270 --- /dev/null +++ b/play-services-api/src/main/aidl/com/google/android/gms/common/data/BitmapTeleporter.aidl @@ -0,0 +1,8 @@ +/* + * SPDX-FileCopyrightText: 2023 microG Project Team + * SPDX-License-Identifier: Apache-2.0 + */ + +package com.google.android.gms.common.data; + +parcelable BitmapTeleporter; diff --git a/play-services-api/src/main/aidl/com/google/android/gms/feedback/ErrorReport.aidl b/play-services-api/src/main/aidl/com/google/android/gms/feedback/ErrorReport.aidl new file mode 100644 index 0000000000..0b4980d34a --- /dev/null +++ b/play-services-api/src/main/aidl/com/google/android/gms/feedback/ErrorReport.aidl @@ -0,0 +1,8 @@ +/* + * SPDX-FileCopyrightText: 2023 microG Project Team + * SPDX-License-Identifier: Apache-2.0 + */ + +package com.google.android.gms.feedback; + +parcelable ErrorReport; diff --git a/play-services-api/src/main/aidl/com/google/android/gms/feedback/FileTeleporter.aidl b/play-services-api/src/main/aidl/com/google/android/gms/feedback/FileTeleporter.aidl new file mode 100644 index 0000000000..d6dd1583a1 --- /dev/null +++ b/play-services-api/src/main/aidl/com/google/android/gms/feedback/FileTeleporter.aidl @@ -0,0 +1,8 @@ +/* + * SPDX-FileCopyrightText: 2023 microG Project Team + * SPDX-License-Identifier: Apache-2.0 + */ + +package com.google.android.gms.feedback; + +parcelable FileTeleporter; diff --git a/play-services-api/src/main/aidl/com/google/android/gms/feedback/LogOptions.aidl b/play-services-api/src/main/aidl/com/google/android/gms/feedback/LogOptions.aidl new file mode 100644 index 0000000000..433575b0e9 --- /dev/null +++ b/play-services-api/src/main/aidl/com/google/android/gms/feedback/LogOptions.aidl @@ -0,0 +1,8 @@ +/* + * SPDX-FileCopyrightText: 2023 microG Project Team + * SPDX-License-Identifier: Apache-2.0 + */ + +package com.google.android.gms.feedback; + +parcelable LogOptions; diff --git a/play-services-api/src/main/aidl/com/google/android/gms/feedback/ThemeSettings.aidl b/play-services-api/src/main/aidl/com/google/android/gms/feedback/ThemeSettings.aidl new file mode 100644 index 0000000000..7b189c99e8 --- /dev/null +++ b/play-services-api/src/main/aidl/com/google/android/gms/feedback/ThemeSettings.aidl @@ -0,0 +1,8 @@ +/* + * SPDX-FileCopyrightText: 2023 microG Project Team + * SPDX-License-Identifier: Apache-2.0 + */ + +package com.google.android.gms.feedback; + +parcelable ThemeSettings; diff --git a/play-services-api/src/main/aidl/com/google/android/gms/feedback/internal/IFeedbackCallbacks.aidl b/play-services-api/src/main/aidl/com/google/android/gms/feedback/internal/IFeedbackCallbacks.aidl new file mode 100644 index 0000000000..eeb50c9464 --- /dev/null +++ b/play-services-api/src/main/aidl/com/google/android/gms/feedback/internal/IFeedbackCallbacks.aidl @@ -0,0 +1,10 @@ +/* + * SPDX-FileCopyrightText: 2023 microG Project Team + * SPDX-License-Identifier: Apache-2.0 + */ + +package com.google.android.gms.feedback.internal; + +interface IFeedbackCallbacks { + void onServiceDestroy(); +} diff --git a/play-services-api/src/main/aidl/com/google/android/gms/feedback/internal/IFeedbackService.aidl b/play-services-api/src/main/aidl/com/google/android/gms/feedback/internal/IFeedbackService.aidl new file mode 100644 index 0000000000..48401b0d66 --- /dev/null +++ b/play-services-api/src/main/aidl/com/google/android/gms/feedback/internal/IFeedbackService.aidl @@ -0,0 +1,33 @@ +/* + * SPDX-FileCopyrightText: 2023 microG Project Team + * SPDX-License-Identifier: Apache-2.0 + */ + +package com.google.android.gms.feedback.internal; + +import com.google.android.gms.feedback.FeedbackOptions; +import android.os.IBinder; +import android.os.IInterface; +import android.os.Parcel; +import com.google.android.gms.googlehelp.GoogleHelp; +import com.google.android.gms.feedback.ErrorReport; +import android.content.Context; +import android.os.Bundle; +import android.content.Intent; + + +interface IFeedbackService { + + boolean startFeedbackFlow(in ErrorReport errorReport) = 0; + + boolean silentSendFeedback(in ErrorReport errorReport) = 2; + + void saveFeedbackDataAsync(in Bundle bundle, long id) = 3; + + void saveFeedbackDataAsyncWithOption(in FeedbackOptions options, in Bundle bundle, long id) = 4; + + void startFeedbackFlowAsync(in ErrorReport errorReport, long id) = 5; + + boolean isValidConfiguration(in FeedbackOptions options) = 6; + +} \ No newline at end of file diff --git a/play-services-api/src/main/java/com/google/android/gms/common/data/BitmapTeleporter.java b/play-services-api/src/main/java/com/google/android/gms/common/data/BitmapTeleporter.java new file mode 100644 index 0000000000..1af37b6690 --- /dev/null +++ b/play-services-api/src/main/java/com/google/android/gms/common/data/BitmapTeleporter.java @@ -0,0 +1,110 @@ +/* + * SPDX-FileCopyrightText: 2023 microG Project Team + * SPDX-License-Identifier: Apache-2.0 + */ + +package com.google.android.gms.common.data; + +import android.graphics.Bitmap; +import android.os.Parcel; +import android.os.ParcelFileDescriptor; +import android.util.Log; + +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.io.Closeable; +import java.io.DataInputStream; +import java.io.File; +import java.io.IOException; +import java.nio.ByteBuffer; + +@SafeParcelable.Class +public class BitmapTeleporter extends AbstractSafeParcelable { + + @Field(1) + public int versionCode; + @Field(2) + public ParcelFileDescriptor fileDescriptor; + @Field(3) + public int status; + public boolean isParceled; + public Bitmap targetBitmap; + public File targetDirectory; + + public BitmapTeleporter() { + } + + public BitmapTeleporter(int version, ParcelFileDescriptor parcelFileDescriptor, int status) { + this.versionCode = version; + this.fileDescriptor = parcelFileDescriptor; + this.status = status; + this.targetBitmap = null; + this.isParceled = false; + } + + public BitmapTeleporter(Bitmap bitmap) { + this.versionCode = 1; + this.fileDescriptor = null; + this.status = 0; + this.targetBitmap = bitmap; + this.isParceled = true; + } + + public final Bitmap createTargetBitmap() { + if (!this.isParceled) { + ParcelFileDescriptor parcelFileDescriptor = this.fileDescriptor; + if (parcelFileDescriptor == null) { + throw new NullPointerException("null reference"); + } + DataInputStream dataInputStream = new DataInputStream(new ParcelFileDescriptor.AutoCloseInputStream(parcelFileDescriptor)); + try { + try { + byte[] bArr = new byte[dataInputStream.readInt()]; + int readInt = dataInputStream.readInt(); + int readInt2 = dataInputStream.readInt(); + Bitmap.Config valueOf = Bitmap.Config.valueOf(dataInputStream.readUTF()); + dataInputStream.read(bArr); + close(dataInputStream); + ByteBuffer wrap = ByteBuffer.wrap(bArr); + Bitmap createBitmap = Bitmap.createBitmap(readInt, readInt2, valueOf); + createBitmap.copyPixelsFromBuffer(wrap); + this.targetBitmap = createBitmap; + this.isParceled = true; + } catch (IOException e) { + throw new IllegalStateException("Could not read from parcel file descriptor", e); + } + } catch (Throwable th) { + close(dataInputStream); + throw th; + } + } + return this.targetBitmap; + } + + public final void setTargetDirectory(File file) { + if (file == null) { + throw new NullPointerException("Cannot set null temp directory"); + } + this.targetDirectory = file; + } + + private static void close(Closeable closeable) { + try { + closeable.close(); + } catch (IOException e) { + Log.w("BitmapTeleporter", "Could not close stream", e); + } + } + + @Override + public void writeToParcel(@NonNull Parcel dest, int flags) { + CREATOR.writeToParcel(this, dest, flags); + } + + public static final SafeParcelableCreatorAndWriter CREATOR = findCreator(BitmapTeleporter.class); + +} diff --git a/play-services-api/src/main/java/com/google/android/gms/feedback/ErrorReport.java b/play-services-api/src/main/java/com/google/android/gms/feedback/ErrorReport.java index 1db6be7fda..55d6d35972 100644 --- a/play-services-api/src/main/java/com/google/android/gms/feedback/ErrorReport.java +++ b/play-services-api/src/main/java/com/google/android/gms/feedback/ErrorReport.java @@ -7,29 +7,87 @@ import android.app.ApplicationErrorReport; import android.graphics.Bitmap; -import org.microg.safeparcel.AutoSafeParcelable; +import android.graphics.RectF; +import android.os.Bundle; +import android.os.Parcel; -public class ErrorReport extends AutoSafeParcelable { +import androidx.annotation.NonNull; + +import com.google.android.gms.common.data.BitmapTeleporter; +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 ErrorReport extends AbstractSafeParcelable { @Field(2) public ApplicationErrorReport applicationErrorReport; + @Field(3) + public String feedbackMsg; @Field(4) - public int unknownInt4; + public int versionCode; + @Field(5) + public String versionName; + @Field(6) + public String mobileDevice; + @Field(7) + public String mobileDisplay; + @Field(8) + public String mobileType; + @Field(9) + public String mobileModel; + @Field(10) + public String mobileProduct; + @Field(11) + public String mobileFingerprint; @Field(12) - public int unknownInt12; + public int mobileSdkInt; + @Field(13) + public String mobileRelease; + @Field(14) + public String mobileIncremental; + @Field(15) + public String mobileCodeName; + @Field(16) + public String mobileBoard; + @Field(17) + public String mobileBrand; + @Field(18) + public String[] unknownStringArray18; + @Field(19) + public String[] unknownStringArray19; + @Field(20) + public String[] unknownStringArray20; + @Field(21) + public String unknownString21; + @Field(22) + public String screenshotImgSrc; + @Field(23) + public byte[] screenshotImgData; @Field(24) - public int unknownInt24; + public int screenshotHeight; @Field(25) - public int unknownInt25; + public int screenshotWidth; @Field(26) - public int unknownInt26; + public int phoneType; @Field(27) - public int unknownInt27; + public int networkType; + @Field(28) + public String networkOperatorName; + @Field(29) + public String email; + @Field(30) + public String languageTag; + @Field(31) + public Bundle bundle; @Field(32) - public boolean unknownBool32; + public boolean isFixedUri; @Field(33) - public int unknownInt33; + public int mobileCountryCode; @Field(34) - public int unknownInt34; + public int mobileNetworkCode; @Field(35) public boolean unknownBool35; @Field(36) @@ -46,6 +104,20 @@ public class ErrorReport extends AutoSafeParcelable { public String stackTrace; @Field(42) public String exceptionMessage; + @Field(43) + public String unknownString43; + @Field(44) + public String unknownString44; + @Field(45) + public String packageName; + @Field(46) + public BitmapTeleporter bitmapTeleporter; + @Field(47) + public String unknownString47; + @Field(48) + public FileTeleporter[] files; + @Field(49) + public String[] unknownByteArray49; @Field(50) public boolean unknownBool50; @Field(51) @@ -54,21 +126,38 @@ public class ErrorReport extends AutoSafeParcelable { public ThemeSettings themeSettings; @Field(53) public LogOptions logOptions; + @Field(54) + public String unknownString54; @Field(55) public boolean unknownBool55; + @Field(56) + public Bundle bundleText; + @Field(57) + public List rectFS; @Field(58) public boolean unknownBool58; @Field(59) - public Bitmap unknownBitmap59; + public Bitmap bitmap; @Field(60) public String unknownString60; + @Field(61) + public List camList; @Field(62) public int unknownInt62; @Field(63) public int unknownInt63; - @Field(67) - public boolean unknownBool67; - @Field(68) - public boolean unknownBool68; - public static final Creator CREATOR = findCreator(ErrorReport.class); + @Field(64) + public String[] unknownStringArray64; + @Field(65) + public String[] unknownStringArray65; + @Field(66) + public String[] unknownStringArray66; + + public static final SafeParcelableCreatorAndWriter CREATOR = findCreator(ErrorReport.class); + + @Override + public void writeToParcel(@NonNull Parcel dest, int flags) { + CREATOR.writeToParcel(this, dest, flags); + } + } diff --git a/play-services-api/src/main/java/com/google/android/gms/feedback/FeedbackOptions.java b/play-services-api/src/main/java/com/google/android/gms/feedback/FeedbackOptions.java index 2532fe048b..679fe0f278 100644 --- a/play-services-api/src/main/java/com/google/android/gms/feedback/FeedbackOptions.java +++ b/play-services-api/src/main/java/com/google/android/gms/feedback/FeedbackOptions.java @@ -8,32 +8,60 @@ import android.app.ApplicationErrorReport; import android.graphics.Bitmap; import android.os.Bundle; -import org.microg.safeparcel.AutoSafeParcelable; +import android.os.Parcel; + +import androidx.annotation.NonNull; + +import com.google.android.gms.common.data.BitmapTeleporter; +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; -public class FeedbackOptions extends AutoSafeParcelable { +@SafeParcelable.Class +public class FeedbackOptions extends AbstractSafeParcelable { + + public static final SafeParcelableCreatorAndWriter CREATOR = findCreator(FeedbackOptions.class); + + @Field(2) + public String unknownString2; @Field(3) public Bundle unknownBundle3; + @Field(5) + public String unknownString3; @Field(6) public ApplicationErrorReport applicationErrorReport; + @Field(7) + public String unknownString7; + @Field(8) + public BitmapTeleporter bitmapTeleporter; @Field(9) public String packageName; @Field(10) public List files; @Field(11) - public boolean unknownBool11; + public boolean unknownBoolean11; @Field(12) public ThemeSettings themeSettings; @Field(13) public LogOptions logOptions; + @Field(14) + public boolean unknownBoolean14; @Field(15) public Bitmap screenshot; + @Field(16) + public String unknownString16; @Field(17) - public boolean unknownBool17; + public boolean unknownBoolean17; @Field(18) public long unknownLong18; @Field(19) public boolean unknownBool19; - public static final Creator CREATOR = findCreator(FeedbackOptions.class); + + @Override + public void writeToParcel(@NonNull Parcel dest, int flags) { + CREATOR.writeToParcel(this, dest, flags); + } + } diff --git a/play-services-api/src/main/java/com/google/android/gms/feedback/FileTeleporter.java b/play-services-api/src/main/java/com/google/android/gms/feedback/FileTeleporter.java index 73206ef252..445200bf4b 100644 --- a/play-services-api/src/main/java/com/google/android/gms/feedback/FileTeleporter.java +++ b/play-services-api/src/main/java/com/google/android/gms/feedback/FileTeleporter.java @@ -5,8 +5,25 @@ package com.google.android.gms.feedback; -import org.microg.safeparcel.AutoSafeParcelable; +import android.os.Parcel; -public class FileTeleporter extends AutoSafeParcelable { - public static final Creator CREATOR = findCreator(FileTeleporter.class); +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 FileTeleporter extends AbstractSafeParcelable { + @Field(3) + public String contentType; + @Field(4) + public String content; + + @Override + public void writeToParcel(@NonNull Parcel dest, int flags) { + CREATOR.writeToParcel(this, dest, flags); + } + + public static final SafeParcelableCreatorAndWriter CREATOR = findCreator(FileTeleporter.class); } diff --git a/play-services-api/src/main/java/com/google/android/gms/feedback/LogOptions.java b/play-services-api/src/main/java/com/google/android/gms/feedback/LogOptions.java index 374415058f..ce1f8201a2 100644 --- a/play-services-api/src/main/java/com/google/android/gms/feedback/LogOptions.java +++ b/play-services-api/src/main/java/com/google/android/gms/feedback/LogOptions.java @@ -5,8 +5,33 @@ package com.google.android.gms.feedback; -import org.microg.safeparcel.AutoSafeParcelable; +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 LogOptions extends AbstractSafeParcelable { + + @Field(2) + public String options; + @Field(3) + public boolean unknownBool3; + @Field(4) + public boolean unknownBool4; + @Field(5) + public boolean unknownBool5; + @Field(6) + public boolean unknownBool6; + + @Override + public void writeToParcel(@NonNull Parcel dest, int flags) { + CREATOR.writeToParcel(this, dest, flags); + } + + public static final SafeParcelableCreatorAndWriter CREATOR = findCreator(LogOptions.class); -public class LogOptions extends AutoSafeParcelable { - public static final Creator CREATOR = findCreator(LogOptions.class); } diff --git a/play-services-core/src/main/java/org/microg/gms/feedback/FeedbackService.java b/play-services-core/src/main/java/org/microg/gms/feedback/FeedbackService.java deleted file mode 100644 index 403240ae37..0000000000 --- a/play-services-core/src/main/java/org/microg/gms/feedback/FeedbackService.java +++ /dev/null @@ -1,34 +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 org.microg.gms.feedback; - -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; - -public class FeedbackService extends BaseService { - public FeedbackService() { - super("GmsFeedbackSvc", GmsService.FEEDBACK); - } - - @Override - public void handleServiceRequest(IGmsCallbacks callback, GetServiceRequest request, GmsService service) { - // TODO - } -} diff --git a/play-services-core/src/main/kotlin/org/microg/gms/feedback/FeedbackService.kt b/play-services-core/src/main/kotlin/org/microg/gms/feedback/FeedbackService.kt new file mode 100644 index 0000000000..b28127b569 --- /dev/null +++ b/play-services-core/src/main/kotlin/org/microg/gms/feedback/FeedbackService.kt @@ -0,0 +1,86 @@ +/* + * SPDX-FileCopyrightText: 2023 microG Project Team + * SPDX-License-Identifier: Apache-2.0 + */ + +package org.microg.gms.feedback + +import android.content.Context +import android.os.Bundle +import android.util.Log +import android.widget.Toast +import androidx.lifecycle.LifecycleCoroutineScope +import androidx.lifecycle.lifecycleScope +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 com.google.android.gms.feedback.ErrorReport +import com.google.android.gms.feedback.FeedbackOptions +import com.google.android.gms.feedback.internal.IFeedbackService +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.withContext +import org.microg.gms.BaseService +import org.microg.gms.common.GmsService +import org.microg.gms.profile.ProfileManager + +private const val TAG = "FeedbackService" + +class FeedbackService : BaseService(TAG, GmsService.FEEDBACK) { + + override fun handleServiceRequest(callback: IGmsCallbacks, request: GetServiceRequest, service: GmsService) { + Log.d(TAG, "handleServiceRequest start ") + ProfileManager.ensureInitialized(this) + callback.onPostInitCompleteWithConnectionInfo( + CommonStatusCodes.SUCCESS, + FeedbackServiceImpl(this, lifecycleScope), + ConnectionInfo().apply { + features = arrayOf(Feature("new_send_silent_feedback", 1)) + }) + } + +} + +class FeedbackServiceImpl(private val context: Context, private val lifecycleScope: LifecycleCoroutineScope) : + IFeedbackService.Stub() { + + override fun startFeedbackFlow(errorReport: ErrorReport): Boolean { + Log.d(TAG, "startFeedbackFlow: ") + showFeedbackDisabledToast() + return false + } + + override fun silentSendFeedback(errorReport: ErrorReport): Boolean { + Log.d(TAG, "Not impl silentSendFeedback: ") + return false + } + + override fun saveFeedbackDataAsync(bundle: Bundle, id: Long) { + Log.d(TAG, "Not impl saveFeedbackDataAsync: ") + } + + override fun saveFeedbackDataAsyncWithOption(options: FeedbackOptions, bundle: Bundle, id: Long) { + Log.d(TAG, "Not impl saveFeedbackDataAsyncWithOption: $options") + } + + override fun startFeedbackFlowAsync(errorReport: ErrorReport, id: Long) { + Log.d(TAG, "startFeedbackFlowAsync errorReport:$errorReport") + showFeedbackDisabledToast() + } + + override fun isValidConfiguration(options: FeedbackOptions): Boolean { + Log.d(TAG, "Not impl isValidConfiguration: $options") + return false + } + + private fun showFeedbackDisabledToast() { + lifecycleScope.launchWhenStarted { + withContext(Dispatchers.Main){ + val content = context.resources.getString(com.google.android.gms.R.string.feedback_disabled) + Toast.makeText(context, content, Toast.LENGTH_SHORT).show() + } + } + } + +} diff --git a/play-services-core/src/main/res/values-zh-rCN/strings.xml b/play-services-core/src/main/res/values-zh-rCN/strings.xml index 1d9965aa2c..ad44fd048a 100644 --- a/play-services-core/src/main/res/values-zh-rCN/strings.xml +++ b/play-services-core/src/main/res/values-zh-rCN/strings.xml @@ -176,4 +176,6 @@ microG GmsCore 内置一套自由的 SafetyNet 实现,但是官方服务器要 最近使用 选择一个账户 添加另一个账户 + + 反馈功能不可用 \ No newline at end of file diff --git a/play-services-core/src/main/res/values/strings.xml b/play-services-core/src/main/res/values/strings.xml index fe718ddddc..d43f5cf261 100644 --- a/play-services-core/src/main/res/values/strings.xml +++ b/play-services-core/src/main/res/values/strings.xml @@ -237,4 +237,7 @@ This can take a couple of minutes." Licensing on Answer license verification requests Some apps require verification that you have purchased them on Google Play. When requested by an app, microG can download a proof of purchase from Google. If disabled, or if no Google account is added, requests for license verification are ignored. + + Feedback currently not possible + From 54e6f40f3afc5de2a0136d78be6b75f8664916e9 Mon Sep 17 00:00:00 2001 From: DaVinci9196 <150454414+DaVinci9196@users.noreply.github.com> Date: Tue, 20 Feb 2024 22:17:45 +0800 Subject: [PATCH 4/5] Return proper dummy value in AppSetService.getAppSetIdInfo (#2189) Co-authored-by: Marvin W --- .../src/main/kotlin/org/microg/gms/appset/AppSetService.kt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/play-services-appset/core/src/main/kotlin/org/microg/gms/appset/AppSetService.kt b/play-services-appset/core/src/main/kotlin/org/microg/gms/appset/AppSetService.kt index a024f498d4..72e20682a2 100644 --- a/play-services-appset/core/src/main/kotlin/org/microg/gms/appset/AppSetService.kt +++ b/play-services-appset/core/src/main/kotlin/org/microg/gms/appset/AppSetService.kt @@ -6,7 +6,9 @@ package org.microg.gms.appset import android.util.Log +import com.google.android.gms.appset.AppSetIdInfo import com.google.android.gms.appset.AppSetIdRequestParams +import com.google.android.gms.appset.AppSetInfoParcel import com.google.android.gms.appset.internal.IAppSetIdCallback import com.google.android.gms.appset.internal.IAppSetService import com.google.android.gms.common.ConnectionResult @@ -35,6 +37,6 @@ class AppSetService : BaseService(TAG, GmsService.APP_SET) { class AppSetServiceImpl : IAppSetService.Stub() { override fun getAppSetIdInfo(params: AppSetIdRequestParams?, callback: IAppSetIdCallback?) { Log.d(TAG, "AppSetServiceImp getAppSetIdInfo is called -> ${params?.toString()} ") - callback?.onAppSetInfo(Status.SUCCESS, null) + callback?.onAppSetInfo(Status.SUCCESS, AppSetInfoParcel("", AppSetIdInfo.SCOPE_APP)) } } From df6f331a6f65af0a51755e96f5a849ee18e1d6dd Mon Sep 17 00:00:00 2001 From: Marvin W Date: Tue, 20 Feb 2024 15:18:10 +0100 Subject: [PATCH 5/5] Dynamite: Bump version of measurement API --- .../android/gms/measurement/dynamite/ModuleDescriptor.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/play-services-core/src/main/java/com/google/android/gms/dynamite/descriptors/com/google/android/gms/measurement/dynamite/ModuleDescriptor.java b/play-services-core/src/main/java/com/google/android/gms/dynamite/descriptors/com/google/android/gms/measurement/dynamite/ModuleDescriptor.java index 4546f73be3..f958d8da2c 100644 --- a/play-services-core/src/main/java/com/google/android/gms/dynamite/descriptors/com/google/android/gms/measurement/dynamite/ModuleDescriptor.java +++ b/play-services-core/src/main/java/com/google/android/gms/dynamite/descriptors/com/google/android/gms/measurement/dynamite/ModuleDescriptor.java @@ -18,5 +18,5 @@ public class ModuleDescriptor { public static final String MODULE_ID = "com.google.android.gms.measurement.dynamite"; - public static final int MODULE_VERSION = 87; + public static final int MODULE_VERSION = 98; }