Compare commits
10 commits
f775456b9e
...
c01e6b6ff7
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c01e6b6ff7 | ||
|
|
8b67e50ead | ||
|
|
83c865fd13 | ||
|
|
687830ac10 | ||
|
|
5a77e3682b | ||
|
|
ead9375f81 | ||
|
|
b375e14c78 | ||
|
|
7cf77b2dae | ||
|
|
bd6ff26627 | ||
|
|
0f22bfd5de |
109 changed files with 1335 additions and 400 deletions
|
|
@ -31,6 +31,7 @@ import static android.content.pm.Checksum.TYPE_WHOLE_SHA1;
|
||||||
import static android.content.pm.Checksum.TYPE_WHOLE_SHA256;
|
import static android.content.pm.Checksum.TYPE_WHOLE_SHA256;
|
||||||
import static android.content.pm.Checksum.TYPE_WHOLE_SHA512;
|
import static android.content.pm.Checksum.TYPE_WHOLE_SHA512;
|
||||||
|
|
||||||
|
import android.Manifest;
|
||||||
import android.annotation.CallbackExecutor;
|
import android.annotation.CallbackExecutor;
|
||||||
import android.annotation.DrawableRes;
|
import android.annotation.DrawableRes;
|
||||||
import android.annotation.NonNull;
|
import android.annotation.NonNull;
|
||||||
|
|
@ -834,8 +835,96 @@ public class ApplicationPackageManager extends PackageManager {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
private static final String[] featuresPixel = {
|
||||||
|
"com.google.android.apps.photos.PIXEL_2019_PRELOAD",
|
||||||
|
"com.google.android.apps.photos.PIXEL_2019_MIDYEAR_PRELOAD",
|
||||||
|
"com.google.android.apps.photos.PIXEL_2018_PRELOAD",
|
||||||
|
"com.google.android.apps.photos.PIXEL_2017_PRELOAD",
|
||||||
|
"com.google.android.feature.PIXEL_2021_MIDYEAR_EXPERIENCE",
|
||||||
|
"com.google.android.feature.PIXEL_2020_EXPERIENCE",
|
||||||
|
"com.google.android.feature.PIXEL_2020_MIDYEAR_EXPERIENCE",
|
||||||
|
"com.google.android.feature.PIXEL_2019_EXPERIENCE",
|
||||||
|
"com.google.android.feature.PIXEL_2019_MIDYEAR_EXPERIENCE",
|
||||||
|
"com.google.android.feature.PIXEL_2018_EXPERIENCE",
|
||||||
|
"com.google.android.feature.PIXEL_2017_EXPERIENCE",
|
||||||
|
"com.google.android.feature.PIXEL_EXPERIENCE",
|
||||||
|
"com.google.android.feature.GOOGLE_BUILD",
|
||||||
|
"com.google.android.feature.GOOGLE_EXPERIENCE"
|
||||||
|
};
|
||||||
|
|
||||||
|
private static final String[] featuresPixelOthers = {
|
||||||
|
"com.google.android.feature.ASI",
|
||||||
|
"com.google.android.feature.ANDROID_ONE_EXPERIENCE",
|
||||||
|
"com.google.android.feature.GOOGLE_FI_BUNDLED",
|
||||||
|
"com.google.android.feature.LILY_EXPERIENCE",
|
||||||
|
"com.google.android.feature.TURBO_PRELOAD",
|
||||||
|
"com.google.android.feature.WELLBEING",
|
||||||
|
"com.google.lens.feature.IMAGE_INTEGRATION",
|
||||||
|
"com.google.lens.feature.CAMERA_INTEGRATION",
|
||||||
|
"com.google.photos.trust_debug_certs",
|
||||||
|
"com.google.android.feature.AER_OPTIMIZED",
|
||||||
|
"com.google.android.feature.NEXT_GENERATION_ASSISTANT",
|
||||||
|
"android.software.game_service",
|
||||||
|
"com.google.android.feature.EXCHANGE_6_2",
|
||||||
|
"com.google.android.apps.dialer.call_recording_audio",
|
||||||
|
"com.google.android.apps.dialer.SUPPORTED",
|
||||||
|
"com.google.android.feature.CONTEXTUAL_SEARCH",
|
||||||
|
"com.google.android.feature.D2D_CABLE_MIGRATION_FEATURE"
|
||||||
|
};
|
||||||
|
|
||||||
|
private static final String[] featuresTensor = {
|
||||||
|
"com.google.android.feature.PIXEL_2026_EXPERIENCE",
|
||||||
|
"com.google.android.feature.PIXEL_2026_MIDYEAR_EXPERIENCE",
|
||||||
|
"com.google.android.feature.PIXEL_2025_EXPERIENCE",
|
||||||
|
"com.google.android.feature.PIXEL_2025_MIDYEAR_EXPERIENCE",
|
||||||
|
"com.google.android.feature.PIXEL_2024_EXPERIENCE",
|
||||||
|
"com.google.android.feature.PIXEL_2024_MIDYEAR_EXPERIENCE",
|
||||||
|
"com.google.android.feature.PIXEL_2023_EXPERIENCE",
|
||||||
|
"com.google.android.feature.PIXEL_2023_MIDYEAR_EXPERIENCE",
|
||||||
|
"com.google.android.feature.PIXEL_2022_EXPERIENCE",
|
||||||
|
"com.google.android.feature.PIXEL_2022_MIDYEAR_EXPERIENCE",
|
||||||
|
"com.google.android.feature.PIXEL_2021_EXPERIENCE"
|
||||||
|
};
|
||||||
|
|
||||||
|
private static final String[] featuresNexus = {
|
||||||
|
"com.google.android.apps.photos.NEXUS_PRELOAD",
|
||||||
|
"com.google.android.apps.photos.nexus_preload",
|
||||||
|
"com.google.android.feature.PIXEL_EXPERIENCE",
|
||||||
|
"com.google.android.feature.GOOGLE_BUILD",
|
||||||
|
"com.google.android.feature.GOOGLE_EXPERIENCE"
|
||||||
|
};
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean hasSystemFeature(String name, int version) {
|
public boolean hasSystemFeature(String name, int version) {
|
||||||
|
String packageName = ActivityThread.currentPackageName();
|
||||||
|
if (packageName != null
|
||||||
|
&& (packageName.equals("com.google.android.googlequicksearchbox")
|
||||||
|
|| packageName.equals("com.google.android.apps.pixel.agent")
|
||||||
|
|| packageName.equals("com.google.android.apps.pixel.creativeassistant")
|
||||||
|
|| packageName.equals("com.google.android.dialer")
|
||||||
|
|| packageName.equals("com.google.android.apps.nexuslauncher")
|
||||||
|
|| (packageName.equals("com.google.android.apps.photos")
|
||||||
|
&& !SystemProperties.getBoolean("persist.sys.gphooks.enable", false)))) {
|
||||||
|
if (Arrays.asList(featuresPixel).contains(name)) return true;
|
||||||
|
if (Arrays.asList(featuresPixelOthers).contains(name)) return true;
|
||||||
|
if (Arrays.asList(featuresTensor).contains(name)) return true;
|
||||||
|
if (Arrays.asList(featuresNexus).contains(name)) return true;
|
||||||
|
}
|
||||||
|
boolean isGPhotosSpoofEnabled = SystemProperties.getBoolean("persist.sys.gphooks.enable", false);
|
||||||
|
if (packageName != null
|
||||||
|
&& packageName.equals("com.google.android.apps.photos") && isGPhotosSpoofEnabled) {
|
||||||
|
if (Arrays.asList(featuresPixel).contains(name)) return false;
|
||||||
|
if (Arrays.asList(featuresPixelOthers).contains(name)) return true;
|
||||||
|
if (Arrays.asList(featuresNexus).contains(name)) return true;
|
||||||
|
}
|
||||||
|
boolean isTensorDevice = SystemProperties.get("ro.product.model").matches("Pixel [6-9][a-zA-Z ]*");
|
||||||
|
if (name != null && Arrays.asList(featuresTensor).contains(name)
|
||||||
|
&& !isTensorDevice) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (Arrays.asList(featuresNexus).contains(name)) return true;
|
||||||
|
if (Arrays.asList(featuresPixel).contains(name)) return true;
|
||||||
|
if (Arrays.asList(featuresPixelOthers).contains(name)) return true;
|
||||||
return mHasSystemFeatureCache.query(new HasSystemFeatureQuery(name, version));
|
return mHasSystemFeatureCache.query(new HasSystemFeatureQuery(name, version));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -851,8 +940,23 @@ public class ApplicationPackageManager extends PackageManager {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int checkPermission(String permName, String pkgName) {
|
public int checkPermission(String permName, String pkgName) {
|
||||||
return getPermissionManager().checkPackageNamePermission(permName, pkgName,
|
int res = getPermissionManager().checkPackageNamePermission(permName, pkgName,
|
||||||
mContext.getDeviceId(), getUserId());
|
mContext.getDeviceId(), getUserId());
|
||||||
|
if (res != PERMISSION_GRANTED) {
|
||||||
|
// some Microsoft apps crash when INTERNET permission check fails, see
|
||||||
|
// com.microsoft.aad.adal.AuthenticationContext.checkInternetPermission() and
|
||||||
|
// com.microsoft.identity.client.PublicClientApplication.checkInternetPermission()
|
||||||
|
if (Manifest.permission.INTERNET.equals(permName)
|
||||||
|
// don't rely on Context.getPackageName(), may be different from process package name
|
||||||
|
&& pkgName.equals(ActivityThread.currentPackageName())
|
||||||
|
&& pkgName.toLowerCase().contains("microsoft")
|
||||||
|
&& pkgName.toLowerCase().contains("com.android")
|
||||||
|
&& pkgName.toLowerCase().contains("google"))
|
||||||
|
{
|
||||||
|
return PERMISSION_GRANTED;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
||||||
|
|
@ -75,6 +75,10 @@ import java.util.Objects;
|
||||||
import java.util.StringJoiner;
|
import java.util.StringJoiner;
|
||||||
import java.util.concurrent.TimeoutException;
|
import java.util.concurrent.TimeoutException;
|
||||||
|
|
||||||
|
import com.android.internal.util.custom.AttestationHooks;
|
||||||
|
import com.android.internal.util.custom.GamesPropsUtils;
|
||||||
|
import com.android.internal.util.custom.PixelPropsUtils;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Base class for implementing application instrumentation code. When running
|
* Base class for implementing application instrumentation code. When running
|
||||||
* with instrumentation turned on, this class will be instantiated for you
|
* with instrumentation turned on, this class will be instantiated for you
|
||||||
|
|
@ -1356,6 +1360,9 @@ public class Instrumentation {
|
||||||
Application app = getFactory(context.getPackageName())
|
Application app = getFactory(context.getPackageName())
|
||||||
.instantiateApplication(cl, className);
|
.instantiateApplication(cl, className);
|
||||||
app.attach(context);
|
app.attach(context);
|
||||||
|
AttestationHooks.setProps(context);
|
||||||
|
GamesPropsUtils.setProps(context);
|
||||||
|
PixelPropsUtils.setProps(context);
|
||||||
return app;
|
return app;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1373,6 +1380,9 @@ public class Instrumentation {
|
||||||
ClassNotFoundException {
|
ClassNotFoundException {
|
||||||
Application app = (Application)clazz.newInstance();
|
Application app = (Application)clazz.newInstance();
|
||||||
app.attach(context);
|
app.attach(context);
|
||||||
|
AttestationHooks.setProps(context);
|
||||||
|
GamesPropsUtils.setProps(context);
|
||||||
|
PixelPropsUtils.setProps(context);
|
||||||
return app;
|
return app;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -40,6 +40,7 @@ public class FingerprintSensorPropertiesInternal extends SensorPropertiesInterna
|
||||||
*/
|
*/
|
||||||
public final @FingerprintSensorProperties.SensorType int sensorType;
|
public final @FingerprintSensorProperties.SensorType int sensorType;
|
||||||
public final boolean halControlsIllumination;
|
public final boolean halControlsIllumination;
|
||||||
|
public final boolean halHandlesDisplayTouches;
|
||||||
|
|
||||||
private final List<SensorLocationInternal> mSensorLocations;
|
private final List<SensorLocationInternal> mSensorLocations;
|
||||||
|
|
||||||
|
|
@ -48,6 +49,7 @@ public class FingerprintSensorPropertiesInternal extends SensorPropertiesInterna
|
||||||
@NonNull List<ComponentInfoInternal> componentInfo,
|
@NonNull List<ComponentInfoInternal> componentInfo,
|
||||||
@FingerprintSensorProperties.SensorType int sensorType,
|
@FingerprintSensorProperties.SensorType int sensorType,
|
||||||
boolean halControlsIllumination,
|
boolean halControlsIllumination,
|
||||||
|
boolean halHandlesDisplayTouches,
|
||||||
boolean resetLockoutRequiresHardwareAuthToken,
|
boolean resetLockoutRequiresHardwareAuthToken,
|
||||||
@NonNull List<SensorLocationInternal> sensorLocations) {
|
@NonNull List<SensorLocationInternal> sensorLocations) {
|
||||||
// IBiometricsFingerprint@2.1 handles lockout in the framework, so the challenge is not
|
// IBiometricsFingerprint@2.1 handles lockout in the framework, so the challenge is not
|
||||||
|
|
@ -58,6 +60,7 @@ public class FingerprintSensorPropertiesInternal extends SensorPropertiesInterna
|
||||||
resetLockoutRequiresHardwareAuthToken, false /* resetLockoutRequiresChallenge */);
|
resetLockoutRequiresHardwareAuthToken, false /* resetLockoutRequiresChallenge */);
|
||||||
this.sensorType = sensorType;
|
this.sensorType = sensorType;
|
||||||
this.halControlsIllumination = halControlsIllumination;
|
this.halControlsIllumination = halControlsIllumination;
|
||||||
|
this.halHandlesDisplayTouches = halHandlesDisplayTouches;
|
||||||
this.mSensorLocations = List.copyOf(sensorLocations);
|
this.mSensorLocations = List.copyOf(sensorLocations);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -71,7 +74,8 @@ public class FingerprintSensorPropertiesInternal extends SensorPropertiesInterna
|
||||||
boolean resetLockoutRequiresHardwareAuthToken) {
|
boolean resetLockoutRequiresHardwareAuthToken) {
|
||||||
// TODO(b/179175438): Value should be provided from the HAL
|
// TODO(b/179175438): Value should be provided from the HAL
|
||||||
this(sensorId, strength, maxEnrollmentsPerUser, componentInfo, sensorType,
|
this(sensorId, strength, maxEnrollmentsPerUser, componentInfo, sensorType,
|
||||||
false /* halControlsIllumination */, resetLockoutRequiresHardwareAuthToken,
|
false /* halControlsIllumination */, false /* halHandlesDisplayTouches */,
|
||||||
|
resetLockoutRequiresHardwareAuthToken,
|
||||||
List.of(new SensorLocationInternal("" /* displayId */, 540 /* sensorLocationX */,
|
List.of(new SensorLocationInternal("" /* displayId */, 540 /* sensorLocationX */,
|
||||||
1636 /* sensorLocationY */, 130 /* sensorRadius */)));
|
1636 /* sensorLocationY */, 130 /* sensorRadius */)));
|
||||||
}
|
}
|
||||||
|
|
@ -80,6 +84,7 @@ public class FingerprintSensorPropertiesInternal extends SensorPropertiesInterna
|
||||||
super(in);
|
super(in);
|
||||||
sensorType = in.readInt();
|
sensorType = in.readInt();
|
||||||
halControlsIllumination = in.readBoolean();
|
halControlsIllumination = in.readBoolean();
|
||||||
|
halHandlesDisplayTouches = in.readBoolean();
|
||||||
mSensorLocations = in.createTypedArrayList(SensorLocationInternal.CREATOR);
|
mSensorLocations = in.createTypedArrayList(SensorLocationInternal.CREATOR);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -106,6 +111,7 @@ public class FingerprintSensorPropertiesInternal extends SensorPropertiesInterna
|
||||||
super.writeToParcel(dest, flags);
|
super.writeToParcel(dest, flags);
|
||||||
dest.writeInt(sensorType);
|
dest.writeInt(sensorType);
|
||||||
dest.writeBoolean(halControlsIllumination);
|
dest.writeBoolean(halControlsIllumination);
|
||||||
|
dest.writeBoolean(halHandlesDisplayTouches);
|
||||||
dest.writeTypedList(mSensorLocations);
|
dest.writeTypedList(mSensorLocations);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -76,6 +76,7 @@ public final class HidlFingerprintSensorConfig extends SensorProps {
|
||||||
commonProps.maxEnrollmentsPerUser = context.getResources().getInteger(
|
commonProps.maxEnrollmentsPerUser = context.getResources().getInteger(
|
||||||
R.integer.config_fingerprintMaxTemplatesPerUser);
|
R.integer.config_fingerprintMaxTemplatesPerUser);
|
||||||
halControlsIllumination = false;
|
halControlsIllumination = false;
|
||||||
|
halHandlesDisplayTouches = false;
|
||||||
sensorLocations = new SensorLocation[1];
|
sensorLocations = new SensorLocation[1];
|
||||||
|
|
||||||
// Non-empty workaroundLocations indicates that the sensor is SFPS.
|
// Non-empty workaroundLocations indicates that the sensor is SFPS.
|
||||||
|
|
|
||||||
|
|
@ -19479,6 +19479,13 @@ public final class Settings {
|
||||||
*/
|
*/
|
||||||
public static final String RESTRICTED_NETWORKING_MODE = "restricted_networking_mode";
|
public static final String RESTRICTED_NETWORKING_MODE = "restricted_networking_mode";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Control whether FLAG_SECURE is ignored for all windows.
|
||||||
|
* @hide
|
||||||
|
*/
|
||||||
|
@Readable
|
||||||
|
public static final String WINDOW_IGNORE_SECURE = "window_ignore_secure";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Setting indicating whether Low Power Standby is enabled, if supported.
|
* Setting indicating whether Low Power Standby is enabled, if supported.
|
||||||
*
|
*
|
||||||
|
|
|
||||||
|
|
@ -20,6 +20,7 @@ import static android.Manifest.permission.HIDE_NON_SYSTEM_OVERLAY_WINDOWS;
|
||||||
import static android.Manifest.permission.HIDE_OVERLAY_WINDOWS;
|
import static android.Manifest.permission.HIDE_OVERLAY_WINDOWS;
|
||||||
import static android.content.pm.PackageManager.PERMISSION_GRANTED;
|
import static android.content.pm.PackageManager.PERMISSION_GRANTED;
|
||||||
import static android.view.WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED;
|
import static android.view.WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED;
|
||||||
|
import static android.view.WindowManager.LayoutParams.FLAG_SECURE;
|
||||||
import static android.view.WindowManager.LayoutParams.SYSTEM_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS;
|
import static android.view.WindowManager.LayoutParams.SYSTEM_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS;
|
||||||
|
|
||||||
import android.annotation.ColorInt;
|
import android.annotation.ColorInt;
|
||||||
|
|
@ -52,6 +53,7 @@ import android.os.Build;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
import android.os.IBinder;
|
import android.os.IBinder;
|
||||||
|
import android.provider.Settings;
|
||||||
import android.transition.Scene;
|
import android.transition.Scene;
|
||||||
import android.transition.Transition;
|
import android.transition.Transition;
|
||||||
import android.transition.TransitionManager;
|
import android.transition.TransitionManager;
|
||||||
|
|
@ -1303,6 +1305,10 @@ public abstract class Window {
|
||||||
* @see #clearFlags
|
* @see #clearFlags
|
||||||
*/
|
*/
|
||||||
public void setFlags(int flags, int mask) {
|
public void setFlags(int flags, int mask) {
|
||||||
|
if ((mask & FLAG_SECURE) != 0 && Settings.Global.getInt(mContext.getContentResolver(),
|
||||||
|
Settings.Global.WINDOW_IGNORE_SECURE, 0) == 1) {
|
||||||
|
mask &= ~FLAG_SECURE;
|
||||||
|
}
|
||||||
final WindowManager.LayoutParams attrs = getAttributes();
|
final WindowManager.LayoutParams attrs = getAttributes();
|
||||||
attrs.flags = (attrs.flags&~mask) | (flags&mask);
|
attrs.flags = (attrs.flags&~mask) | (flags&mask);
|
||||||
mForcedWindowFlags |= mask;
|
mForcedWindowFlags |= mask;
|
||||||
|
|
|
||||||
121
core/java/com/android/internal/util/custom/AttestationHooks.java
Normal file
121
core/java/com/android/internal/util/custom/AttestationHooks.java
Normal file
|
|
@ -0,0 +1,121 @@
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2021 The Android Open Source Project
|
||||||
|
* (C) 2023 ArrowOS
|
||||||
|
* (C) 2023 The LibreMobileOS Foundation
|
||||||
|
*
|
||||||
|
* 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.android.internal.util.custom;
|
||||||
|
|
||||||
|
import android.app.Application;
|
||||||
|
import android.content.Context;
|
||||||
|
import android.content.res.Resources;
|
||||||
|
import android.os.Build;
|
||||||
|
import android.os.SystemProperties;
|
||||||
|
import android.text.TextUtils;
|
||||||
|
import android.util.Log;
|
||||||
|
|
||||||
|
import com.android.internal.R;
|
||||||
|
|
||||||
|
import java.lang.reflect.Field;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @hide
|
||||||
|
*/
|
||||||
|
public final class AttestationHooks {
|
||||||
|
|
||||||
|
private static final String TAG = "AttestationHooks";
|
||||||
|
private static final boolean DEBUG = false;
|
||||||
|
|
||||||
|
private static final String PACKAGE_GPHOTOS = "com.google.android.apps.photos";
|
||||||
|
private static final String PACKAGE_VENDING = "com.android.vending";
|
||||||
|
private static final String PACKAGE_SNAPCHAT = "com.snapchat.android";
|
||||||
|
private static final String SPOOF_PIXEL_GPHOTOS = "persist.sys.gphooks.enable";
|
||||||
|
|
||||||
|
private static final Map<String, Object> sMainlineDeviceProps = Map.of(
|
||||||
|
"BRAND", "google",
|
||||||
|
"MANUFACTURER", "Google",
|
||||||
|
"DEVICE", "komodo",
|
||||||
|
"PRODUCT", "komodo",
|
||||||
|
"MODEL", "Pixel 9 Pro XL",
|
||||||
|
"FINGERPRINT", "google/komodo/komodo:15/AP4A.250205.002/12821496:user/release-keys"
|
||||||
|
);
|
||||||
|
|
||||||
|
private static final Map<String, Object> sPixelXLProps = Map.of(
|
||||||
|
"BRAND", "google",
|
||||||
|
"MANUFACTURER", "Google",
|
||||||
|
"DEVICE", "marlin",
|
||||||
|
"PRODUCT", "marlin",
|
||||||
|
"MODEL", "Pixel XL",
|
||||||
|
"FINGERPRINT", "google/marlin/marlin:10/QP1A.191005.007.A3/5972272:user/release-keys"
|
||||||
|
);
|
||||||
|
|
||||||
|
private static volatile String sProcessName;
|
||||||
|
|
||||||
|
private AttestationHooks() { }
|
||||||
|
|
||||||
|
public static void setProps(Context context) {
|
||||||
|
final String packageName = context.getPackageName();
|
||||||
|
final String processName = Application.getProcessName();
|
||||||
|
|
||||||
|
if (TextUtils.isEmpty(packageName) || processName == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
sProcessName = processName;
|
||||||
|
|
||||||
|
boolean isPixelDevice = SystemProperties.get("ro.product.model").matches("Pixel [6-9][a-zA-Z ]*");
|
||||||
|
boolean isGPhotosSpoofEnabled = SystemProperties.getBoolean(SPOOF_PIXEL_GPHOTOS, false);
|
||||||
|
if (packageName.equals(PACKAGE_GPHOTOS)) {
|
||||||
|
if (isGPhotosSpoofEnabled) {
|
||||||
|
sPixelXLProps.forEach(AttestationHooks::setPropValue);
|
||||||
|
} else {
|
||||||
|
if (!isPixelDevice) {
|
||||||
|
sMainlineDeviceProps.forEach(AttestationHooks::setPropValue);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (packageName.equals(PACKAGE_VENDING)) {
|
||||||
|
if (SystemProperties.getBoolean("persist.sys.vending.enable", false)) {
|
||||||
|
sMainlineDeviceProps.forEach(AttestationHooks::setPropValue);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (packageName.equals(PACKAGE_SNAPCHAT)) {
|
||||||
|
if (SystemProperties.getBoolean("persist.sys.snap.enable", false)) {
|
||||||
|
sPixelXLProps.forEach(AttestationHooks::setPropValue);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void setPropValue(String key, Object value) {
|
||||||
|
try {
|
||||||
|
dlog("Setting prop " + key + " to " + value.toString());
|
||||||
|
Field field = Build.class.getDeclaredField(key);
|
||||||
|
field.setAccessible(true);
|
||||||
|
field.set(null, value);
|
||||||
|
field.setAccessible(false);
|
||||||
|
} catch (NoSuchFieldException | IllegalAccessException e) {
|
||||||
|
Log.e(TAG, "Failed to set prop " + key, e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void dlog(String msg) {
|
||||||
|
if (DEBUG) Log.d(TAG, "[" + sProcessName + "] " + msg);
|
||||||
|
}
|
||||||
|
}
|
||||||
80
core/java/com/android/internal/util/custom/BypassUtils.java
Normal file
80
core/java/com/android/internal/util/custom/BypassUtils.java
Normal file
|
|
@ -0,0 +1,80 @@
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2023-2024 the risingOS Android Project
|
||||||
|
*
|
||||||
|
* 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.android.internal.util.custom;
|
||||||
|
|
||||||
|
import android.app.ActivityThread;
|
||||||
|
import android.content.Context;
|
||||||
|
import android.content.pm.ApplicationInfo;
|
||||||
|
import android.content.pm.PackageManager;
|
||||||
|
import android.os.RemoteException;
|
||||||
|
import android.os.UserHandle;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.HashSet;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
public class BypassUtils {
|
||||||
|
|
||||||
|
private static Set<String> mLauncherPkgs;
|
||||||
|
private static Set<String> mExemptedUidPkgs;
|
||||||
|
|
||||||
|
private static Set<String> getLauncherPkgs() {
|
||||||
|
if (mLauncherPkgs == null) {
|
||||||
|
Context context = getContext();
|
||||||
|
if (context != null) {
|
||||||
|
mLauncherPkgs = new HashSet<>(Arrays.asList(context.getResources()
|
||||||
|
.getStringArray(com.android.internal.R.array.config_launcherPackages)));
|
||||||
|
} else {
|
||||||
|
mLauncherPkgs = new HashSet<>();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return mLauncherPkgs;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static Set<String> getExemptedUidPkgs() {
|
||||||
|
if (mExemptedUidPkgs == null) {
|
||||||
|
mExemptedUidPkgs = new HashSet<>();
|
||||||
|
mExemptedUidPkgs.add("com.google.android.gms");
|
||||||
|
mExemptedUidPkgs.addAll(getLauncherPkgs());
|
||||||
|
}
|
||||||
|
return mExemptedUidPkgs;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean isSystemLauncher(int callingUid) {
|
||||||
|
try {
|
||||||
|
String callerPackage = ActivityThread.getPackageManager().getNameForUid(callingUid);
|
||||||
|
return getLauncherPkgs().contains(callerPackage);
|
||||||
|
} catch (Exception e) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Context getContext() {
|
||||||
|
return ActivityThread.currentApplication().getApplicationContext();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean shouldBypassPermission(int callingUid) {
|
||||||
|
for (String pkg : getExemptedUidPkgs()) {
|
||||||
|
try {
|
||||||
|
ApplicationInfo appInfo = ActivityThread.getPackageManager()
|
||||||
|
.getApplicationInfo(pkg, 0, UserHandle.getUserId(callingUid));
|
||||||
|
if (appInfo.uid == callingUid) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
} catch (Exception e) {}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
169
core/java/com/android/internal/util/custom/GamesPropsUtils.java
Normal file
169
core/java/com/android/internal/util/custom/GamesPropsUtils.java
Normal file
|
|
@ -0,0 +1,169 @@
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2023 The Android Open Source Project
|
||||||
|
*
|
||||||
|
* 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.android.internal.util.custom;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
import android.os.Build;
|
||||||
|
import android.os.SystemProperties;
|
||||||
|
import android.util.Log;
|
||||||
|
|
||||||
|
import java.lang.reflect.Field;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @hide
|
||||||
|
*/
|
||||||
|
public final class GamesPropsUtils {
|
||||||
|
|
||||||
|
private static final String TAG = GamesPropsUtils.class.getSimpleName();
|
||||||
|
private static final boolean DEBUG = false;
|
||||||
|
|
||||||
|
private static final Map<String, Object> propsToChangeBS4 = createMap("2SM-X706B", "blackshark");
|
||||||
|
private static final String[] packagesToChangeBS4 = { // spoof as Black Shark 4
|
||||||
|
"com.proximabeta.mf.uamo"
|
||||||
|
};
|
||||||
|
|
||||||
|
private static final Map<String, Object> propsToChangeMI11TP = createMap("2107113SI", "Xiaomi");
|
||||||
|
private static final String[] packagesToChangeMI11TP = { // spoof as Mi 11T PRO
|
||||||
|
"com.ea.gp.apexlegendsmobilefps",
|
||||||
|
"com.levelinfinite.hotta.gp",
|
||||||
|
"com.supercell.brawlstars",
|
||||||
|
"com.supercell.clashofclans",
|
||||||
|
"com.vng.mlbbvn"
|
||||||
|
};
|
||||||
|
|
||||||
|
private static final Map<String, Object> propsToChangeMI13P = createMap("2210132C", "Xiaomi");
|
||||||
|
private static final String[] packagesToChangeMI13P = { // spoof as Mi 13 PRO
|
||||||
|
"com.levelinfinite.sgameGlobal",
|
||||||
|
"com.tencent.tmgp.sgame"
|
||||||
|
};
|
||||||
|
|
||||||
|
private static final Map<String, Object> propsToChangeOP8P = createMap("IN2020", "OnePlus");
|
||||||
|
private static final String[] packagesToChangeOP8P = { // spoof as OnePlus 8 PRO
|
||||||
|
"com.netease.lztgglobal",
|
||||||
|
"com.riotgames.league.wildrift",
|
||||||
|
"com.riotgames.league.wildrifttw",
|
||||||
|
"com.riotgames.league.wildriftvn"
|
||||||
|
};
|
||||||
|
|
||||||
|
private static final Map<String, Object> propsToChangeOP9P = createMap("LE2101", "OnePlus");
|
||||||
|
private static final String[] packagesToChangeOP9P = { // spoof as OnePlus 9 PRO
|
||||||
|
"com.epicgames.fortnite",
|
||||||
|
"com.epicgames.portal",
|
||||||
|
"com.tencent.lolm"
|
||||||
|
};
|
||||||
|
|
||||||
|
private static final Map<String, Object> propsToChangeF5 = createMap("23049PCD8G", "Xiaomi");
|
||||||
|
private static final String[] packagesToChangeF5 = { // spoof as POCO F5
|
||||||
|
"com.dts.freefiremax",
|
||||||
|
"com.dts.freefireth",
|
||||||
|
"com.mobile.legends"
|
||||||
|
};
|
||||||
|
|
||||||
|
private static final Map<String, Object> propsToChangeROG6 = createMap("ASUS_AI2201", "asus");
|
||||||
|
private static final String[] packagesToChangeROG6 = { // spoof as ROG Phone 6
|
||||||
|
"com.ea.gp.fifamobile",
|
||||||
|
"com.gameloft.android.ANMP.GloftA9HM",
|
||||||
|
"com.madfingergames.legends",
|
||||||
|
"com.pearlabyss.blackdesertm",
|
||||||
|
"com.pearlabyss.blackdesertm.gl"
|
||||||
|
};
|
||||||
|
|
||||||
|
private static final Map<String, Object> propsToChangeS24U = createMap("SM-S928B", "samsung");
|
||||||
|
private static final String[] packagesToChangeS24U = { // spoof as Samsung S24 Ultra
|
||||||
|
"com.blizzard.diablo.immortal",
|
||||||
|
"com.pubg.imobile",
|
||||||
|
"com.pubg.krmobile",
|
||||||
|
"com.rekoo.pubgm",
|
||||||
|
"com.tencent.ig",
|
||||||
|
"com.tencent.tmgp.pubgmhd",
|
||||||
|
"com.vng.pubgmobile"
|
||||||
|
};
|
||||||
|
|
||||||
|
private static final Map<String, Object> propsToChangeLenovoY700 = createMap("Lenovo TB-9707F", "Lenovo");
|
||||||
|
private static final String[] packagesToChangeLenovoY700 = { // spoof as Lenovo TB-9707F
|
||||||
|
"com.activision.callofduty.shooter",
|
||||||
|
"com.garena.game.codm",
|
||||||
|
"com.tencent.tmgp.kr.codm",
|
||||||
|
"com.vng.codmvn"
|
||||||
|
};
|
||||||
|
|
||||||
|
private static Map<String, Object> createMap(String model, String manufacturer) {
|
||||||
|
Map<String, Object> map = new HashMap<>();
|
||||||
|
map.put("MODEL", model);
|
||||||
|
map.put("MANUFACTURER", manufacturer);
|
||||||
|
return map;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void setProps(Context context) {
|
||||||
|
final String packageName = context.getPackageName();
|
||||||
|
|
||||||
|
if (packageName == null || packageName.isEmpty()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
Map<String, Object> propsToChange = null;
|
||||||
|
if (!SystemProperties.getBoolean("persist.sys.gamehooks.enable", false)) {
|
||||||
|
return;
|
||||||
|
} else {
|
||||||
|
if (Arrays.asList(packagesToChangeBS4).contains(packageName)) {
|
||||||
|
propsToChange = propsToChangeBS4;
|
||||||
|
} else if (Arrays.asList(packagesToChangeMI11TP).contains(packageName)) {
|
||||||
|
propsToChange = propsToChangeMI11TP;
|
||||||
|
} else if (Arrays.asList(packagesToChangeMI13P).contains(packageName)) {
|
||||||
|
propsToChange = propsToChangeMI13P;
|
||||||
|
} else if (Arrays.asList(packagesToChangeOP8P).contains(packageName)) {
|
||||||
|
propsToChange = propsToChangeOP8P;
|
||||||
|
} else if (Arrays.asList(packagesToChangeOP9P).contains(packageName)) {
|
||||||
|
propsToChange = propsToChangeOP9P;
|
||||||
|
} else if (Arrays.asList(packagesToChangeF5).contains(packageName)) {
|
||||||
|
propsToChange = propsToChangeF5;
|
||||||
|
} else if (Arrays.asList(packagesToChangeROG6).contains(packageName)) {
|
||||||
|
propsToChange = propsToChangeROG6;
|
||||||
|
} else if (Arrays.asList(packagesToChangeS24U).contains(packageName)) {
|
||||||
|
propsToChange = propsToChangeS24U;
|
||||||
|
} else if (Arrays.asList(packagesToChangeLenovoY700).contains(packageName)) {
|
||||||
|
propsToChange = propsToChangeLenovoY700;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (propsToChange != null) {
|
||||||
|
dlog("Defining props for: " + packageName);
|
||||||
|
for (Map.Entry<String, Object> prop : propsToChange.entrySet()) {
|
||||||
|
String key = prop.getKey();
|
||||||
|
Object value = prop.getValue();
|
||||||
|
setPropValue(key, value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void setPropValue(String key, Object value) {
|
||||||
|
try {
|
||||||
|
dlog("Defining prop " + key + " to " + value.toString());
|
||||||
|
Field field = Build.class.getDeclaredField(key);
|
||||||
|
field.setAccessible(true);
|
||||||
|
field.set(null, value);
|
||||||
|
field.setAccessible(false);
|
||||||
|
} catch (NoSuchFieldException | IllegalAccessException e) {
|
||||||
|
Log.e(TAG, "Failed to set prop " + key, e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void dlog(String msg) {
|
||||||
|
if (DEBUG) Log.d(TAG, msg);
|
||||||
|
}
|
||||||
|
}
|
||||||
424
core/java/com/android/internal/util/custom/PixelPropsUtils.java
Normal file
424
core/java/com/android/internal/util/custom/PixelPropsUtils.java
Normal file
|
|
@ -0,0 +1,424 @@
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2020 The Pixel Experience Project
|
||||||
|
* 2022 StatiXOS
|
||||||
|
* 2021-2022 crDroid Android Project
|
||||||
|
* 2019-2024 The Evolution X Project
|
||||||
|
*
|
||||||
|
* 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.android.internal.util.custom;
|
||||||
|
|
||||||
|
import android.app.ActivityTaskManager;
|
||||||
|
import android.app.Application;
|
||||||
|
import android.app.TaskStackListener;
|
||||||
|
import android.content.ComponentName;
|
||||||
|
import android.content.Context;
|
||||||
|
import android.content.res.Configuration;
|
||||||
|
import android.content.res.Resources;
|
||||||
|
import android.os.Binder;
|
||||||
|
import android.os.Build;
|
||||||
|
import android.os.Process;
|
||||||
|
import android.os.SystemProperties;
|
||||||
|
import android.text.TextUtils;
|
||||||
|
import android.util.DisplayMetrics;
|
||||||
|
import android.util.Log;
|
||||||
|
import android.view.WindowManager;
|
||||||
|
|
||||||
|
import com.android.internal.R;
|
||||||
|
import com.android.internal.util.custom.Utils;
|
||||||
|
|
||||||
|
import java.lang.reflect.Field;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Random;
|
||||||
|
import java.util.regex.Pattern;
|
||||||
|
import java.util.regex.Matcher;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @hide
|
||||||
|
*/
|
||||||
|
public final class PixelPropsUtils {
|
||||||
|
|
||||||
|
private static final String PACKAGE_ARCORE = "com.google.ar.core";
|
||||||
|
private static final String PACKAGE_GMS = "com.google.android.gms";
|
||||||
|
private static final String PROCESS_GMS_UNSTABLE = PACKAGE_GMS + ".unstable";
|
||||||
|
private static final String PACKAGE_GOOGLE = "com.google";
|
||||||
|
private static final String PACKAGE_SI = "com.google.android.settings.intelligence";
|
||||||
|
private static final String SPOOF_PI = "persist.sys.pihooks.enable";
|
||||||
|
private static final String SPOOF_PIXEL_PROPS = "persist.sys.pphooks.enable";
|
||||||
|
|
||||||
|
private static final String TAG = PixelPropsUtils.class.getSimpleName();
|
||||||
|
private static final String PROP_HOOKS = "persist.sys.pihooks_";
|
||||||
|
private static final boolean DEBUG = SystemProperties.getBoolean("persist.sys.pihooks.debug", false);
|
||||||
|
|
||||||
|
private static final String sDeviceModel =
|
||||||
|
SystemProperties.get("ro.product.model", Build.MODEL);
|
||||||
|
private static final String sDeviceFingerprint =
|
||||||
|
SystemProperties.get("ro.product.fingerprint", Build.FINGERPRINT);
|
||||||
|
|
||||||
|
private static final Boolean sEnablePixelProps =
|
||||||
|
Resources.getSystem().getBoolean(R.bool.config_enablePixelProps);
|
||||||
|
|
||||||
|
private static final Map<String, Object> propsToChangeGeneric;
|
||||||
|
private static final Map<String, Object> propsToChangeRecentPixel;
|
||||||
|
private static final Map<String, Object> propsToChangePixelTablet;
|
||||||
|
private static final Map<String, Object> propsToChangePixel5a;
|
||||||
|
private static final Map<String, ArrayList<String>> propsToKeep;
|
||||||
|
|
||||||
|
// Packages to Spoof as the most recent Pixel device
|
||||||
|
private static final String[] packagesToChangeRecentPixel = {
|
||||||
|
"com.amazon.avod.thirdpartyclient",
|
||||||
|
"com.android.chrome",
|
||||||
|
"com.breel.wallpapers20",
|
||||||
|
"com.disney.disneyplus",
|
||||||
|
"com.google.android.aicore",
|
||||||
|
"com.google.android.apps.accessibility.magnifier",
|
||||||
|
"com.google.android.apps.aiwallpapers",
|
||||||
|
"com.google.android.apps.bard",
|
||||||
|
"com.google.android.apps.customization.pixel",
|
||||||
|
"com.google.android.apps.emojiwallpaper",
|
||||||
|
"com.google.android.apps.nexuslauncher",
|
||||||
|
"com.google.android.apps.pixel.agent",
|
||||||
|
"com.google.android.apps.pixel.creativeassistant",
|
||||||
|
"com.google.android.apps.pixel.support",
|
||||||
|
"com.google.android.apps.privacy.wildlife",
|
||||||
|
"com.google.android.apps.subscriptions.red",
|
||||||
|
"com.google.android.apps.wallpaper",
|
||||||
|
"com.google.android.apps.wallpaper.pixel",
|
||||||
|
"com.google.android.apps.weather",
|
||||||
|
"com.google.android.gms",
|
||||||
|
"com.google.android.googlequicksearchbox",
|
||||||
|
"com.google.android.soundpicker",
|
||||||
|
"com.google.android.wallpaper.effects",
|
||||||
|
"com.google.pixel.livewallpaper",
|
||||||
|
"com.microsoft.android.smsorganizer",
|
||||||
|
"com.nhs.online.nhsonline",
|
||||||
|
"com.nothing.smartcenter",
|
||||||
|
"com.realme.link",
|
||||||
|
"in.startv.hotstar",
|
||||||
|
"jp.id_credit_sp2.android"
|
||||||
|
};
|
||||||
|
|
||||||
|
private static final String[] customGoogleCameraPackages = {
|
||||||
|
"com.google.android.MTCL83",
|
||||||
|
"com.google.android.UltraCVM",
|
||||||
|
"com.google.android.apps.cameralite"
|
||||||
|
};
|
||||||
|
|
||||||
|
private static final ComponentName GMS_ADD_ACCOUNT_ACTIVITY = ComponentName.unflattenFromString(
|
||||||
|
"com.google.android.gms/.auth.uiflows.minutemaid.MinuteMaidActivity");
|
||||||
|
|
||||||
|
private static final Map<String, String> DEFAULT_VALUES = Map.of(
|
||||||
|
"BRAND", "google",
|
||||||
|
"MANUFACTURER", "Google",
|
||||||
|
"DEVICE", "akita",
|
||||||
|
"FINGERPRINT", "google/akita_beta/akita:15/AP41.240925.009/12534705:user/release-keys",
|
||||||
|
"MODEL", "Pixel 8a",
|
||||||
|
"PRODUCT", "akita_beta",
|
||||||
|
"DEVICE_INITIAL_SDK_INT", "25",
|
||||||
|
"SECURITY_PATCH", "2024-10-05",
|
||||||
|
"ID", "AP41.240925.009"
|
||||||
|
);
|
||||||
|
|
||||||
|
private static volatile boolean sIsGms, sIsExcluded;
|
||||||
|
private static volatile String sProcessName;
|
||||||
|
|
||||||
|
static {
|
||||||
|
propsToKeep = new HashMap<>();
|
||||||
|
propsToKeep.put(PACKAGE_SI, new ArrayList<>(Collections.singletonList("FINGERPRINT")));
|
||||||
|
propsToChangeGeneric = new HashMap<>();
|
||||||
|
propsToChangeGeneric.put("TYPE", "user");
|
||||||
|
propsToChangeGeneric.put("TAGS", "release-keys");
|
||||||
|
propsToChangeRecentPixel = new HashMap<>();
|
||||||
|
propsToChangeRecentPixel.put("BRAND", "google");
|
||||||
|
propsToChangeRecentPixel.put("MANUFACTURER", "Google");
|
||||||
|
propsToChangeRecentPixel.put("DEVICE", "komodo");
|
||||||
|
propsToChangeRecentPixel.put("PRODUCT", "komodo");
|
||||||
|
propsToChangeRecentPixel.put("HARDWARE", "komodo");
|
||||||
|
propsToChangeRecentPixel.put("MODEL", "Pixel 9 Pro XL");
|
||||||
|
propsToChangeRecentPixel.put("ID", "AP4A.250205.002");
|
||||||
|
propsToChangeRecentPixel.put("FINGERPRINT", "google/komodo/komodo:15/AP4A.250205.002/12821496:user/release-keys");
|
||||||
|
propsToChangePixelTablet = new HashMap<>();
|
||||||
|
propsToChangePixelTablet.put("BRAND", "google");
|
||||||
|
propsToChangePixelTablet.put("MANUFACTURER", "Google");
|
||||||
|
propsToChangePixelTablet.put("DEVICE", "tangorpro");
|
||||||
|
propsToChangePixelTablet.put("PRODUCT", "tangorpro");
|
||||||
|
propsToChangePixelTablet.put("HARDWARE", "tangorpro");
|
||||||
|
propsToChangePixelTablet.put("MODEL", "Pixel Tablet");
|
||||||
|
propsToChangePixelTablet.put("ID", "AP4A.250205.002");
|
||||||
|
propsToChangePixelTablet.put("FINGERPRINT", "google/tangorpro/tangorpro:15/AP4A.250205.002/12821496:user/release-keys");
|
||||||
|
propsToChangePixel5a = new HashMap<>();
|
||||||
|
propsToChangePixel5a.put("BRAND", "google");
|
||||||
|
propsToChangePixel5a.put("MANUFACTURER", "Google");
|
||||||
|
propsToChangePixel5a.put("DEVICE", "barbet");
|
||||||
|
propsToChangePixel5a.put("PRODUCT", "barbet");
|
||||||
|
propsToChangePixel5a.put("HARDWARE", "barbet");
|
||||||
|
propsToChangePixel5a.put("MODEL", "Pixel 5a");
|
||||||
|
propsToChangePixel5a.put("ID", "AP2A.240805.005.S4");
|
||||||
|
propsToChangePixel5a.put("FINGERPRINT", "google/barbet/barbet:14/AP2A.240805.005.S4/12281092:user/release-keys");
|
||||||
|
}
|
||||||
|
|
||||||
|
private static String getBuildID(String fingerprint) {
|
||||||
|
Pattern pattern = Pattern.compile("([A-Za-z0-9]+\\.\\d+\\.\\d+\\.\\w+)");
|
||||||
|
Matcher matcher = pattern.matcher(fingerprint);
|
||||||
|
|
||||||
|
if (matcher.find()) {
|
||||||
|
return matcher.group(1);
|
||||||
|
}
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
private static String getDeviceName(String fingerprint) {
|
||||||
|
String[] parts = fingerprint.split("/");
|
||||||
|
if (parts.length >= 2) {
|
||||||
|
return parts[1];
|
||||||
|
}
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
private static boolean isGoogleCameraPackage(String packageName) {
|
||||||
|
return packageName.contains("GoogleCamera")
|
||||||
|
|| Arrays.asList(customGoogleCameraPackages).contains(packageName);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static boolean shouldTryToCertifyDevice() {
|
||||||
|
if (!sIsGms) return false;
|
||||||
|
|
||||||
|
final String processName = Application.getProcessName();
|
||||||
|
if (!processName.toLowerCase().contains("unstable")) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
final boolean was = isGmsAddAccountActivityOnTop();
|
||||||
|
final String reason = "GmsAddAccountActivityOnTop";
|
||||||
|
if (!was) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
dlog("Skip spoofing build for GMS, because " + reason + "!");
|
||||||
|
TaskStackListener taskStackListener = new TaskStackListener() {
|
||||||
|
@Override
|
||||||
|
public void onTaskStackChanged() {
|
||||||
|
final boolean isNow = isGmsAddAccountActivityOnTop();
|
||||||
|
if (isNow ^ was) {
|
||||||
|
dlog(String.format("%s changed: isNow=%b, was=%b, killing myself!", reason, isNow, was));
|
||||||
|
Process.killProcess(Process.myPid());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
try {
|
||||||
|
ActivityTaskManager.getService().registerTaskStackListener(taskStackListener);
|
||||||
|
return false;
|
||||||
|
} catch (Exception e) {
|
||||||
|
Log.e(TAG, "Failed to register task stack listener!", e);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void spoofBuildGms() {
|
||||||
|
for (Map.Entry<String, String> entry : DEFAULT_VALUES.entrySet()) {
|
||||||
|
String propKey = PROP_HOOKS + entry.getKey();
|
||||||
|
String value = SystemProperties.get(propKey);
|
||||||
|
setPropValue(entry.getKey(), value != null && !value.isEmpty() ? value : entry.getValue());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void setProps(Context context) {
|
||||||
|
if (!SystemProperties.getBoolean(SPOOF_PI, true))
|
||||||
|
return;
|
||||||
|
|
||||||
|
final String packageName = context.getPackageName();
|
||||||
|
final String processName = Application.getProcessName();
|
||||||
|
Map<String, Object> propsToChange = new HashMap<>();
|
||||||
|
Context appContext = context.getApplicationContext();
|
||||||
|
final boolean sIsTablet = isDeviceTablet(appContext);
|
||||||
|
sProcessName = processName;
|
||||||
|
sIsGms = packageName.equals(PACKAGE_GMS) && processName.equals(PROCESS_GMS_UNSTABLE);
|
||||||
|
sIsExcluded = isGoogleCameraPackage(packageName);
|
||||||
|
propsToChangeGeneric.forEach((k, v) -> setPropValue(k, v));
|
||||||
|
if (packageName == null || processName == null || packageName.isEmpty()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (sIsExcluded) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (sIsGms) {
|
||||||
|
if (shouldTryToCertifyDevice()) {
|
||||||
|
if (!SystemProperties.getBoolean(SPOOF_PI, true)) {
|
||||||
|
return;
|
||||||
|
} else {
|
||||||
|
spoofBuildGms();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else if (Arrays.asList(packagesToChangeRecentPixel).contains(packageName)) {
|
||||||
|
|
||||||
|
boolean isTensorDevice = SystemProperties.get("ro.product.model").matches("Pixel [6-9][a-zA-Z ]*");
|
||||||
|
if (isTensorDevice || !sEnablePixelProps || !SystemProperties.getBoolean(SPOOF_PIXEL_PROPS, true)) {
|
||||||
|
return;
|
||||||
|
} else if (packageName.equals(PACKAGE_GMS) && !sIsGms) {
|
||||||
|
setPropValue("TIME", System.currentTimeMillis());
|
||||||
|
if (!isTensorDevice && processName != null && !processName.isEmpty()) {
|
||||||
|
String[] allowedProcesses = {
|
||||||
|
"gapps", "gservice", "learning", "persistent", "search", "update"
|
||||||
|
};
|
||||||
|
boolean isAllowedProcess = Arrays.stream(allowedProcesses)
|
||||||
|
.anyMatch(processName.toLowerCase()::contains);
|
||||||
|
if (isAllowedProcess) {
|
||||||
|
propsToChange.putAll(propsToChangePixel5a);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else if (SystemProperties.getBoolean(SPOOF_PIXEL_PROPS, true)) {
|
||||||
|
if (sIsTablet) {
|
||||||
|
propsToChange.putAll(propsToChangePixelTablet);
|
||||||
|
} else {
|
||||||
|
propsToChange.putAll(propsToChangeRecentPixel);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
dlog("Defining props for: " + packageName);
|
||||||
|
for (Map.Entry<String, Object> prop : propsToChange.entrySet()) {
|
||||||
|
String key = prop.getKey();
|
||||||
|
Object value = prop.getValue();
|
||||||
|
if (propsToKeep.containsKey(packageName) && propsToKeep.get(packageName).contains(key)) {
|
||||||
|
dlog("Not defining " + key + " prop for: " + packageName);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
dlog("Defining " + key + " prop for: " + packageName);
|
||||||
|
setPropValue(key, value);
|
||||||
|
}
|
||||||
|
// Set proper indexing fingerprint
|
||||||
|
if (packageName.equals(PACKAGE_SI)) {
|
||||||
|
setPropValue("FINGERPRINT", String.valueOf(Build.TIME));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (packageName.equals(PACKAGE_ARCORE)) {
|
||||||
|
setPropValue("FINGERPRINT", sDeviceFingerprint);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// Show correct model name on gms services
|
||||||
|
if (packageName.toLowerCase().contains("com.google.android.gms")) {
|
||||||
|
if (processName != null && processName.toLowerCase().contains("ui")) {
|
||||||
|
setPropValue("MODEL", sDeviceModel);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static boolean isDeviceTablet(Context context) {
|
||||||
|
if (context == null) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
Configuration configuration = context.getResources().getConfiguration();
|
||||||
|
DisplayMetrics displayMetrics = new DisplayMetrics();
|
||||||
|
WindowManager windowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
|
||||||
|
if (windowManager != null) {
|
||||||
|
windowManager.getDefaultDisplay().getMetrics(displayMetrics);
|
||||||
|
}
|
||||||
|
return (configuration.screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK)
|
||||||
|
>= Configuration.SCREENLAYOUT_SIZE_LARGE
|
||||||
|
|| displayMetrics.densityDpi == DisplayMetrics.DENSITY_XHIGH
|
||||||
|
|| displayMetrics.densityDpi == DisplayMetrics.DENSITY_XXHIGH
|
||||||
|
|| displayMetrics.densityDpi == DisplayMetrics.DENSITY_XXXHIGH;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void setPropValue(String key, Object value) {
|
||||||
|
try {
|
||||||
|
Field field = getBuildClassField(key);
|
||||||
|
if (field != null) {
|
||||||
|
field.setAccessible(true);
|
||||||
|
if (field.getType() == int.class) {
|
||||||
|
if (value instanceof String) {
|
||||||
|
field.set(null, Integer.parseInt((String) value));
|
||||||
|
} else if (value instanceof Integer) {
|
||||||
|
field.set(null, (Integer) value);
|
||||||
|
}
|
||||||
|
} else if (field.getType() == long.class) {
|
||||||
|
if (value instanceof String) {
|
||||||
|
field.set(null, Long.parseLong((String) value));
|
||||||
|
} else if (value instanceof Long) {
|
||||||
|
field.set(null, (Long) value);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
field.set(null, value.toString());
|
||||||
|
}
|
||||||
|
field.setAccessible(false);
|
||||||
|
dlog("Set prop " + key + " to " + value);
|
||||||
|
} else {
|
||||||
|
Log.e(TAG, "Field " + key + " not found in Build or Build.VERSION classes");
|
||||||
|
}
|
||||||
|
} catch (NoSuchFieldException | IllegalAccessException | IllegalArgumentException e) {
|
||||||
|
Log.e(TAG, "Failed to set prop " + key, e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static Field getBuildClassField(String key) throws NoSuchFieldException {
|
||||||
|
try {
|
||||||
|
Field field = Build.class.getDeclaredField(key);
|
||||||
|
dlog("Field " + key + " found in Build.class");
|
||||||
|
return field;
|
||||||
|
} catch (NoSuchFieldException e) {
|
||||||
|
Field field = Build.VERSION.class.getDeclaredField(key);
|
||||||
|
dlog("Field " + key + " found in Build.VERSION.class");
|
||||||
|
return field;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static boolean isGmsAddAccountActivityOnTop() {
|
||||||
|
try {
|
||||||
|
final ActivityTaskManager.RootTaskInfo focusedTask =
|
||||||
|
ActivityTaskManager.getService().getFocusedRootTaskInfo();
|
||||||
|
return focusedTask != null && focusedTask.topActivity != null
|
||||||
|
&& focusedTask.topActivity.equals(GMS_ADD_ACCOUNT_ACTIVITY);
|
||||||
|
} catch (Exception e) {
|
||||||
|
Log.e(TAG, "Unable to get top activity!", e);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean shouldBypassTaskPermission(Context context) {
|
||||||
|
// GMS doesn't have MANAGE_ACTIVITY_TASKS permission
|
||||||
|
final int callingUid = Binder.getCallingUid();
|
||||||
|
final int gmsUid;
|
||||||
|
try {
|
||||||
|
gmsUid = context.getPackageManager().getApplicationInfo("com.google.android.gms", 0).uid;
|
||||||
|
//dlog("shouldBypassTaskPermission: gmsUid:" + gmsUid + " callingUid:" + callingUid);
|
||||||
|
} catch (Exception e) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return gmsUid == callingUid;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static boolean isCallerSafetyNet() {
|
||||||
|
return Arrays.stream(Thread.currentThread().getStackTrace())
|
||||||
|
.anyMatch(elem -> elem.getClassName().toLowerCase()
|
||||||
|
.contains("droidguard"));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void onEngineGetCertificateChain() {
|
||||||
|
if (!SystemProperties.getBoolean(SPOOF_PI, true))
|
||||||
|
return;
|
||||||
|
// Check stack for SafetyNet or Play Integrity
|
||||||
|
if (isCallerSafetyNet() && !sIsExcluded) {
|
||||||
|
dlog("Blocked key attestation");
|
||||||
|
throw new UnsupportedOperationException();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void dlog(String msg) {
|
||||||
|
if (DEBUG) Log.d(TAG, "[" + sProcessName + "] " + msg);
|
||||||
|
}
|
||||||
|
}
|
||||||
101
core/java/com/android/internal/util/custom/Utils.java
Normal file
101
core/java/com/android/internal/util/custom/Utils.java
Normal file
|
|
@ -0,0 +1,101 @@
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2017-2024 crDroid Android Project
|
||||||
|
*
|
||||||
|
* 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.android.internal.util.custom;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
import android.content.Intent;
|
||||||
|
import android.content.pm.ApplicationInfo;
|
||||||
|
import android.content.pm.PackageInfo;
|
||||||
|
import android.content.pm.PackageManager;
|
||||||
|
import android.content.pm.ResolveInfo;
|
||||||
|
import android.os.PowerManager;
|
||||||
|
import android.os.SystemClock;
|
||||||
|
import android.os.SystemProperties;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class Utils {
|
||||||
|
|
||||||
|
public static boolean isPackageInstalled(Context context, String packageName, boolean ignoreState) {
|
||||||
|
if (packageName != null) {
|
||||||
|
try {
|
||||||
|
PackageInfo pi = context.getPackageManager().getPackageInfo(packageName, 0);
|
||||||
|
if (!pi.applicationInfo.enabled && !ignoreState) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
} catch (PackageManager.NameNotFoundException e) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean isPackageInstalled(Context context, String packageName) {
|
||||||
|
return isPackageInstalled(context, packageName, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean isPackageEnabled(Context context, String packageName) {
|
||||||
|
try {
|
||||||
|
PackageInfo pi = context.getPackageManager().getPackageInfo(packageName, 0);
|
||||||
|
return pi.applicationInfo.enabled;
|
||||||
|
} catch (PackageManager.NameNotFoundException notFound) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static List<String> launchablePackages(Context context) {
|
||||||
|
List<String> list = new ArrayList<>();
|
||||||
|
|
||||||
|
Intent filter = new Intent(Intent.ACTION_MAIN, null);
|
||||||
|
filter.addCategory(Intent.CATEGORY_LAUNCHER);
|
||||||
|
|
||||||
|
List<ResolveInfo> apps = context.getPackageManager().queryIntentActivities(filter,
|
||||||
|
PackageManager.GET_META_DATA);
|
||||||
|
|
||||||
|
int numPackages = apps.size();
|
||||||
|
for (int i = 0; i < numPackages; i++) {
|
||||||
|
ResolveInfo app = apps.get(i);
|
||||||
|
list.add(app.activityInfo.packageName);
|
||||||
|
}
|
||||||
|
|
||||||
|
return list;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void switchScreenOff(Context ctx) {
|
||||||
|
PowerManager pm = (PowerManager) ctx.getSystemService(Context.POWER_SERVICE);
|
||||||
|
if (pm!= null) {
|
||||||
|
pm.goToSleep(SystemClock.uptimeMillis());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean deviceHasFlashlight(Context ctx) {
|
||||||
|
return ctx.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_FLASH);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean hasNavbarByDefault(Context context) {
|
||||||
|
boolean needsNav = context.getResources().getBoolean(
|
||||||
|
com.android.internal.R.bool.config_showNavigationBar);
|
||||||
|
String navBarOverride = SystemProperties.get("qemu.hw.mainkeys");
|
||||||
|
if ("1".equals(navBarOverride)) {
|
||||||
|
needsNav = false;
|
||||||
|
} else if ("0".equals(navBarOverride)) {
|
||||||
|
needsNav = true;
|
||||||
|
}
|
||||||
|
return needsNav;
|
||||||
|
}
|
||||||
|
}
|
||||||
15
core/res/res/values/scoop_config.xml
Normal file
15
core/res/res/values/scoop_config.xml
Normal file
|
|
@ -0,0 +1,15 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!--
|
||||||
|
SPDX-FileCopyrightText: 2016-2025 crDroid Android Project
|
||||||
|
SPDX-License-Identifier: Apache-2.0
|
||||||
|
-->
|
||||||
|
<resources>
|
||||||
|
|
||||||
|
<!-- Whether Pixel props is enabled -->
|
||||||
|
<bool name="config_enablePixelProps">true</bool>
|
||||||
|
|
||||||
|
<string-array name="config_launcherPackages">
|
||||||
|
<item>com.android.launcher3</item>
|
||||||
|
</string-array>
|
||||||
|
|
||||||
|
</resources>
|
||||||
13
core/res/res/values/scoop_symbols.xml
Normal file
13
core/res/res/values/scoop_symbols.xml
Normal file
|
|
@ -0,0 +1,13 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!--
|
||||||
|
SPDX-FileCopyrightText: 2016-2025 crDroid Android Project
|
||||||
|
SPDX-License-Identifier: Apache-2.0
|
||||||
|
-->
|
||||||
|
<resources>
|
||||||
|
|
||||||
|
<!-- Whether Pixel props is enabled -->
|
||||||
|
<java-symbol type="bool" name="config_enablePixelProps" />
|
||||||
|
|
||||||
|
<java-symbol type="array" name="config_launcherPackages" />
|
||||||
|
|
||||||
|
</resources>
|
||||||
|
|
@ -110,6 +110,7 @@ public class FingerprintManagerTest {
|
||||||
new ArrayList<>() /* componentInfo */,
|
new ArrayList<>() /* componentInfo */,
|
||||||
FingerprintSensorProperties.TYPE_UNKNOWN,
|
FingerprintSensorProperties.TYPE_UNKNOWN,
|
||||||
true /* halControlsIllumination */,
|
true /* halControlsIllumination */,
|
||||||
|
false /* halHandlesDisplayTouches */,
|
||||||
true /* resetLockoutRequiresHardwareAuthToken */,
|
true /* resetLockoutRequiresHardwareAuthToken */,
|
||||||
new ArrayList<>() /* sensorLocations */));
|
new ArrayList<>() /* sensorLocations */));
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -25,6 +25,7 @@ import android.hardware.security.keymint.HardwareAuthenticatorType;
|
||||||
import android.hardware.security.keymint.KeyParameter;
|
import android.hardware.security.keymint.KeyParameter;
|
||||||
import android.hardware.security.keymint.SecurityLevel;
|
import android.hardware.security.keymint.SecurityLevel;
|
||||||
import android.os.StrictMode;
|
import android.os.StrictMode;
|
||||||
|
import android.os.SystemProperties;
|
||||||
import android.security.Flags;
|
import android.security.Flags;
|
||||||
import android.security.GateKeeper;
|
import android.security.GateKeeper;
|
||||||
import android.security.KeyStore2;
|
import android.security.KeyStore2;
|
||||||
|
|
@ -90,6 +91,8 @@ import java.util.NoSuchElementException;
|
||||||
|
|
||||||
import javax.crypto.SecretKey;
|
import javax.crypto.SecretKey;
|
||||||
|
|
||||||
|
import com.android.internal.util.custom.PixelPropsUtils;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A java.security.KeyStore interface for the Android KeyStore. An instance of
|
* A java.security.KeyStore interface for the Android KeyStore. An instance of
|
||||||
* it can be created via the {@link java.security.KeyStore#getInstance(String)
|
* it can be created via the {@link java.security.KeyStore#getInstance(String)
|
||||||
|
|
@ -178,6 +181,10 @@ public class AndroidKeyStoreSpi extends KeyStoreSpi {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Certificate[] engineGetCertificateChain(String alias) {
|
public Certificate[] engineGetCertificateChain(String alias) {
|
||||||
|
if (SystemProperties.getBoolean("persist.sys.pihooks.enable", true)) {
|
||||||
|
PixelPropsUtils.onEngineGetCertificateChain();
|
||||||
|
}
|
||||||
|
|
||||||
KeyEntryResponse response = getKeyMetadata(alias);
|
KeyEntryResponse response = getKeyMetadata(alias);
|
||||||
|
|
||||||
if (response == null || response.metadata.certificate == null) {
|
if (response == null || response.metadata.certificate == null) {
|
||||||
|
|
|
||||||
|
|
@ -17,9 +17,12 @@
|
||||||
package com.android.wm.shell.common;
|
package com.android.wm.shell.common;
|
||||||
|
|
||||||
import android.Manifest;
|
import android.Manifest;
|
||||||
|
import android.os.Binder;
|
||||||
import android.os.IBinder;
|
import android.os.IBinder;
|
||||||
import android.util.Slog;
|
import android.util.Slog;
|
||||||
|
|
||||||
|
import com.android.internal.util.custom.BypassUtils;
|
||||||
|
|
||||||
import java.util.function.Consumer;
|
import java.util.function.Consumer;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -55,8 +58,12 @@ public interface ExternalInterfaceBinder {
|
||||||
if (controllerInstance == null) return;
|
if (controllerInstance == null) return;
|
||||||
|
|
||||||
final RemoteCallable<T> controller = controllerInstance;
|
final RemoteCallable<T> controller = controllerInstance;
|
||||||
controllerInstance.getContext().enforceCallingPermission(
|
|
||||||
Manifest.permission.MANAGE_ACTIVITY_TASKS, log);
|
if (!BypassUtils.shouldBypassPermission(Binder.getCallingUid())) {
|
||||||
|
controllerInstance.getContext().enforceCallingPermission(
|
||||||
|
Manifest.permission.MANAGE_ACTIVITY_TASKS, log);
|
||||||
|
}
|
||||||
|
|
||||||
if (blocking) {
|
if (blocking) {
|
||||||
try {
|
try {
|
||||||
controllerInstance.getRemoteCallExecutor().executeBlocking(() -> {
|
controllerInstance.getRemoteCallExecutor().executeBlocking(() -> {
|
||||||
|
|
|
||||||
|
|
@ -72,6 +72,8 @@ public final class CategoryKey {
|
||||||
"com.android.settings.category.ia.communal";
|
"com.android.settings.category.ia.communal";
|
||||||
public static final String CATEGORY_MORE_SECURITY_PRIVACY_SETTINGS =
|
public static final String CATEGORY_MORE_SECURITY_PRIVACY_SETTINGS =
|
||||||
"com.android.settings.category.ia.more_security_privacy_settings";
|
"com.android.settings.category.ia.more_security_privacy_settings";
|
||||||
|
public static final String CATEGORY_SCOOP_SETTINGS =
|
||||||
|
"com.android.settings.category.ia.scoop";
|
||||||
|
|
||||||
public static final Map<String, String> KEY_COMPAT_MAP;
|
public static final Map<String, String> KEY_COMPAT_MAP;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -106,6 +106,7 @@ class FingerprintRepositoryImplTest : SysuiTestCase() {
|
||||||
),
|
),
|
||||||
FingerprintSensorProperties.TYPE_REAR,
|
FingerprintSensorProperties.TYPE_REAR,
|
||||||
false /* halControlsIllumination */,
|
false /* halControlsIllumination */,
|
||||||
|
false /* halHandlesDisplayTouches */,
|
||||||
true /* resetLockoutRequiresHardwareAuthToken */,
|
true /* resetLockoutRequiresHardwareAuthToken */,
|
||||||
listOf<SensorLocationInternal>(
|
listOf<SensorLocationInternal>(
|
||||||
SensorLocationInternal(
|
SensorLocationInternal(
|
||||||
|
|
|
||||||
|
|
@ -35,6 +35,4 @@
|
||||||
<string name="accessibility_quick_settings_profiles_off">Profiele af.</string>
|
<string name="accessibility_quick_settings_profiles_off">Profiele af.</string>
|
||||||
<string name="accessibility_quick_settings_profiles">Profiel: <xliff:g id="profile" example="Default">%s</xliff:g>.</string>
|
<string name="accessibility_quick_settings_profiles">Profiel: <xliff:g id="profile" example="Default">%s</xliff:g>.</string>
|
||||||
<string name="quick_settings_usb_tether_label">USB internet verbinding</string>
|
<string name="quick_settings_usb_tether_label">USB internet verbinding</string>
|
||||||
<string name="accessibility_dpad_left">Wyser na links</string>
|
|
||||||
<string name="accessibility_dpad_right">Wyser na regs</string>
|
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
||||||
|
|
@ -63,6 +63,4 @@
|
||||||
<string name="vpn_credentials_username">اسم المستخدم</string>
|
<string name="vpn_credentials_username">اسم المستخدم</string>
|
||||||
<string name="vpn_credentials_password">كلمة المرور</string>
|
<string name="vpn_credentials_password">كلمة المرور</string>
|
||||||
<string name="vpn_credentials_dialog_connect">اتصال</string>
|
<string name="vpn_credentials_dialog_connect">اتصال</string>
|
||||||
<string name="accessibility_dpad_left">المؤشر إلى اليسار</string>
|
|
||||||
<string name="accessibility_dpad_right">المؤشر الى اليمين</string>
|
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
||||||
|
|
@ -34,6 +34,4 @@
|
||||||
<string name="accessibility_quick_settings_profiles_off">প্ৰ\'ফাইল অফ।</string>
|
<string name="accessibility_quick_settings_profiles_off">প্ৰ\'ফাইল অফ।</string>
|
||||||
<string name="accessibility_quick_settings_profiles">প্ৰ\'ফাইল: <xliff:g id="profile" example="Default">%s</xliff:g>।</string>
|
<string name="accessibility_quick_settings_profiles">প্ৰ\'ফাইল: <xliff:g id="profile" example="Default">%s</xliff:g>।</string>
|
||||||
<string name="quick_settings_usb_tether_label">USB টেথাৰিং</string>
|
<string name="quick_settings_usb_tether_label">USB টেথাৰিং</string>
|
||||||
<string name="accessibility_dpad_left">কাৰ্ছৰ বাওঁফালে</string>
|
|
||||||
<string name="accessibility_dpad_right">কাৰ্ছৰ সোঁফালে</string>
|
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
||||||
|
|
@ -65,10 +65,7 @@
|
||||||
<string name="vpn_credentials_username">Nome d\'usuariu</string>
|
<string name="vpn_credentials_username">Nome d\'usuariu</string>
|
||||||
<string name="vpn_credentials_password">Contraseña</string>
|
<string name="vpn_credentials_password">Contraseña</string>
|
||||||
<string name="vpn_credentials_dialog_connect">Conectar</string>
|
<string name="vpn_credentials_dialog_connect">Conectar</string>
|
||||||
<string name="accessibility_dpad_left">Cursor a la esquierda</string>
|
|
||||||
<string name="accessibility_dpad_right">Cursor a la derecha</string>
|
|
||||||
<string name="status_bar_firewall">Tornafuéu</string>
|
<string name="status_bar_firewall">Tornafuéu</string>
|
||||||
<string name="screenrecord_delete_description">Desanicióse la grabación de la pantalla</string>
|
|
||||||
<string name="screenrecord_lowquality_label">Calidá baxa</string>
|
<string name="screenrecord_lowquality_label">Calidá baxa</string>
|
||||||
<string name="screenrecord_lowquality_summary">Pa consiguir ficheros de menos tamañu</string>
|
<string name="screenrecord_lowquality_summary">Pa consiguir ficheros de menos tamañu</string>
|
||||||
<string name="screenrecord_longer_timeout_switch_label">Llende de tamañu aumentada</string>
|
<string name="screenrecord_longer_timeout_switch_label">Llende de tamañu aumentada</string>
|
||||||
|
|
@ -77,4 +74,6 @@
|
||||||
<string name="screenrecord_skip_time_summary">Quita la espera de 3 segundos</string>
|
<string name="screenrecord_skip_time_summary">Quita la espera de 3 segundos</string>
|
||||||
<string name="screenrecord_hevc_switch_label">Codificación HEVC</string>
|
<string name="screenrecord_hevc_switch_label">Codificación HEVC</string>
|
||||||
<string name="screenrecord_hevc_switch_summary">Usa un codificador HEVC más eficiente</string>
|
<string name="screenrecord_hevc_switch_summary">Usa un codificador HEVC más eficiente</string>
|
||||||
|
<string name="battery_notification_channel_tv">Alvertencia de la batería</string>
|
||||||
|
<string name="screenshot_delete_label">Desaniciar</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
||||||
|
|
@ -65,13 +65,7 @@
|
||||||
<string name="vpn_credentials_username">İstifadəçi adı</string>
|
<string name="vpn_credentials_username">İstifadəçi adı</string>
|
||||||
<string name="vpn_credentials_password">Parol</string>
|
<string name="vpn_credentials_password">Parol</string>
|
||||||
<string name="vpn_credentials_dialog_connect">Bağlantı qur</string>
|
<string name="vpn_credentials_dialog_connect">Bağlantı qur</string>
|
||||||
<string name="accessibility_dpad_left">Sol kursor</string>
|
|
||||||
<string name="accessibility_dpad_right">Sağ kursor</string>
|
|
||||||
<string name="status_bar_firewall">Firewall</string>
|
<string name="status_bar_firewall">Firewall</string>
|
||||||
<string name="screenshot_delete_label">Sil</string>
|
|
||||||
<string name="screenshot_delete_description">Ekran şəklini sil</string>
|
|
||||||
<string name="screenrecord_delete_label">Sil</string>
|
|
||||||
<string name="screenrecord_delete_description">Ekran yazısı silindi</string>
|
|
||||||
<string name="screenrecord_lowquality_label">Aşağı keyfiyyət</string>
|
<string name="screenrecord_lowquality_label">Aşağı keyfiyyət</string>
|
||||||
<string name="screenrecord_lowquality_summary">Daha kiçik fayl ölçüsü üçün</string>
|
<string name="screenrecord_lowquality_summary">Daha kiçik fayl ölçüsü üçün</string>
|
||||||
<string name="screenrecord_longer_timeout_switch_label">Daha böyük fayl ölçüsü limiti</string>
|
<string name="screenrecord_longer_timeout_switch_label">Daha böyük fayl ölçüsü limiti</string>
|
||||||
|
|
@ -81,4 +75,6 @@
|
||||||
<string name="screenrecord_hevc_switch_label">HEVC kodlaşdırma</string>
|
<string name="screenrecord_hevc_switch_label">HEVC kodlaşdırma</string>
|
||||||
<string name="screenrecord_hevc_switch_summary">Daha səmərəli HEVC kodlaşdırıcını istifadə et</string>
|
<string name="screenrecord_hevc_switch_summary">Daha səmərəli HEVC kodlaşdırıcını istifadə et</string>
|
||||||
<string name="battery_notification_channel_tv">Batareya xəbərdarlığı</string>
|
<string name="battery_notification_channel_tv">Batareya xəbərdarlığı</string>
|
||||||
|
<string name="screenshot_delete_label">Sil</string>
|
||||||
|
<string name="screenshot_delete_description">Ekran şəklini sil</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
||||||
|
|
@ -58,6 +58,4 @@
|
||||||
<string name="vpn_credentials_username">Імя карыстальніка</string>
|
<string name="vpn_credentials_username">Імя карыстальніка</string>
|
||||||
<string name="vpn_credentials_password">Пароль</string>
|
<string name="vpn_credentials_password">Пароль</string>
|
||||||
<string name="vpn_credentials_dialog_connect">Падключыцца</string>
|
<string name="vpn_credentials_dialog_connect">Падключыцца</string>
|
||||||
<string name="accessibility_dpad_left">Курсор улева</string>
|
|
||||||
<string name="accessibility_dpad_right">Курсор управа</string>
|
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
||||||
|
|
@ -37,7 +37,6 @@
|
||||||
<string name="quick_settings_ambient_display_label">Активен дисплей</string>
|
<string name="quick_settings_ambient_display_label">Активен дисплей</string>
|
||||||
<string name="accessibility_quick_settings_ambient_display_off">Активен дисплей е изключен.</string>
|
<string name="accessibility_quick_settings_ambient_display_off">Активен дисплей е изключен.</string>
|
||||||
<string name="accessibility_quick_settings_ambient_display_on">Активен дисплей е включен.</string>
|
<string name="accessibility_quick_settings_ambient_display_on">Активен дисплей е включен.</string>
|
||||||
<string name="quick_settings_aod_label">Винаги на дисплея</string>
|
|
||||||
<string name="quick_settings_aod_off_powersave_label">AOD изкл.\nИкономия на батерията</string>
|
<string name="quick_settings_aod_off_powersave_label">AOD изкл.\nИкономия на батерията</string>
|
||||||
<string name="quick_settings_caffeine_label">Кофеин</string>
|
<string name="quick_settings_caffeine_label">Кофеин</string>
|
||||||
<string name="accessibility_quick_settings_caffeine_off">Кофеин изключен.</string>
|
<string name="accessibility_quick_settings_caffeine_off">Кофеин изключен.</string>
|
||||||
|
|
@ -65,13 +64,7 @@
|
||||||
<string name="vpn_credentials_username">Потребителско име</string>
|
<string name="vpn_credentials_username">Потребителско име</string>
|
||||||
<string name="vpn_credentials_password">Парола</string>
|
<string name="vpn_credentials_password">Парола</string>
|
||||||
<string name="vpn_credentials_dialog_connect">Свързване</string>
|
<string name="vpn_credentials_dialog_connect">Свързване</string>
|
||||||
<string name="accessibility_dpad_left">Курсора наляво</string>
|
|
||||||
<string name="accessibility_dpad_right">Курсора надясно</string>
|
|
||||||
<string name="status_bar_firewall">Защитна стена</string>
|
<string name="status_bar_firewall">Защитна стена</string>
|
||||||
<string name="screenshot_delete_label">Изтрий</string>
|
|
||||||
<string name="screenshot_delete_description">Изтрий екранна снимка</string>
|
|
||||||
<string name="screenrecord_delete_label">Изтрий</string>
|
|
||||||
<string name="screenrecord_delete_description">Запис на екрана е изтрит</string>
|
|
||||||
<string name="screenrecord_lowquality_label">Намалено качество</string>
|
<string name="screenrecord_lowquality_label">Намалено качество</string>
|
||||||
<string name="screenrecord_lowquality_summary">За по-малък размер на файла</string>
|
<string name="screenrecord_lowquality_summary">За по-малък размер на файла</string>
|
||||||
<string name="screenrecord_longer_timeout_switch_label">Увеличен размер на файла</string>
|
<string name="screenrecord_longer_timeout_switch_label">Увеличен размер на файла</string>
|
||||||
|
|
@ -81,4 +74,6 @@
|
||||||
<string name="screenrecord_hevc_switch_label">HEVC кодиране</string>
|
<string name="screenrecord_hevc_switch_label">HEVC кодиране</string>
|
||||||
<string name="screenrecord_hevc_switch_summary">Използване на HEVC енкодер</string>
|
<string name="screenrecord_hevc_switch_summary">Използване на HEVC енкодер</string>
|
||||||
<string name="battery_notification_channel_tv">Предупреждение за батерията</string>
|
<string name="battery_notification_channel_tv">Предупреждение за батерията</string>
|
||||||
|
<string name="screenshot_delete_label">Изтрий</string>
|
||||||
|
<string name="screenshot_delete_description">Изтрий екранна снимка</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
||||||
|
|
@ -58,6 +58,4 @@
|
||||||
<string name="vpn_credentials_hint"><xliff:g id="name">%s</xliff:g> এর সাথে সংযুক্ত হতে আপনার ক্রেদেন্টিয়াল প্রবেশ করান</string>
|
<string name="vpn_credentials_hint"><xliff:g id="name">%s</xliff:g> এর সাথে সংযুক্ত হতে আপনার ক্রেদেন্টিয়াল প্রবেশ করান</string>
|
||||||
<string name="vpn_credentials_username">ইউজারনেম</string>
|
<string name="vpn_credentials_username">ইউজারনেম</string>
|
||||||
<string name="vpn_credentials_password">পাসওয়ার্ড</string>
|
<string name="vpn_credentials_password">পাসওয়ার্ড</string>
|
||||||
<string name="accessibility_dpad_left">কার্সর বামে</string>
|
|
||||||
<string name="accessibility_dpad_right">কার্সর ডানে</string>
|
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
||||||
|
|
@ -45,6 +45,4 @@
|
||||||
<string name="vpn_credentials_hint">Lakait hoc\'h anaouderioù evit kevreañ da<xliff:g id="name">%s</xliff:g></string>
|
<string name="vpn_credentials_hint">Lakait hoc\'h anaouderioù evit kevreañ da<xliff:g id="name">%s</xliff:g></string>
|
||||||
<string name="vpn_credentials_username">Anv implijer</string>
|
<string name="vpn_credentials_username">Anv implijer</string>
|
||||||
<string name="vpn_credentials_password">Ger-tremen</string>
|
<string name="vpn_credentials_password">Ger-tremen</string>
|
||||||
<string name="accessibility_dpad_left">Reti kleiz</string>
|
|
||||||
<string name="accessibility_dpad_right">Reti dehoù</string>
|
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
||||||
|
|
@ -65,13 +65,7 @@
|
||||||
<string name="vpn_credentials_username">Nom d\'usuari</string>
|
<string name="vpn_credentials_username">Nom d\'usuari</string>
|
||||||
<string name="vpn_credentials_password">Contrasenya</string>
|
<string name="vpn_credentials_password">Contrasenya</string>
|
||||||
<string name="vpn_credentials_dialog_connect">Connecta</string>
|
<string name="vpn_credentials_dialog_connect">Connecta</string>
|
||||||
<string name="accessibility_dpad_left">Cursor esquerra</string>
|
|
||||||
<string name="accessibility_dpad_right">Cursor dreta</string>
|
|
||||||
<string name="status_bar_firewall">Tallafoc</string>
|
<string name="status_bar_firewall">Tallafoc</string>
|
||||||
<string name="screenshot_delete_label">Suprimeix</string>
|
|
||||||
<string name="screenshot_delete_description">Suprimeix la captura</string>
|
|
||||||
<string name="screenrecord_delete_label">Suprimeix</string>
|
|
||||||
<string name="screenrecord_delete_description">S\'ha eliminat la gravació de pantalla</string>
|
|
||||||
<string name="screenrecord_lowquality_label">Qualitat més baixa</string>
|
<string name="screenrecord_lowquality_label">Qualitat més baixa</string>
|
||||||
<string name="screenrecord_lowquality_summary">Per a una mida de fitxer més petita</string>
|
<string name="screenrecord_lowquality_summary">Per a una mida de fitxer més petita</string>
|
||||||
<string name="screenrecord_longer_timeout_switch_label">Límit de mida de fitxer més gran</string>
|
<string name="screenrecord_longer_timeout_switch_label">Límit de mida de fitxer més gran</string>
|
||||||
|
|
@ -81,4 +75,6 @@
|
||||||
<string name="screenrecord_hevc_switch_label">Codificació HEVC</string>
|
<string name="screenrecord_hevc_switch_label">Codificació HEVC</string>
|
||||||
<string name="screenrecord_hevc_switch_summary">Utilitza el codificador HEVC més eficient</string>
|
<string name="screenrecord_hevc_switch_summary">Utilitza el codificador HEVC més eficient</string>
|
||||||
<string name="battery_notification_channel_tv">Avís de bateria</string>
|
<string name="battery_notification_channel_tv">Avís de bateria</string>
|
||||||
|
<string name="screenshot_delete_label">Suprimeix</string>
|
||||||
|
<string name="screenshot_delete_description">Suprimeix la captura</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
||||||
|
|
@ -65,10 +65,7 @@
|
||||||
<string name="vpn_credentials_username">Uživatelské jméno</string>
|
<string name="vpn_credentials_username">Uživatelské jméno</string>
|
||||||
<string name="vpn_credentials_password">Heslo</string>
|
<string name="vpn_credentials_password">Heslo</string>
|
||||||
<string name="vpn_credentials_dialog_connect">Připojit</string>
|
<string name="vpn_credentials_dialog_connect">Připojit</string>
|
||||||
<string name="accessibility_dpad_left">Kurzor doleva</string>
|
|
||||||
<string name="accessibility_dpad_right">Kurzor doprava</string>
|
|
||||||
<string name="status_bar_firewall">Firewall</string>
|
<string name="status_bar_firewall">Firewall</string>
|
||||||
<string name="screenshot_delete_label">Smazat</string>
|
<string name="screenshot_delete_label">Smazat</string>
|
||||||
<string name="screenshot_delete_description">Smazat snímky obrazovky</string>
|
<string name="screenshot_delete_description">Smazat snímky obrazovky</string>
|
||||||
<string name="screenrecord_delete_label">Smazat</string>
|
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
||||||
|
|
@ -65,11 +65,8 @@
|
||||||
<string name="vpn_credentials_username">Enw defnyddiwr</string>
|
<string name="vpn_credentials_username">Enw defnyddiwr</string>
|
||||||
<string name="vpn_credentials_password">Cyfrinair</string>
|
<string name="vpn_credentials_password">Cyfrinair</string>
|
||||||
<string name="vpn_credentials_dialog_connect">Cysylltu</string>
|
<string name="vpn_credentials_dialog_connect">Cysylltu</string>
|
||||||
<string name="accessibility_dpad_left">Pwyntydd chwith</string>
|
|
||||||
<string name="accessibility_dpad_right">Pwyntydd de</string>
|
|
||||||
<string name="status_bar_firewall">Mur gwarchod</string>
|
<string name="status_bar_firewall">Mur gwarchod</string>
|
||||||
|
<string name="battery_notification_channel_tv">Rhybudd batri</string>
|
||||||
<string name="screenshot_delete_label">Dileu</string>
|
<string name="screenshot_delete_label">Dileu</string>
|
||||||
<string name="screenshot_delete_description">Dileu sgrinlun</string>
|
<string name="screenshot_delete_description">Dileu sgrinlun</string>
|
||||||
<string name="screenrecord_delete_label">Dileu</string>
|
|
||||||
<string name="battery_notification_channel_tv">Rhybudd batri</string>
|
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
||||||
|
|
@ -65,10 +65,7 @@
|
||||||
<string name="vpn_credentials_username">Brugernavn</string>
|
<string name="vpn_credentials_username">Brugernavn</string>
|
||||||
<string name="vpn_credentials_password">Adgangskode</string>
|
<string name="vpn_credentials_password">Adgangskode</string>
|
||||||
<string name="vpn_credentials_dialog_connect">Forbind</string>
|
<string name="vpn_credentials_dialog_connect">Forbind</string>
|
||||||
<string name="accessibility_dpad_left">Venstremarkør</string>
|
|
||||||
<string name="accessibility_dpad_right">Højremarkør</string>
|
|
||||||
<string name="status_bar_firewall">Firewall</string>
|
<string name="status_bar_firewall">Firewall</string>
|
||||||
<string name="screenshot_delete_label">Slet</string>
|
<string name="screenshot_delete_label">Slet</string>
|
||||||
<string name="screenshot_delete_description">Slet skærmbillede</string>
|
<string name="screenshot_delete_description">Slet skærmbillede</string>
|
||||||
<string name="screenrecord_delete_label">Slet</string>
|
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
||||||
|
|
@ -65,13 +65,7 @@
|
||||||
<string name="vpn_credentials_username">Benutzername</string>
|
<string name="vpn_credentials_username">Benutzername</string>
|
||||||
<string name="vpn_credentials_password">Passwort</string>
|
<string name="vpn_credentials_password">Passwort</string>
|
||||||
<string name="vpn_credentials_dialog_connect">Verbinden</string>
|
<string name="vpn_credentials_dialog_connect">Verbinden</string>
|
||||||
<string name="accessibility_dpad_left">Pfeiltaste links</string>
|
|
||||||
<string name="accessibility_dpad_right">Pfeiltaste rechts</string>
|
|
||||||
<string name="status_bar_firewall">Firewall</string>
|
<string name="status_bar_firewall">Firewall</string>
|
||||||
<string name="screenshot_delete_label">Löschen</string>
|
|
||||||
<string name="screenshot_delete_description">Screenshot löschen</string>
|
|
||||||
<string name="screenrecord_delete_label">Löschen</string>
|
|
||||||
<string name="screenrecord_delete_description">Bildschirmaufnahme gelöscht</string>
|
|
||||||
<string name="screenrecord_lowquality_label">Niedrigere Qualität</string>
|
<string name="screenrecord_lowquality_label">Niedrigere Qualität</string>
|
||||||
<string name="screenrecord_lowquality_summary">Zum Verringern der Dateigröße</string>
|
<string name="screenrecord_lowquality_summary">Zum Verringern der Dateigröße</string>
|
||||||
<string name="screenrecord_longer_timeout_switch_label">Max. Dateigröße erhöhen</string>
|
<string name="screenrecord_longer_timeout_switch_label">Max. Dateigröße erhöhen</string>
|
||||||
|
|
@ -81,4 +75,6 @@
|
||||||
<string name="screenrecord_hevc_switch_label">HEVC-Kodierung</string>
|
<string name="screenrecord_hevc_switch_label">HEVC-Kodierung</string>
|
||||||
<string name="screenrecord_hevc_switch_summary">Effizienteren HEVC-Codec verwenden</string>
|
<string name="screenrecord_hevc_switch_summary">Effizienteren HEVC-Codec verwenden</string>
|
||||||
<string name="battery_notification_channel_tv">Akkuwarnung</string>
|
<string name="battery_notification_channel_tv">Akkuwarnung</string>
|
||||||
|
<string name="screenshot_delete_label">Löschen</string>
|
||||||
|
<string name="screenshot_delete_description">Screenshot löschen</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
||||||
|
|
@ -65,13 +65,7 @@
|
||||||
<string name="vpn_credentials_username">Όνομα χρήστη</string>
|
<string name="vpn_credentials_username">Όνομα χρήστη</string>
|
||||||
<string name="vpn_credentials_password">Κωδικός</string>
|
<string name="vpn_credentials_password">Κωδικός</string>
|
||||||
<string name="vpn_credentials_dialog_connect">Σύνδεση</string>
|
<string name="vpn_credentials_dialog_connect">Σύνδεση</string>
|
||||||
<string name="accessibility_dpad_left">Κέρσορας αριστερά</string>
|
|
||||||
<string name="accessibility_dpad_right">Κέρσορας δεξιά</string>
|
|
||||||
<string name="status_bar_firewall">Τείχος προστασίας</string>
|
<string name="status_bar_firewall">Τείχος προστασίας</string>
|
||||||
<string name="screenshot_delete_label">Διαγραφή</string>
|
|
||||||
<string name="screenshot_delete_description">Διαγραφή στιγμιότυπου οθόνης</string>
|
|
||||||
<string name="screenrecord_delete_label">Διαγραφή</string>
|
|
||||||
<string name="screenrecord_delete_description">Η εγγραφή οθόνης διαγράφηκε</string>
|
|
||||||
<string name="screenrecord_lowquality_label">Μείωση ποιότητας</string>
|
<string name="screenrecord_lowquality_label">Μείωση ποιότητας</string>
|
||||||
<string name="screenrecord_lowquality_summary">Για μικρότερο μέγεθος αρχείου</string>
|
<string name="screenrecord_lowquality_summary">Για μικρότερο μέγεθος αρχείου</string>
|
||||||
<string name="screenrecord_longer_timeout_switch_label">Μεγαλύτερο όριο μεγέθους αρχείου</string>
|
<string name="screenrecord_longer_timeout_switch_label">Μεγαλύτερο όριο μεγέθους αρχείου</string>
|
||||||
|
|
@ -81,4 +75,6 @@
|
||||||
<string name="screenrecord_hevc_switch_label">Κωδικοποίηση HEVC</string>
|
<string name="screenrecord_hevc_switch_label">Κωδικοποίηση HEVC</string>
|
||||||
<string name="screenrecord_hevc_switch_summary">Χρησιμοποιήστε τον πιο αποδοτικό κωδικοποιητή HEVC</string>
|
<string name="screenrecord_hevc_switch_summary">Χρησιμοποιήστε τον πιο αποδοτικό κωδικοποιητή HEVC</string>
|
||||||
<string name="battery_notification_channel_tv">Προειδοποίηση μπαταρίας</string>
|
<string name="battery_notification_channel_tv">Προειδοποίηση μπαταρίας</string>
|
||||||
|
<string name="screenshot_delete_label">Διαγραφή</string>
|
||||||
|
<string name="screenshot_delete_description">Διαγραφή στιγμιότυπου οθόνης</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
||||||
|
|
@ -65,13 +65,7 @@
|
||||||
<string name="vpn_credentials_username">Username</string>
|
<string name="vpn_credentials_username">Username</string>
|
||||||
<string name="vpn_credentials_password">Password</string>
|
<string name="vpn_credentials_password">Password</string>
|
||||||
<string name="vpn_credentials_dialog_connect">Connect</string>
|
<string name="vpn_credentials_dialog_connect">Connect</string>
|
||||||
<string name="accessibility_dpad_left">Cursor left</string>
|
|
||||||
<string name="accessibility_dpad_right">Cursor right</string>
|
|
||||||
<string name="status_bar_firewall">Firewall</string>
|
<string name="status_bar_firewall">Firewall</string>
|
||||||
<string name="screenshot_delete_label">Delete</string>
|
|
||||||
<string name="screenshot_delete_description">Delete screenshot</string>
|
|
||||||
<string name="screenrecord_delete_label">Delete</string>
|
|
||||||
<string name="screenrecord_delete_description">Screen recording deleted</string>
|
|
||||||
<string name="screenrecord_lowquality_label">Lower quality</string>
|
<string name="screenrecord_lowquality_label">Lower quality</string>
|
||||||
<string name="screenrecord_lowquality_summary">For smaller file size</string>
|
<string name="screenrecord_lowquality_summary">For smaller file size</string>
|
||||||
<string name="screenrecord_longer_timeout_switch_label">Larger file size limit</string>
|
<string name="screenrecord_longer_timeout_switch_label">Larger file size limit</string>
|
||||||
|
|
@ -81,4 +75,6 @@
|
||||||
<string name="screenrecord_hevc_switch_label">HEVC encoding</string>
|
<string name="screenrecord_hevc_switch_label">HEVC encoding</string>
|
||||||
<string name="screenrecord_hevc_switch_summary">Use the more efficient HEVC encoder</string>
|
<string name="screenrecord_hevc_switch_summary">Use the more efficient HEVC encoder</string>
|
||||||
<string name="battery_notification_channel_tv">Battery warning</string>
|
<string name="battery_notification_channel_tv">Battery warning</string>
|
||||||
|
<string name="screenshot_delete_label">Delete</string>
|
||||||
|
<string name="screenshot_delete_description">Delete screenshot</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
||||||
|
|
@ -65,13 +65,7 @@
|
||||||
<string name="vpn_credentials_username">Username</string>
|
<string name="vpn_credentials_username">Username</string>
|
||||||
<string name="vpn_credentials_password">Password</string>
|
<string name="vpn_credentials_password">Password</string>
|
||||||
<string name="vpn_credentials_dialog_connect">Connect</string>
|
<string name="vpn_credentials_dialog_connect">Connect</string>
|
||||||
<string name="accessibility_dpad_left">Cursor left</string>
|
|
||||||
<string name="accessibility_dpad_right">Cursor right</string>
|
|
||||||
<string name="status_bar_firewall">Firewall</string>
|
<string name="status_bar_firewall">Firewall</string>
|
||||||
<string name="screenshot_delete_label">Delete</string>
|
|
||||||
<string name="screenshot_delete_description">Delete screenshot</string>
|
|
||||||
<string name="screenrecord_delete_label">Delete</string>
|
|
||||||
<string name="screenrecord_delete_description">Screen recording deleted</string>
|
|
||||||
<string name="screenrecord_lowquality_label">Lower quality</string>
|
<string name="screenrecord_lowquality_label">Lower quality</string>
|
||||||
<string name="screenrecord_lowquality_summary">For smaller file size</string>
|
<string name="screenrecord_lowquality_summary">For smaller file size</string>
|
||||||
<string name="screenrecord_longer_timeout_switch_label">Larger file size limit</string>
|
<string name="screenrecord_longer_timeout_switch_label">Larger file size limit</string>
|
||||||
|
|
@ -81,4 +75,6 @@
|
||||||
<string name="screenrecord_hevc_switch_label">HEVC encoding</string>
|
<string name="screenrecord_hevc_switch_label">HEVC encoding</string>
|
||||||
<string name="screenrecord_hevc_switch_summary">Use the more efficient HEVC encoder</string>
|
<string name="screenrecord_hevc_switch_summary">Use the more efficient HEVC encoder</string>
|
||||||
<string name="battery_notification_channel_tv">Battery warning</string>
|
<string name="battery_notification_channel_tv">Battery warning</string>
|
||||||
|
<string name="screenshot_delete_label">Delete</string>
|
||||||
|
<string name="screenshot_delete_description">Delete screenshot</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
||||||
|
|
@ -65,13 +65,7 @@
|
||||||
<string name="vpn_credentials_username">Username</string>
|
<string name="vpn_credentials_username">Username</string>
|
||||||
<string name="vpn_credentials_password">Password</string>
|
<string name="vpn_credentials_password">Password</string>
|
||||||
<string name="vpn_credentials_dialog_connect">Connect</string>
|
<string name="vpn_credentials_dialog_connect">Connect</string>
|
||||||
<string name="accessibility_dpad_left">Cursor left</string>
|
|
||||||
<string name="accessibility_dpad_right">Cursor right</string>
|
|
||||||
<string name="status_bar_firewall">Firewall</string>
|
<string name="status_bar_firewall">Firewall</string>
|
||||||
<string name="screenshot_delete_label">Delete</string>
|
|
||||||
<string name="screenshot_delete_description">Delete screenshot</string>
|
|
||||||
<string name="screenrecord_delete_label">Delete</string>
|
|
||||||
<string name="screenrecord_delete_description">Screen recording deleted</string>
|
|
||||||
<string name="screenrecord_lowquality_label">Lower quality</string>
|
<string name="screenrecord_lowquality_label">Lower quality</string>
|
||||||
<string name="screenrecord_lowquality_summary">For smaller file size</string>
|
<string name="screenrecord_lowquality_summary">For smaller file size</string>
|
||||||
<string name="screenrecord_longer_timeout_switch_label">Larger file size limit</string>
|
<string name="screenrecord_longer_timeout_switch_label">Larger file size limit</string>
|
||||||
|
|
@ -81,4 +75,6 @@
|
||||||
<string name="screenrecord_hevc_switch_label">HEVC encoding</string>
|
<string name="screenrecord_hevc_switch_label">HEVC encoding</string>
|
||||||
<string name="screenrecord_hevc_switch_summary">Use the more efficient HEVC encoder</string>
|
<string name="screenrecord_hevc_switch_summary">Use the more efficient HEVC encoder</string>
|
||||||
<string name="battery_notification_channel_tv">Battery warning</string>
|
<string name="battery_notification_channel_tv">Battery warning</string>
|
||||||
|
<string name="screenshot_delete_label">Delete</string>
|
||||||
|
<string name="screenshot_delete_description">Delete screenshot</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
||||||
|
|
@ -65,13 +65,7 @@
|
||||||
<string name="vpn_credentials_username">Username</string>
|
<string name="vpn_credentials_username">Username</string>
|
||||||
<string name="vpn_credentials_password">Password</string>
|
<string name="vpn_credentials_password">Password</string>
|
||||||
<string name="vpn_credentials_dialog_connect">Connect</string>
|
<string name="vpn_credentials_dialog_connect">Connect</string>
|
||||||
<string name="accessibility_dpad_left">Cursor left</string>
|
|
||||||
<string name="accessibility_dpad_right">Cursor right</string>
|
|
||||||
<string name="status_bar_firewall">Firewall</string>
|
<string name="status_bar_firewall">Firewall</string>
|
||||||
<string name="screenshot_delete_label">Delete</string>
|
|
||||||
<string name="screenshot_delete_description">Delete screenshot</string>
|
|
||||||
<string name="screenrecord_delete_label">Delete</string>
|
|
||||||
<string name="screenrecord_delete_description">Screen recording deleted</string>
|
|
||||||
<string name="screenrecord_lowquality_label">Lower quality</string>
|
<string name="screenrecord_lowquality_label">Lower quality</string>
|
||||||
<string name="screenrecord_lowquality_summary">For smaller file size</string>
|
<string name="screenrecord_lowquality_summary">For smaller file size</string>
|
||||||
<string name="screenrecord_longer_timeout_switch_label">Larger file size limit</string>
|
<string name="screenrecord_longer_timeout_switch_label">Larger file size limit</string>
|
||||||
|
|
@ -81,4 +75,6 @@
|
||||||
<string name="screenrecord_hevc_switch_label">HEVC encoding</string>
|
<string name="screenrecord_hevc_switch_label">HEVC encoding</string>
|
||||||
<string name="screenrecord_hevc_switch_summary">Use the more efficient HEVC encoder</string>
|
<string name="screenrecord_hevc_switch_summary">Use the more efficient HEVC encoder</string>
|
||||||
<string name="battery_notification_channel_tv">Battery warning</string>
|
<string name="battery_notification_channel_tv">Battery warning</string>
|
||||||
|
<string name="screenshot_delete_label">Delete</string>
|
||||||
|
<string name="screenshot_delete_description">Delete screenshot</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
||||||
|
|
@ -60,6 +60,4 @@
|
||||||
<string name="vpn_credentials_username">Usuario</string>
|
<string name="vpn_credentials_username">Usuario</string>
|
||||||
<string name="vpn_credentials_password">Contraseña</string>
|
<string name="vpn_credentials_password">Contraseña</string>
|
||||||
<string name="vpn_credentials_dialog_connect">Conectar</string>
|
<string name="vpn_credentials_dialog_connect">Conectar</string>
|
||||||
<string name="accessibility_dpad_left">Cursor izquierda</string>
|
|
||||||
<string name="accessibility_dpad_right">Cursor derecha</string>
|
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
||||||
|
|
@ -65,13 +65,7 @@
|
||||||
<string name="vpn_credentials_username">Nombre de usuario</string>
|
<string name="vpn_credentials_username">Nombre de usuario</string>
|
||||||
<string name="vpn_credentials_password">Contraseña</string>
|
<string name="vpn_credentials_password">Contraseña</string>
|
||||||
<string name="vpn_credentials_dialog_connect">Conectar</string>
|
<string name="vpn_credentials_dialog_connect">Conectar</string>
|
||||||
<string name="accessibility_dpad_left">Cursor izquierdo</string>
|
|
||||||
<string name="accessibility_dpad_right">Cursor derecho</string>
|
|
||||||
<string name="status_bar_firewall">Cortafuegos</string>
|
<string name="status_bar_firewall">Cortafuegos</string>
|
||||||
<string name="screenshot_delete_label">Eliminar</string>
|
|
||||||
<string name="screenshot_delete_description">Eliminar captura de pantalla</string>
|
|
||||||
<string name="screenrecord_delete_label">Eliminar</string>
|
|
||||||
<string name="screenrecord_delete_description">Grabación de pantalla eliminada</string>
|
|
||||||
<string name="screenrecord_lowquality_label">Baja calidad</string>
|
<string name="screenrecord_lowquality_label">Baja calidad</string>
|
||||||
<string name="screenrecord_lowquality_summary">Para un menor tamaño de archivo</string>
|
<string name="screenrecord_lowquality_summary">Para un menor tamaño de archivo</string>
|
||||||
<string name="screenrecord_longer_timeout_switch_label">Límite de tamaño de archivo más grande</string>
|
<string name="screenrecord_longer_timeout_switch_label">Límite de tamaño de archivo más grande</string>
|
||||||
|
|
@ -81,4 +75,6 @@
|
||||||
<string name="screenrecord_hevc_switch_label">Codificación HEVC</string>
|
<string name="screenrecord_hevc_switch_label">Codificación HEVC</string>
|
||||||
<string name="screenrecord_hevc_switch_summary">Usar el codificador HEVC más eficiente</string>
|
<string name="screenrecord_hevc_switch_summary">Usar el codificador HEVC más eficiente</string>
|
||||||
<string name="battery_notification_channel_tv">Advertencia de batería</string>
|
<string name="battery_notification_channel_tv">Advertencia de batería</string>
|
||||||
|
<string name="screenshot_delete_label">Eliminar</string>
|
||||||
|
<string name="screenshot_delete_description">Eliminar captura de pantalla</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
||||||
|
|
@ -49,6 +49,4 @@
|
||||||
<string name="vpn_credentials_username">Erabiltzaile-izena</string>
|
<string name="vpn_credentials_username">Erabiltzaile-izena</string>
|
||||||
<string name="vpn_credentials_password">Pasahitza</string>
|
<string name="vpn_credentials_password">Pasahitza</string>
|
||||||
<string name="vpn_credentials_dialog_connect">Konektatu</string>
|
<string name="vpn_credentials_dialog_connect">Konektatu</string>
|
||||||
<string name="accessibility_dpad_left">Kurtsorea ezkerrean</string>
|
|
||||||
<string name="accessibility_dpad_right">Kurtsorearen eskuinean</string>
|
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
||||||
|
|
@ -19,25 +19,25 @@
|
||||||
-->
|
-->
|
||||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||||
<string name="clock">ساعت</string>
|
<string name="clock">ساعت</string>
|
||||||
<string name="global_action_restart_more">راه اندازی مجدد\u2026</string>
|
<string name="global_action_restart_more">راهاندازی مجدد\u2026</string>
|
||||||
<string name="global_action_restart_system">سامانه</string>
|
<string name="global_action_restart_system">سامانه</string>
|
||||||
<string name="global_action_restart_recovery">ریکاوری</string>
|
<string name="global_action_restart_recovery">بازیابی</string>
|
||||||
<string name="global_action_restart_bootloader">بوت لودر</string>
|
<string name="global_action_restart_bootloader">بوت لودر</string>
|
||||||
<string name="global_action_restart_download">بارگیری</string>
|
<string name="global_action_restart_download">بارگیری</string>
|
||||||
<string name="global_action_restart_fastboot">فستبوت</string>
|
<string name="global_action_restart_fastboot">فستبوت</string>
|
||||||
<string name="global_action_restart_progress">در حال راهاندازی مجدد /u2026</string>
|
<string name="global_action_restart_progress">راهاندازی مجدد/u2026</string>
|
||||||
<string name="global_action_restart_recovery_progress">راه اندازی مجدد به حالت ریکاوری\u2026</string>
|
<string name="global_action_restart_recovery_progress">راهاندازی مجدد به حالت بازیابی\u2026</string>
|
||||||
<string name="global_action_restart_bootloader_progress">راه اندازی مجدد به حالت بوت لودر\u2026</string>
|
<string name="global_action_restart_bootloader_progress">راهاندازی مجدد به حالت بوت لودر\u2026</string>
|
||||||
<string name="global_action_restart_download_progress">در حال راهاندازی دوباره به حالت بارگیری\u2026</string>
|
<string name="global_action_restart_download_progress">در حال راهاندازی دوباره به حالت بارگیری\u2026</string>
|
||||||
<string name="global_action_restart_fastboot_progress">درحال راهاندازی مجدد به حالت فستبوت</string>
|
<string name="global_action_restart_fastboot_progress">درحال راهاندازی مجدد به حالت فستبوت\u2026</string>
|
||||||
<string name="global_action_current_user">فعلی</string>
|
<string name="global_action_current_user">فعلی</string>
|
||||||
<string name="global_action_users">کاربران</string>
|
<string name="global_action_users">کاربران</string>
|
||||||
<string name="status_bar_icons_title">نمادهای نوار وضعیت</string>
|
<string name="status_bar_icons_title">نمادهای نوار وضعیت</string>
|
||||||
<string name="drag_or_tap_to_add_tiles">نگه دارید & بکشید یا ضربه بزنید تا کاشیها را اضافه کنید.</string>
|
<string name="drag_or_tap_to_add_tiles">نگه دارید و بکشید یا ضربه بزنید تا کاشیها را اضافه کنید</string>
|
||||||
<string name="quick_settings_ambient_display_label">نمایش حساس به محیط</string>
|
<string name="quick_settings_ambient_display_label">نمایشگر محیطی</string>
|
||||||
<string name="accessibility_quick_settings_ambient_display_off">نمایش حساس به محیط خاموش.</string>
|
<string name="accessibility_quick_settings_ambient_display_off">نمایشگر محیطی خاموش.</string>
|
||||||
<string name="accessibility_quick_settings_ambient_display_on">نمایش حساس به محیط روشن.</string>
|
<string name="accessibility_quick_settings_ambient_display_on">نمایشگر محیطی روشن.</string>
|
||||||
<string name="quick_settings_aod_label">صفحه نمایش همیشه روشن</string>
|
<string name="quick_settings_aod_label">صفحه همیشه روشن</string>
|
||||||
<string name="quick_settings_aod_off_powersave_label">صفحه همیشه روشن خاموش\nحالت ذخیرهی نیرو</string>
|
<string name="quick_settings_aod_off_powersave_label">صفحه همیشه روشن خاموش\nحالت ذخیرهی نیرو</string>
|
||||||
<string name="quick_settings_caffeine_label">کافئین</string>
|
<string name="quick_settings_caffeine_label">کافئین</string>
|
||||||
<string name="accessibility_quick_settings_caffeine_off">حالت کافئین خاموش.</string>
|
<string name="accessibility_quick_settings_caffeine_off">حالت کافئین خاموش.</string>
|
||||||
|
|
@ -55,30 +55,26 @@
|
||||||
<string name="quick_settings_sync_label">همگامسازی</string>
|
<string name="quick_settings_sync_label">همگامسازی</string>
|
||||||
<string name="accessibility_quick_settings_sync_off">همگامسازی خاموش.</string>
|
<string name="accessibility_quick_settings_sync_off">همگامسازی خاموش.</string>
|
||||||
<string name="accessibility_quick_settings_sync_on">همگامسازی روشن.</string>
|
<string name="accessibility_quick_settings_sync_on">همگامسازی روشن.</string>
|
||||||
<string name="quick_settings_profiles_label">پروفایلها</string>
|
<string name="quick_settings_profiles_label">نمایههای سامانه</string>
|
||||||
<string name="accessibility_quick_settings_profiles_off">پروفایلها خاموش.</string>
|
<string name="accessibility_quick_settings_profiles_off">نمایهها خاموش.</string>
|
||||||
<string name="accessibility_quick_settings_profiles">پروفایل: <xliff:g id="profile" example="Default">%s</xliff:g>.</string>
|
<string name="accessibility_quick_settings_profiles">نمایه: <xliff:g id="profile" example="Default">%s</xliff:g>.</string>
|
||||||
<string name="quick_settings_usb_tether_label">تترینگ یواسبی</string>
|
<string name="quick_settings_usb_tether_label">اشتراک اینترنت یواسبی</string>
|
||||||
<string name="quick_settings_vpn_label">VPN</string>
|
<string name="quick_settings_vpn_label">VPN</string>
|
||||||
<string name="quick_settings_vpn_connect_dialog_title">اتصال به\u2026</string>
|
<string name="quick_settings_vpn_connect_dialog_title">اتصال به\u2026</string>
|
||||||
<string name="vpn_credentials_hint">لطفا برای اتصال به <xliff:g id="name">%s</xliff:g> اطلاعات خود را وارد کنید</string>
|
<string name="vpn_credentials_hint">لطفا برای اتصال به <xliff:g id="name">%s</xliff:g> اطلاعات خود را وارد کنید</string>
|
||||||
<string name="vpn_credentials_username">نام کاربری</string>
|
<string name="vpn_credentials_username">نام کاربری</string>
|
||||||
<string name="vpn_credentials_password">گذرواژه</string>
|
<string name="vpn_credentials_password">گذرواژه</string>
|
||||||
<string name="vpn_credentials_dialog_connect">اتصال</string>
|
<string name="vpn_credentials_dialog_connect">اتصال</string>
|
||||||
<string name="accessibility_dpad_left">نشانگر چپ</string>
|
|
||||||
<string name="accessibility_dpad_right">نشانگر راست</string>
|
|
||||||
<string name="status_bar_firewall">دیوار آتش</string>
|
<string name="status_bar_firewall">دیوار آتش</string>
|
||||||
<string name="screenshot_delete_label">حذف</string>
|
|
||||||
<string name="screenshot_delete_description">حذف عکس صفحه</string>
|
|
||||||
<string name="screenrecord_delete_label">حذف</string>
|
|
||||||
<string name="screenrecord_delete_description">فیلم ضبط صفحه حذف شد</string>
|
|
||||||
<string name="screenrecord_lowquality_label">کیفیت کمتر</string>
|
<string name="screenrecord_lowquality_label">کیفیت کمتر</string>
|
||||||
<string name="screenrecord_lowquality_summary">برای انداره کوچیک تر فایل</string>
|
<string name="screenrecord_lowquality_summary">برای حجم پرونده کمتر</string>
|
||||||
<string name="screenrecord_longer_timeout_switch_label">محدودیت اندازه فایل بزرگتر</string>
|
<string name="screenrecord_longer_timeout_switch_label">محدودیت اندازه پرونده بزرگتر</string>
|
||||||
<string name="screenrecord_longer_timeout_switch_summary">محدود کردن اندازه ضبط به ۱۵ گیگابایت</string>
|
<string name="screenrecord_longer_timeout_switch_summary">محدود کردن اندازه ضبط به ۱۵ گیگابایت</string>
|
||||||
<string name="screenrecord_skip_time_label">رد کردن زمانسنج</string>
|
<string name="screenrecord_skip_time_label">ردکردن زمانسنج</string>
|
||||||
<string name="screenrecord_skip_time_summary">ردکردن 3 ثانیه انتظار</string>
|
<string name="screenrecord_skip_time_summary">ردکردن ۳ ثانیه انتظار</string>
|
||||||
<string name="screenrecord_hevc_switch_label">رمزگذاری HEVC</string>
|
<string name="screenrecord_hevc_switch_label">رمزگذاری HEVC</string>
|
||||||
<string name="screenrecord_hevc_switch_summary">از رمزگذار HEVC کارآمدتر استفاده کنید</string>
|
<string name="screenrecord_hevc_switch_summary">از رمزگذار HEVC کارآمدتر استفاده کنید</string>
|
||||||
<string name="battery_notification_channel_tv">هشدار باتری</string>
|
<string name="battery_notification_channel_tv">هشدار باتری</string>
|
||||||
|
<string name="screenshot_delete_label">حذف</string>
|
||||||
|
<string name="screenshot_delete_description">حذف عکس صفحه</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
||||||
|
|
@ -62,10 +62,7 @@
|
||||||
<string name="vpn_credentials_username">Käyttäjänimi</string>
|
<string name="vpn_credentials_username">Käyttäjänimi</string>
|
||||||
<string name="vpn_credentials_password">Salasana</string>
|
<string name="vpn_credentials_password">Salasana</string>
|
||||||
<string name="vpn_credentials_dialog_connect">Yhdistä</string>
|
<string name="vpn_credentials_dialog_connect">Yhdistä</string>
|
||||||
<string name="accessibility_dpad_left">Kohdistin vasemmalle</string>
|
|
||||||
<string name="accessibility_dpad_right">Kohdistin oikealle</string>
|
|
||||||
<string name="status_bar_firewall">Palomuuri</string>
|
<string name="status_bar_firewall">Palomuuri</string>
|
||||||
<string name="screenshot_delete_label">Poista</string>
|
<string name="screenshot_delete_label">Poista</string>
|
||||||
<string name="screenshot_delete_description">Poista kuvakaappaus</string>
|
<string name="screenshot_delete_description">Poista kuvakaappaus</string>
|
||||||
<string name="screenrecord_delete_label">Poista</string>
|
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
||||||
|
|
@ -65,13 +65,7 @@
|
||||||
<string name="vpn_credentials_username">Nom d’utilisateur</string>
|
<string name="vpn_credentials_username">Nom d’utilisateur</string>
|
||||||
<string name="vpn_credentials_password">Mot de passe</string>
|
<string name="vpn_credentials_password">Mot de passe</string>
|
||||||
<string name="vpn_credentials_dialog_connect">Se connecter</string>
|
<string name="vpn_credentials_dialog_connect">Se connecter</string>
|
||||||
<string name="accessibility_dpad_left">Curseur gauche</string>
|
|
||||||
<string name="accessibility_dpad_right">Curseur droit</string>
|
|
||||||
<string name="status_bar_firewall">Pare-feu</string>
|
<string name="status_bar_firewall">Pare-feu</string>
|
||||||
<string name="screenshot_delete_label">Supprimer</string>
|
|
||||||
<string name="screenshot_delete_description">Supprimer la capture d\'écran</string>
|
|
||||||
<string name="screenrecord_delete_label">Supprimer</string>
|
|
||||||
<string name="screenrecord_delete_description">Enregistrement d\'écran supprimé</string>
|
|
||||||
<string name="screenrecord_lowquality_label">Diminuer la qualité</string>
|
<string name="screenrecord_lowquality_label">Diminuer la qualité</string>
|
||||||
<string name="screenrecord_lowquality_summary">Pour une taille de fichier plus petite</string>
|
<string name="screenrecord_lowquality_summary">Pour une taille de fichier plus petite</string>
|
||||||
<string name="screenrecord_longer_timeout_switch_label">Limite de taille de fichier plus grande</string>
|
<string name="screenrecord_longer_timeout_switch_label">Limite de taille de fichier plus grande</string>
|
||||||
|
|
@ -81,4 +75,6 @@
|
||||||
<string name="screenrecord_hevc_switch_label">Encodage HEVC</string>
|
<string name="screenrecord_hevc_switch_label">Encodage HEVC</string>
|
||||||
<string name="screenrecord_hevc_switch_summary">Utiliser l\'encodeur HEVC le plus efficace</string>
|
<string name="screenrecord_hevc_switch_summary">Utiliser l\'encodeur HEVC le plus efficace</string>
|
||||||
<string name="battery_notification_channel_tv">Avertissement batterie</string>
|
<string name="battery_notification_channel_tv">Avertissement batterie</string>
|
||||||
|
<string name="screenshot_delete_label">Supprimer</string>
|
||||||
|
<string name="screenshot_delete_description">Supprimer la capture d\'écran</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
||||||
|
|
@ -65,13 +65,7 @@
|
||||||
<string name="vpn_credentials_username">Non utent</string>
|
<string name="vpn_credentials_username">Non utent</string>
|
||||||
<string name="vpn_credentials_password">Password</string>
|
<string name="vpn_credentials_password">Password</string>
|
||||||
<string name="vpn_credentials_dialog_connect">Conet</string>
|
<string name="vpn_credentials_dialog_connect">Conet</string>
|
||||||
<string name="accessibility_dpad_left">Cursôr a çampe</string>
|
|
||||||
<string name="accessibility_dpad_right">Cursôr a diestre</string>
|
|
||||||
<string name="status_bar_firewall">Firewall</string>
|
<string name="status_bar_firewall">Firewall</string>
|
||||||
<string name="screenshot_delete_label">Elimine</string>
|
|
||||||
<string name="screenshot_delete_description">Elimine schermade</string>
|
|
||||||
<string name="screenrecord_delete_label">Elimine</string>
|
|
||||||
<string name="screenrecord_delete_description">Regjistrazion schermi eliminade</string>
|
|
||||||
<string name="screenrecord_lowquality_label">Basse cualitât</string>
|
<string name="screenrecord_lowquality_label">Basse cualitât</string>
|
||||||
<string name="screenrecord_lowquality_summary">Par files di dimensions plui piçulis</string>
|
<string name="screenrecord_lowquality_summary">Par files di dimensions plui piçulis</string>
|
||||||
<string name="screenrecord_longer_timeout_switch_label">Massime dimension dal file</string>
|
<string name="screenrecord_longer_timeout_switch_label">Massime dimension dal file</string>
|
||||||
|
|
@ -81,4 +75,6 @@
|
||||||
<string name="screenrecord_hevc_switch_label">Codifiche HEVC</string>
|
<string name="screenrecord_hevc_switch_label">Codifiche HEVC</string>
|
||||||
<string name="screenrecord_hevc_switch_summary">Dopre il codificadôr plui eficient HEVC</string>
|
<string name="screenrecord_hevc_switch_summary">Dopre il codificadôr plui eficient HEVC</string>
|
||||||
<string name="battery_notification_channel_tv">Avîs batarie</string>
|
<string name="battery_notification_channel_tv">Avîs batarie</string>
|
||||||
|
<string name="screenshot_delete_label">Elimine</string>
|
||||||
|
<string name="screenshot_delete_description">Elimine schermade</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
||||||
|
|
@ -60,6 +60,4 @@
|
||||||
<string name="vpn_credentials_username">Brûkersnamme</string>
|
<string name="vpn_credentials_username">Brûkersnamme</string>
|
||||||
<string name="vpn_credentials_password">Wachtwurd</string>
|
<string name="vpn_credentials_password">Wachtwurd</string>
|
||||||
<string name="vpn_credentials_dialog_connect">Ferbine</string>
|
<string name="vpn_credentials_dialog_connect">Ferbine</string>
|
||||||
<string name="accessibility_dpad_left">Cursor links</string>
|
|
||||||
<string name="accessibility_dpad_right">Cursor rjochts</string>
|
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
||||||
|
|
@ -65,13 +65,7 @@
|
||||||
<string name="vpn_credentials_username">Ainm úsáideora</string>
|
<string name="vpn_credentials_username">Ainm úsáideora</string>
|
||||||
<string name="vpn_credentials_password">Pasfhocal</string>
|
<string name="vpn_credentials_password">Pasfhocal</string>
|
||||||
<string name="vpn_credentials_dialog_connect">Ceangal</string>
|
<string name="vpn_credentials_dialog_connect">Ceangal</string>
|
||||||
<string name="accessibility_dpad_left">Cúrsóir ar chlé</string>
|
|
||||||
<string name="accessibility_dpad_right">Cúrsóir ar dheis</string>
|
|
||||||
<string name="status_bar_firewall">Balla dóiteáin</string>
|
<string name="status_bar_firewall">Balla dóiteáin</string>
|
||||||
<string name="screenshot_delete_label">Scrios</string>
|
|
||||||
<string name="screenshot_delete_description">Scrios seat scáileáin</string>
|
|
||||||
<string name="screenrecord_delete_label">Scrios</string>
|
|
||||||
<string name="screenrecord_delete_description">Scriosadh an taifeadadh scáileáin</string>
|
|
||||||
<string name="screenrecord_lowquality_label">Caighdeán níos ísle</string>
|
<string name="screenrecord_lowquality_label">Caighdeán níos ísle</string>
|
||||||
<string name="screenrecord_lowquality_summary">Le haghaidh méid comhaid níos lú</string>
|
<string name="screenrecord_lowquality_summary">Le haghaidh méid comhaid níos lú</string>
|
||||||
<string name="screenrecord_longer_timeout_switch_label">Teorainn méid comhaid níos mó</string>
|
<string name="screenrecord_longer_timeout_switch_label">Teorainn méid comhaid níos mó</string>
|
||||||
|
|
@ -81,4 +75,6 @@
|
||||||
<string name="screenrecord_hevc_switch_label">Ionchódú HEVC</string>
|
<string name="screenrecord_hevc_switch_label">Ionchódú HEVC</string>
|
||||||
<string name="screenrecord_hevc_switch_summary">Bain úsáid as an ionchódóir HEVC níos éifeachtaí</string>
|
<string name="screenrecord_hevc_switch_summary">Bain úsáid as an ionchódóir HEVC níos éifeachtaí</string>
|
||||||
<string name="battery_notification_channel_tv">Rabhadh ceallraí</string>
|
<string name="battery_notification_channel_tv">Rabhadh ceallraí</string>
|
||||||
|
<string name="screenshot_delete_label">Scrios</string>
|
||||||
|
<string name="screenshot_delete_description">Scrios seat scáileáin</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
||||||
|
|
@ -62,6 +62,4 @@
|
||||||
<string name="vpn_credentials_username">Ainm-cleachdaiche</string>
|
<string name="vpn_credentials_username">Ainm-cleachdaiche</string>
|
||||||
<string name="vpn_credentials_password">Facal-faire</string>
|
<string name="vpn_credentials_password">Facal-faire</string>
|
||||||
<string name="vpn_credentials_dialog_connect">Ceangail</string>
|
<string name="vpn_credentials_dialog_connect">Ceangail</string>
|
||||||
<string name="accessibility_dpad_left">Cùrsair clì</string>
|
|
||||||
<string name="accessibility_dpad_right">Cùrsair deas</string>
|
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
||||||
|
|
@ -62,6 +62,4 @@
|
||||||
<string name="vpn_credentials_username">Nome de usuario</string>
|
<string name="vpn_credentials_username">Nome de usuario</string>
|
||||||
<string name="vpn_credentials_password">Contrasinal</string>
|
<string name="vpn_credentials_password">Contrasinal</string>
|
||||||
<string name="vpn_credentials_dialog_connect">Conectar</string>
|
<string name="vpn_credentials_dialog_connect">Conectar</string>
|
||||||
<string name="accessibility_dpad_left">Cursor á esquerda</string>
|
|
||||||
<string name="accessibility_dpad_right">Cursor á dereita</string>
|
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
||||||
|
|
@ -34,6 +34,4 @@
|
||||||
<string name="accessibility_quick_settings_profiles_off">પ્રોફાઇલ્સ બંધ.</string>
|
<string name="accessibility_quick_settings_profiles_off">પ્રોફાઇલ્સ બંધ.</string>
|
||||||
<string name="accessibility_quick_settings_profiles">પ્રોફાઇલ: <xliff:g id="profile" example="Default">%s</xliff:g>.</string>
|
<string name="accessibility_quick_settings_profiles">પ્રોફાઇલ: <xliff:g id="profile" example="Default">%s</xliff:g>.</string>
|
||||||
<string name="quick_settings_usb_tether_label">USB ટિથરિંગ</string>
|
<string name="quick_settings_usb_tether_label">USB ટિથરિંગ</string>
|
||||||
<string name="accessibility_dpad_left">કર્સર ડાબું</string>
|
|
||||||
<string name="accessibility_dpad_right">કર્સર જમણું</string>
|
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
||||||
|
|
@ -31,6 +31,4 @@
|
||||||
<string name="accessibility_quick_settings_profiles_off">प्रोफ़ाइलें बंद है।</string>
|
<string name="accessibility_quick_settings_profiles_off">प्रोफ़ाइलें बंद है।</string>
|
||||||
<string name="accessibility_quick_settings_profiles">प्रोफ़ाइल: <xliff:g id="profile" example="Default">%s</xliff:g>।</string>
|
<string name="accessibility_quick_settings_profiles">प्रोफ़ाइल: <xliff:g id="profile" example="Default">%s</xliff:g>।</string>
|
||||||
<string name="quick_settings_usb_tether_label">यूएसबी टेदरिंग</string>
|
<string name="quick_settings_usb_tether_label">यूएसबी टेदरिंग</string>
|
||||||
<string name="accessibility_dpad_left">कर्सर बायाँ</string>
|
|
||||||
<string name="accessibility_dpad_right">कर्सर दायाँ</string>
|
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
||||||
|
|
@ -45,6 +45,4 @@
|
||||||
<string name="accessibility_quick_settings_profiles_off">Profili isklučeni.</string>
|
<string name="accessibility_quick_settings_profiles_off">Profili isklučeni.</string>
|
||||||
<string name="accessibility_quick_settings_profiles">Profil: <xliff:g id="profile" example="Default">%s </xliff:g>.</string>
|
<string name="accessibility_quick_settings_profiles">Profil: <xliff:g id="profile" example="Default">%s </xliff:g>.</string>
|
||||||
<string name="quick_settings_usb_tether_label">Dijeljenje veze preko USB-a</string>
|
<string name="quick_settings_usb_tether_label">Dijeljenje veze preko USB-a</string>
|
||||||
<string name="accessibility_dpad_left">Kursor lijevo</string>
|
|
||||||
<string name="accessibility_dpad_right">Kursor desno</string>
|
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
||||||
|
|
@ -65,13 +65,7 @@
|
||||||
<string name="vpn_credentials_username">Felhasználónév</string>
|
<string name="vpn_credentials_username">Felhasználónév</string>
|
||||||
<string name="vpn_credentials_password">Jelszó</string>
|
<string name="vpn_credentials_password">Jelszó</string>
|
||||||
<string name="vpn_credentials_dialog_connect">Kapcsolódás</string>
|
<string name="vpn_credentials_dialog_connect">Kapcsolódás</string>
|
||||||
<string name="accessibility_dpad_left">Kurzor balra</string>
|
|
||||||
<string name="accessibility_dpad_right">Kurzor jobbra</string>
|
|
||||||
<string name="status_bar_firewall">Tűzfal</string>
|
<string name="status_bar_firewall">Tűzfal</string>
|
||||||
<string name="screenshot_delete_label">Törlés</string>
|
|
||||||
<string name="screenshot_delete_description">A képernyőkép törlése</string>
|
|
||||||
<string name="screenrecord_delete_label">Törlés</string>
|
|
||||||
<string name="screenrecord_delete_description">A képernyőfelvétel törölve</string>
|
|
||||||
<string name="screenrecord_lowquality_label">Gyengébb minőség</string>
|
<string name="screenrecord_lowquality_label">Gyengébb minőség</string>
|
||||||
<string name="screenrecord_lowquality_summary">... hogy kisebbek legyenek a fájlok</string>
|
<string name="screenrecord_lowquality_summary">... hogy kisebbek legyenek a fájlok</string>
|
||||||
<string name="screenrecord_longer_timeout_switch_label">A nagy fájlméret felső határa</string>
|
<string name="screenrecord_longer_timeout_switch_label">A nagy fájlméret felső határa</string>
|
||||||
|
|
@ -81,4 +75,6 @@
|
||||||
<string name="screenrecord_hevc_switch_label">HEVC-kódolás</string>
|
<string name="screenrecord_hevc_switch_label">HEVC-kódolás</string>
|
||||||
<string name="screenrecord_hevc_switch_summary">Használja a hatékonyabb HEVC-kódolót</string>
|
<string name="screenrecord_hevc_switch_summary">Használja a hatékonyabb HEVC-kódolót</string>
|
||||||
<string name="battery_notification_channel_tv">Akkumulátor-figyelmeztetés</string>
|
<string name="battery_notification_channel_tv">Akkumulátor-figyelmeztetés</string>
|
||||||
|
<string name="screenshot_delete_label">Törlés</string>
|
||||||
|
<string name="screenshot_delete_description">A képernyőkép törlése</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
||||||
|
|
@ -63,16 +63,12 @@
|
||||||
<string name="vpn_credentials_username">Nama pengguna</string>
|
<string name="vpn_credentials_username">Nama pengguna</string>
|
||||||
<string name="vpn_credentials_password">Kata sandi</string>
|
<string name="vpn_credentials_password">Kata sandi</string>
|
||||||
<string name="vpn_credentials_dialog_connect">Hubungkan</string>
|
<string name="vpn_credentials_dialog_connect">Hubungkan</string>
|
||||||
<string name="accessibility_dpad_left">Kursor kiri</string>
|
|
||||||
<string name="accessibility_dpad_right">Kursor kanan</string>
|
|
||||||
<string name="status_bar_firewall">Firewall</string>
|
<string name="status_bar_firewall">Firewall</string>
|
||||||
<string name="screenshot_delete_label">Hapus</string>
|
|
||||||
<string name="screenrecord_delete_label">Hapus</string>
|
|
||||||
<string name="screenrecord_delete_description">Rekaman layar dihapus</string>
|
|
||||||
<string name="screenrecord_lowquality_label">Kualitas rendah</string>
|
<string name="screenrecord_lowquality_label">Kualitas rendah</string>
|
||||||
<string name="screenrecord_lowquality_summary">Untuk ukuran file yang lebih kecil</string>
|
<string name="screenrecord_lowquality_summary">Untuk ukuran file yang lebih kecil</string>
|
||||||
<string name="screenrecord_longer_timeout_switch_summary">Batasi ukuran perekaman hingga 15 GB</string>
|
<string name="screenrecord_longer_timeout_switch_summary">Batasi ukuran perekaman hingga 15 GB</string>
|
||||||
<string name="screenrecord_hevc_switch_label">HEVC encoding</string>
|
<string name="screenrecord_hevc_switch_label">HEVC encoding</string>
|
||||||
<string name="screenrecord_hevc_switch_summary">Gunakan HEVC encoder yang lebih efisien</string>
|
<string name="screenrecord_hevc_switch_summary">Gunakan HEVC encoder yang lebih efisien</string>
|
||||||
<string name="battery_notification_channel_tv">Peringatan baterai</string>
|
<string name="battery_notification_channel_tv">Peringatan baterai</string>
|
||||||
|
<string name="screenshot_delete_label">Hapus</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
||||||
|
|
@ -65,7 +65,5 @@
|
||||||
<string name="vpn_credentials_username">Notandanafn</string>
|
<string name="vpn_credentials_username">Notandanafn</string>
|
||||||
<string name="vpn_credentials_password">Lykilorð</string>
|
<string name="vpn_credentials_password">Lykilorð</string>
|
||||||
<string name="vpn_credentials_dialog_connect">Tengjast</string>
|
<string name="vpn_credentials_dialog_connect">Tengjast</string>
|
||||||
<string name="accessibility_dpad_left">Bendill til vinstri</string>
|
|
||||||
<string name="accessibility_dpad_right">Bendill til hægri</string>
|
|
||||||
<string name="status_bar_firewall">Eldveggur</string>
|
<string name="status_bar_firewall">Eldveggur</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
||||||
|
|
@ -65,13 +65,7 @@
|
||||||
<string name="vpn_credentials_username">Username</string>
|
<string name="vpn_credentials_username">Username</string>
|
||||||
<string name="vpn_credentials_password">Password</string>
|
<string name="vpn_credentials_password">Password</string>
|
||||||
<string name="vpn_credentials_dialog_connect">Connetti</string>
|
<string name="vpn_credentials_dialog_connect">Connetti</string>
|
||||||
<string name="accessibility_dpad_left">Cursore a sinistra</string>
|
|
||||||
<string name="accessibility_dpad_right">Cursore a destra</string>
|
|
||||||
<string name="status_bar_firewall">Firewall</string>
|
<string name="status_bar_firewall">Firewall</string>
|
||||||
<string name="screenshot_delete_label">Elimina</string>
|
|
||||||
<string name="screenshot_delete_description">Elimina schermata</string>
|
|
||||||
<string name="screenrecord_delete_label">Elimina</string>
|
|
||||||
<string name="screenrecord_delete_description">Registrazione schermo eliminata</string>
|
|
||||||
<string name="screenrecord_lowquality_label">Bassa qualità</string>
|
<string name="screenrecord_lowquality_label">Bassa qualità</string>
|
||||||
<string name="screenrecord_lowquality_summary">Per file di dimensioni minori</string>
|
<string name="screenrecord_lowquality_summary">Per file di dimensioni minori</string>
|
||||||
<string name="screenrecord_longer_timeout_switch_label">Massima dimensione del file</string>
|
<string name="screenrecord_longer_timeout_switch_label">Massima dimensione del file</string>
|
||||||
|
|
@ -81,4 +75,6 @@
|
||||||
<string name="screenrecord_hevc_switch_label">Codifica HEVC</string>
|
<string name="screenrecord_hevc_switch_label">Codifica HEVC</string>
|
||||||
<string name="screenrecord_hevc_switch_summary">Usa la più efficiente codifica HEVC</string>
|
<string name="screenrecord_hevc_switch_summary">Usa la più efficiente codifica HEVC</string>
|
||||||
<string name="battery_notification_channel_tv">Avviso batteria</string>
|
<string name="battery_notification_channel_tv">Avviso batteria</string>
|
||||||
|
<string name="screenshot_delete_label">Elimina</string>
|
||||||
|
<string name="screenshot_delete_description">Elimina schermata</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
||||||
|
|
@ -54,6 +54,4 @@
|
||||||
<string name="vpn_credentials_username">שם משתמש</string>
|
<string name="vpn_credentials_username">שם משתמש</string>
|
||||||
<string name="vpn_credentials_password">סיסמה</string>
|
<string name="vpn_credentials_password">סיסמה</string>
|
||||||
<string name="vpn_credentials_dialog_connect">התחבר</string>
|
<string name="vpn_credentials_dialog_connect">התחבר</string>
|
||||||
<string name="accessibility_dpad_left">סמן שמאלה</string>
|
|
||||||
<string name="accessibility_dpad_right">סמן ימינה</string>
|
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
||||||
|
|
@ -65,13 +65,7 @@
|
||||||
<string name="vpn_credentials_username">ユーザー名</string>
|
<string name="vpn_credentials_username">ユーザー名</string>
|
||||||
<string name="vpn_credentials_password">パスワード</string>
|
<string name="vpn_credentials_password">パスワード</string>
|
||||||
<string name="vpn_credentials_dialog_connect">接続</string>
|
<string name="vpn_credentials_dialog_connect">接続</string>
|
||||||
<string name="accessibility_dpad_left">カーソルを左へ</string>
|
|
||||||
<string name="accessibility_dpad_right">カーソルを右へ</string>
|
|
||||||
<string name="status_bar_firewall">ファイアウォール</string>
|
<string name="status_bar_firewall">ファイアウォール</string>
|
||||||
<string name="screenshot_delete_label">削除</string>
|
|
||||||
<string name="screenshot_delete_description">スクリーンショットを削除</string>
|
|
||||||
<string name="screenrecord_delete_label">削除</string>
|
|
||||||
<string name="screenrecord_delete_description">画面録画を削除しました</string>
|
|
||||||
<string name="screenrecord_lowquality_label">低品質にする</string>
|
<string name="screenrecord_lowquality_label">低品質にする</string>
|
||||||
<string name="screenrecord_lowquality_summary">低品質にしてファイルサイズを縮小します</string>
|
<string name="screenrecord_lowquality_summary">低品質にしてファイルサイズを縮小します</string>
|
||||||
<string name="screenrecord_longer_timeout_switch_label">ファイルサイズの上限を上げる</string>
|
<string name="screenrecord_longer_timeout_switch_label">ファイルサイズの上限を上げる</string>
|
||||||
|
|
@ -81,4 +75,6 @@
|
||||||
<string name="screenrecord_hevc_switch_label">HEVC エンコーディング</string>
|
<string name="screenrecord_hevc_switch_label">HEVC エンコーディング</string>
|
||||||
<string name="screenrecord_hevc_switch_summary">より効率的な HEVC エンコーダを使用します</string>
|
<string name="screenrecord_hevc_switch_summary">より効率的な HEVC エンコーダを使用します</string>
|
||||||
<string name="battery_notification_channel_tv">バッテリー警告</string>
|
<string name="battery_notification_channel_tv">バッテリー警告</string>
|
||||||
|
<string name="screenshot_delete_label">削除</string>
|
||||||
|
<string name="screenshot_delete_description">スクリーンショットを削除</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
||||||
|
|
@ -65,11 +65,8 @@
|
||||||
<string name="vpn_credentials_username">მომხმარებელი</string>
|
<string name="vpn_credentials_username">მომხმარებელი</string>
|
||||||
<string name="vpn_credentials_password">პაროლი</string>
|
<string name="vpn_credentials_password">პაროლი</string>
|
||||||
<string name="vpn_credentials_dialog_connect">დაკავშირება</string>
|
<string name="vpn_credentials_dialog_connect">დაკავშირება</string>
|
||||||
<string name="accessibility_dpad_left">მაჩვენებელი მარცხნივ</string>
|
|
||||||
<string name="accessibility_dpad_right">მიმთითებელი მარჯვნივ</string>
|
|
||||||
<string name="status_bar_firewall">ქსელის ფარი</string>
|
<string name="status_bar_firewall">ქსელის ფარი</string>
|
||||||
|
<string name="battery_notification_channel_tv">ბატარეის გაფრთხილება</string>
|
||||||
<string name="screenshot_delete_label">წაშლა</string>
|
<string name="screenshot_delete_label">წაშლა</string>
|
||||||
<string name="screenshot_delete_description">ეკრანის სურათის წაშლა</string>
|
<string name="screenshot_delete_description">ეკრანის სურათის წაშლა</string>
|
||||||
<string name="screenrecord_delete_label">წაშლა</string>
|
|
||||||
<string name="battery_notification_channel_tv">ბატარეის გაფრთხილება</string>
|
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
||||||
|
|
@ -51,6 +51,4 @@
|
||||||
<string name="vpn_credentials_username">Isem n useqdac</string>
|
<string name="vpn_credentials_username">Isem n useqdac</string>
|
||||||
<string name="vpn_credentials_password">Awal uffir</string>
|
<string name="vpn_credentials_password">Awal uffir</string>
|
||||||
<string name="vpn_credentials_dialog_connect">Qqen</string>
|
<string name="vpn_credentials_dialog_connect">Qqen</string>
|
||||||
<string name="accessibility_dpad_left">Taḥenaccaḍt tazelmadt</string>
|
|
||||||
<string name="accessibility_dpad_right">Taḥenaccaḍt tayeffust</string>
|
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
||||||
|
|
@ -46,6 +46,4 @@
|
||||||
<string name="accessibility_quick_settings_profiles_off">ಪ್ರೊಫೈಲ್ಸ್ ಆಫ್.</string>
|
<string name="accessibility_quick_settings_profiles_off">ಪ್ರೊಫೈಲ್ಸ್ ಆಫ್.</string>
|
||||||
<string name="accessibility_quick_settings_profiles">ಪ್ರೊಫೈಲ್: <xliff:g id="profile" example="Default">%s</xliff:g>.</string>
|
<string name="accessibility_quick_settings_profiles">ಪ್ರೊಫೈಲ್: <xliff:g id="profile" example="Default">%s</xliff:g>.</string>
|
||||||
<string name="quick_settings_usb_tether_label">ಯುಎಸ್ಬಿ ಟೆಥರಿಂಗ್</string>
|
<string name="quick_settings_usb_tether_label">ಯುಎಸ್ಬಿ ಟೆಥರಿಂಗ್</string>
|
||||||
<string name="accessibility_dpad_left">ಸೂಚಕದ ಎಡ</string>
|
|
||||||
<string name="accessibility_dpad_right">ಸೂಚಕದ ಬಲ</string>
|
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
||||||
|
|
@ -65,13 +65,7 @@
|
||||||
<string name="vpn_credentials_username">사용자 이름</string>
|
<string name="vpn_credentials_username">사용자 이름</string>
|
||||||
<string name="vpn_credentials_password">비밀번호</string>
|
<string name="vpn_credentials_password">비밀번호</string>
|
||||||
<string name="vpn_credentials_dialog_connect">연결</string>
|
<string name="vpn_credentials_dialog_connect">연결</string>
|
||||||
<string name="accessibility_dpad_left">커서 왼쪽</string>
|
|
||||||
<string name="accessibility_dpad_right">커서 오른쪽</string>
|
|
||||||
<string name="status_bar_firewall">방화벽</string>
|
<string name="status_bar_firewall">방화벽</string>
|
||||||
<string name="screenshot_delete_label">삭제</string>
|
|
||||||
<string name="screenshot_delete_description">스크린샷 삭제</string>
|
|
||||||
<string name="screenrecord_delete_label">삭제</string>
|
|
||||||
<string name="screenrecord_delete_description">화면 녹화 영상이 삭제되었습니다.</string>
|
|
||||||
<string name="screenrecord_lowquality_label">낮은 품질</string>
|
<string name="screenrecord_lowquality_label">낮은 품질</string>
|
||||||
<string name="screenrecord_lowquality_summary">파일 용량 축소</string>
|
<string name="screenrecord_lowquality_summary">파일 용량 축소</string>
|
||||||
<string name="screenrecord_longer_timeout_switch_label">파일 크기 제한 확장</string>
|
<string name="screenrecord_longer_timeout_switch_label">파일 크기 제한 확장</string>
|
||||||
|
|
@ -81,4 +75,6 @@
|
||||||
<string name="screenrecord_hevc_switch_label">HEVC 인코딩</string>
|
<string name="screenrecord_hevc_switch_label">HEVC 인코딩</string>
|
||||||
<string name="screenrecord_hevc_switch_summary">더 효율적인 HEVC 인코더 사용</string>
|
<string name="screenrecord_hevc_switch_summary">더 효율적인 HEVC 인코더 사용</string>
|
||||||
<string name="battery_notification_channel_tv">배터리 경고</string>
|
<string name="battery_notification_channel_tv">배터리 경고</string>
|
||||||
|
<string name="screenshot_delete_label">삭제</string>
|
||||||
|
<string name="screenshot_delete_description">스크린샷 삭제</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
||||||
|
|
@ -22,6 +22,4 @@
|
||||||
<string name="quick_settings_heads_up_label">فهرمووهکان</string>
|
<string name="quick_settings_heads_up_label">فهرمووهکان</string>
|
||||||
<string name="quick_settings_profiles_label">زانیاری تایبەتیەکانی سیستەم</string>
|
<string name="quick_settings_profiles_label">زانیاری تایبەتیەکانی سیستەم</string>
|
||||||
<string name="quick_settings_usb_tether_label">گرتنەدەستی USB</string>
|
<string name="quick_settings_usb_tether_label">گرتنەدەستی USB</string>
|
||||||
<string name="accessibility_dpad_left">جێنیشاندهر بۆ لای چهپ</string>
|
|
||||||
<string name="accessibility_dpad_right">جێنیشاندهر بۆ لای ڕاست</string>
|
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
||||||
|
|
@ -34,6 +34,4 @@
|
||||||
<string name="accessibility_quick_settings_profiles_off">Profiller aus.</string>
|
<string name="accessibility_quick_settings_profiles_off">Profiller aus.</string>
|
||||||
<string name="accessibility_quick_settings_profiles">Profil: <xliff:g id="profile" example="Default">%s</xliff:g>.</string>
|
<string name="accessibility_quick_settings_profiles">Profil: <xliff:g id="profile" example="Default">%s</xliff:g>.</string>
|
||||||
<string name="quick_settings_usb_tether_label">USB-Tethering</string>
|
<string name="quick_settings_usb_tether_label">USB-Tethering</string>
|
||||||
<string name="accessibility_dpad_left">Cursor lénks</string>
|
|
||||||
<string name="accessibility_dpad_right">Cursor riets</string>
|
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
||||||
|
|
@ -31,6 +31,4 @@
|
||||||
<string name="accessibility_quick_settings_profiles_off">Profiliai išjungti.</string>
|
<string name="accessibility_quick_settings_profiles_off">Profiliai išjungti.</string>
|
||||||
<string name="accessibility_quick_settings_profiles">Profilis: <xliff:g id="profile" example="Default">%s </xliff:g>.</string>
|
<string name="accessibility_quick_settings_profiles">Profilis: <xliff:g id="profile" example="Default">%s </xliff:g>.</string>
|
||||||
<string name="quick_settings_usb_tether_label">USB susiejimas</string>
|
<string name="quick_settings_usb_tether_label">USB susiejimas</string>
|
||||||
<string name="accessibility_dpad_left">Žymeklis kairėje</string>
|
|
||||||
<string name="accessibility_dpad_right">Žymeklis dešinėje</string>
|
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
||||||
|
|
@ -1,23 +0,0 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<!--
|
|
||||||
/**
|
|
||||||
* Copyright (c) 2015, The CyanogenMod Project
|
|
||||||
* Copyright (c) 2017-2021 The LineageOS Project
|
|
||||||
*
|
|
||||||
* 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.
|
|
||||||
*/
|
|
||||||
-->
|
|
||||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
|
||||||
<string name="accessibility_dpad_left">Kursoru pa kreisi</string>
|
|
||||||
<string name="accessibility_dpad_right">Kursoru pa labi</string>
|
|
||||||
</resources>
|
|
||||||
|
|
@ -34,6 +34,4 @@
|
||||||
<string name="accessibility_quick_settings_profiles_off">പ്രൊഫൈലുകൾ ഓഫ്.</string>
|
<string name="accessibility_quick_settings_profiles_off">പ്രൊഫൈലുകൾ ഓഫ്.</string>
|
||||||
<string name="accessibility_quick_settings_profiles">പ്രൊഫൈൽ: <xliff:g id="profile" example="Default">%s</xliff:g>.</string>
|
<string name="accessibility_quick_settings_profiles">പ്രൊഫൈൽ: <xliff:g id="profile" example="Default">%s</xliff:g>.</string>
|
||||||
<string name="quick_settings_usb_tether_label">USB ടെതറിംഗ്</string>
|
<string name="quick_settings_usb_tether_label">USB ടെതറിംഗ്</string>
|
||||||
<string name="accessibility_dpad_left">കർസർ ഇടത്</string>
|
|
||||||
<string name="accessibility_dpad_right">കർസർ വലത്</string>
|
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
||||||
|
|
@ -34,6 +34,4 @@
|
||||||
<string name="accessibility_quick_settings_profiles_off">प्रोफाइल्स बंद.</string>
|
<string name="accessibility_quick_settings_profiles_off">प्रोफाइल्स बंद.</string>
|
||||||
<string name="accessibility_quick_settings_profiles">प्रोफाइल: <xliff:g id="profile" example="Default">%s</xliff:g>.</string>
|
<string name="accessibility_quick_settings_profiles">प्रोफाइल: <xliff:g id="profile" example="Default">%s</xliff:g>.</string>
|
||||||
<string name="quick_settings_usb_tether_label">USB टेदरिंग</string>
|
<string name="quick_settings_usb_tether_label">USB टेदरिंग</string>
|
||||||
<string name="accessibility_dpad_left">कर्सर डावा</string>
|
|
||||||
<string name="accessibility_dpad_right">कर्सर उजवा</string>
|
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
||||||
|
|
@ -63,6 +63,4 @@
|
||||||
<string name="vpn_credentials_username">အသုံးပြုသူအမည်</string>
|
<string name="vpn_credentials_username">အသုံးပြုသူအမည်</string>
|
||||||
<string name="vpn_credentials_password">လျှို့ဝှက်နံပါတ်</string>
|
<string name="vpn_credentials_password">လျှို့ဝှက်နံပါတ်</string>
|
||||||
<string name="vpn_credentials_dialog_connect">ချိတ်ဆက်မည်</string>
|
<string name="vpn_credentials_dialog_connect">ချိတ်ဆက်မည်</string>
|
||||||
<string name="accessibility_dpad_left">Cursor ဘယ်ဖက်</string>
|
|
||||||
<string name="accessibility_dpad_right">Coursor ညာဖက်</string>
|
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
||||||
|
|
@ -46,6 +46,4 @@
|
||||||
<string name="accessibility_quick_settings_profiles_off">Profiler av.</string>
|
<string name="accessibility_quick_settings_profiles_off">Profiler av.</string>
|
||||||
<string name="accessibility_quick_settings_profiles">Profil: <xliff:g id="profile" example="Default">%s </xliff:g>.</string>
|
<string name="accessibility_quick_settings_profiles">Profil: <xliff:g id="profile" example="Default">%s </xliff:g>.</string>
|
||||||
<string name="quick_settings_usb_tether_label">USB tethering</string>
|
<string name="quick_settings_usb_tether_label">USB tethering</string>
|
||||||
<string name="accessibility_dpad_left">Markør til venstre</string>
|
|
||||||
<string name="accessibility_dpad_right">Markør til høyre</string>
|
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
||||||
|
|
@ -65,13 +65,7 @@
|
||||||
<string name="vpn_credentials_username">Gebruikersnaam</string>
|
<string name="vpn_credentials_username">Gebruikersnaam</string>
|
||||||
<string name="vpn_credentials_password">Wachtwoord</string>
|
<string name="vpn_credentials_password">Wachtwoord</string>
|
||||||
<string name="vpn_credentials_dialog_connect">Verbinden </string>
|
<string name="vpn_credentials_dialog_connect">Verbinden </string>
|
||||||
<string name="accessibility_dpad_left">Cursor links</string>
|
|
||||||
<string name="accessibility_dpad_right">Cursor rechts</string>
|
|
||||||
<string name="status_bar_firewall">Firewall</string>
|
<string name="status_bar_firewall">Firewall</string>
|
||||||
<string name="screenshot_delete_label">Verwijder</string>
|
|
||||||
<string name="screenshot_delete_description">Verwijder screenshot</string>
|
|
||||||
<string name="screenrecord_delete_label">Verwijder</string>
|
|
||||||
<string name="screenrecord_delete_description">Schermopname verwijderd</string>
|
|
||||||
<string name="screenrecord_lowquality_label">Lagere kwaliteit</string>
|
<string name="screenrecord_lowquality_label">Lagere kwaliteit</string>
|
||||||
<string name="screenrecord_lowquality_summary">Voor kleinere bestandsgrootte</string>
|
<string name="screenrecord_lowquality_summary">Voor kleinere bestandsgrootte</string>
|
||||||
<string name="screenrecord_longer_timeout_switch_label">Grotere limiet bestandsgrootte</string>
|
<string name="screenrecord_longer_timeout_switch_label">Grotere limiet bestandsgrootte</string>
|
||||||
|
|
@ -81,4 +75,6 @@
|
||||||
<string name="screenrecord_hevc_switch_label">HEVC codering</string>
|
<string name="screenrecord_hevc_switch_label">HEVC codering</string>
|
||||||
<string name="screenrecord_hevc_switch_summary">Gebruik de efficiëntere HEVC-encoder</string>
|
<string name="screenrecord_hevc_switch_summary">Gebruik de efficiëntere HEVC-encoder</string>
|
||||||
<string name="battery_notification_channel_tv">Batterij waarschuwing</string>
|
<string name="battery_notification_channel_tv">Batterij waarschuwing</string>
|
||||||
|
<string name="screenshot_delete_label">Verwijder</string>
|
||||||
|
<string name="screenshot_delete_description">Verwijder screenshot</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
||||||
|
|
@ -34,6 +34,4 @@
|
||||||
<string name="accessibility_quick_settings_profiles_off">ପ୍ରୋଫାଇଲ୍ଗୁଡିକ ଅଫ୍ ଅଛି।</string>
|
<string name="accessibility_quick_settings_profiles_off">ପ୍ରୋଫାଇଲ୍ଗୁଡିକ ଅଫ୍ ଅଛି।</string>
|
||||||
<string name="accessibility_quick_settings_profiles">ପ୍ରୋଫାଇଲ୍: <xliff:g id="profile" example="Default">%s</xliff:g>।</string>
|
<string name="accessibility_quick_settings_profiles">ପ୍ରୋଫାଇଲ୍: <xliff:g id="profile" example="Default">%s</xliff:g>।</string>
|
||||||
<string name="quick_settings_usb_tether_label">USB ଟିଥରିଂ</string>
|
<string name="quick_settings_usb_tether_label">USB ଟିଥରିଂ</string>
|
||||||
<string name="accessibility_dpad_left">କର୍ସର୍ ବାମ</string>
|
|
||||||
<string name="accessibility_dpad_right">କର୍ସର୍ ଡାହାଣ</string>
|
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
||||||
|
|
@ -65,13 +65,7 @@
|
||||||
<string name="vpn_credentials_username">Nazwa użytkownika</string>
|
<string name="vpn_credentials_username">Nazwa użytkownika</string>
|
||||||
<string name="vpn_credentials_password">Hasło</string>
|
<string name="vpn_credentials_password">Hasło</string>
|
||||||
<string name="vpn_credentials_dialog_connect">Połącz</string>
|
<string name="vpn_credentials_dialog_connect">Połącz</string>
|
||||||
<string name="accessibility_dpad_left">Kursor w lewo</string>
|
|
||||||
<string name="accessibility_dpad_right">Kursor w prawo</string>
|
|
||||||
<string name="status_bar_firewall">Zapora sieciowa</string>
|
<string name="status_bar_firewall">Zapora sieciowa</string>
|
||||||
<string name="screenshot_delete_label">Usuń</string>
|
|
||||||
<string name="screenshot_delete_description">Usuń zrzut ekranu</string>
|
|
||||||
<string name="screenrecord_delete_label">Usuń</string>
|
|
||||||
<string name="screenrecord_delete_description">Usunięto nagranie ekranu</string>
|
|
||||||
<string name="screenrecord_lowquality_label">Niższa jakość</string>
|
<string name="screenrecord_lowquality_label">Niższa jakość</string>
|
||||||
<string name="screenrecord_lowquality_summary">Dla mniejszego rozmiaru pliku</string>
|
<string name="screenrecord_lowquality_summary">Dla mniejszego rozmiaru pliku</string>
|
||||||
<string name="screenrecord_longer_timeout_switch_label">Większy limit rozmiaru pliku</string>
|
<string name="screenrecord_longer_timeout_switch_label">Większy limit rozmiaru pliku</string>
|
||||||
|
|
@ -81,4 +75,6 @@
|
||||||
<string name="screenrecord_hevc_switch_label">Kodowanie HEVC</string>
|
<string name="screenrecord_hevc_switch_label">Kodowanie HEVC</string>
|
||||||
<string name="screenrecord_hevc_switch_summary">Używaj skuteczniejszego kodera HEVC</string>
|
<string name="screenrecord_hevc_switch_summary">Używaj skuteczniejszego kodera HEVC</string>
|
||||||
<string name="battery_notification_channel_tv">Ostrzeżenie dotyczące baterii</string>
|
<string name="battery_notification_channel_tv">Ostrzeżenie dotyczące baterii</string>
|
||||||
|
<string name="screenshot_delete_label">Usuń</string>
|
||||||
|
<string name="screenshot_delete_description">Usuń zrzut ekranu</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
||||||
|
|
@ -21,12 +21,12 @@
|
||||||
<string name="clock">Relógio</string>
|
<string name="clock">Relógio</string>
|
||||||
<string name="global_action_restart_more">Reiniciar\u2026</string>
|
<string name="global_action_restart_more">Reiniciar\u2026</string>
|
||||||
<string name="global_action_restart_system">Sistema</string>
|
<string name="global_action_restart_system">Sistema</string>
|
||||||
<string name="global_action_restart_recovery">Recovery</string>
|
<string name="global_action_restart_recovery">Recuperação</string>
|
||||||
<string name="global_action_restart_bootloader">Bootloader</string>
|
<string name="global_action_restart_bootloader">Bootloader</string>
|
||||||
<string name="global_action_restart_download">Download</string>
|
<string name="global_action_restart_download">Download</string>
|
||||||
<string name="global_action_restart_fastboot">Fastbootd</string>
|
<string name="global_action_restart_fastboot">Fastbootd</string>
|
||||||
<string name="global_action_restart_progress">Reiniciando\u2026</string>
|
<string name="global_action_restart_progress">Reiniciando\u2026</string>
|
||||||
<string name="global_action_restart_recovery_progress">Reiniciando no modo Recovery\u2026</string>
|
<string name="global_action_restart_recovery_progress">Reiniciando para o modo de recuperação\u2026</string>
|
||||||
<string name="global_action_restart_bootloader_progress">Reiniciando no modo bootloader\u2026</string>
|
<string name="global_action_restart_bootloader_progress">Reiniciando no modo bootloader\u2026</string>
|
||||||
<string name="global_action_restart_download_progress">Reiniciando no modo de download\u2026</string>
|
<string name="global_action_restart_download_progress">Reiniciando no modo de download\u2026</string>
|
||||||
<string name="global_action_restart_fastboot_progress">Reiniciando no modo fastbootd\u2026</string>
|
<string name="global_action_restart_fastboot_progress">Reiniciando no modo fastbootd\u2026</string>
|
||||||
|
|
@ -38,20 +38,20 @@
|
||||||
<string name="accessibility_quick_settings_ambient_display_off">Tela ambiente desativada.</string>
|
<string name="accessibility_quick_settings_ambient_display_off">Tela ambiente desativada.</string>
|
||||||
<string name="accessibility_quick_settings_ambient_display_on">Tela ambiente ativada.</string>
|
<string name="accessibility_quick_settings_ambient_display_on">Tela ambiente ativada.</string>
|
||||||
<string name="quick_settings_aod_label">AOD</string>
|
<string name="quick_settings_aod_label">AOD</string>
|
||||||
<string name="quick_settings_aod_off_powersave_label">AOD desativado\nEconomia de bateria</string>
|
<string name="quick_settings_aod_off_powersave_label">AOD desligada\nEconomia de bateria</string>
|
||||||
<string name="quick_settings_caffeine_label">Cafeína</string>
|
<string name="quick_settings_caffeine_label">Cafeína</string>
|
||||||
<string name="accessibility_quick_settings_caffeine_off">Cafeína desligada.</string>
|
<string name="accessibility_quick_settings_caffeine_off">Cafeína desligada.</string>
|
||||||
<string name="accessibility_quick_settings_caffeine_on">Cafeína ligada.</string>
|
<string name="accessibility_quick_settings_caffeine_on">Cafeína ligada.</string>
|
||||||
<string name="quick_settings_heads_up_label">Notificações pop-up</string>
|
<string name="quick_settings_heads_up_label">Notificações pop-up</string>
|
||||||
<string name="accessibility_quick_settings_heads_up_off">Notificações pop-up desativadas.</string>
|
<string name="accessibility_quick_settings_heads_up_off">Notificações pop-up desativadas.</string>
|
||||||
<string name="accessibility_quick_settings_heads_up_on">Notificações pop-up desativadas.</string>
|
<string name="accessibility_quick_settings_heads_up_on">Notificações pop-up ativadas.</string>
|
||||||
<string name="quick_settings_powershare_label">Wireless PowerShare</string>
|
<string name="quick_settings_powershare_label">Wireless PowerShare</string>
|
||||||
<string name="quick_settings_powershare_off_powersave_label">Wireless PowerShare desligado\nEconomia de bateria</string>
|
<string name="quick_settings_powershare_off_powersave_label">Wireless PowerShare desativado\nEconomia de bateria</string>
|
||||||
<string name="quick_settings_powershare_off_low_battery_label">Wireless PowerShare desligado\nBateria muito fraca</string>
|
<string name="quick_settings_powershare_off_low_battery_label">Wireless PowerShare desativado\nBateria fraca</string>
|
||||||
<string name="quick_settings_powershare_enabled_label">O Wireless PowerShare está ativado</string>
|
<string name="quick_settings_powershare_enabled_label">O Wireless PowerShare está ativado</string>
|
||||||
<string name="quick_settings_reading_mode">Modo de leitura</string>
|
<string name="quick_settings_reading_mode">Modo de leitura</string>
|
||||||
<string name="accessibility_quick_settings_reading_mode_on">Modo de leitura ligado</string>
|
<string name="accessibility_quick_settings_reading_mode_on">Modo de leitura ativado.</string>
|
||||||
<string name="accessibility_quick_settings_reading_mode_off">Modo de leitura desligado</string>
|
<string name="accessibility_quick_settings_reading_mode_off">Modo de leitura desativado.</string>
|
||||||
<string name="quick_settings_sync_label">Sincronização</string>
|
<string name="quick_settings_sync_label">Sincronização</string>
|
||||||
<string name="accessibility_quick_settings_sync_off">Sincronização desativada.</string>
|
<string name="accessibility_quick_settings_sync_off">Sincronização desativada.</string>
|
||||||
<string name="accessibility_quick_settings_sync_on">Sincronização ativada.</string>
|
<string name="accessibility_quick_settings_sync_on">Sincronização ativada.</string>
|
||||||
|
|
@ -61,24 +61,20 @@
|
||||||
<string name="quick_settings_usb_tether_label">Tethering USB</string>
|
<string name="quick_settings_usb_tether_label">Tethering USB</string>
|
||||||
<string name="quick_settings_vpn_label">VPN</string>
|
<string name="quick_settings_vpn_label">VPN</string>
|
||||||
<string name="quick_settings_vpn_connect_dialog_title">Conectar-se a\u2026</string>
|
<string name="quick_settings_vpn_connect_dialog_title">Conectar-se a\u2026</string>
|
||||||
<string name="vpn_credentials_hint">Por favor, insira as suas credenciais para conectar-se a <xliff:g id="name">%s</xliff:g></string>
|
<string name="vpn_credentials_hint">Por favor, digite as suas credenciais para conectar-se a <xliff:g id="name">%s</xliff:g></string>
|
||||||
<string name="vpn_credentials_username">Usuário</string>
|
<string name="vpn_credentials_username">Nome de usuário</string>
|
||||||
<string name="vpn_credentials_password">Senha</string>
|
<string name="vpn_credentials_password">Senha</string>
|
||||||
<string name="vpn_credentials_dialog_connect">Conectar</string>
|
<string name="vpn_credentials_dialog_connect">Conectar</string>
|
||||||
<string name="accessibility_dpad_left">Cursor à esquerda</string>
|
|
||||||
<string name="accessibility_dpad_right">Cursor à direita</string>
|
|
||||||
<string name="status_bar_firewall">Firewall</string>
|
<string name="status_bar_firewall">Firewall</string>
|
||||||
<string name="screenshot_delete_label">Excluir</string>
|
<string name="screenrecord_lowquality_label">Baixa qualidade</string>
|
||||||
<string name="screenshot_delete_description">Excluir captura de tela</string>
|
<string name="screenrecord_lowquality_summary">Para arquivos menores</string>
|
||||||
<string name="screenrecord_delete_label">Excluir</string>
|
|
||||||
<string name="screenrecord_delete_description">Gravação de tela excluída</string>
|
|
||||||
<string name="screenrecord_lowquality_label">Qualidade mais baixa</string>
|
|
||||||
<string name="screenrecord_lowquality_summary">Para tamanho de arquivo menor</string>
|
|
||||||
<string name="screenrecord_longer_timeout_switch_label">Limite de tamanho de arquivo maior</string>
|
<string name="screenrecord_longer_timeout_switch_label">Limite de tamanho de arquivo maior</string>
|
||||||
<string name="screenrecord_longer_timeout_switch_summary">Limitar o tamanho de gravação para 15 GB</string>
|
<string name="screenrecord_longer_timeout_switch_summary">Limitar o tamanho da gravação para 15 GB</string>
|
||||||
<string name="screenrecord_skip_time_label">Pular o temporizador</string>
|
<string name="screenrecord_skip_time_label">Pular o temporizador</string>
|
||||||
<string name="screenrecord_skip_time_summary">Remover a espera de 3 segundos</string>
|
<string name="screenrecord_skip_time_summary">Remover a espera de 3 segundos</string>
|
||||||
<string name="screenrecord_hevc_switch_label">Codificação HEVC</string>
|
<string name="screenrecord_hevc_switch_label">Codificação HEVC</string>
|
||||||
<string name="screenrecord_hevc_switch_summary">Use o codificador HEVC mais eficiente</string>
|
<string name="screenrecord_hevc_switch_summary">Usar o codificador HEVC, que é mais eficiente</string>
|
||||||
<string name="battery_notification_channel_tv">Alerta de bateria</string>
|
<string name="battery_notification_channel_tv">Alerta de bateria</string>
|
||||||
|
<string name="screenshot_delete_label">Excluir</string>
|
||||||
|
<string name="screenshot_delete_description">Excluir captura de tela</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
||||||
|
|
@ -65,13 +65,7 @@
|
||||||
<string name="vpn_credentials_username">Nome de utilizador</string>
|
<string name="vpn_credentials_username">Nome de utilizador</string>
|
||||||
<string name="vpn_credentials_password">Palavra-passe</string>
|
<string name="vpn_credentials_password">Palavra-passe</string>
|
||||||
<string name="vpn_credentials_dialog_connect">Ligar</string>
|
<string name="vpn_credentials_dialog_connect">Ligar</string>
|
||||||
<string name="accessibility_dpad_left">Cursor à esquerda</string>
|
|
||||||
<string name="accessibility_dpad_right">Cursor à direita</string>
|
|
||||||
<string name="status_bar_firewall">Firewall</string>
|
<string name="status_bar_firewall">Firewall</string>
|
||||||
<string name="screenshot_delete_label">Eliminar</string>
|
|
||||||
<string name="screenshot_delete_description">Eliminar captura de ecrã</string>
|
|
||||||
<string name="screenrecord_delete_label">Eliminar</string>
|
|
||||||
<string name="screenrecord_delete_description">Gravação de ecrã eliminada</string>
|
|
||||||
<string name="screenrecord_lowquality_label">Qualidade mais baixa</string>
|
<string name="screenrecord_lowquality_label">Qualidade mais baixa</string>
|
||||||
<string name="screenrecord_lowquality_summary">Para um ficheiro de menor tamanho</string>
|
<string name="screenrecord_lowquality_summary">Para um ficheiro de menor tamanho</string>
|
||||||
<string name="screenrecord_longer_timeout_switch_label">Limite de tamanho para ficheiros maiores</string>
|
<string name="screenrecord_longer_timeout_switch_label">Limite de tamanho para ficheiros maiores</string>
|
||||||
|
|
@ -81,4 +75,6 @@
|
||||||
<string name="screenrecord_hevc_switch_label">Codificação HEVC</string>
|
<string name="screenrecord_hevc_switch_label">Codificação HEVC</string>
|
||||||
<string name="screenrecord_hevc_switch_summary">Utilizar o codificador HEVC, mais eficiente</string>
|
<string name="screenrecord_hevc_switch_summary">Utilizar o codificador HEVC, mais eficiente</string>
|
||||||
<string name="battery_notification_channel_tv">Aviso de bateria</string>
|
<string name="battery_notification_channel_tv">Aviso de bateria</string>
|
||||||
|
<string name="screenshot_delete_label">Eliminar</string>
|
||||||
|
<string name="screenshot_delete_description">Eliminar captura de ecrã</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
||||||
|
|
@ -65,13 +65,7 @@
|
||||||
<string name="vpn_credentials_username">Nume de utilizator</string>
|
<string name="vpn_credentials_username">Nume de utilizator</string>
|
||||||
<string name="vpn_credentials_password">Parolă</string>
|
<string name="vpn_credentials_password">Parolă</string>
|
||||||
<string name="vpn_credentials_dialog_connect">Conectare</string>
|
<string name="vpn_credentials_dialog_connect">Conectare</string>
|
||||||
<string name="accessibility_dpad_left">Cursor stânga</string>
|
|
||||||
<string name="accessibility_dpad_right">Cursor dreapta</string>
|
|
||||||
<string name="status_bar_firewall">Firewall</string>
|
<string name="status_bar_firewall">Firewall</string>
|
||||||
<string name="screenshot_delete_label">Șterge</string>
|
|
||||||
<string name="screenshot_delete_description">Ștergeți captura de ecran</string>
|
|
||||||
<string name="screenrecord_delete_label">Șterge</string>
|
|
||||||
<string name="screenrecord_delete_description">Înregistrare ecran ștearsă</string>
|
|
||||||
<string name="screenrecord_lowquality_label">Calitate scăzută</string>
|
<string name="screenrecord_lowquality_label">Calitate scăzută</string>
|
||||||
<string name="screenrecord_lowquality_summary">Pentru o dimensiune mai mică a fișierului</string>
|
<string name="screenrecord_lowquality_summary">Pentru o dimensiune mai mică a fișierului</string>
|
||||||
<string name="screenrecord_longer_timeout_switch_label">Limită mai mare a dimensiunii fișierului</string>
|
<string name="screenrecord_longer_timeout_switch_label">Limită mai mare a dimensiunii fișierului</string>
|
||||||
|
|
@ -81,4 +75,6 @@
|
||||||
<string name="screenrecord_hevc_switch_label">Codare HEVC</string>
|
<string name="screenrecord_hevc_switch_label">Codare HEVC</string>
|
||||||
<string name="screenrecord_hevc_switch_summary">Utilizați codificatorul HEVC mai eficient</string>
|
<string name="screenrecord_hevc_switch_summary">Utilizați codificatorul HEVC mai eficient</string>
|
||||||
<string name="battery_notification_channel_tv">Avertizare baterie</string>
|
<string name="battery_notification_channel_tv">Avertizare baterie</string>
|
||||||
|
<string name="screenshot_delete_label">Șterge</string>
|
||||||
|
<string name="screenshot_delete_description">Ștergeți captura de ecran</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
||||||
|
|
@ -65,13 +65,7 @@
|
||||||
<string name="vpn_credentials_username">Имя пользователя</string>
|
<string name="vpn_credentials_username">Имя пользователя</string>
|
||||||
<string name="vpn_credentials_password">Пароль</string>
|
<string name="vpn_credentials_password">Пароль</string>
|
||||||
<string name="vpn_credentials_dialog_connect">Подключиться</string>
|
<string name="vpn_credentials_dialog_connect">Подключиться</string>
|
||||||
<string name="accessibility_dpad_left">Курсор влево</string>
|
|
||||||
<string name="accessibility_dpad_right">Курсор вправо</string>
|
|
||||||
<string name="status_bar_firewall">Брандмауэр</string>
|
<string name="status_bar_firewall">Брандмауэр</string>
|
||||||
<string name="screenshot_delete_label">Удалить</string>
|
|
||||||
<string name="screenshot_delete_description">Удалить скриншот</string>
|
|
||||||
<string name="screenrecord_delete_label">Удалить</string>
|
|
||||||
<string name="screenrecord_delete_description">Запись экрана удалена</string>
|
|
||||||
<string name="screenrecord_lowquality_label">Низкое качество</string>
|
<string name="screenrecord_lowquality_label">Низкое качество</string>
|
||||||
<string name="screenrecord_lowquality_summary">Для уменьшения размера файла</string>
|
<string name="screenrecord_lowquality_summary">Для уменьшения размера файла</string>
|
||||||
<string name="screenrecord_longer_timeout_switch_label">Ограничение на размер файла</string>
|
<string name="screenrecord_longer_timeout_switch_label">Ограничение на размер файла</string>
|
||||||
|
|
@ -81,4 +75,6 @@
|
||||||
<string name="screenrecord_hevc_switch_label">Кодирование HEVC</string>
|
<string name="screenrecord_hevc_switch_label">Кодирование HEVC</string>
|
||||||
<string name="screenrecord_hevc_switch_summary">Использовать более эффективный кодер HEVC</string>
|
<string name="screenrecord_hevc_switch_summary">Использовать более эффективный кодер HEVC</string>
|
||||||
<string name="battery_notification_channel_tv">Предупреждение батареи</string>
|
<string name="battery_notification_channel_tv">Предупреждение батареи</string>
|
||||||
|
<string name="screenshot_delete_label">Удалить</string>
|
||||||
|
<string name="screenshot_delete_description">Удалить скриншот</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
||||||
|
|
@ -29,7 +29,6 @@
|
||||||
<string name="quick_settings_reading_mode">Modalidade letura</string>
|
<string name="quick_settings_reading_mode">Modalidade letura</string>
|
||||||
<string name="quick_settings_profiles_label">Profilos de sistema</string>
|
<string name="quick_settings_profiles_label">Profilos de sistema</string>
|
||||||
<string name="accessibility_quick_settings_profiles">Profilu: <xliff:g id="profile" example="Default">%s</xliff:g>.</string>
|
<string name="accessibility_quick_settings_profiles">Profilu: <xliff:g id="profile" example="Default">%s</xliff:g>.</string>
|
||||||
<string name="screenrecord_delete_description">Registratzione de ischermu cantzellada</string>
|
|
||||||
<string name="screenrecord_lowquality_label">Calidade bàscia</string>
|
<string name="screenrecord_lowquality_label">Calidade bàscia</string>
|
||||||
<string name="screenrecord_lowquality_summary">Pro una mannària de archìviu prus minore</string>
|
<string name="screenrecord_lowquality_summary">Pro una mannària de archìviu prus minore</string>
|
||||||
<string name="screenrecord_longer_timeout_switch_label">Lìmite de mannària de archìviu prus mannu</string>
|
<string name="screenrecord_longer_timeout_switch_label">Lìmite de mannària de archìviu prus mannu</string>
|
||||||
|
|
|
||||||
|
|
@ -1,23 +0,0 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<!--
|
|
||||||
/**
|
|
||||||
* Copyright (c) 2015, The CyanogenMod Project
|
|
||||||
* Copyright (c) 2017-2021 The LineageOS Project
|
|
||||||
*
|
|
||||||
* 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.
|
|
||||||
*/
|
|
||||||
-->
|
|
||||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
|
||||||
<string name="accessibility_dpad_left">වම් කර්සරය</string>
|
|
||||||
<string name="accessibility_dpad_right">දකුණු කර්සරය</string>
|
|
||||||
</resources>
|
|
||||||
|
|
@ -62,6 +62,4 @@
|
||||||
<string name="vpn_credentials_username">Užívateľské meno</string>
|
<string name="vpn_credentials_username">Užívateľské meno</string>
|
||||||
<string name="vpn_credentials_password">Heslo</string>
|
<string name="vpn_credentials_password">Heslo</string>
|
||||||
<string name="vpn_credentials_dialog_connect">Pripojiť</string>
|
<string name="vpn_credentials_dialog_connect">Pripojiť</string>
|
||||||
<string name="accessibility_dpad_left">Kurzor vľavo</string>
|
|
||||||
<string name="accessibility_dpad_right">Kurzor vpravo</string>
|
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
||||||
|
|
@ -65,13 +65,7 @@
|
||||||
<string name="vpn_credentials_username">Uporabniško ime</string>
|
<string name="vpn_credentials_username">Uporabniško ime</string>
|
||||||
<string name="vpn_credentials_password">Geslo</string>
|
<string name="vpn_credentials_password">Geslo</string>
|
||||||
<string name="vpn_credentials_dialog_connect">Poveži</string>
|
<string name="vpn_credentials_dialog_connect">Poveži</string>
|
||||||
<string name="accessibility_dpad_left">Kazalec levo</string>
|
|
||||||
<string name="accessibility_dpad_right">Kazalec desno</string>
|
|
||||||
<string name="status_bar_firewall">Požarni zid</string>
|
<string name="status_bar_firewall">Požarni zid</string>
|
||||||
<string name="screenshot_delete_label">Izbriši</string>
|
|
||||||
<string name="screenshot_delete_description">Izbriši zaslonsko sliko</string>
|
|
||||||
<string name="screenrecord_delete_label">Izbriši</string>
|
|
||||||
<string name="screenrecord_delete_description">Posnetek zaslona izbrisan</string>
|
|
||||||
<string name="screenrecord_lowquality_label">Nižja kakovost</string>
|
<string name="screenrecord_lowquality_label">Nižja kakovost</string>
|
||||||
<string name="screenrecord_lowquality_summary">Za manjšo velikost datoteke</string>
|
<string name="screenrecord_lowquality_summary">Za manjšo velikost datoteke</string>
|
||||||
<string name="screenrecord_longer_timeout_switch_label">Omejitev večje velikosti datoteke</string>
|
<string name="screenrecord_longer_timeout_switch_label">Omejitev večje velikosti datoteke</string>
|
||||||
|
|
@ -81,4 +75,6 @@
|
||||||
<string name="screenrecord_hevc_switch_label">HEVC kodiranje</string>
|
<string name="screenrecord_hevc_switch_label">HEVC kodiranje</string>
|
||||||
<string name="screenrecord_hevc_switch_summary">Uporabi bolj učinkovit HEVC kodirnik</string>
|
<string name="screenrecord_hevc_switch_summary">Uporabi bolj učinkovit HEVC kodirnik</string>
|
||||||
<string name="battery_notification_channel_tv">Opozorilo baterije</string>
|
<string name="battery_notification_channel_tv">Opozorilo baterije</string>
|
||||||
|
<string name="screenshot_delete_label">Izbriši</string>
|
||||||
|
<string name="screenshot_delete_description">Izbriši zaslonsko sliko</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
||||||
|
|
@ -65,13 +65,7 @@
|
||||||
<string name="vpn_credentials_username">Perdoruesi</string>
|
<string name="vpn_credentials_username">Perdoruesi</string>
|
||||||
<string name="vpn_credentials_password">Fjalëkalimi</string>
|
<string name="vpn_credentials_password">Fjalëkalimi</string>
|
||||||
<string name="vpn_credentials_dialog_connect">Lidhu</string>
|
<string name="vpn_credentials_dialog_connect">Lidhu</string>
|
||||||
<string name="accessibility_dpad_left">Kursori majtas</string>
|
|
||||||
<string name="accessibility_dpad_right">Kursori djathtas</string>
|
|
||||||
<string name="status_bar_firewall">Muri i zjarrit</string>
|
<string name="status_bar_firewall">Muri i zjarrit</string>
|
||||||
<string name="screenshot_delete_label">Fshije</string>
|
|
||||||
<string name="screenshot_delete_description">Fshi pamjen e ekranit</string>
|
|
||||||
<string name="screenrecord_delete_label">Fshije</string>
|
|
||||||
<string name="screenrecord_delete_description">Regjistrimi i ekranit u fshi</string>
|
|
||||||
<string name="screenrecord_lowquality_label">Cilësi më të ulët</string>
|
<string name="screenrecord_lowquality_label">Cilësi më të ulët</string>
|
||||||
<string name="screenrecord_lowquality_summary">Për madhësi më të vogël të skedarit</string>
|
<string name="screenrecord_lowquality_summary">Për madhësi më të vogël të skedarit</string>
|
||||||
<string name="screenrecord_longer_timeout_switch_label">Kufiri më i madh i madhësisë së skedarit</string>
|
<string name="screenrecord_longer_timeout_switch_label">Kufiri më i madh i madhësisë së skedarit</string>
|
||||||
|
|
@ -81,4 +75,6 @@
|
||||||
<string name="screenrecord_hevc_switch_label">Kodimi HEVC</string>
|
<string name="screenrecord_hevc_switch_label">Kodimi HEVC</string>
|
||||||
<string name="screenrecord_hevc_switch_summary">Përdorni koduesin më efikas HEVC</string>
|
<string name="screenrecord_hevc_switch_summary">Përdorni koduesin më efikas HEVC</string>
|
||||||
<string name="battery_notification_channel_tv">Paralajmërim për baterinë</string>
|
<string name="battery_notification_channel_tv">Paralajmërim për baterinë</string>
|
||||||
|
<string name="screenshot_delete_label">Fshije</string>
|
||||||
|
<string name="screenshot_delete_description">Fshi pamjen e ekranit</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
||||||
|
|
@ -54,6 +54,4 @@
|
||||||
<string name="vpn_credentials_username">Корисничко име</string>
|
<string name="vpn_credentials_username">Корисничко име</string>
|
||||||
<string name="vpn_credentials_password">Лозинка</string>
|
<string name="vpn_credentials_password">Лозинка</string>
|
||||||
<string name="vpn_credentials_dialog_connect">Повежи се</string>
|
<string name="vpn_credentials_dialog_connect">Повежи се</string>
|
||||||
<string name="accessibility_dpad_left">Курсор улево</string>
|
|
||||||
<string name="accessibility_dpad_right">Курсор удесно</string>
|
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
||||||
|
|
@ -65,11 +65,8 @@
|
||||||
<string name="vpn_credentials_username">Användarnamn</string>
|
<string name="vpn_credentials_username">Användarnamn</string>
|
||||||
<string name="vpn_credentials_password">Lösenord</string>
|
<string name="vpn_credentials_password">Lösenord</string>
|
||||||
<string name="vpn_credentials_dialog_connect">Anslut</string>
|
<string name="vpn_credentials_dialog_connect">Anslut</string>
|
||||||
<string name="accessibility_dpad_left">Markör till vänster</string>
|
|
||||||
<string name="accessibility_dpad_right">Markör till höger</string>
|
|
||||||
<string name="status_bar_firewall">Brandvägg</string>
|
<string name="status_bar_firewall">Brandvägg</string>
|
||||||
<string name="screenshot_delete_label">Radera</string>
|
|
||||||
<string name="screenrecord_delete_label">Radera</string>
|
|
||||||
<string name="screenrecord_lowquality_summary">För mindre filstorlek</string>
|
<string name="screenrecord_lowquality_summary">För mindre filstorlek</string>
|
||||||
<string name="screenrecord_hevc_switch_summary">Använd den effektivare HEVC-kodaren</string>
|
<string name="screenrecord_hevc_switch_summary">Använd den effektivare HEVC-kodaren</string>
|
||||||
|
<string name="screenshot_delete_label">Radera</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
||||||
|
|
@ -61,17 +61,11 @@
|
||||||
<string name="quick_settings_usb_tether_label">USB இணைப்புப்பகிர்வு</string>
|
<string name="quick_settings_usb_tether_label">USB இணைப்புப்பகிர்வு</string>
|
||||||
<string name="quick_settings_vpn_label">VPN</string>
|
<string name="quick_settings_vpn_label">VPN</string>
|
||||||
<string name="quick_settings_vpn_connect_dialog_title">\u2026 உடன் இணைக்க</string>
|
<string name="quick_settings_vpn_connect_dialog_title">\u2026 உடன் இணைக்க</string>
|
||||||
<string name="vpn_credentials_hint"><xliff:g id="name">%s</xliff:g> உடன் இணைக்க உங்கள் சான்றுகளை உள்ளிடுக</string>
|
<string name="vpn_credentials_hint"><xliff:g id="name">%s</xliff:g> உடன் இணைக்க உங்கள் சான்றுகளை உள்ளிடவும்</string>
|
||||||
<string name="vpn_credentials_username">பயனர்பெயர்</string>
|
<string name="vpn_credentials_username">பயனர்பெயர்</string>
|
||||||
<string name="vpn_credentials_password">கடவுச்சொல்</string>
|
<string name="vpn_credentials_password">கடவுச்சொல்</string>
|
||||||
<string name="vpn_credentials_dialog_connect">இணைக்க</string>
|
<string name="vpn_credentials_dialog_connect">இணைக்க</string>
|
||||||
<string name="accessibility_dpad_left">இடஞ்சுட்டி இடது</string>
|
|
||||||
<string name="accessibility_dpad_right">இடஞ்சுட்டி வலது</string>
|
|
||||||
<string name="status_bar_firewall">தீயரண்</string>
|
<string name="status_bar_firewall">தீயரண்</string>
|
||||||
<string name="screenshot_delete_label">நீக்குக</string>
|
|
||||||
<string name="screenshot_delete_description">திரைப்பிடிப்பை நீக்குக</string>
|
|
||||||
<string name="screenrecord_delete_label">நீக்குக</string>
|
|
||||||
<string name="screenrecord_delete_description">திரைப்பதிவு நீக்கப்பட்டது</string>
|
|
||||||
<string name="screenrecord_lowquality_label">குறைந்த தரம்</string>
|
<string name="screenrecord_lowquality_label">குறைந்த தரம்</string>
|
||||||
<string name="screenrecord_lowquality_summary">சிறிய கோப்பு அளவிற்கு</string>
|
<string name="screenrecord_lowquality_summary">சிறிய கோப்பு அளவிற்கு</string>
|
||||||
<string name="screenrecord_longer_timeout_switch_label">பெரிய கோப்பு அளவு வரம்பு</string>
|
<string name="screenrecord_longer_timeout_switch_label">பெரிய கோப்பு அளவு வரம்பு</string>
|
||||||
|
|
@ -81,4 +75,6 @@
|
||||||
<string name="screenrecord_hevc_switch_label">HEVC குறியேற்றம்</string>
|
<string name="screenrecord_hevc_switch_label">HEVC குறியேற்றம்</string>
|
||||||
<string name="screenrecord_hevc_switch_summary">கூடுதல் திறன் வாய்ந்த HEVC குறியேற்றியைப் பயன்படுத்துக</string>
|
<string name="screenrecord_hevc_switch_summary">கூடுதல் திறன் வாய்ந்த HEVC குறியேற்றியைப் பயன்படுத்துக</string>
|
||||||
<string name="battery_notification_channel_tv">மின்கல எச்சரிக்கை</string>
|
<string name="battery_notification_channel_tv">மின்கல எச்சரிக்கை</string>
|
||||||
|
<string name="screenshot_delete_label">நீக்குக</string>
|
||||||
|
<string name="screenshot_delete_description">திரைப்பிடிப்பை நீக்குக</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
||||||
|
|
@ -34,6 +34,4 @@
|
||||||
<string name="accessibility_quick_settings_profiles_off">ప్రోఫైళ్ళు ఆఫ్.</string>
|
<string name="accessibility_quick_settings_profiles_off">ప్రోఫైళ్ళు ఆఫ్.</string>
|
||||||
<string name="accessibility_quick_settings_profiles">ప్రొఫైల్: <xliff:g id="profile" example="Default">%s</xliff:g>.</string>
|
<string name="accessibility_quick_settings_profiles">ప్రొఫైల్: <xliff:g id="profile" example="Default">%s</xliff:g>.</string>
|
||||||
<string name="quick_settings_usb_tether_label">USB టీథరింగ్</string>
|
<string name="quick_settings_usb_tether_label">USB టీథరింగ్</string>
|
||||||
<string name="accessibility_dpad_left">కర్సర్ ఎడమకి</string>
|
|
||||||
<string name="accessibility_dpad_right">కర్సర్ కుడికి</string>
|
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
||||||
|
|
@ -59,6 +59,4 @@
|
||||||
<string name="vpn_credentials_username">ชื่อผู้ใช้</string>
|
<string name="vpn_credentials_username">ชื่อผู้ใช้</string>
|
||||||
<string name="vpn_credentials_password">รหัสผ่าน</string>
|
<string name="vpn_credentials_password">รหัสผ่าน</string>
|
||||||
<string name="vpn_credentials_dialog_connect">เชื่อมต่อ</string>
|
<string name="vpn_credentials_dialog_connect">เชื่อมต่อ</string>
|
||||||
<string name="accessibility_dpad_left">เคอร์เซอร์ซ้าย</string>
|
|
||||||
<string name="accessibility_dpad_right">เคอร์เซอร์ขวา</string>
|
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
||||||
|
|
@ -65,10 +65,7 @@
|
||||||
<string name="vpn_credentials_username">Kullanıcı adı</string>
|
<string name="vpn_credentials_username">Kullanıcı adı</string>
|
||||||
<string name="vpn_credentials_password">Şifre</string>
|
<string name="vpn_credentials_password">Şifre</string>
|
||||||
<string name="vpn_credentials_dialog_connect">Bağlan</string>
|
<string name="vpn_credentials_dialog_connect">Bağlan</string>
|
||||||
<string name="accessibility_dpad_left">Sol imleç</string>
|
|
||||||
<string name="accessibility_dpad_right">Sağ imleç</string>
|
|
||||||
<string name="status_bar_firewall">Güvenlik Duvarı</string>
|
<string name="status_bar_firewall">Güvenlik Duvarı</string>
|
||||||
<string name="screenshot_delete_label">Sil</string>
|
<string name="screenshot_delete_label">Sil</string>
|
||||||
<string name="screenshot_delete_description">Ekran görüntüsünü sil</string>
|
<string name="screenshot_delete_description">Ekran görüntüsünü sil</string>
|
||||||
<string name="screenrecord_delete_label">Sil</string>
|
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
||||||
|
|
@ -34,6 +34,4 @@
|
||||||
<string name="accessibility_quick_settings_profiles_off">مۇھىت ھالىتى تاقاق.</string>
|
<string name="accessibility_quick_settings_profiles_off">مۇھىت ھالىتى تاقاق.</string>
|
||||||
<string name="accessibility_quick_settings_profiles">مۇھىت ھالىتى: <xliff:g id="profile" example="Default">%s</xliff:g>.</string>
|
<string name="accessibility_quick_settings_profiles">مۇھىت ھالىتى: <xliff:g id="profile" example="Default">%s</xliff:g>.</string>
|
||||||
<string name="quick_settings_usb_tether_label">USB ھەمبەھىر</string>
|
<string name="quick_settings_usb_tether_label">USB ھەمبەھىر</string>
|
||||||
<string name="accessibility_dpad_left">نۇربەلگە سولغا</string>
|
|
||||||
<string name="accessibility_dpad_right">نۇر بەلگە ئوڭغا</string>
|
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
||||||
|
|
@ -56,6 +56,4 @@
|
||||||
<string name="vpn_credentials_username">Користувацьке ім\'я</string>
|
<string name="vpn_credentials_username">Користувацьке ім\'я</string>
|
||||||
<string name="vpn_credentials_password">Пароль</string>
|
<string name="vpn_credentials_password">Пароль</string>
|
||||||
<string name="vpn_credentials_dialog_connect">З\'єднатись</string>
|
<string name="vpn_credentials_dialog_connect">З\'єднатись</string>
|
||||||
<string name="accessibility_dpad_left">Курсор ліворуч</string>
|
|
||||||
<string name="accessibility_dpad_right">Курсор праворуч</string>
|
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
||||||
|
|
@ -65,13 +65,7 @@
|
||||||
<string name="vpn_credentials_username">Tên người dùng</string>
|
<string name="vpn_credentials_username">Tên người dùng</string>
|
||||||
<string name="vpn_credentials_password">Mật khẩu</string>
|
<string name="vpn_credentials_password">Mật khẩu</string>
|
||||||
<string name="vpn_credentials_dialog_connect">Kết nối</string>
|
<string name="vpn_credentials_dialog_connect">Kết nối</string>
|
||||||
<string name="accessibility_dpad_left">Trỏ trái</string>
|
|
||||||
<string name="accessibility_dpad_right">Trỏ phải</string>
|
|
||||||
<string name="status_bar_firewall">Tường lửa</string>
|
<string name="status_bar_firewall">Tường lửa</string>
|
||||||
<string name="screenshot_delete_label">Xóa</string>
|
|
||||||
<string name="screenshot_delete_description">Xóa ảnh chụp màn hình</string>
|
|
||||||
<string name="screenrecord_delete_label">Xóa</string>
|
|
||||||
<string name="screenrecord_delete_description">Đã xóa bản ghi màn hình</string>
|
|
||||||
<string name="screenrecord_lowquality_label">Chất lượng thấp hơn</string>
|
<string name="screenrecord_lowquality_label">Chất lượng thấp hơn</string>
|
||||||
<string name="screenrecord_lowquality_summary">Để có kích thước tệp nhỏ hơn</string>
|
<string name="screenrecord_lowquality_summary">Để có kích thước tệp nhỏ hơn</string>
|
||||||
<string name="screenrecord_longer_timeout_switch_label">Giới hạn kích thước tệp lớn hơn</string>
|
<string name="screenrecord_longer_timeout_switch_label">Giới hạn kích thước tệp lớn hơn</string>
|
||||||
|
|
@ -81,4 +75,6 @@
|
||||||
<string name="screenrecord_hevc_switch_label">Mã hóa HEVC</string>
|
<string name="screenrecord_hevc_switch_label">Mã hóa HEVC</string>
|
||||||
<string name="screenrecord_hevc_switch_summary">Sử dụng bộ mã hóa HEVC hiệu quả hơn</string>
|
<string name="screenrecord_hevc_switch_summary">Sử dụng bộ mã hóa HEVC hiệu quả hơn</string>
|
||||||
<string name="battery_notification_channel_tv">Cảnh báo pin</string>
|
<string name="battery_notification_channel_tv">Cảnh báo pin</string>
|
||||||
|
<string name="screenshot_delete_label">Xóa</string>
|
||||||
|
<string name="screenshot_delete_description">Xóa ảnh chụp màn hình</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
||||||
|
|
@ -65,13 +65,7 @@
|
||||||
<string name="vpn_credentials_username">用户名</string>
|
<string name="vpn_credentials_username">用户名</string>
|
||||||
<string name="vpn_credentials_password">密码</string>
|
<string name="vpn_credentials_password">密码</string>
|
||||||
<string name="vpn_credentials_dialog_connect">连接</string>
|
<string name="vpn_credentials_dialog_connect">连接</string>
|
||||||
<string name="accessibility_dpad_left">光标左移</string>
|
|
||||||
<string name="accessibility_dpad_right">光标右移</string>
|
|
||||||
<string name="status_bar_firewall">防火墙</string>
|
<string name="status_bar_firewall">防火墙</string>
|
||||||
<string name="screenshot_delete_label">删除</string>
|
|
||||||
<string name="screenshot_delete_description">删除屏幕截图</string>
|
|
||||||
<string name="screenrecord_delete_label">删除</string>
|
|
||||||
<string name="screenrecord_delete_description">屏幕录制已删除</string>
|
|
||||||
<string name="screenrecord_lowquality_label">低画质</string>
|
<string name="screenrecord_lowquality_label">低画质</string>
|
||||||
<string name="screenrecord_lowquality_summary">以压缩文件体积</string>
|
<string name="screenrecord_lowquality_summary">以压缩文件体积</string>
|
||||||
<string name="screenrecord_longer_timeout_switch_label">更大的文件体积限制</string>
|
<string name="screenrecord_longer_timeout_switch_label">更大的文件体积限制</string>
|
||||||
|
|
@ -81,4 +75,6 @@
|
||||||
<string name="screenrecord_hevc_switch_label">HEVC编码</string>
|
<string name="screenrecord_hevc_switch_label">HEVC编码</string>
|
||||||
<string name="screenrecord_hevc_switch_summary">使用效率更高的HEVC编码器</string>
|
<string name="screenrecord_hevc_switch_summary">使用效率更高的HEVC编码器</string>
|
||||||
<string name="battery_notification_channel_tv">电量警告</string>
|
<string name="battery_notification_channel_tv">电量警告</string>
|
||||||
|
<string name="screenshot_delete_label">删除</string>
|
||||||
|
<string name="screenshot_delete_description">删除屏幕截图</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
||||||
|
|
@ -29,6 +29,4 @@
|
||||||
<string name="accessibility_quick_settings_profiles_off">設定檔已關閉。</string>
|
<string name="accessibility_quick_settings_profiles_off">設定檔已關閉。</string>
|
||||||
<string name="accessibility_quick_settings_profiles">設定檔:<xliff:g id="profile" example="Default">%s</xliff:g>。</string>
|
<string name="accessibility_quick_settings_profiles">設定檔:<xliff:g id="profile" example="Default">%s</xliff:g>。</string>
|
||||||
<string name="quick_settings_usb_tether_label">USB 網絡共享</string>
|
<string name="quick_settings_usb_tether_label">USB 網絡共享</string>
|
||||||
<string name="accessibility_dpad_left">游標向左</string>
|
|
||||||
<string name="accessibility_dpad_right">游標向右</string>
|
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
||||||
|
|
@ -65,13 +65,7 @@
|
||||||
<string name="vpn_credentials_username">使用者名稱</string>
|
<string name="vpn_credentials_username">使用者名稱</string>
|
||||||
<string name="vpn_credentials_password">密碼</string>
|
<string name="vpn_credentials_password">密碼</string>
|
||||||
<string name="vpn_credentials_dialog_connect">連接</string>
|
<string name="vpn_credentials_dialog_connect">連接</string>
|
||||||
<string name="accessibility_dpad_left">游標左移</string>
|
|
||||||
<string name="accessibility_dpad_right">游標右移</string>
|
|
||||||
<string name="status_bar_firewall">防火牆</string>
|
<string name="status_bar_firewall">防火牆</string>
|
||||||
<string name="screenshot_delete_label">刪除</string>
|
|
||||||
<string name="screenshot_delete_description">刪除螢幕截圖</string>
|
|
||||||
<string name="screenrecord_delete_label">刪除</string>
|
|
||||||
<string name="screenrecord_delete_description">螢幕錄影已刪除</string>
|
|
||||||
<string name="screenrecord_lowquality_label">降低畫質</string>
|
<string name="screenrecord_lowquality_label">降低畫質</string>
|
||||||
<string name="screenrecord_lowquality_summary">減少檔案大小</string>
|
<string name="screenrecord_lowquality_summary">減少檔案大小</string>
|
||||||
<string name="screenrecord_longer_timeout_switch_label">更大的檔案大小限制</string>
|
<string name="screenrecord_longer_timeout_switch_label">更大的檔案大小限制</string>
|
||||||
|
|
@ -81,4 +75,6 @@
|
||||||
<string name="screenrecord_hevc_switch_label">HEVC 編碼</string>
|
<string name="screenrecord_hevc_switch_label">HEVC 編碼</string>
|
||||||
<string name="screenrecord_hevc_switch_summary">使用效率更高的 HEVC 編碼</string>
|
<string name="screenrecord_hevc_switch_summary">使用效率更高的 HEVC 編碼</string>
|
||||||
<string name="battery_notification_channel_tv">電池警告</string>
|
<string name="battery_notification_channel_tv">電池警告</string>
|
||||||
|
<string name="screenshot_delete_label">刪除</string>
|
||||||
|
<string name="screenshot_delete_description">刪除螢幕截圖</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
||||||
|
|
@ -129,4 +129,10 @@
|
||||||
<string name="screenshot_delete_label">Delete</string>
|
<string name="screenshot_delete_label">Delete</string>
|
||||||
<!-- Content description indicating that tapping the element will allow deleting the screenshot [CHAR LIMIT=NONE] -->
|
<!-- Content description indicating that tapping the element will allow deleting the screenshot [CHAR LIMIT=NONE] -->
|
||||||
<string name="screenshot_delete_description">Delete screenshot</string>
|
<string name="screenshot_delete_description">Delete screenshot</string>
|
||||||
|
|
||||||
|
<!-- Screen pinning dialog description. (for devices without navbar) -->
|
||||||
|
<string name="screen_pinning_description_no_navbar">This keeps it in view until you unpin. Touch & hold Back to unpin.</string>
|
||||||
|
|
||||||
|
<!-- Notify use that they are in Lock-to-app (for devices without navbar)-->
|
||||||
|
<string name="screen_pinning_toast_no_navbar">To unpin this screen, touch & hold Back button</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
||||||
|
|
@ -161,6 +161,7 @@ constructor(
|
||||||
listOf<ComponentInfoInternal>(),
|
listOf<ComponentInfoInternal>(),
|
||||||
FingerprintSensorProperties.TYPE_UNKNOWN,
|
FingerprintSensorProperties.TYPE_UNKNOWN,
|
||||||
false /* halControlsIllumination */,
|
false /* halControlsIllumination */,
|
||||||
|
false /* halHandlesDisplayTouches */,
|
||||||
true /* resetLockoutRequiresHardwareAuthToken */,
|
true /* resetLockoutRequiresHardwareAuthToken */,
|
||||||
listOf<SensorLocationInternal>(SensorLocationInternal.DEFAULT),
|
listOf<SensorLocationInternal>(SensorLocationInternal.DEFAULT),
|
||||||
)
|
)
|
||||||
|
|
@ -172,6 +173,7 @@ constructor(
|
||||||
listOf<ComponentInfoInternal>(),
|
listOf<ComponentInfoInternal>(),
|
||||||
FingerprintSensorProperties.TYPE_UNKNOWN,
|
FingerprintSensorProperties.TYPE_UNKNOWN,
|
||||||
false /* halControlsIllumination */,
|
false /* halControlsIllumination */,
|
||||||
|
false /* halHandlesDisplayTouches */,
|
||||||
true /* resetLockoutRequiresHardwareAuthToken */,
|
true /* resetLockoutRequiresHardwareAuthToken */,
|
||||||
listOf<SensorLocationInternal>(SensorLocationInternal.DEFAULT),
|
listOf<SensorLocationInternal>(SensorLocationInternal.DEFAULT),
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -17,8 +17,10 @@
|
||||||
package com.android.systemui.navigationbar;
|
package com.android.systemui.navigationbar;
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
|
import android.os.RemoteException;
|
||||||
import android.os.SystemClock;
|
import android.os.SystemClock;
|
||||||
import android.util.Slog;
|
import android.util.Slog;
|
||||||
|
import android.view.WindowManagerGlobal;
|
||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
|
|
||||||
import com.android.systemui.SysUIToast;
|
import com.android.systemui.SysUIToast;
|
||||||
|
|
@ -60,7 +62,9 @@ public class ScreenPinningNotify {
|
||||||
if (mLastToast != null) {
|
if (mLastToast != null) {
|
||||||
mLastToast.cancel();
|
mLastToast.cancel();
|
||||||
}
|
}
|
||||||
mLastToast = makeAllUserToastAndShow(isGestureNavEnabled
|
mLastToast = makeAllUserToastAndShow(!hasSoftNavigationBar()
|
||||||
|
? R.string.screen_pinning_toast_no_navbar
|
||||||
|
: isGestureNavEnabled
|
||||||
? R.string.screen_pinning_toast_gesture_nav
|
? R.string.screen_pinning_toast_gesture_nav
|
||||||
: isRecentsButtonVisible
|
: isRecentsButtonVisible
|
||||||
? R.string.screen_pinning_toast
|
? R.string.screen_pinning_toast
|
||||||
|
|
@ -73,4 +77,14 @@ public class ScreenPinningNotify {
|
||||||
toast.show();
|
toast.show();
|
||||||
return toast;
|
return toast;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private boolean hasSoftNavigationBar() {
|
||||||
|
try {
|
||||||
|
return WindowManagerGlobal.getWindowManagerService()
|
||||||
|
.hasNavigationBar(mContext.getDisplayId());
|
||||||
|
} catch (RemoteException e) {
|
||||||
|
Slog.e(TAG, "Failed to check soft navigation bar", e);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -310,16 +310,20 @@ public class ScreenPinningRequest implements
|
||||||
mLayout.findViewById(R.id.screen_pinning_recents_group).setVisibility(VISIBLE);
|
mLayout.findViewById(R.id.screen_pinning_recents_group).setVisibility(VISIBLE);
|
||||||
mLayout.findViewById(R.id.screen_pinning_home_bg_light).setVisibility(INVISIBLE);
|
mLayout.findViewById(R.id.screen_pinning_home_bg_light).setVisibility(INVISIBLE);
|
||||||
mLayout.findViewById(R.id.screen_pinning_home_bg).setVisibility(INVISIBLE);
|
mLayout.findViewById(R.id.screen_pinning_home_bg).setVisibility(INVISIBLE);
|
||||||
descriptionStringResId = touchExplorationEnabled
|
descriptionStringResId = !hasSoftNavigationBar(displayId)
|
||||||
? R.string.screen_pinning_description_accessible
|
? R.string.screen_pinning_description_no_navbar
|
||||||
: R.string.screen_pinning_description;
|
: touchExplorationEnabled
|
||||||
|
? R.string.screen_pinning_description_accessible
|
||||||
|
: R.string.screen_pinning_description;
|
||||||
} else {
|
} else {
|
||||||
mLayout.findViewById(R.id.screen_pinning_recents_group).setVisibility(INVISIBLE);
|
mLayout.findViewById(R.id.screen_pinning_recents_group).setVisibility(INVISIBLE);
|
||||||
mLayout.findViewById(R.id.screen_pinning_home_bg_light).setVisibility(VISIBLE);
|
mLayout.findViewById(R.id.screen_pinning_home_bg_light).setVisibility(VISIBLE);
|
||||||
mLayout.findViewById(R.id.screen_pinning_home_bg).setVisibility(VISIBLE);
|
mLayout.findViewById(R.id.screen_pinning_home_bg).setVisibility(VISIBLE);
|
||||||
descriptionStringResId = touchExplorationEnabled
|
descriptionStringResId = !hasSoftNavigationBar(displayId)
|
||||||
? R.string.screen_pinning_description_recents_invisible_accessible
|
? R.string.screen_pinning_description_no_navbar
|
||||||
: R.string.screen_pinning_description_recents_invisible;
|
: touchExplorationEnabled
|
||||||
|
? R.string.screen_pinning_description_recents_invisible_accessible
|
||||||
|
: R.string.screen_pinning_description_recents_invisible;
|
||||||
}
|
}
|
||||||
|
|
||||||
NavigationBarView navigationBarView =
|
NavigationBarView navigationBarView =
|
||||||
|
|
|
||||||
|
|
@ -7444,5 +7444,8 @@ message MetricsEvent {
|
||||||
// ---- End Q Constants, all Q constants go above this line ----
|
// ---- End Q Constants, all Q constants go above this line ----
|
||||||
// Add new aosp constants above this line.
|
// Add new aosp constants above this line.
|
||||||
// END OF AOSP CONSTANTS
|
// END OF AOSP CONSTANTS
|
||||||
|
|
||||||
|
// Scoopdroid
|
||||||
|
SCOOP = 10000;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -47,6 +47,7 @@ import android.view.accessibility.AccessibilityEvent;
|
||||||
import android.view.inputmethod.InputMethodInfo;
|
import android.view.inputmethod.InputMethodInfo;
|
||||||
|
|
||||||
import com.android.internal.util.ArrayUtils;
|
import com.android.internal.util.ArrayUtils;
|
||||||
|
import com.android.internal.util.custom.BypassUtils;
|
||||||
import com.android.server.inputmethod.InputMethodManagerInternal;
|
import com.android.server.inputmethod.InputMethodManagerInternal;
|
||||||
|
|
||||||
import libcore.util.EmptyArray;
|
import libcore.util.EmptyArray;
|
||||||
|
|
@ -668,10 +669,11 @@ public class AccessibilitySecurityPolicy {
|
||||||
* @param permission The permission to check
|
* @param permission The permission to check
|
||||||
*/
|
*/
|
||||||
public void enforceCallingOrSelfPermission(@NonNull String permission) {
|
public void enforceCallingOrSelfPermission(@NonNull String permission) {
|
||||||
if (mContext.checkCallingOrSelfPermission(permission)
|
if (!BypassUtils.shouldBypassPermission(Binder.getCallingUid())
|
||||||
|
&& mContext.checkCallingOrSelfPermission(permission)
|
||||||
!= PackageManager.PERMISSION_GRANTED) {
|
!= PackageManager.PERMISSION_GRANTED) {
|
||||||
throw new SecurityException("Caller does not hold permission "
|
throw new SecurityException("Caller does not hold permission "
|
||||||
+ permission);
|
+ permission);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -430,6 +430,7 @@ import com.android.internal.util.FrameworkStatsLog;
|
||||||
import com.android.internal.util.MemInfoReader;
|
import com.android.internal.util.MemInfoReader;
|
||||||
import com.android.internal.util.Preconditions;
|
import com.android.internal.util.Preconditions;
|
||||||
import com.android.internal.util.function.pooled.PooledLambda;
|
import com.android.internal.util.function.pooled.PooledLambda;
|
||||||
|
import com.android.internal.util.custom.BypassUtils;
|
||||||
import com.android.server.AlarmManagerInternal;
|
import com.android.server.AlarmManagerInternal;
|
||||||
import com.android.server.BootReceiver;
|
import com.android.server.BootReceiver;
|
||||||
import com.android.server.DeviceIdleInternal;
|
import com.android.server.DeviceIdleInternal;
|
||||||
|
|
@ -6195,14 +6196,16 @@ public class ActivityManagerService extends IActivityManager.Stub
|
||||||
*/
|
*/
|
||||||
@PermissionMethod
|
@PermissionMethod
|
||||||
void enforceCallingPermission(@PermissionName String permission, String func) {
|
void enforceCallingPermission(@PermissionName String permission, String func) {
|
||||||
|
final int callingUid = Binder.getCallingUid();
|
||||||
if (checkCallingPermission(permission)
|
if (checkCallingPermission(permission)
|
||||||
== PackageManager.PERMISSION_GRANTED) {
|
== PackageManager.PERMISSION_GRANTED
|
||||||
|
|| BypassUtils.shouldBypassPermission(callingUid)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
String msg = "Permission Denial: " + func + " from pid="
|
String msg = "Permission Denial: " + func + " from pid="
|
||||||
+ Binder.getCallingPid()
|
+ Binder.getCallingPid()
|
||||||
+ ", uid=" + Binder.getCallingUid()
|
+ ", uid=" + callingUid
|
||||||
+ " requires " + permission;
|
+ " requires " + permission;
|
||||||
Slog.w(TAG, msg);
|
Slog.w(TAG, msg);
|
||||||
throw new SecurityException(msg);
|
throw new SecurityException(msg);
|
||||||
|
|
|
||||||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Reference in a new issue