Improve dummy for feedback service (#2185)
This commit is contained in:
parent
afe1fb2be8
commit
4aef3d6ff6
15 changed files with 668 additions and 0 deletions
|
|
@ -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;
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
/*
|
||||
* SPDX-FileCopyrightText: 2023 microG Project Team
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
package com.google.android.gms.feedback;
|
||||
|
||||
parcelable ErrorReport;
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
/*
|
||||
* SPDX-FileCopyrightText: 2023 microG Project Team
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
package com.google.android.gms.feedback;
|
||||
|
||||
parcelable FileTeleporter;
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
/*
|
||||
* SPDX-FileCopyrightText: 2023 microG Project Team
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
package com.google.android.gms.feedback;
|
||||
|
||||
parcelable LogOptions;
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
/*
|
||||
* SPDX-FileCopyrightText: 2023 microG Project Team
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
package com.google.android.gms.feedback;
|
||||
|
||||
parcelable ThemeSettings;
|
||||
|
|
@ -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();
|
||||
}
|
||||
|
|
@ -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;
|
||||
|
||||
}
|
||||
|
|
@ -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<BitmapTeleporter> CREATOR = findCreator(BitmapTeleporter.class);
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,163 @@
|
|||
/*
|
||||
* SPDX-FileCopyrightText: 2023 microG Project Team
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
package com.google.android.gms.feedback;
|
||||
|
||||
import android.app.ApplicationErrorReport;
|
||||
import android.graphics.Bitmap;
|
||||
import android.graphics.RectF;
|
||||
import android.os.Bundle;
|
||||
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;
|
||||
|
||||
@SafeParcelable.Class
|
||||
public class ErrorReport extends AbstractSafeParcelable {
|
||||
@Field(2)
|
||||
public ApplicationErrorReport applicationErrorReport;
|
||||
@Field(3)
|
||||
public String feedbackMsg;
|
||||
@Field(4)
|
||||
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 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 screenshotHeight;
|
||||
@Field(25)
|
||||
public int screenshotWidth;
|
||||
@Field(26)
|
||||
public int phoneType;
|
||||
@Field(27)
|
||||
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 isFixedUri;
|
||||
@Field(33)
|
||||
public int mobileCountryCode;
|
||||
@Field(34)
|
||||
public int mobileNetworkCode;
|
||||
@Field(35)
|
||||
public boolean unknownBool35;
|
||||
@Field(36)
|
||||
public String exceptionClassName;
|
||||
@Field(37)
|
||||
public String throwFileName;
|
||||
@Field(38)
|
||||
public int throwLineNumber;
|
||||
@Field(39)
|
||||
public String throwClassName;
|
||||
@Field(40)
|
||||
public String throwMethodName;
|
||||
@Field(41)
|
||||
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)
|
||||
public String unknownString51;
|
||||
@Field(52)
|
||||
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<RectF> rectFS;
|
||||
@Field(58)
|
||||
public boolean unknownBool58;
|
||||
@Field(59)
|
||||
public Bitmap bitmap;
|
||||
@Field(60)
|
||||
public String unknownString60;
|
||||
@Field(61)
|
||||
public List<String> camList;
|
||||
@Field(62)
|
||||
public int unknownInt62;
|
||||
@Field(63)
|
||||
public int unknownInt63;
|
||||
@Field(64)
|
||||
public String[] unknownStringArray64;
|
||||
@Field(65)
|
||||
public String[] unknownStringArray65;
|
||||
@Field(66)
|
||||
public String[] unknownStringArray66;
|
||||
|
||||
public static final SafeParcelableCreatorAndWriter<ErrorReport> CREATOR = findCreator(ErrorReport.class);
|
||||
|
||||
@Override
|
||||
public void writeToParcel(@NonNull Parcel dest, int flags) {
|
||||
CREATOR.writeToParcel(this, dest, flags);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,67 @@
|
|||
/*
|
||||
* SPDX-FileCopyrightText: 2023 microG Project Team
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
package com.google.android.gms.feedback;
|
||||
|
||||
import android.app.ApplicationErrorReport;
|
||||
import android.graphics.Bitmap;
|
||||
import android.os.Bundle;
|
||||
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;
|
||||
|
||||
@SafeParcelable.Class
|
||||
public class FeedbackOptions extends AbstractSafeParcelable {
|
||||
|
||||
public static final SafeParcelableCreatorAndWriter<FeedbackOptions> 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<FileTeleporter> files;
|
||||
@Field(11)
|
||||
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 unknownBoolean17;
|
||||
@Field(18)
|
||||
public long unknownLong18;
|
||||
@Field(19)
|
||||
public boolean unknownBool19;
|
||||
|
||||
@Override
|
||||
public void writeToParcel(@NonNull Parcel dest, int flags) {
|
||||
CREATOR.writeToParcel(this, dest, flags);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,29 @@
|
|||
/*
|
||||
* SPDX-FileCopyrightText: 2023 microG Project Team
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
package com.google.android.gms.feedback;
|
||||
|
||||
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 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<FileTeleporter> CREATOR = findCreator(FileTeleporter.class);
|
||||
}
|
||||
|
|
@ -0,0 +1,37 @@
|
|||
/*
|
||||
* SPDX-FileCopyrightText: 2023 microG Project Team
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
package com.google.android.gms.feedback;
|
||||
|
||||
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<LogOptions> CREATOR = findCreator(LogOptions.class);
|
||||
|
||||
}
|
||||
|
|
@ -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()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -111,6 +111,7 @@
|
|||
<string name="profile_name_user">自定义:%s</string>
|
||||
<string name="profile_name_auto">自动:%s</string>
|
||||
<string name="profile_name_system">系统:%s</string>
|
||||
<<<<<<< HEAD
|
||||
<string name="import_profile_name">导入自定义配置</string>
|
||||
<string name="import_profile_summary">从文件导入设备配置</string>
|
||||
<string name="serial_name">序列号</string>
|
||||
|
|
@ -140,3 +141,50 @@
|
|||
<string name="manage_googleaccount_summary">This will open your device settings !</string>
|
||||
<string name="miscellaneous_settings">Miscellaneous settings</string>
|
||||
</resources>
|
||||
=======
|
||||
<string name="pref_safetynet_test_title">"测试 SafetyNet 认证"</string>
|
||||
<string name="safetynet_intro">"Google SafetyNet 是一套设备认证系统,旨在确认设备具有适当安全性,并与 Android CTS 兼容。某些应用会出于安全考虑或是防篡改目的而使用 SafetyNet。
|
||||
|
||||
microG GmsCore 内置一套自由的 SafetyNet 实现,但是官方服务器要求 SafetyNet 请求使用其专有的 DroidGuard 系统签名。"</string>
|
||||
<string name="prefcat_google_services">Google 服务</string>
|
||||
<string name="perm_extended_access_label">额外使用 Google 服务</string>
|
||||
<string name="google_account_label">Google</string>
|
||||
<string name="network_type_wifi">Wi-Fi</string>
|
||||
<string name="place_picker_location_lat_lng">(%1$.7f, %2$.7f)</string>
|
||||
<string name="perm_provision_label">预配置 microG 服务</string>
|
||||
<string name="gms_app_name">microG 服务</string>
|
||||
<string name="pref_auth_trust_google_title">允许 Google 向应用提供验证</string>
|
||||
<string name="pref_device_registration_import_custom_profile_title">导入自定义配置信息</string>
|
||||
<string name="pref_device_registration_serial_title">序列号</string>
|
||||
<string name="pref_device_registration_import_custom_profile_summary">从文件导入自定义的设备配置信息</string>
|
||||
<string name="pref_device_registration_select_profile_title">选择配置信息</string>
|
||||
<string name="pref_device_registration_device_profile_category">设备配置信息</string>
|
||||
<string name="prefcat_safetynet_apps_title">使用 SafetyNet 的应用</string>
|
||||
<string name="menu_clear_recent_requests">清除近期的 SafetyNet 请求</string>
|
||||
<string name="safetynet_last_run_at">最近使用于<xliff:g example="昨天 02:20 PM">%1$s</xliff:g></string>
|
||||
<string name="pref_safetynet_recent_eval_type">评估类型</string>
|
||||
<string name="pref_safetynet_recent_response_status">响应状态</string>
|
||||
<string name="pref_safetynet_recent_cat_response">响应数据</string>
|
||||
<string name="pref_safetynet_recent_cat_request">请求数据</string>
|
||||
<string name="pref_safetynet_recent_nonce">十六进制 Nonce</string>
|
||||
<string name="pref_safetynet_recent_request_time">请求时间</string>
|
||||
<string name="pref_safetynet_recent_request_type">请求类型</string>
|
||||
<string name="pref_safetynet_recent_cat_basic">基础数据</string>
|
||||
<string name="pref_safetynet_recent_token">令牌</string>
|
||||
<string name="pref_safetynet_recent_copy_json">复制 JSON JWS 数据</string>
|
||||
<string name="pref_safetynet_recent_advice">建议</string>
|
||||
<string name="pref_safetynet_test_not_completed">尚未完成</string>
|
||||
<string name="pref_safetynet_test_no_result">无结果</string>
|
||||
<string name="pref_safetynet_test_invalid_json">无效 JSON</string>
|
||||
<string name="pref_safetynet_test_cts_failed">未通过 CTS 测试</string>
|
||||
<string name="pref_recaptcha_enterprise_test_title">进行 reCAPTCHA Enterprise 测试</string>
|
||||
<string name="pref_safetynet_recent_copied">已复制到剪贴板</string>
|
||||
<string name="pref_safetynet_test_integrity_cts_passed">已通过完整性和 CTS 测试</string>
|
||||
<string name="pref_safetynet_test_integrity_failed">未通过完整性测试</string>
|
||||
<string name="pref_safetynet_recent_uses">最近使用</string>
|
||||
<string name="signin_picker_title">选择一个账户</string>
|
||||
<string name="signin_picker_add_account_label">添加另一个账户</string>
|
||||
|
||||
<string name="feedback_disabled">反馈功能不可用</string>
|
||||
</resources>
|
||||
>>>>>>> 64670de2 (Improve dummy for feedback service (#2185))
|
||||
|
|
|
|||
|
|
@ -135,6 +135,7 @@ This can take a couple of minutes."</string>
|
|||
<string name="profile_name_user">Custom: %s</string>
|
||||
<string name="profile_name_auto">Automatic: %s</string>
|
||||
<string name="profile_name_system">System: %s</string>
|
||||
<<<<<<< HEAD
|
||||
<string name="import_profile_name">Import custom profile</string>
|
||||
<string name="import_profile_summary">Import device profile from file</string>
|
||||
<string name="serial_name">Serial</string>
|
||||
|
|
@ -162,4 +163,48 @@ This can take a couple of minutes."</string>
|
|||
<string name="manage_googleaccount_title">Manage signed in Google accounts</string>
|
||||
<string name="manage_googleaccount_summary">This will open your device settings !</string>
|
||||
<string name="miscellaneous_settings">Miscellaneous settings</string>
|
||||
=======
|
||||
<string name="pref_device_registration_import_custom_profile_title">Import custom profile</string>
|
||||
<string name="pref_device_registration_serial_title">Serial</string>
|
||||
<string name="pref_device_registration_import_custom_profile_summary">Import device profile from file</string>
|
||||
<string name="pref_device_registration_select_profile_title">Select profile</string>
|
||||
<string name="pref_device_registration_device_profile_category">Device profile</string>
|
||||
|
||||
<string name="pref_safetynet_recent_uses">Recent uses</string>
|
||||
<string name="pref_safetynet_recent_attestation_summary">Attestation: %s</string>
|
||||
<string name="pref_safetynet_recent_recaptcha_summary">ReCaptcha: %s</string>
|
||||
<string name="pref_safetynet_recent_recaptcha_enterprise_summary">ReCaptcha Enterprise: %s</string>
|
||||
<string name="pref_safetynet_recent_copy_json">Copy JSON JWS data</string>
|
||||
<string name="pref_safetynet_recent_advice">Advice</string>
|
||||
<string name="pref_safetynet_recent_eval_type">Evaluation type</string>
|
||||
<string name="pref_safetynet_recent_response_status">Response status</string>
|
||||
<string name="pref_safetynet_recent_cat_response">Response data</string>
|
||||
<string name="pref_safetynet_recent_cat_request">Request data</string>
|
||||
<string name="pref_safetynet_recent_nonce">Nonce (Hex)</string>
|
||||
<string name="pref_safetynet_recent_request_time">Time of request</string>
|
||||
<string name="pref_safetynet_recent_request_type">Request type</string>
|
||||
<string name="pref_safetynet_recent_cat_basic">Basic data</string>
|
||||
<string name="pref_safetynet_recent_token">Token</string>
|
||||
<string name="pref_safetynet_recent_copied">Copied to clipboard!</string>
|
||||
<string name="pref_safetynet_test_integrity_cts_passed">Integrity and CTS passed</string>
|
||||
<string name="pref_safetynet_test_cts_failed">CTS failed</string>
|
||||
<string name="pref_safetynet_test_integrity_failed">Integrity failed</string>
|
||||
<string name="pref_safetynet_test_not_completed">Not completed yet</string>
|
||||
<string name="pref_safetynet_test_no_result">No result</string>
|
||||
<string name="pref_safetynet_test_invalid_json">Invalid JSON</string>
|
||||
|
||||
<string name="push_notifications_summary_off">OFF</string>
|
||||
<string name="push_notifications_summary_automatic">ON / Automatic: %s</string>
|
||||
<string name="push_notifications_summary_manual">ON / Manual: %s</string>
|
||||
<string name="push_notifications_summary_values_seconds">%s seconds</string>
|
||||
<string name="push_notifications_summary_values_minutes">%s minutes</string>
|
||||
|
||||
<string name="pref_vending_summary_licensing_off">Licensing off</string>
|
||||
<string name="pref_vending_summary_licensing_on">Licensing on</string>
|
||||
<string name="pref_vending_licensing_enable_switch">Answer license verification requests</string>
|
||||
<string name="pref_vending_license_enable_summary">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.</string>
|
||||
|
||||
<string name="feedback_disabled">Feedback currently not possible</string>
|
||||
|
||||
>>>>>>> 64670de2 (Improve dummy for feedback service (#2185))
|
||||
</resources>
|
||||
|
|
|
|||
Loading…
Reference in a new issue