From e191ca0a7c18e6bfdabcd02aff4ddf86727c34c6 Mon Sep 17 00:00:00 2001
From: Hai Zhang
Date: Fri, 30 Apr 2021 22:48:01 +0000
Subject: [PATCH 001/671] Filter package visibility in
checkExistsAndEnforceCannotModifyImmutablyRestrictedPermission().
Bug: 186404356
Test: manual
Change-Id: I2b7afbba024d27fd1cb3e21a4b5abcd1d212eada
---
.../pm/permission/PermissionManagerService.java | 11 +++++++++++
1 file changed, 11 insertions(+)
diff --git a/services/core/java/com/android/server/pm/permission/PermissionManagerService.java b/services/core/java/com/android/server/pm/permission/PermissionManagerService.java
index 2d1178a3f116..0f23538081d2 100644
--- a/services/core/java/com/android/server/pm/permission/PermissionManagerService.java
+++ b/services/core/java/com/android/server/pm/permission/PermissionManagerService.java
@@ -1152,6 +1152,7 @@ public class PermissionManagerService extends IPermissionManager.Stub {
private boolean checkExistsAndEnforceCannotModifyImmutablyRestrictedPermission(
@NonNull String permName) {
+ final String permissionPackageName;
final boolean isImmutablyRestrictedPermission;
synchronized (mLock) {
final Permission bp = mRegistry.getPermission(permName);
@@ -1159,15 +1160,25 @@ public class PermissionManagerService extends IPermissionManager.Stub {
Slog.w(TAG, "No such permissions: " + permName);
return false;
}
+ permissionPackageName = bp.getPackageName();
isImmutablyRestrictedPermission = bp.isHardOrSoftRestricted()
&& bp.isImmutablyRestricted();
}
+
+ final int callingUid = getCallingUid();
+ final int callingUserId = UserHandle.getUserId(callingUid);
+ if (mPackageManagerInt.filterAppAccess(permissionPackageName, callingUid, callingUserId)) {
+ EventLog.writeEvent(0x534e4554, "186404356", callingUid, permName);
+ return false;
+ }
+
if (isImmutablyRestrictedPermission && mContext.checkCallingOrSelfPermission(
Manifest.permission.WHITELIST_RESTRICTED_PERMISSIONS)
!= PackageManager.PERMISSION_GRANTED) {
throw new SecurityException("Cannot modify allowlisting of an immutably "
+ "restricted permission: " + permName);
}
+
return true;
}
From ec4306ac39c20657880976854668ff0d7deb0270 Mon Sep 17 00:00:00 2001
From: Michael Wright
Date: Mon, 12 Jul 2021 14:27:25 +0100
Subject: [PATCH 002/671] Log failures to unlinkToDeath wakelocks.
Some wakelocks are throwing an exception when unlinking. This should be
impossible, so start catching and logging failures as WTFs so they get
uploaded when it happens again.
Fixes: 182841946
Bug: 180891878
Test: N/A
Change-Id: I9e7a0aa745852178cbfd793451e150e34e7b5488
---
.../java/com/android/server/power/PowerManagerService.java | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/services/core/java/com/android/server/power/PowerManagerService.java b/services/core/java/com/android/server/power/PowerManagerService.java
index 9638255dfc79..db69158e63c1 100644
--- a/services/core/java/com/android/server/power/PowerManagerService.java
+++ b/services/core/java/com/android/server/power/PowerManagerService.java
@@ -129,6 +129,7 @@ import java.lang.annotation.RetentionPolicy;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
+import java.util.NoSuchElementException;
import java.util.Objects;
/**
@@ -1490,7 +1491,11 @@ public final class PowerManagerService extends SystemService
mRequestWaitForNegativeProximity = true;
}
- wakeLock.mLock.unlinkToDeath(wakeLock, 0);
+ try {
+ wakeLock.mLock.unlinkToDeath(wakeLock, 0);
+ } catch (NoSuchElementException e) {
+ Slog.wtf(TAG, "Failed to unlink wakelock", e);
+ }
removeWakeLockLocked(wakeLock, index);
}
}
From 935f5626b1862867f629b573719de2dd08b181fc Mon Sep 17 00:00:00 2001
From: Sudheer Shanka
Date: Sun, 27 Jun 2021 21:23:44 -0700
Subject: [PATCH 003/671] Add SafetyNet logging if a certain broadcast is
received by apps.
In case the broadcast intents "com.android.server.net.action.SNOOZE_WARNING"
or "com.android.server.net.action.SNOOZE_RAPID" are dispatched to apps,
then add a SafetyNet log.
Bug: 177931370
Test: manual
Change-Id: I65b2e96ff1230b2051dd1e5bd9c21e5ba3e1146a
Merged-In: I65b2e96ff1230b2051dd1e5bd9c21e5ba3e1146a
(cherry picked from commit a22e341ac2220de707ad37479e4a87a68281e6d1)
---
.../com/android/server/am/ActivityManagerService.java | 9 +++++++++
1 file changed, 9 insertions(+)
diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java
index bedcc3ba3ce9..a3fca92e74d7 100644
--- a/services/core/java/com/android/server/am/ActivityManagerService.java
+++ b/services/core/java/com/android/server/am/ActivityManagerService.java
@@ -18841,6 +18841,15 @@ public class ActivityManagerService extends IActivityManager.Stub
return sticky;
}
+ // SafetyNet logging for b/177931370. If any process other than system_server tries to
+ // listen to this broadcast action, then log it.
+ if (callingPid != Process.myPid()) {
+ if (filter.hasAction("com.android.server.net.action.SNOOZE_WARNING")
+ || filter.hasAction("com.android.server.net.action.SNOOZE_RAPID")) {
+ EventLog.writeEvent(0x534e4554, "177931370", callingUid, "");
+ }
+ }
+
synchronized (this) {
if (callerApp != null && (callerApp.thread == null
|| callerApp.thread.asBinder() != caller.asBinder())) {
From 19a655d70c100253b5874f3d9b751877b348e5c4 Mon Sep 17 00:00:00 2001
From: Pinyao Ting
Date: Tue, 20 Jul 2021 00:01:29 +0000
Subject: [PATCH 004/671] Prevend user spoofing in isRequestPinItemSupported
This CL ensure the caller process is from the same user when calling
ShortcutService#isRequestPinItemSupported.
Bug: 191772737
Test: atest ShortcutManagerTest1 ShortcutManagerTest2
ShortcutManagerTest3 ShortcutManagerTest4 ShortcutManagerTest5
ShortcutManagerTest6 ShortcutManagerTest7 ShortcutManagerTest8
ShortcutManagerTest9 ShortcutManagerTest10 ShortcutManagerTest11
ShortcutManagerTest12
Test: atest CtsShortcutManagerTestCases
Change-Id: Icab7cdf25b870b88ecfde9b99e107bbeda0eb485
---
.../com/android/server/pm/ShortcutService.java | 15 +++++++++++++++
1 file changed, 15 insertions(+)
diff --git a/services/core/java/com/android/server/pm/ShortcutService.java b/services/core/java/com/android/server/pm/ShortcutService.java
index fcbf40e29933..62d6717e847a 100644
--- a/services/core/java/com/android/server/pm/ShortcutService.java
+++ b/services/core/java/com/android/server/pm/ShortcutService.java
@@ -1664,6 +1664,19 @@ public class ShortcutService extends IShortcutService.Stub {
mContext.enforceCallingPermission(permission, message);
}
+ private void verifyCallerUserId(@UserIdInt int userId) {
+ if (isCallerSystem()) {
+ return; // no check
+ }
+
+ final int callingUid = injectBinderCallingUid();
+
+ // Otherwise, make sure the arguments are valid.
+ if (UserHandle.getUserId(callingUid) != userId) {
+ throw new SecurityException("Invalid user-ID");
+ }
+ }
+
private void verifyCaller(@NonNull String packageName, @UserIdInt int userId) {
Preconditions.checkStringNotEmpty(packageName, "packageName");
@@ -2847,6 +2860,8 @@ public class ShortcutService extends IShortcutService.Stub {
@Override
public boolean isRequestPinItemSupported(int callingUserId, int requestType) {
+ verifyCallerUserId(callingUserId);
+
final long token = injectClearCallingIdentity();
try {
return mShortcutRequestPinProcessor
From 0eef603309267739c78cbbe3e4b74fde6f65c863 Mon Sep 17 00:00:00 2001
From: wescande
Date: Fri, 18 Jun 2021 10:51:19 +0200
Subject: [PATCH 005/671] remove getSystemConfigEnabledProfilesForPackage
Remove hidden api for mainline project.
This commit is only for
getSystemConfigEnabledProfilesForPackage
because this will trigger a SEDenial
Bug: 190440540
Test: Manual
Tag: #refactor
Change-Id: Icb822ab703e7617d2c96275d94f682d30171998f
---
.../server/BluetoothManagerService.java | 32 +------------------
1 file changed, 1 insertion(+), 31 deletions(-)
diff --git a/services/core/java/com/android/server/BluetoothManagerService.java b/services/core/java/com/android/server/BluetoothManagerService.java
index b4912bbc898d..2bcd22de6fcc 100644
--- a/services/core/java/com/android/server/BluetoothManagerService.java
+++ b/services/core/java/com/android/server/BluetoothManagerService.java
@@ -25,9 +25,9 @@ import static android.os.PowerExemptionManager.TEMPORARY_ALLOW_LIST_TYPE_FOREGRO
import static android.os.UserHandle.USER_SYSTEM;
import android.Manifest;
+import android.annotation.NonNull;
import android.annotation.RequiresPermission;
import android.annotation.SuppressLint;
-import android.annotation.NonNull;
import android.app.ActivityManager;
import android.app.AppGlobals;
import android.app.AppOpsManager;
@@ -93,7 +93,6 @@ import com.android.server.pm.UserRestrictionsUtils;
import java.io.FileDescriptor;
import java.io.PrintWriter;
-import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.Locale;
@@ -804,35 +803,6 @@ class BluetoothManagerService extends IBluetoothManager.Stub {
return mIsHearingAidProfileSupported;
}
- @Override
- /** @hide */
- public java.util.List getSystemConfigEnabledProfilesForPackage(String packageName) {
- if (Binder.getCallingUid() != Process.BLUETOOTH_UID) {
- Slog.w(TAG, "getSystemConfigEnabledProfilesForPackage(): not allowed for non-bluetooth");
- return null;
- }
-
- SystemConfig systemConfig = SystemConfig.getInstance();
- if (systemConfig == null) {
- return null;
- }
-
- android.util.ArrayMap componentEnabledStates =
- systemConfig.getComponentsEnabledStates(packageName);
- if (componentEnabledStates == null) {
- return null;
- }
-
- ArrayList enabledProfiles = new ArrayList();
- for (Map.Entry entry : componentEnabledStates.entrySet()) {
- if (entry.getValue()) {
- enabledProfiles.add(entry.getKey());
- }
- }
-
- return enabledProfiles;
- }
-
private boolean isDeviceProvisioned() {
return Settings.Global.getInt(mContentResolver, Settings.Global.DEVICE_PROVISIONED,
0) != 0;
From 9f6044a2bc608635d5d4ed037326d35ed35150ca Mon Sep 17 00:00:00 2001
From: Michael Wachenschwanz
Date: Mon, 26 Jul 2021 22:27:50 -0700
Subject: [PATCH 006/671] Don't resume PowerStatsDataStorage read on Exception
If there is a problem with the PowerStatsDataStorage file, the read
should end, instead of catching the excpetion and resuming.
Fixes: 192639542
Test: atest PowerStatsServiceTest (the logcat should not be spammed with
many PowerStats errors)
Change-Id: If2617ab13a8177b75142d52bcad458f80eb5ed2c
---
.../android/server/powerstats/PowerStatsDataStorage.java | 8 ++------
1 file changed, 2 insertions(+), 6 deletions(-)
diff --git a/services/core/java/com/android/server/powerstats/PowerStatsDataStorage.java b/services/core/java/com/android/server/powerstats/PowerStatsDataStorage.java
index 2a95416747a6..06253a08d937 100644
--- a/services/core/java/com/android/server/powerstats/PowerStatsDataStorage.java
+++ b/services/core/java/com/android/server/powerstats/PowerStatsDataStorage.java
@@ -124,12 +124,8 @@ public class PowerStatsDataStorage {
@Override
public void read(InputStream in) throws IOException {
while (in.available() > 0) {
- try {
- DataElement dataElement = new DataElement(in);
- mCallback.onReadDataElement(dataElement.getData());
- } catch (IOException e) {
- Slog.e(TAG, "Failed to read from storage. " + e.getMessage());
- }
+ DataElement dataElement = new DataElement(in);
+ mCallback.onReadDataElement(dataElement.getData());
}
}
}
From 3582d26e2aee4f4b43238864ff5f41bf8e9c7fb9 Mon Sep 17 00:00:00 2001
From: Seigo Nonaka
Date: Fri, 23 Jul 2021 15:43:22 -0700
Subject: [PATCH 007/671] Early exit if the target region is empty
Bug: 193849901
Test: atest StaticLayoutBidiTouchTest
Change-Id: I55f04068a6e5b353867d50742356c272d28886b3
---
core/java/android/text/TextLine.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/core/java/android/text/TextLine.java b/core/java/android/text/TextLine.java
index 1f11d10052fe..1a7ec7f99c95 100644
--- a/core/java/android/text/TextLine.java
+++ b/core/java/android/text/TextLine.java
@@ -782,7 +782,7 @@ public class TextLine {
int spanStart = runStart;
int spanLimit;
- if (mSpanned == null) {
+ if (mSpanned == null || runStart == runLimit) {
spanLimit = runLimit;
} else {
int target = after ? offset + 1 : offset;
From f3072fcd46112bad7c5f6ddd4cc35d2c67f00d11 Mon Sep 17 00:00:00 2001
From: lucaslin
Date: Thu, 29 Jul 2021 13:26:35 +0800
Subject: [PATCH 008/671] Make sure that only the owner can call
stopVpnProfile()
In stopVpnProfile(), it doesn't check if the caller's package
name is the same as the given one, so any app has chance to stop
the VPN profile of other apps.
Bug: 191382886
Test: atest FrameworksNetTests CtsNetTestCases \
CtsHostsideNetworkTests:HostsideVpnTests
Change-Id: Ib0a6e9ed191ff8c8bd55ce9902d894b6a339ace2
Merged-In: I254ffd1c08ec058d594b4ea55cbae5505f8497cc
---
.../android/server/ConnectivityService.java | 28 +++++++++++++++++--
.../server/ConnectivityServiceTest.java | 18 ++++++++++++
2 files changed, 44 insertions(+), 2 deletions(-)
diff --git a/services/core/java/com/android/server/ConnectivityService.java b/services/core/java/com/android/server/ConnectivityService.java
index fcf73ac7ce15..0eab71a3763d 100644
--- a/services/core/java/com/android/server/ConnectivityService.java
+++ b/services/core/java/com/android/server/ConnectivityService.java
@@ -73,6 +73,7 @@ import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.pm.PackageManager;
+import android.content.pm.PackageManager.NameNotFoundException;
import android.content.res.Configuration;
import android.database.ContentObserver;
import android.net.CaptivePortal;
@@ -4607,6 +4608,25 @@ public class ConnectivityService extends IConnectivityManager.Stub
}
}
+ private int getAppUid(final String app, final int userId) {
+ final PackageManager pm = mContext.getPackageManager();
+ final long token = Binder.clearCallingIdentity();
+ try {
+ return pm.getPackageUidAsUser(app, userId);
+ } catch (NameNotFoundException e) {
+ return -1;
+ } finally {
+ Binder.restoreCallingIdentity(token);
+ }
+ }
+
+ private void verifyCallingUidAndPackage(String packageName, int callingUid) {
+ final int userId = UserHandle.getUserId(callingUid);
+ if (getAppUid(packageName, userId) != callingUid) {
+ throw new SecurityException(packageName + " does not belong to uid " + callingUid);
+ }
+ }
+
/**
* Starts the VPN based on the stored profile for the given package
*
@@ -4618,7 +4638,9 @@ public class ConnectivityService extends IConnectivityManager.Stub
*/
@Override
public void startVpnProfile(@NonNull String packageName) {
- final int user = UserHandle.getUserId(Binder.getCallingUid());
+ final int callingUid = Binder.getCallingUid();
+ verifyCallingUidAndPackage(packageName, callingUid);
+ final int user = UserHandle.getUserId(callingUid);
synchronized (mVpns) {
throwIfLockdownEnabled();
mVpns.get(user).startVpnProfile(packageName, mKeyStore);
@@ -4635,7 +4657,9 @@ public class ConnectivityService extends IConnectivityManager.Stub
*/
@Override
public void stopVpnProfile(@NonNull String packageName) {
- final int user = UserHandle.getUserId(Binder.getCallingUid());
+ final int callingUid = Binder.getCallingUid();
+ verifyCallingUidAndPackage(packageName, callingUid);
+ final int user = UserHandle.getUserId(callingUid);
synchronized (mVpns) {
mVpns.get(user).stopVpnProfile(packageName);
}
diff --git a/tests/net/java/com/android/server/ConnectivityServiceTest.java b/tests/net/java/com/android/server/ConnectivityServiceTest.java
index a5554c740e7f..e9301d1dea9d 100644
--- a/tests/net/java/com/android/server/ConnectivityServiceTest.java
+++ b/tests/net/java/com/android/server/ConnectivityServiceTest.java
@@ -1224,6 +1224,9 @@ public class ConnectivityServiceTest {
Arrays.asList(new UserInfo[] {
new UserInfo(VPN_USER, "", 0),
}));
+ final int userId = UserHandle.getCallingUserId();
+ final UserInfo primaryUser = new UserInfo(userId, "", UserInfo.FLAG_PRIMARY);
+ doReturn(primaryUser).when(mUserManager).getUserInfo(eq(userId));
final ApplicationInfo applicationInfo = new ApplicationInfo();
applicationInfo.targetSdkVersion = Build.VERSION_CODES.Q;
when(mPackageManager.getApplicationInfoAsUser(anyString(), anyInt(), any()))
@@ -1368,6 +1371,9 @@ public class ConnectivityServiceTest {
buildPackageInfo(/* SYSTEM */ false, APP2_UID),
buildPackageInfo(/* SYSTEM */ false, VPN_UID)
}));
+ final int userId = UserHandle.getCallingUserId();
+ when(mPackageManager.getPackageUidAsUser(TEST_PACKAGE_NAME, userId))
+ .thenReturn(Process.myUid());
}
private void verifyActiveNetwork(int transport) {
@@ -7068,6 +7074,18 @@ public class ConnectivityServiceTest {
assertContainsExactly(uidCaptor.getValue(), APP1_UID, APP2_UID);
}
+ @Test
+ public void testStartVpnProfileFromDiffPackage() throws Exception {
+ final String notMyVpnPkg = "com.not.my.vpn";
+ assertThrows(SecurityException.class, () -> mService.startVpnProfile(notMyVpnPkg));
+ }
+
+ @Test
+ public void testStopVpnProfileFromDiffPackage() throws Exception {
+ final String notMyVpnPkg = "com.not.my.vpn";
+ assertThrows(SecurityException.class, () -> mService.stopVpnProfile(notMyVpnPkg));
+ }
+
@Test
public void testUidUpdateChangesInterfaceFilteringRule() throws Exception {
LinkProperties lp = new LinkProperties();
From 79023f08d310bf1c5405ca70c563938bd51756cc Mon Sep 17 00:00:00 2001
From: Philip Junker
Date: Thu, 15 Jul 2021 18:01:11 +0200
Subject: [PATCH 009/671] Disallow usb access to camera and mic devices if
global privacy toggle is active
Note that this will not prevent currently running apps from accessing
usb devies to which a connection has already been established.
Removed isCameraDevicePresent() as this has been implemented as well in
UsbDevice#getHasVideoCapture().
Bug: 189915399
Test: Install nExt Camera - USB app, verify that camera is not accessible when camera privacy toggle is disabled.
Change-Id: Ie60adfe9fc667d883ad4a6b8d7582a4bc17d1549
Merged-In: Ie60adfe9fc667d883ad4a6b8d7582a4bc17d1549
(cherry picked from commit f063780d433c6e429a14dd4d98d67764d7760908)
---
.../server/usb/UsbUserPermissionManager.java | 58 +++++++++----------
1 file changed, 27 insertions(+), 31 deletions(-)
diff --git a/services/usb/java/com/android/server/usb/UsbUserPermissionManager.java b/services/usb/java/com/android/server/usb/UsbUserPermissionManager.java
index 5874b4b9fd3e..7b6ccd31adcc 100644
--- a/services/usb/java/com/android/server/usb/UsbUserPermissionManager.java
+++ b/services/usb/java/com/android/server/usb/UsbUserPermissionManager.java
@@ -25,12 +25,12 @@ import android.content.Context;
import android.content.Intent;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
+import android.hardware.SensorPrivacyManager.Sensors;
+import android.hardware.SensorPrivacyManagerInternal;
import android.hardware.usb.AccessoryFilter;
import android.hardware.usb.DeviceFilter;
import android.hardware.usb.UsbAccessory;
-import android.hardware.usb.UsbConstants;
import android.hardware.usb.UsbDevice;
-import android.hardware.usb.UsbInterface;
import android.hardware.usb.UsbManager;
import android.os.AsyncTask;
import android.os.Binder;
@@ -52,9 +52,9 @@ import android.util.TypedXmlSerializer;
import android.util.Xml;
import com.android.internal.annotations.GuardedBy;
-import com.android.internal.util.FastXmlSerializer;
import com.android.internal.util.XmlUtils;
import com.android.internal.util.dump.DualDumpOutputStream;
+import com.android.server.LocalServices;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
@@ -64,7 +64,6 @@ import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
-import java.nio.charset.StandardCharsets;
/**
* UsbUserPermissionManager manages usb device or accessory access permissions.
@@ -110,19 +109,20 @@ class UsbUserPermissionManager {
*/
@GuardedBy("mLock")
private boolean mIsCopyPermissionsScheduled;
+ private final SensorPrivacyManagerInternal mSensorPrivacyMgrInternal;
UsbUserPermissionManager(@NonNull Context context,
@NonNull UsbUserSettingsManager usbUserSettingsManager) {
mContext = context;
mUser = context.getUser();
mUsbUserSettingsManager = usbUserSettingsManager;
+ mSensorPrivacyMgrInternal = LocalServices.getService(SensorPrivacyManagerInternal.class);
mDisablePermissionDialogs = context.getResources().getBoolean(
com.android.internal.R.bool.config_disableUsbPermissionDialogs);
mPermissionsFile = new AtomicFile(new File(
Environment.getUserSystemDirectory(mUser.getIdentifier()),
"usb_permissions.xml"), "usb-permissions");
-
synchronized (mLock) {
readPermissionsLocked();
}
@@ -195,11 +195,27 @@ class UsbUserPermissionManager {
*/
boolean hasPermission(@NonNull UsbDevice device, @NonNull String packageName, int pid,
int uid) {
- if (isCameraDevicePresent(device)) {
- if (!isCameraPermissionGranted(packageName, pid, uid)) {
+ if (device.getHasVideoCapture()) {
+ boolean isCameraPrivacyEnabled = mSensorPrivacyMgrInternal.isSensorPrivacyEnabled(
+ UserHandle.getUserId(uid), Sensors.CAMERA);
+ if (DEBUG) {
+ Slog.d(TAG, "isCameraPrivacyEnabled: " + isCameraPrivacyEnabled);
+ }
+ if (isCameraPrivacyEnabled || !isCameraPermissionGranted(packageName, pid, uid)) {
return false;
}
}
+ // Only check for microphone privacy and not RECORD_AUDIO permission, because access to usb
+ // camera device with audio recording capabilities may still be granted with a warning
+ if (device.getHasAudioCapture() && mSensorPrivacyMgrInternal.isSensorPrivacyEnabled(
+ UserHandle.getUserId(uid), Sensors.MICROPHONE)) {
+ if (DEBUG) {
+ Slog.d(TAG,
+ "Access to device with audio recording capabilities denied because "
+ + "microphone privacy is enabled.");
+ }
+ return false;
+ }
synchronized (mLock) {
if (uid == Process.SYSTEM_UID || mDisablePermissionDialogs) {
return true;
@@ -698,7 +714,10 @@ class UsbUserPermissionManager {
}
return;
}
- if (isCameraDevicePresent(device)) {
+ // If the app doesn't have camera permission do not request permission to the USB device.
+ // Note that if the USB camera also has a microphone, a warning will be shown to the user if
+ // the app doesn't have RECORD_AUDIO permission.
+ if (device.getHasVideoCapture()) {
if (!isCameraPermissionGranted(packageName, pid, uid)) {
intent.putExtra(UsbManager.EXTRA_DEVICE, device);
intent.putExtra(UsbManager.EXTRA_PERMISSION_GRANTED, false);
@@ -733,27 +752,4 @@ class UsbUserPermissionManager {
requestPermissionDialog(null, accessory,
mUsbUserSettingsManager.canBeDefault(accessory, packageName), packageName, pi, uid);
}
-
- /**
- * Check whether a particular device or any of its interfaces
- * is of class VIDEO.
- *
- * @param device The device that needs to get scanned
- * @return True in case a VIDEO device or interface is present,
- * False otherwise.
- */
- private boolean isCameraDevicePresent(UsbDevice device) {
- if (device.getDeviceClass() == UsbConstants.USB_CLASS_VIDEO) {
- return true;
- }
-
- for (int i = 0; i < device.getInterfaceCount(); i++) {
- UsbInterface iface = device.getInterface(i);
- if (iface.getInterfaceClass() == UsbConstants.USB_CLASS_VIDEO) {
- return true;
- }
- }
-
- return false;
- }
}
From 1877d8ec29b19a3997cc3dfb884059bfb53b05f9 Mon Sep 17 00:00:00 2001
From: Aseem Kumar
Date: Mon, 17 May 2021 09:25:03 +0000
Subject: [PATCH 010/671] Prevent apps from spamming addAccountExplicitly. See
comment here for the discussion on solution
https://b.corp.google.com/issues/169762606#comment14
Change-Id: If212df3a3b7be1de0fb26b8e88b2fcbb8077c253
Bug: 169762606
(cherry picked from commit 11053c17b397db67b20e96ce769508766cef7db9)
Change-Id: Ia048d20c377ed2bde0efb0506ec61ae9d8356bf0
Merged-In: If212df3a3b7be1de0fb26b8e88b2fcbb8077c253
---
core/java/android/accounts/Account.java | 7 +++++++
.../com/android/server/accounts/AccountManagerService.java | 5 +++++
2 files changed, 12 insertions(+)
diff --git a/core/java/android/accounts/Account.java b/core/java/android/accounts/Account.java
index 0d6a07938e95..e6cdcc0ee742 100644
--- a/core/java/android/accounts/Account.java
+++ b/core/java/android/accounts/Account.java
@@ -31,6 +31,7 @@ import android.util.Log;
import com.android.internal.annotations.GuardedBy;
+import java.util.Objects;
import java.util.Set;
/**
@@ -86,6 +87,12 @@ public class Account implements Parcelable {
if (TextUtils.isEmpty(type)) {
throw new IllegalArgumentException("the type must not be empty: " + type);
}
+ if (name.length() > 200) {
+ throw new IllegalArgumentException("account name is longer than 200 characters");
+ }
+ if (type.length() > 200) {
+ throw new IllegalArgumentException("account type is longer than 200 characters");
+ }
this.name = name;
this.type = type;
this.accessId = accessId;
diff --git a/services/core/java/com/android/server/accounts/AccountManagerService.java b/services/core/java/com/android/server/accounts/AccountManagerService.java
index a6a8cf018eef..400b084ee966 100644
--- a/services/core/java/com/android/server/accounts/AccountManagerService.java
+++ b/services/core/java/com/android/server/accounts/AccountManagerService.java
@@ -1833,6 +1833,11 @@ public class AccountManagerService
+ ", skipping since the account already exists");
return false;
}
+ if (accounts.accountsDb.findAllDeAccounts().size() > 100) {
+ Log.w(TAG, "insertAccountIntoDatabase: " + account.toSafeString()
+ + ", skipping since more than 50 accounts on device exist");
+ return false;
+ }
long accountId = accounts.accountsDb.insertCeAccount(account, password);
if (accountId < 0) {
Log.w(TAG, "insertAccountIntoDatabase: " + account.toSafeString()
From 57345aeb76349e1ab4f5604fc7f7b6bc4d6a6491 Mon Sep 17 00:00:00 2001
From: Bill Yi
Date: Tue, 10 Aug 2021 01:22:11 +0000
Subject: [PATCH 011/671] Import translations. DO NOT MERGE ANYWHERE
Auto-generated-cl: translation import
Change-Id: I3aada634997993b5e5098be4d8cebfb14cb52293
---
core/res/res/values-te/strings.xml | 112 ++++++++++++++---------------
1 file changed, 56 insertions(+), 56 deletions(-)
diff --git a/core/res/res/values-te/strings.xml b/core/res/res/values-te/strings.xml
index 48c51d240941..c569f2f4270b 100644
--- a/core/res/res/values-te/strings.xml
+++ b/core/res/res/values-te/strings.xml
@@ -68,7 +68,7 @@
"కాలింగ్ నంబర్ అందుబాటులో ఉంది""కాలింగ్ నంబర్ పరిమితం చేయబడింది""మూడు మార్గాల కాలింగ్"
- "అవాంఛిత అంతరాయ కాల్ల తిరస్కరణ"
+ "అవాంఛిత అంతరాయ కాల్స్ల తిరస్కరణ""కాలింగ్ నంబర్ బట్వాడా""అంతరాయం కలిగించవద్దు""కాలర్ ID డిఫాల్ట్గా పరిమితానికి ఉంటుంది. తర్వాత కాల్: పరిమితం చేయబడింది"
@@ -86,7 +86,7 @@
"మొబైల్ నెట్వర్క్ అందుబాటులో లేదు""ప్రాధాన్య నెట్వర్క్ను మార్చుకోవడానికి ప్రయత్నించండి. మార్చడానికి నొక్కండి.""అత్యవసర కాలింగ్ అందుబాటులో లేదు"
- "Wi-Fiతో అత్యవసర కాల్లు చేయలేరు"
+ "Wi-Fiతో అత్యవసర కాల్స్ చేయలేరు""అలర్ట్లు""కాల్ ఫార్వార్డింగ్""అత్యవసర కాల్బ్యాక్ మోడ్"
@@ -124,7 +124,7 @@
"సేవ కోసం శోధిస్తోంది""Wi‑Fi కాలింగ్ని సెటప్ చేయడం సాధ్యపడలేదు"
- "Wi-Fiతో కాల్లను చేయడానికి మరియు సందేశాలను పంపించడానికి, మొదట ఈ సేవను సెటప్ చేయాల్సిందిగా మీ క్యారియర్కి చెప్పండి. ఆ తర్వాత సెట్టింగ్ల నుండి Wi-Fi కాలింగ్ని మళ్లీ ఆన్ చేయండి. (లోపం కోడ్: %1$s)"
+ "Wi-Fiతో కాల్స్ను చేయడానికి మరియు సందేశాలను పంపించడానికి, మొదట ఈ సేవను సెటప్ చేయాల్సిందిగా మీ క్యారియర్కి చెప్పండి. ఆ తర్వాత సెట్టింగ్ల నుండి Wi-Fi కాలింగ్ని మళ్లీ ఆన్ చేయండి. (లోపం కోడ్: %1$s)""మీ క్యారియర్తో Wi‑Fi కాలింగ్ని నమోదు చేయడంలో సమస్య: %1$s"
@@ -173,10 +173,10 @@
"సమకాలీకరణ""సమకాలీకరించడం సాధ్యపడదు""చాలా ఎక్కువ %s తొలగించడానికి ప్రయత్నించారు."
- "టాబ్లెట్ నిల్వ నిండింది. స్థలాన్ని ఖాళీ చేయడానికి కొన్ని ఫైల్లను తొలగించండి."
- "వాచ్ నిల్వ నిండింది. స్థలాన్ని ఖాళీ చేయడానికి కొన్ని ఫైల్లను తొలగించండి."
+ "టాబ్లెట్ నిల్వ నిండింది. స్థలాన్ని ఖాళీ చేయడానికి కొన్ని ఫైళ్లను తొలగించండి."
+ "వాచ్ నిల్వ నిండింది. స్థలాన్ని ఖాళీ చేయడానికి కొన్ని ఫైళ్లను తొలగించండి.""Android TV పరికరం నిల్వ నిండింది. కొంత ప్రదేశాన్ని ఖాళీ చేయడానికి కొన్ని ఫైల్లను తొలగించండి."
- "ఫోన్ నిల్వ నిండింది. స్థలాన్ని ఖాళీ చేయడానికి కొన్ని ఫైల్లను తొలగించండి."
+ "ఫోన్ నిల్వ నిండింది. స్థలాన్ని ఖాళీ చేయడానికి కొన్ని ఫైళ్లను తొలగించండి."ప్రమాణపత్ర అధికారాలు ఇన్స్టాల్ చేయబడ్డాయిప్రమాణపత్ర అధికారం ఇన్స్టాల్ చేయబడింది
@@ -240,21 +240,21 @@
"పవర్""రీస్టార్ట్ చేయి""ఎమర్జెన్సీ"
- "బగ్ నివేదిక"
+ "బగ్ రిపోర్ట్""సెషన్ను ముగించు""స్క్రీన్షాట్""బగ్ రిపోర్ట్"
- "ఇది ఇ-మెయిల్ సందేశం రూపంలో పంపడానికి మీ ప్రస్తుత పరికర స్థితి గురించి సమాచారాన్ని సేకరిస్తుంది. బగ్ నివేదికను ప్రారంభించడం మొదలుకొని పంపడానికి సిద్ధం చేసే వరకు ఇందుకు కొంత సమయం పడుతుంది; దయచేసి ఓపిక పట్టండి."
- "ప్రభావశీల నివేదిక"
- "చాలా సందర్భాల్లో దీన్ని ఉపయోగించండి. ఇది నివేదిక ప్రోగ్రెస్ను ట్రాక్ చేయడానికి, సమస్య గురించి మరిన్ని వివరాలను నమోదు చేయడానికి మరియు స్క్రీన్షాట్లు తీయడానికి మిమ్మల్ని అనుమతిస్తుంది. ఇది నివేదించడానికి ఎక్కువ సమయం పట్టే తక్కువ వినియోగ విభాగాలను విడిచిపెట్టవచ్చు."
- "పూర్తి నివేదిక"
- "మీ పరికరం ప్రతిస్పందనరహితంగా ఉన్నప్పుడు లేదా చాలా నెమ్మదిగా ఉన్నప్పుడు లేదా మీకు అన్ని నివేదిక విభాగాలు అవసరమైనప్పుడు సిస్టమ్కి అంతరాయ స్థాయి కనిష్టంగా ఉండేలా చేయడానికి ఈ ఎంపిక ఉపయోగించండి. ఇది మరిన్ని వివరాలను నమోదు చేయడానికి లేదా అదనపు స్క్రీన్షాట్లు తీయడానికి మిమ్మల్ని అనుమతించదు."
+ "ఇది ఇ-మెయిల్ సందేశం రూపంలో పంపడానికి మీ ప్రస్తుత పరికర స్థితి గురించి సమాచారాన్ని సేకరిస్తుంది. బగ్ రిపోర్ట్ను ప్రారంభించడం మొదలుకొని పంపడానికి సిద్ధం చేసే వరకు ఇందుకు కొంత సమయం పడుతుంది; దయచేసి ఓపిక పట్టండి."
+ "ప్రభావశీల రిపోర్ట్"
+ "చాలా సందర్భాల్లో దీన్ని ఉపయోగించండి. ఇది రిపోర్ట్ ప్రోగ్రెస్ను ట్రాక్ చేయడానికి, సమస్య గురించి మరిన్ని వివరాలను నమోదు చేయడానికి మరియు స్క్రీన్షాట్లు తీయడానికి మిమ్మల్ని అనుమతిస్తుంది. ఇది నివేదించడానికి ఎక్కువ సమయం పట్టే తక్కువ వినియోగ విభాగాలను విడిచిపెట్టవచ్చు."
+ "పూర్తి రిపోర్ట్"
+ "మీ పరికరం ప్రతిస్పందనరహితంగా ఉన్నప్పుడు లేదా చాలా నెమ్మదిగా ఉన్నప్పుడు లేదా మీకు అన్ని రిపోర్ట్ విభాగాలు అవసరమైనప్పుడు సిస్టమ్కి అంతరాయ స్థాయి కనిష్టంగా ఉండేలా చేయడానికి ఈ ఎంపిక ఉపయోగించండి. ఇది మరిన్ని వివరాలను నమోదు చేయడానికి లేదా అదనపు స్క్రీన్షాట్లు తీయడానికి మిమ్మల్ని అనుమతించదు."
- బగ్ నివేదిక కోసం %d సెకన్లలో స్క్రీన్షాట్ తీయబోతోంది.
- బగ్ నివేదిక కోసం %d సెకనులో స్క్రీన్షాట్ తీయబోతోంది.
+ బగ్ రిపోర్ట్ కోసం %d సెకన్లలో స్క్రీన్షాట్ తీయబోతోంది.
+ బగ్ రిపోర్ట్ కోసం %d సెకనులో స్క్రీన్షాట్ తీయబోతోంది.
- "బగ్ నివేదికతో ఉన్న స్క్రీన్షాట్ తీయబడింది"
- "బగ్ నివేదికతో ఉన్న స్క్రీన్షాట్ను తీయడం విఫలమైంది"
+ "బగ్ రిపోర్ట్తో ఉన్న స్క్రీన్షాట్ తీయబడింది"
+ "బగ్ రిపోర్ట్తో ఉన్న స్క్రీన్షాట్ను తీయడం విఫలమైంది""నిశ్శబ్ద మోడ్""ధ్వని ఆఫ్లో ఉంది""ధ్వని ఆన్లో ఉంది"
@@ -302,7 +302,7 @@
"SMS""SMS సందేశాలను పంపడం మరియు వీక్షించడం""ఫైల్స్, మీడియా"
- "మీ పరికరంలోని ఫోటోలు, మీడియా మరియు ఫైల్లను యాక్సెస్ చేయడానికి"
+ "మీ పరికరంలోని ఫోటోలు, మీడియా మరియు ఫైళ్లను యాక్సెస్ చేయడానికి""మైక్రోఫోన్""ఆడియోను రికార్డ్ చేయడానికి""ఫిజికల్ యాక్టివిటీ"
@@ -312,7 +312,7 @@
"కాల్ లాగ్లు""ఫోన్ కాల్ లాగ్ని చదవండి మరియు రాయండి""ఫోన్"
- "ఫోన్ కాల్లు చేయడం మరియు నిర్వహించడం"
+ "ఫోన్ కాల్స్ చేయడం మరియు నిర్వహించడం""శరీర సెన్సార్లు""మీ అత్యంత కీలకమైన గుర్తుల గురించి సెన్సార్ డేటాని యాక్సెస్ చేస్తుంది""విండో కంటెంట్ను తిరిగి పొందుతుంది"
@@ -339,10 +339,10 @@
"వినియోగదారు ప్రమేయం లేకుండానే హోమ్స్క్రీన్ సత్వరమార్గాలను జోడించడానికి యాప్ను అనుమతిస్తుంది.""సత్వరమార్గాలను అన్ఇన్స్టాల్ చేయడం""వినియోగదారు ప్రమేయం లేకుండానే హోమ్స్క్రీన్ సత్వరమార్గాలను తీసివేయడానికి యాప్ను అనుమతిస్తుంది."
- "అవుట్గోయింగ్ కాల్లను దారి మళ్లించడం"
+ "అవుట్గోయింగ్ కాల్స్ను దారి మళ్లించడం""కాల్ను వేరే నంబర్కు దారి మళ్లించే లేదా మొత్తంగా కాల్ను ఆపివేసే ఎంపిక సహాయంతో అవుట్గోయింగ్ కాల్ సమయంలో డయల్ చేయబడుతున్న నంబర్ను చూడటానికి యాప్ను అనుమతిస్తుంది."
- "ఫోన్ కాల్లకు సమాధానమివ్వు"
- "ఇన్కమింగ్ ఫోన్ కాల్లకు సమాధానమివ్వడానికి యాప్ను అనుమతిస్తుంది."
+ "ఫోన్ కాల్స్కు సమాధానమివ్వు"
+ "ఇన్కమింగ్ ఫోన్ కాల్స్కు సమాధానమివ్వడానికి యాప్ను అనుమతిస్తుంది.""వచన సందేశాలను (SMS) స్వీకరించడం""SMS సందేశాలను స్వీకరించడానికి మరియు ప్రాసెస్ చేయడానికి యాప్ను అనుమతిస్తుంది. యాప్ మీ డివైజ్కు పంపబడిన సందేశాలను మీకు చూపకుండానే పర్యవేక్షించగలదని లేదా తొలగించగలదని దీని అర్థం.""వచన సందేశాలను (MMS) స్వీకరించడం"
@@ -361,15 +361,15 @@
"ఈ యాప్ మీ ఫోన్లో నిల్వ చేసిన అన్ని SMS (వచన) సందేశాలను చదవగలదు.""వచన సందేశాలను (WAP) స్వీకరించడం""WAP సందేశాలను స్వీకరించడానికి మరియు ప్రాసెస్ చేయడానికి యాప్ను అనుమతిస్తుంది. ఈ అనుమతి మీకు పంపబడిన సందేశాలను మీకు చూపకుండానే పర్యవేక్షించగల లేదా తొలగించగల సామర్థ్యాన్ని కలిగి ఉంటుంది."
- "అమలవుతున్న అనువర్తనాలను పునరుద్ధరించడం"
+ "అమలవుతున్న యాప్లను పునరుద్ధరించడం""ప్రస్తుతం మరియు ఇటీవల అమలవుతున్న విధుల గురించి వివరణాత్మక సమాచారాన్ని తిరిగి పొందడానికి యాప్ను అనుమతిస్తుంది. ఇది పరికరంలో ఉపయోగించబడిన యాప్ల గురించి సమాచారాన్ని కనుగొనడానికి యాప్ను అనుమతించవచ్చు.""ప్రొఫైల్ మరియు పరికర యజమానులను నిర్వహించడం"
- "ప్రొఫైల్ యజమానులను మరియు పరికరం యజమానిని సెట్ చేయడానికి అనువర్తనాలను అనుమతిస్తుంది."
+ "ప్రొఫైల్ యజమానులను మరియు పరికరం యజమానిని సెట్ చేయడానికి యాప్లను అనుమతిస్తుంది.""అమలవుతోన్న యాప్లను మళ్లీ క్రమం చేయడం""విధులను ముందుకు మరియు నేపథ్యానికి తరలించడానికి యాప్ను అనుమతిస్తుంది. యాప్ మీ ప్రమేయం లేకుండానే దీన్ని చేయవచ్చు.""కారు మోడ్ను ప్రారంభించడం""కారు మోడ్ను ప్రారంభించడానికి యాప్ను అనుమతిస్తుంది."
- "ఇతర అనువర్తనాలను మూసివేయడం"
+ "ఇతర యాప్లను మూసివేయడం""ఇతర యాప్ల నేపథ్య ప్రాసెస్లను ముగించడానికి యాప్ను అనుమతిస్తుంది. దీని వలన ఇతర యాప్లు అమలు కాకుండా ఆపివేయబడవచ్చు.""ఈ యాప్ ఇతర యాప్ల పైభాగాన కనిపించగలదు""ఈ యాప్ ఇతర యాప్ల పైభాగాన లేదా స్క్రీన్ యొక్క ఇతర భాగాలపైన కనిపించగలదు. ఇది సాధారణ యాప్ వినియోగానికి అంతరాయం కలిగించవచ్చు మరియు ఆ ఇతర యాప్లు కనిపించే విధానాన్ని మార్చవచ్చు."
@@ -406,9 +406,9 @@
"కాల్ లాగ్ను చదవడం""ఈ యాప్ మీ కాల్ చరిత్రను చదవగలదు.""కాల్ లాగ్ను వ్రాయడం"
- "ఇన్కమింగ్ మరియు అవుట్గోయింగ్ కాల్ల గురించిన డేటాతో సహా మీ టాబ్లెట్ యొక్క కాల్ లాగ్ను సవరించడానికి యాప్ను అనుమతిస్తుంది. హానికరమైన యాప్లు మీ కాల్ లాగ్ను ఎరేజ్ చేయడానికి లేదా సవరించడానికి దీన్ని ఉపయోగించవచ్చు."
- "ఇన్కమింగ్ మరియు అవుట్గోయింగ్ కాల్లకు సంబంధించిన డేటాతో సహా మీ Android TV పరికరం కాల్ లాగ్ను సవరించడానికి యాప్ని అనుమతిస్తుంది. హానికరమైన యాప్లు మీ కాల్ లాగ్ను తీసివేయడానికి లేదా సవరించడానికి దీన్ని ఉపయోగించవచ్చు."
- "ఇన్కమింగ్ మరియు అవుట్గోయింగ్ కాల్ల గురించిన డేటాతో సహా మీ ఫోన్ యొక్క కాల్ లాగ్ను సవరించడానికి యాప్ను అనుమతిస్తుంది. హానికరమైన యాప్లు మీ కాల్ లాగ్ను ఎరేజ్ చేయడానికి లేదా సవరించడానికి దీన్ని ఉపయోగించవచ్చు."
+ "ఇన్కమింగ్ మరియు అవుట్గోయింగ్ కాల్స్ల గురించిన డేటాతో సహా మీ టాబ్లెట్ యొక్క కాల్ లాగ్ను సవరించడానికి యాప్ను అనుమతిస్తుంది. హానికరమైన యాప్లు మీ కాల్ లాగ్ను ఎరేజ్ చేయడానికి లేదా సవరించడానికి దీన్ని ఉపయోగించవచ్చు."
+ "ఇన్కమింగ్ మరియు అవుట్గోయింగ్ కాల్స్కు సంబంధించిన డేటాతో సహా మీ Android TV పరికరం కాల్ లాగ్ను సవరించడానికి యాప్ని అనుమతిస్తుంది. హానికరమైన యాప్లు మీ కాల్ లాగ్ను తీసివేయడానికి లేదా సవరించడానికి దీన్ని ఉపయోగించవచ్చు."
+ "ఇన్కమింగ్ మరియు అవుట్గోయింగ్ కాల్స్ల గురించిన డేటాతో సహా మీ ఫోన్ యొక్క కాల్ లాగ్ను సవరించడానికి యాప్ను అనుమతిస్తుంది. హానికరమైన యాప్లు మీ కాల్ లాగ్ను ఎరేజ్ చేయడానికి లేదా సవరించడానికి దీన్ని ఉపయోగించవచ్చు.""శరీర సెన్సార్లను (గుండె స్పందన రేటు మానిటర్ల వంటివి) యాక్సెస్ చేయండి""మీ శారీరక పరిస్థితిని అనగా మీ గుండె స్పందన రేటు వంటి వాటిని పర్యవేక్షించే సెన్సార్ల నుండి డేటాను యాక్సెస్ చేయడానికి యాప్ను అనుమతిస్తుంది.""క్యాలెండర్ ఈవెంట్లు మరియు వివరాలను చదవడం"
@@ -445,15 +445,15 @@
"వైబ్రేటర్ను నియంత్రించడానికి యాప్ను అనుమతిస్తుంది.""వైబ్రేటర్ స్థితిని యాక్సెస్ చేసేందుకు యాప్ను అనుమతిస్తుంది.""నేరుగా కాల్ చేసే ఫోన్ నంబర్లు"
- "మీ ప్రమేయం లేకుండా ఫోన్ నంబర్లకు కాల్ చేయడానికి యాప్ను అనుమతిస్తుంది. దీని వలన అనుకోని ఛార్జీలు విధించబడవచ్చు లేదా కాల్లు రావచ్చు. ఇది అత్యవసర నంబర్లకు కాల్ చేయడానికి యాప్ను అనుమతించదని గుర్తుంచుకోండి. హానికరమైన యాప్లు మీ నిర్ధారణ లేకుండానే కాల్లు చేయడం ద్వారా మీకు డబ్బు ఖర్చయ్యేలా చేయవచ్చు."
+ "మీ ప్రమేయం లేకుండా ఫోన్ నంబర్లకు కాల్ చేయడానికి యాప్ను అనుమతిస్తుంది. దీని వలన అనుకోని ఛార్జీలు విధించబడవచ్చు లేదా కాల్స్ రావచ్చు. ఇది అత్యవసర నంబర్లకు కాల్ చేయడానికి యాప్ను అనుమతించదని గుర్తుంచుకోండి. హానికరమైన యాప్లు మీ నిర్ధారణ లేకుండానే కాల్స్ చేయడం ద్వారా మీకు డబ్బు ఖర్చయ్యేలా చేయవచ్చు.""IMS కాల్ సేవ యాక్సెస్ అనుమతి"
- "మీ ప్రమేయం లేకుండా కాల్లు చేయడం కోసం IMS సేవను ఉపయోగించడానికి యాప్ను అనుమతిస్తుంది."
+ "మీ ప్రమేయం లేకుండా కాల్స్ చేయడం కోసం IMS సేవను ఉపయోగించడానికి యాప్ను అనుమతిస్తుంది.""ఫోన్ స్థితి మరియు గుర్తింపుని చదవడం""పరికరం యొక్క ఫోన్ ఫీచర్లను యాక్సెస్ చేయడానికి యాప్ను అనుమతిస్తుంది. ఈ అనుమతి ఫోన్ నంబర్ మరియు పరికరం IDలను, కాల్ సక్రియంగా ఉందా లేదా అనే విషయాన్ని మరియు కాల్ ద్వారా కనెక్ట్ చేయబడిన రిమోట్ నంబర్ను కనుగొనడానికి యాప్ను అనుమతిస్తుంది."
- "కాల్లను సిస్టమ్ ద్వారా వెళ్లేలా చేయి"
- "కాలింగ్ అనుభవాన్ని మెరుగుపరచడం కోసం తన కాల్లను సిస్టమ్ ద్వారా వెళ్లేలా చేయడానికి యాప్ను అనుమతిస్తుంది."
- "సిస్టమ్ ద్వారా కాల్లను చూసి, నియంత్రించండి."
- "పరికరంలో కొనసాగుతున్న కాల్లను చూడడానికి మరియు నియంత్రించడానికి యాప్ను అనుమతిస్తుంది. ఇందులో కాల్ కోసం కాల్ల నంబర్లు మరియు రాష్ట్ర కాల్ వంటి సమాచారం ఉంటుంది."
+ "కాల్స్ను సిస్టమ్ ద్వారా వెళ్లేలా చేయి"
+ "కాలింగ్ అనుభవాన్ని మెరుగుపరచడం కోసం తన కాల్స్ను సిస్టమ్ ద్వారా వెళ్లేలా చేయడానికి యాప్ను అనుమతిస్తుంది."
+ "సిస్టమ్ ద్వారా కాల్స్ను చూసి, నియంత్రించండి."
+ "పరికరంలో కొనసాగుతున్న కాల్స్ను చూడడానికి మరియు నియంత్రించడానికి యాప్ను అనుమతిస్తుంది. ఇందులో కాల్ కోసం కాల్స్ల నంబర్లు మరియు రాష్ట్ర కాల్ వంటి సమాచారం ఉంటుంది.""ఆడియో రికార్డ్ పరిమితుల నుండి మినహాయింపు""ఆడియోను రికార్డ్ చేయడానికి యాప్ను పరిమితుల నుండి మినహాయించండి.""మరో యాప్ నుండి కాల్ని కొనసాగించండి"
@@ -621,8 +621,8 @@
"మీ షేర్ చేసిన నిల్వ యొక్క కంటెంట్లను చదవడానికి యాప్ను అనుమతిస్తుంది.""మీ షేర్ చేసిన నిల్వ యొక్క కంటెంట్లను సవరించండి లేదా తొలగించండి""మీ షేర్ చేసిన నిల్వ యొక్క కంటెంట్లను రాయడానికి యాప్ను అనుమతిస్తుంది."
- "SIP కాల్లను చేయడానికి/స్వీకరించడానికి"
- "SIP కాల్లను చేయడానికి మరియు స్వీకరించడానికి యాప్ను అనుమతిస్తుంది."
+ "SIP కాల్స్ను చేయడానికి/స్వీకరించడానికి"
+ "SIP కాల్స్ను చేయడానికి మరియు స్వీకరించడానికి యాప్ను అనుమతిస్తుంది.""కొత్త టెలికామ్ SIM కనెక్షన్లను నమోదు చేయడం""కొత్త టెలికామ్ SIM కనెక్షన్లను నమోదు చేయడానికి యాప్ను అనుమతిస్తుంది.""కొత్త టెలికామ్ కనెక్షన్లను నమోదు చేయడం"
@@ -632,7 +632,7 @@
"ఇన్-కాల్ స్క్రీన్తో పరస్పర చర్య చేయడం""వినియోగదారునికి ఇన్-కాల్ స్క్రీన్ ఎప్పుడు, ఎలా కనిపించాలనే దాన్ని నియంత్రించడానికి యాప్ను అనుమతిస్తుంది.""టెలిఫోన్ సేవలతో పరస్పర చర్య చేయడం"
- "కాల్లు చేయడం/స్వీకరించడం కోసం టెలిఫోన్ సేవలతో పరస్పర చర్య చేయడానికి యాప్ను అనుమతిస్తుంది."
+ "కాల్స్ చేయడం/స్వీకరించడం కోసం టెలిఫోన్ సేవలతో పరస్పర చర్య చేయడానికి యాప్ను అనుమతిస్తుంది.""ఇన్-కాల్ వినియోగదారు అనుభవాన్ని అందించడం""ఇన్-కాల్ వినియోగదారుని అనుభవాన్ని అందించడానికి యాప్ను అనుమతిస్తుంది.""చారిత్రక నెట్వర్క్ వినియోగాన్ని చదవడం"
@@ -642,29 +642,29 @@
"నెట్వర్క్ వినియోగ అకౌంటింగ్ను సవరించడం""యాప్లలో నెట్వర్క్ వినియోగం ఎలా గణించాలనే దాన్ని సవరించడానికి యాప్ను అనుమతిస్తుంది. సాధారణ యాప్ల ద్వారా ఉపయోగించడానికి ఉద్దేశించినది కాదు.""నోటిఫికేషన్లను యాక్సెస్ చేయడం"
- "నోటిఫికేషన్లను, ఇతర అనువర్తనాల ద్వారా పోస్ట్ చేయబడిన వాటిని తిరిగి పొందడానికి, పరిశీలించడానికి మరియు క్లియర్ చేయడానికి యాప్ను అనుమతిస్తుంది."
+ "నోటిఫికేషన్లను, ఇతర యాప్ల ద్వారా పోస్ట్ చేయబడిన వాటిని తిరిగి పొందడానికి, పరిశీలించడానికి మరియు క్లియర్ చేయడానికి యాప్ను అనుమతిస్తుంది.""నోటిఫికేషన్ పరిశీలన సేవకు అనుబంధించడం"
- "నోటిఫికేషన్ పరిశీలన సేవ యొక్క అగ్ర-స్థాయి ఇంటర్ఫేస్కు అనుబంధించడానికి హోల్డర్ను అనుమతిస్తుంది. సాధారణ అనువర్తనాల కోసం ఎప్పటికీ అవసరం ఉండకూడదు."
+ "నోటిఫికేషన్ పరిశీలన సేవ యొక్క అగ్ర-స్థాయి ఇంటర్ఫేస్కు అనుబంధించడానికి హోల్డర్ను అనుమతిస్తుంది. సాధారణ యాప్ల కోసం ఎప్పటికీ అవసరం ఉండకూడదు.""షరతు ప్రదాత సేవకు అనుబంధించడం"
- "షరతు ప్రదాత సేవ యొక్క అగ్ర-స్థాయి ఇంటర్ఫేస్కు అనుబంధించడానికి హోల్డర్ను అనుమతిస్తుంది. సాధారణ అనువర్తనాలకు ఎప్పటికీ అవసరం ఉండదు."
+ "షరతు ప్రదాత సేవ యొక్క అగ్ర-స్థాయి ఇంటర్ఫేస్కు అనుబంధించడానికి హోల్డర్ను అనుమతిస్తుంది. సాధారణ యాప్లకు ఎప్పటికీ అవసరం ఉండదు.""డ్రీమ్ సేవకి అనుబంధించడం"
- "డ్రీమ్ సేవ యొక్క అగ్ర-స్థాయి ఇంటర్ఫేస్కు అనుబంధించడానికి హోల్డర్ను అనుమతిస్తుంది. సాధారణ అనువర్తనాలకు ఎప్పటికీ అవసరం ఉండదు."
+ "డ్రీమ్ సేవ యొక్క అగ్ర-స్థాయి ఇంటర్ఫేస్కు అనుబంధించడానికి హోల్డర్ను అనుమతిస్తుంది. సాధారణ యాప్లకు ఎప్పటికీ అవసరం ఉండదు.""క్యారియర్ అందించిన కాన్ఫిగరేషన్ యాప్ను అభ్యర్థించడం"
- "క్యారియర్ అందించిన కాన్ఫిగరేషన్ యాప్ను అభ్యర్థించడానికి హోల్డర్ను అనుమతిస్తుంది. సాధారణ అనువర్తనాల కోసం ఎప్పటికీ అవసరం ఉండకూడదు."
+ "క్యారియర్ అందించిన కాన్ఫిగరేషన్ యాప్ను అభ్యర్థించడానికి హోల్డర్ను అనుమతిస్తుంది. సాధారణ యాప్ల కోసం ఎప్పటికీ అవసరం ఉండకూడదు.""నెట్వర్క్ పరిస్థితులపై పరిశీలనల గురించి తెలుసుకోవడం"
- "నెట్వర్క్ పరిస్థితులపై పరిశీలనల గురించి తెలుసుకోవడానికి యాప్ను అనుమతిస్తుంది. సాధారణ అనువర్తనాలకు ఎప్పటికీ అవసరం ఉండకూడదు."
+ "నెట్వర్క్ పరిస్థితులపై పరిశీలనల గురించి తెలుసుకోవడానికి యాప్ను అనుమతిస్తుంది. సాధారణ యాప్లకు ఎప్పటికీ అవసరం ఉండకూడదు.""ఇన్పుట్ పరికరం క్రమాంకనాన్ని మార్చండి"
- "టచ్ స్క్రీన్ యొక్క క్రమాంకన పరామితులను సవరించడానికి యాప్ను అనుమతిస్తుంది. సాధారణ అనువర్తనాలకు ఎప్పటికీ అవసరం ఉండదు."
+ "టచ్ స్క్రీన్ యొక్క క్రమాంకన పరామితులను సవరించడానికి యాప్ను అనుమతిస్తుంది. సాధారణ యాప్లకు ఎప్పటికీ అవసరం ఉండదు.""DRM ప్రమాణపత్రాలను యాక్సెస్ చేయడం"
- "DRM ప్రమాణపత్రాలను కేటాయించడానికి మరియు ఉపయోగించడానికి యాప్ను అనుమతిస్తుంది. సాధారణ అనువర్తనాలకు ఎప్పటికీ అవసరం ఉండదు."
+ "DRM ప్రమాణపత్రాలను కేటాయించడానికి మరియు ఉపయోగించడానికి యాప్ను అనుమతిస్తుంది. సాధారణ యాప్లకు ఎప్పటికీ అవసరం ఉండదు.""Android Beam బదిలీ స్థితిని స్వీకరించడం""ప్రస్తుత Android Beam బదిలీలకు సంబంధించిన సమాచారాన్ని స్వీకరించడానికి ఈ యాప్ను అనుమతిస్తుంది""DRM ప్రమాణపత్రాలను తీసివేయడం"
- "DRM ప్రమాణపత్రాలను తీసివేయడానికి యాప్ను అనుమతిస్తుంది. సాధారణ అనువర్తనాలకు ఎప్పటికీ అవసరం ఉండదు."
+ "DRM ప్రమాణపత్రాలను తీసివేయడానికి యాప్ను అనుమతిస్తుంది. సాధారణ యాప్లకు ఎప్పటికీ అవసరం ఉండదు.""క్యారియర్ సందేశ సేవకు అనుబంధించడం"
- "క్యారియర్ సందేశ సేవ యొక్క అగ్ర-స్థాయి ఇంటర్ఫేస్కు అనుబంధించడానికి హోల్డర్ను అనుమతిస్తుంది. సాధారణ అనువర్తనాలకు ఎప్పటికీ అవసరం ఉండదు."
+ "క్యారియర్ సందేశ సేవ యొక్క అగ్ర-స్థాయి ఇంటర్ఫేస్కు అనుబంధించడానికి హోల్డర్ను అనుమతిస్తుంది. సాధారణ యాప్లకు ఎప్పటికీ అవసరం ఉండదు.""క్యారియర్ సేవలకు అనుబంధించడం"
- "క్యారియర్ సేవలకు అనుబంధించడానికి హోల్డర్ను అనుమతిస్తుంది. సాధారణ అనువర్తనాలకు ఎప్పటికీ అవసరం ఉండదు."
+ "క్యారియర్ సేవలకు అనుబంధించడానికి హోల్డర్ను అనుమతిస్తుంది. సాధారణ యాప్లకు ఎప్పటికీ అవసరం ఉండదు.""అంతరాయం కలిగించవద్దును యాక్సెస్ చేయడం""అంతరాయం కలిగించవద్దు ఎంపిక కాన్ఫిగరేషన్ చదవడానికి మరియు వ్రాయడానికి యాప్ను అనుమతిస్తుంది.""వీక్షణ అనుమతి వినియోగాన్ని ప్రారంభించండి"
@@ -1198,7 +1198,7 @@
"%1$sని అప్గ్రేడ్ చేస్తోంది…""%2$dలో %1$d యాప్ను అనుకూలీకరిస్తోంది.""%1$sని సిద్ధం చేస్తోంది."
- "అనువర్తనాలను ప్రారంభిస్తోంది."
+ "యాప్లను ప్రారంభిస్తోంది.""బూట్ను ముగిస్తోంది.""%1$s అమలవుతోంది""గేమ్కి తిరిగి రావడానికి నొక్కండి"
@@ -1320,10 +1320,10 @@
"USB పోర్ట్ ఆటోమేటిక్గా నిలిపివేయబడింది. మరింత తెలుసుకోవడానికి నొక్కండి.""USB పోర్ట్ను ఉపయోగించడం సురక్షితం""ఫోన్ ఇకపై ద్రవ లేదా వ్యర్థ పదార్థాలను గుర్తించదు."
- "బగ్ నివేదికను తీస్తోంది…"
- "బగ్ నివేదికను భాగస్వామ్యం చేయాలా?"
- "బగ్ నివేదికను భాగస్వామ్యం చేస్తోంది..."
- "మీ నిర్వాహకులు ఈ పరికరం సమస్యకు పరిష్కారాన్ని కనుగొనడంలో సహాయం కోసం బగ్ నివేదికను అభ్యర్థించారు. యాప్లు మరియు డేటా భాగస్వామ్యం చేయబడవచ్చు."
+ "బగ్ రిపోర్ట్ను తీస్తోంది…"
+ "బగ్ రిపోర్ట్ను భాగస్వామ్యం చేయాలా?"
+ "బగ్ రిపోర్ట్ను భాగస్వామ్యం చేస్తోంది..."
+ "మీ నిర్వాహకులు ఈ పరికరం సమస్యకు పరిష్కారాన్ని కనుగొనడంలో సహాయం కోసం బగ్ రిపోర్ట్ను అభ్యర్థించారు. యాప్లు మరియు డేటా భాగస్వామ్యం చేయబడవచ్చు.""షేర్ చేయి""తిరస్కరిస్తున్నాను""ఇన్పుట్ పద్ధతిని ఎంచుకోండి"
@@ -1900,7 +1900,7 @@
"కార్యాలయ ప్రొఫైల్ లాక్ అయింది""కార్యాలయ ప్రొఫైల్ అన్లాక్ చేయుటకు నొక్కండి""%1$sకి కనెక్ట్ చేయబడింది"
- "ఫైల్లను వీక్షించడానికి నొక్కండి"
+ "ఫైళ్లను వీక్షించడానికి నొక్కండి""పిన్ చేయి""%1$sను పిన్ చేయండి""అన్పిన్ చేయి"
@@ -1985,8 +1985,8 @@
"హానికరమైన యాప్ గుర్తించబడింది""%1$s%2$s స్లైస్లను చూపించాలనుకుంటోంది""ఎడిట్ చేయండి"
- "కాల్లు మరియు నోటిఫికేషన్లు వైబ్రేట్ అవుతాయి"
- "కాల్లు మరియు నోటిఫికేషన్లు మ్యూట్ చేయబడతాయి"
+ "కాల్స్ మరియు నోటిఫికేషన్లు వైబ్రేట్ అవుతాయి"
+ "కాల్స్ మరియు నోటిఫికేషన్లు మ్యూట్ చేయబడతాయి""సిస్టమ్ మార్పులు""అంతరాయం కలిగించవద్దు""కొత్తది: అంతరాయం కలిగించవద్దు నోటిఫికేషన్లను దాస్తోంది"
@@ -2027,7 +2027,7 @@
"విమానం మోడ్లో బ్లూటూత్ ఆన్లో ఉంటుంది""లోడవుతోంది"
- %s + %d ఫైల్లు
+ %s + %d ఫైళ్లు%s + %d ఫైల్"ఎవరికి షేర్ చేయాలనే దానికి సంబంధించి సిఫార్సులేవీ లేవు"
From dc5577b287b08ed733758c54ed23ca8c50410434 Mon Sep 17 00:00:00 2001
From: Bill Yi
Date: Tue, 10 Aug 2021 04:51:37 +0000
Subject: [PATCH 012/671] Import translations. DO NOT MERGE ANYWHERE
Auto-generated-cl: translation import
Change-Id: If0bb738540e3484175f9c0fd979ebe153dcb151a
---
packages/PackageInstaller/res/values-te/strings.xml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/packages/PackageInstaller/res/values-te/strings.xml b/packages/PackageInstaller/res/values-te/strings.xml
index ec52fac0b2cc..0e55e28bf473 100644
--- a/packages/PackageInstaller/res/values-te/strings.xml
+++ b/packages/PackageInstaller/res/values-te/strings.xml
@@ -83,10 +83,10 @@
"మీ భద్రత దృష్ట్యా, ఈ మూలం నుండి తెలియని యాప్లను ఇన్స్టాల్ చేయడానికి మీ టాబ్లెట్ అనుమతించబడదు.""మీ భద్రత దృష్ట్యా, ఈ మూలం నుండి తెలియని యాప్లను ఇన్స్టాల్ చేయడానికి మీ టీవీ అనుమతించబడదు.""మీ భద్రత దృష్ట్యా, ఈ మూలం నుండి తెలియని యాప్లను ఇన్స్టాల్ చేయడానికి మీ ఫోన్ అనుమతించబడదు."
- "తెలియని యాప్లు మీ ఫోన్ పైన, వ్యక్తిగత డేటా పైన దాడి చేయడానికి ఎక్కువగా అవకాశం ఉంటుంది. ఈ యాప్ను ఇన్స్టాల్ చేయడం ద్వారా, దాని వినియోగంతో మీ ఫోన్కు ఏదైనా నష్టం జరిగితే లేదా మీ డేటాను కోల్పోతే అందుకు మీరే బాధ్యత వహిస్తారని అంగీకరిస్తున్నారు."
+ "తెలియని యాప్లు మీ ఫోన్ పైన, వ్యక్తిగత డేటా పైన దాడి చేయడానికి ఎక్కువగా అవకాశం ఉంటుంది. ఈ యాప్ను ఇన్స్టాల్ చేయడం ద్వారా, దాని వినియోగంతో మీ ఫోన్కు ఏదైనా నష్టం జరిగితే లేదా మీ డేటాను కోల్పోతే అందుకు మీరే బాధ్యత వహిస్తారని అంగీకరిస్తున్నారు.""మీ టాబ్లెట్ మరియు వ్యక్తిగత డేటాపై తెలియని యాప్లు దాడి చేయడానికి ఎక్కువ అవకాశం ఉంది. మీరు ఈ యాప్ను ఇన్స్టాల్ చేయడం ద్వారా, దీనిని ఉపయోగించడం వలన మీ టాబ్లెట్కు ఏదైనా హాని జరిగినా లేదా డేటా కోల్పోయినా బాధ్యత మీదేనని అంగీకరిస్తున్నారు.""మీ టీవీ మరియు వ్యక్తిగత డేటాపై తెలియని యాప్లు దాడి చేయడానికి ఎక్కువ అవకాశం ఉంది. మీరు ఈ యాప్ను ఇన్స్టాల్ చేయడం ద్వారా, దీనిని ఉపయోగించడం వలన మీ టీవీకి ఏదైనా హాని జరిగినా లేదా డేటా కోల్పోయినా బాధ్యత మీదేనని అంగీకరిస్తున్నారు."
- "కొనసాగించు"
+ "కొనసాగండి""సెట్టింగ్లు""Wear యాప్లను ఇన్స్టాల్/అన్ఇన్స్టాల్ చేస్తోంది""యాప్ ఇన్స్టాల్ చేయబడిందనే నోటిఫికేషన్"
From 6df13e8b54350943a014c73719be105c008f3645 Mon Sep 17 00:00:00 2001
From: Bill Yi
Date: Tue, 10 Aug 2021 05:21:58 +0000
Subject: [PATCH 013/671] Import translations. DO NOT MERGE ANYWHERE
Auto-generated-cl: translation import
Change-Id: Iac483611bd496e0cfdb54cfffc61d17271fc6789
---
packages/Shell/res/values-te/strings.xml | 24 ++++++++++++------------
1 file changed, 12 insertions(+), 12 deletions(-)
diff --git a/packages/Shell/res/values-te/strings.xml b/packages/Shell/res/values-te/strings.xml
index 989b53e7810d..50b5c8550ef2 100644
--- a/packages/Shell/res/values-te/strings.xml
+++ b/packages/Shell/res/values-te/strings.xml
@@ -18,30 +18,30 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
"షెల్""బగ్ రిపోర్ట్స్"
- "బగ్ నివేదిక #%d ఉత్పాదించబడుతోంది"
- "బగ్ నివేదిక #%d సంగ్రహించబడింది"
- "బగ్ నివేదికకు వివరాలను జోడిస్తోంది"
+ "బగ్ రిపోర్ట్ #%d ఉత్పాదించబడుతోంది"
+ "బగ్ రిపోర్ట్ #%d సంగ్రహించబడింది"
+ "బగ్ రిపోర్ట్కు వివరాలను జోడిస్తోంది""దయచేసి వేచి ఉండండి..."
- "బగ్ నివేదిక త్వరలో ఫోన్లో కనిపిస్తుంది"
- "మీ బగ్ నివేదికను భాగస్వామ్యం చేయడానికి ఎంచుకోండి"
- "మీ బగ్ నివేదికను షేర్ చేయడానికి నొక్కండి"
- "స్క్రీన్షాట్ లేకుండా మీ బగ్ నివేదికను భాగస్వామ్యం చేయడానికి ఎంచుకోండి లేదా స్క్రీన్షాట్ ముగిసేదాకా వేచి ఉండండి"
+ "బగ్ రిపోర్ట్ త్వరలో ఫోన్లో కనిపిస్తుంది"
+ "మీ బగ్ రిపోర్ట్ను భాగస్వామ్యం చేయడానికి ఎంచుకోండి"
+ "మీ బగ్ రిపోర్ట్ను షేర్ చేయడానికి నొక్కండి"
+ "స్క్రీన్షాట్ లేకుండా మీ బగ్ రిపోర్ట్ను భాగస్వామ్యం చేయడానికి ఎంచుకోండి లేదా స్క్రీన్షాట్ ముగిసేదాకా వేచి ఉండండి""స్క్రీన్షాట్ లేకుండా మీ బగ్ నివే. భాగ. చేయడానికి నొక్కండి లేదా స్క్రీన్షాట్ ముగిసేదాకా వేచి ఉండండి""స్క్రీన్షాట్ లేకుండా మీ బగ్ నివే. భాగ. చేయడానికి నొక్కండి లేదా స్క్రీన్షాట్ ముగిసేదాకా వేచి ఉండండి"
- "బగ్ రిపోర్ట్స్లో మీరు గోప్యమైనదిగా పరిగణించే (యాప్ వినియోగం, లొకేషన్ డేటా వంటి) డేటాతో పాటు సిస్టమ్కు సంబంధించిన విభిన్న లాగ్ ఫైల్ల డేటా ఉంటుంది. బగ్ నివేదికలను మీరు విశ్వసించే యాప్లు, వ్యక్తులతో మాత్రమే షేర్ చేయండి."
+ "బగ్ రిపోర్ట్స్లో మీరు గోప్యమైనదిగా పరిగణించే (యాప్ వినియోగం, లొకేషన్ డేటా వంటి) డేటాతో పాటు సిస్టమ్కు సంబంధించిన విభిన్న లాగ్ ఫైళ్ల డేటా ఉంటుంది. బగ్ రిపోర్ట్లను మీరు విశ్వసించే యాప్లు, వ్యక్తులతో మాత్రమే షేర్ చేయండి.""మళ్లీ చూపవద్దు""బగ్ రిపోర్ట్స్"
- "బగ్ నివేదిక ఫైల్ను చదవడం సాధ్యపడలేదు"
- "బగ్ నివేదిక వివరాలను జిప్ ఫైల్కు జోడించడం సాధ్యపడలేదు"
+ "బగ్ రిపోర్ట్ ఫైల్ను చదవడం సాధ్యపడలేదు"
+ "బగ్ రిపోర్ట్ వివరాలను జిప్ ఫైల్కు జోడించడం సాధ్యపడలేదు""పేరు లేనివి""వివరాలు""స్క్రీన్షాట్""స్క్రీన్షాట్ విజయవంతంగా తీయబడింది.""స్క్రీన్షాట్ను తీయడం సాధ్యపడలేదు."
- "బగ్ నివేదిక #%d వివరాలు"
+ "బగ్ రిపోర్ట్ #%d వివరాలు""ఫైల్ పేరు""బగ్ శీర్షిక""బగ్ సారాంశం""సేవ్ చేయి"
- "బగ్ నివేదిక షేర్ చేయండి"
+ "బగ్ రిపోర్ట్ షేర్ చేయండి"
From 2913c06866575b8cf243242a9b02e6d1326c972d Mon Sep 17 00:00:00 2001
From: Bill Yi
Date: Tue, 10 Aug 2021 05:49:22 +0000
Subject: [PATCH 014/671] Import translations. DO NOT MERGE ANYWHERE
Auto-generated-cl: translation import
Change-Id: I216f13733a379541a62e1bb2a2b108be5deabe4a
---
packages/SystemUI/res/values-bs/strings.xml | 2 +-
packages/SystemUI/res/values-de/strings.xml | 2 +-
packages/SystemUI/res/values-eu/strings.xml | 4 ++--
packages/SystemUI/res/values-mr/strings.xml | 2 +-
packages/SystemUI/res/values-te/strings.xml | 20 ++++++++++----------
5 files changed, 15 insertions(+), 15 deletions(-)
diff --git a/packages/SystemUI/res/values-bs/strings.xml b/packages/SystemUI/res/values-bs/strings.xml
index 4cdc00c07afa..2c43df147136 100644
--- a/packages/SystemUI/res/values-bs/strings.xml
+++ b/packages/SystemUI/res/values-bs/strings.xml
@@ -981,7 +981,7 @@
"Nećete imati pristup podacima ni internetu putem mobilnog operatera %s. Internet će biti dostupan samo putem WiFi mreže.""vaš operater""Postavke ne mogu potvrditi vaš odgovor jer aplikacija zaklanja zahtjev za odobrenje."
- "Dozvoliti aplikaciji %1$s prikazivanje isječaka aplikacije %2$s?"
+ "Dozvoliti aplikaciji %1$s da prikazuje isječke aplikacije %2$s?""- Može čitati informacije iz aplikacije %1$s""- Može poduzeti radnje u aplikaciji %1$s""Dozvoli aplikaciji %1$s prikazivanje isječaka iz svake aplikacije"
diff --git a/packages/SystemUI/res/values-de/strings.xml b/packages/SystemUI/res/values-de/strings.xml
index 24bcf9d22102..a1b805b50dbf 100644
--- a/packages/SystemUI/res/values-de/strings.xml
+++ b/packages/SystemUI/res/values-de/strings.xml
@@ -1076,7 +1076,7 @@
"Medien""Du kannst die aktuelle Sitzung ausblenden.""Aktuelle Sitzung kann nicht verborgen werden."
- "Ablehnen"
+ "Ausblenden""Fortsetzen""Einstellungen""Inaktiv – sieh in der App nach"
diff --git a/packages/SystemUI/res/values-eu/strings.xml b/packages/SystemUI/res/values-eu/strings.xml
index 996ae272a53b..c656d96952da 100644
--- a/packages/SystemUI/res/values-eu/strings.xml
+++ b/packages/SystemUI/res/values-eu/strings.xml
@@ -58,7 +58,7 @@
"Ireki %1$s%2$s konektatzen den guztietan""Ireki %1$s%2$s konektatzen den guztietan""USB bidezko arazketa onartu?"
- "Ordenagailuaren RSA gakoaren erreferentzia-gako digitala hau da:\n%1$s"
+ "Ordenagailuaren RSA gakoaren aztarna digitala hau da:\n%1$s""Eman beti ordenagailu honetatik arazteko baimena""Eman baimena""Ez da onartzen USB bidezko arazketa"
@@ -565,7 +565,7 @@
" ""Ireki kredentzial fidagarriak""Administratzaileak sarearen erregistroak aktibatu ditu; horrela, zure gailuko trafikoa gainbegira dezake.\n\nInformazio gehiago lortzeko, jarri administratzailearekin harremanetan."
- "Aplikazio bati VPN konexio bat konfiguratzeko baimena eman diozu.\n\nAplikazio horrek gailuko eta sareko jarduerak kontrola ditzake, mezu elektronikoak, aplikazioak eta webguneak barne."
+ "Aplikazio bati VPN bidezko konexio bat konfiguratzeko baimena eman diozu.\n\nAplikazio horrek gailuko eta sareko jarduerak kontrola ditzake, mezu elektronikoak, aplikazioak eta webguneak barne.""%1$s erakundeak kudeatzen du zure laneko profila.\n\nAdministratzaileak sareko jarduerak kontrola diezazkizuke, besteak beste, posta elektronikoa, aplikazioak eta webguneak.\n\nInformazio gehiago lortzeko, jarri administratzailearekin harremanetan.\n\nHorrez gain, VPN batera zaude konektatuta, eta hark ere kontrola ditzake zure sareko jarduerak.""VPN konexioa""%1$s aplikaziora konektatuta zaude. Aplikazio horrek sarean egiten dituzun jarduerak kontrola ditzake, mezu elektronikoak, aplikazioak eta webguneak barne."
diff --git a/packages/SystemUI/res/values-mr/strings.xml b/packages/SystemUI/res/values-mr/strings.xml
index a0945bcd2033..f08ca07821ef 100644
--- a/packages/SystemUI/res/values-mr/strings.xml
+++ b/packages/SystemUI/res/values-mr/strings.xml
@@ -137,7 +137,7 @@
"व्हॉइस सहाय्य उघडा""कॅमेरा उघडा""रद्द करा"
- "खात्री करा"
+ "कंफर्म करा""पुन्हा प्रयत्न करा""ऑथेंटिकेशन रद्द करण्यासाठी टॅप करा""कृपया पुन्हा प्रयत्न करा"
diff --git a/packages/SystemUI/res/values-te/strings.xml b/packages/SystemUI/res/values-te/strings.xml
index 5910c6b9fe64..a86aa96df55d 100644
--- a/packages/SystemUI/res/values-te/strings.xml
+++ b/packages/SystemUI/res/values-te/strings.xml
@@ -95,7 +95,7 @@
"రికార్డ్ చేస్తున్నప్పుడు, Android సిస్టమ్ మీ స్క్రీన్పై ప్రదర్శించబడిన లేదా మీ పరికరం నుండి ప్లే చేయబడిన ఏ సున్నితమైన సమాచారాన్నైనా క్యాప్చర్ చేయగలదు. ఈ సమాచారంలో, పాస్వర్డ్లు, పేమెంట్ వివరాలు, ఫోటోలు, మెసేజ్లు, ఆడియో ఉంటాయి.""ఆడియోను రికార్డ్ చేయి""పరికరం ఆడియో"
- "మీ పరికరం నుండి వచ్చే సంగీతం, కాల్లు, రింగ్టోన్ల వంటి ధ్వనులు"
+ "మీ పరికరం నుండి వచ్చే సంగీతం, కాల్స్, రింగ్టోన్ల వంటి ధ్వనులు""మైక్రోఫోన్""పరికరం ఆడియో, మైక్రోఫోన్""ప్రారంభించు"
@@ -331,10 +331,10 @@
"%1$s: %2$s""నోటిఫికేషన్ సెట్టింగ్లు""%s సెట్టింగ్లు"
- "స్క్రీన్ స్వయంచాలకంగా తిప్పబడుతుంది."
+ "స్క్రీన్ ఆటోమేటిక్గా తిప్పబడుతుంది.""స్క్రీన్ ల్యాండ్స్కేప్ దృగ్విన్యాసంలో లాక్ చేయబడుతుంది.""స్క్రీన్ పోర్ట్రెయిట్ దృగ్విన్యాసంలో లాక్ చేయబడుతుంది."
- "స్క్రీన్ ఇప్పుడు స్వయంచాలకంగా తిరుగుతుంది."
+ "స్క్రీన్ ఇప్పుడు ఆటోమేటిక్గా తిరుగుతుంది.""స్క్రీన్ ఇప్పుడు ల్యాండ్స్కేప్ దృగ్విన్యాసంలో లాక్ చేయబడింది.""స్క్రీన్ ఇప్పుడు పోర్ట్రెయిట్ దృగ్విన్యాసంలో లాక్ చేయబడింది.""డెజర్ట్ కేస్"
@@ -433,7 +433,7 @@
"ఆపు""పరికరం""యాప్లను మార్చడం కోసం ఎగువకు స్వైప్ చేయండి"
- "యాప్లను శీఘ్రంగా స్విచ్ చేయడానికి కుడి వైపుకు లాగండి"
+ "యాప్లను శీఘ్రంగా స్విచ్ చేయడానికి కుడి వైపునకు లాగండి""స్థూలదృష్టిని టోగుల్ చేయి""ఛార్జ్ చేయబడింది""ఛార్జ్ అవుతోంది"
@@ -446,7 +446,7 @@
"మీరు పేర్కొనే అలారాలు, రిమైండర్లు, ఈవెంట్లు మరియు కాలర్ల నుండి మినహా మరే ఇతర ధ్వనులు మరియు వైబ్రేషన్లతో మీకు అంతరాయం కలగదు. మీరు ఇప్పటికీ సంగీతం, వీడియోలు మరియు గేమ్లతో సహా మీరు ప్లే చేయడానికి ఎంచుకున్నవి ఏవైనా వింటారు.""అలారాలు నుండి మినహా మరే ఇతర ధ్వనులు మరియు వైబ్రేషన్లతో మీకు అంతరాయం కలగదు. మీరు ఇప్పటికీ సంగీతం, వీడియోలు మరియు గేమ్లతో సహా మీరు ప్లే చేయడానికి ఎంచుకున్నవి ఏవైనా వింటారు.""అనుకూలీకరించు"
- "ఇది అలారాలు, సంగీతం, వీడియోలు మరియు గేమ్లతో సహా అన్ని ధ్వనులు మరియు వైబ్రేషన్లను బ్లాక్ చేస్తుంది. మీరు ఇప్పటికీ ఫోన్ కాల్లు చేయగలుగుతారు."
+ "ఇది అలారాలు, సంగీతం, వీడియోలు మరియు గేమ్లతో సహా అన్ని ధ్వనులు మరియు వైబ్రేషన్లను బ్లాక్ చేస్తుంది. మీరు ఇప్పటికీ ఫోన్ కాల్స్ చేయగలుగుతారు.""ఇది అలారాలు, సంగీతం, వీడియోలు మరియు గేమ్లతో సహా అన్ని ధ్వనులు మరియు వైబ్రేషన్లను బ్లాక్ చేస్తుంది.""+%d""తక్కువ అత్యవసర నోటిఫికేషన్లు దిగువన"
@@ -618,7 +618,7 @@
"బ్లూటూత్""డ్యూయల్ మల్టీ టోన్ ఫ్రీక్వెన్సీ""యాక్సెసిబిలిటీ"
- "కాల్లు"
+ "కాల్స్""రింగ్""వైబ్రేట్""మ్యూట్"
@@ -633,7 +633,7 @@
"అన్మ్యూట్ చేయి""వైబ్రేట్""%s వాల్యూమ్ నియంత్రణలు"
- "కాల్లు మరియు నోటిఫికేషన్లు రింగ్ అవుతాయి (%1$s)"
+ "కాల్స్ మరియు నోటిఫికేషన్లు రింగ్ అవుతాయి (%1$s)""మీడియా అవుట్పుట్""ఫోన్ కాల్ అవుట్పుట్""పరికరాలు ఏవీ కనుగొనబడలేదు"
@@ -893,7 +893,7 @@
"శీఘ్ర సెట్టింగ్ల ఎడిటర్.""%1$s నోటిఫికేషన్: %2$s""స్క్రీన్ విభజనతో యాప్ పని చేయకపోవచ్చు."
- "అనువర్తనంలో స్క్రీన్ విభజనకు మద్దతు లేదు."
+ "యాప్లో స్క్రీన్ విభజనకు మద్దతు లేదు.""ప్రత్యామ్నాయ డిస్ప్లేలో యాప్ పని చేయకపోవచ్చు.""ప్రత్యామ్నాయ డిస్ప్లేల్లో ప్రారంభానికి యాప్ మద్దతు లేదు.""సెట్టింగ్లను తెరవండి."
@@ -923,11 +923,11 @@
"పరిమాణం మార్చు""వేడెక్కినందుకు ఫోన్ ఆఫ్ చేయబడింది""మీ ఫోన్ ఇప్పుడు సాధారణంగా పని చేస్తోంది.\nమరింత సమాచారం కోసం ట్యాప్ చేయండి"
- "మీ ఫోన్ చాలా వేడిగా ఉంది, కనుక చల్లబర్చడానికి ఆఫ్ చేయబడింది. మీ ఫోన్ ఇప్పుడు సాధారణంగా పని చేస్తుంది.\n\nమీరు ఇలా చేస్తే మీ ఫోన్ చాలా వేడెక్కవచ్చు:\n • వనరు-ఆధారిత యాప్లు (గేమింగ్, వీడియో లేదా నావిగేషన్ వంటి యాప్లు) ఉపయోగించడం\n • పెద్ద ఫైల్లను డౌన్లోడ్ లేదా అప్లోడ్ చేయడం\n • అధిక ఉష్ణోగ్రతలలో మీ ఫోన్ని ఉపయోగించడం"
+ "మీ ఫోన్ చాలా వేడిగా ఉంది, కనుక చల్లబర్చడానికి ఆఫ్ చేయబడింది. మీ ఫోన్ ఇప్పుడు సాధారణంగా పని చేస్తుంది.\n\nమీరు ఇలా చేస్తే మీ ఫోన్ చాలా వేడెక్కవచ్చు:\n • వనరు-ఆధారిత యాప్లు (గేమింగ్, వీడియో లేదా నావిగేషన్ వంటి యాప్లు) ఉపయోగించడం\n • పెద్ద ఫైళ్లను డౌన్లోడ్ లేదా అప్లోడ్ చేయడం\n • అధిక ఉష్ణోగ్రతలలో మీ ఫోన్ని ఉపయోగించడం""తీసుకోవాల్సిన జాగ్రత్తలు ఏమిటో చూడండి""ఫోన్ వేడెక్కుతోంది""ఫోన్ను చల్లబరిచే క్రమంలో కొన్ని ఫీచర్లు పరిమితం చేయబడ్డాయి.\nమరింత సమాచారం కోసం ట్యాప్ చేయండి"
- "మీ ఫోన్ స్వయంచాలకంగా చల్లబడటానికి ప్రయత్నిస్తుంది. మీరు ఇప్పటికీ మీ ఫోన్ను ఉపయోగించవచ్చు, కానీ దాని పనితీరు నెమ్మదిగా ఉండవచ్చు.\n\nమీ ఫోన్ చల్లబడిన తర్వాత, అది సాధారణ రీతిలో పని చేస్తుంది."
+ "మీ ఫోన్ ఆటోమేటిక్గా చల్లబడటానికి ప్రయత్నిస్తుంది. మీరు ఇప్పటికీ మీ ఫోన్ను ఉపయోగించవచ్చు, కానీ దాని పనితీరు నెమ్మదిగా ఉండవచ్చు.\n\nమీ ఫోన్ చల్లబడిన తర్వాత, అది సాధారణ రీతిలో పని చేస్తుంది.""తీసుకోవాల్సిన జాగ్రత్తలు ఏమిటో చూడండి""ప్లగ్ నుండి ఛార్జర్ తీసివేయండి""ఈ పరికరాన్ని ఛార్జ్ చేయడంలో సమస్య ఉంది. పవర్ అడాప్టర్ను ప్లగ్ నుండి తీసివేసి, కేబుల్ ఏమైనా వేడిగా అయితే తగిన జాగ్రత్తలు తీసుకోండి."
From 529aa79d317d24ca3f346bebe968494f358d9ede Mon Sep 17 00:00:00 2001
From: Bill Yi
Date: Tue, 10 Aug 2021 05:51:55 +0000
Subject: [PATCH 015/671] Import translations. DO NOT MERGE ANYWHERE
Auto-generated-cl: translation import
Change-Id: Ibb8bd94ca734f2813a90827e3bf70fa41e312873
---
packages/SystemUI/res/values-te-ldrtl/strings.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/packages/SystemUI/res/values-te-ldrtl/strings.xml b/packages/SystemUI/res/values-te-ldrtl/strings.xml
index 1c1b56274c8e..94bdbcf19038 100644
--- a/packages/SystemUI/res/values-te-ldrtl/strings.xml
+++ b/packages/SystemUI/res/values-te-ldrtl/strings.xml
@@ -19,5 +19,5 @@
- "యాప్లను శీఘ్రంగా స్విచ్ చేయడానికి ఎడమ వైపుకు లాగండి"
+ "యాప్లను శీఘ్రంగా స్విచ్ చేయడానికి ఎడమ వైపునకు లాగండి"
From e19a11cf6fdafd9e9a75bc65f6c3a498a4ff687e Mon Sep 17 00:00:00 2001
From: Shinru Han
Date: Tue, 10 Aug 2021 18:27:25 +0800
Subject: [PATCH 016/671] Allow negative value for
CorrelationVector#samplingStartM
Bug: 195934893
Test: atest ctsLocationPrivilegedTestCases
Change-Id: I255e118cabf274811b57e88a35faf8c9e697d8ae
---
location/java/android/location/CorrelationVector.java | 2 --
1 file changed, 2 deletions(-)
diff --git a/location/java/android/location/CorrelationVector.java b/location/java/android/location/CorrelationVector.java
index 718977ff4296..5493e2579225 100644
--- a/location/java/android/location/CorrelationVector.java
+++ b/location/java/android/location/CorrelationVector.java
@@ -94,8 +94,6 @@ public final class CorrelationVector implements Parcelable {
"FrequencyOffsetMetersPerSecond must be non-negative (greater than or equal to 0)");
Preconditions.checkArgument(builder.mSamplingWidthMeters > 0.0,
"SamplingWidthMeters must be positive (greater than 0)");
- Preconditions.checkArgument(builder.mSamplingStartMeters >= 0.0,
- "SamplingStartMeters must be non-negative (greater than or equal to 0)");
mMagnitude = builder.mMagnitude;
mFrequencyOffsetMetersPerSecond = builder.mFrequencyOffsetMetersPerSecond;
mSamplingWidthMeters = builder.mSamplingWidthMeters;
From 90397d79ddbbb2cd67b7ea68dbd5329f2ce398fb Mon Sep 17 00:00:00 2001
From: Bill Yi
Date: Tue, 10 Aug 2021 14:03:13 +0000
Subject: [PATCH 017/671] Import translations. DO NOT MERGE ANYWHERE
Auto-generated-cl: translation import
Change-Id: I9fd6985c3ae020e58c35b76709cdd91cb276279a
---
packages/SettingsLib/res/values-hi/strings.xml | 2 +-
packages/SettingsLib/res/values-ta/strings.xml | 2 +-
packages/SettingsLib/res/values-te/strings.xml | 16 ++++++++--------
3 files changed, 10 insertions(+), 10 deletions(-)
diff --git a/packages/SettingsLib/res/values-hi/strings.xml b/packages/SettingsLib/res/values-hi/strings.xml
index 5107e62f1cc1..7b667683c842 100644
--- a/packages/SettingsLib/res/values-hi/strings.xml
+++ b/packages/SettingsLib/res/values-hi/strings.xml
@@ -512,7 +512,7 @@
"कनेक्ट करने में समस्या हो रही है. डिवाइस को बंद करके चालू करें""वायर वाला ऑडियो डिवाइस""सहायता और सुझाव"
- "डिवाइस की मेमोरी"
+ "डिवाइस का स्टोरेज""शेयर किया गया डेटा""शेयर किए गए डेटा को देखें और उसमें बदलाव करें""इस उपयोगकर्ता के साथ किसी तरह का डेटा शेयर नहीं किया गया है."
diff --git a/packages/SettingsLib/res/values-ta/strings.xml b/packages/SettingsLib/res/values-ta/strings.xml
index 1a454b65ce90..a03088250cc5 100644
--- a/packages/SettingsLib/res/values-ta/strings.xml
+++ b/packages/SettingsLib/res/values-ta/strings.xml
@@ -97,7 +97,7 @@
"செவித்துணை கருவிகளுடன் இணைக்கப்பட்டது""மீடியா ஆடியோவுடன் இணைக்கப்பட்டது""மொபைல் ஆடியோவுடன் இணைக்கப்பட்டது"
- "கோப்பைப் பரிமாற்றும் சேவையகத்துடன் இணைக்கப்பட்டது"
+ "ஃபைலைப் பரிமாற்றும் சேவையகத்துடன் இணைக்கப்பட்டது""வரைபடத்துடன் இணைக்கப்பட்டது""SAP உடன் இணைக்கப்பட்டது""கோப்பு இடமாற்றும் சேவையகத்துடன் இணைக்கப்படவில்லை"
diff --git a/packages/SettingsLib/res/values-te/strings.xml b/packages/SettingsLib/res/values-te/strings.xml
index e2351dc158da..47dd67c664d3 100644
--- a/packages/SettingsLib/res/values-te/strings.xml
+++ b/packages/SettingsLib/res/values-te/strings.xml
@@ -33,11 +33,11 @@
"\'%1$s\'కు కనెక్ట్ చేయడం సాధ్యపడదు""పాస్వర్డ్ను చెక్ చేసి, మళ్లీ ప్రయత్నించండి""పరిధిలో లేదు"
- "స్వయంచాలకంగా కనెక్ట్ కాదు"
+ "ఆటోమేటిక్గా కనెక్ట్ కాదు""ఇంటర్నెట్ యాక్సెస్ లేదు""%1$s ద్వారా సేవ్ చేయబడింది"
- "%1$s ద్వారా స్వయంచాలకంగా కనెక్ట్ చేయబడింది"
- "నెట్వర్క్ రేటింగ్ ప్రదాత ద్వారా స్వయంచాలకంగా కనెక్ట్ చేయబడింది"
+ "%1$s ద్వారా ఆటోమేటిక్గా కనెక్ట్ చేయబడింది"
+ "నెట్వర్క్ రేటింగ్ ప్రదాత ద్వారా ఆటోమేటిక్గా కనెక్ట్ చేయబడింది""%1$s ద్వారా కనెక్ట్ చేయబడింది""%1$s ద్వారా కనెక్ట్ చేయబడింది""%1$s ద్వారా అందుబాటులో ఉంది"
@@ -82,7 +82,7 @@
"L: %1$s బ్యాటరీ, R: %2$s బ్యాటరీ""యాక్టివ్గా ఉంది""మీడియా ఆడియో"
- "ఫోన్ కాల్లు"
+ "ఫోన్ కాల్స్""ఫైల్ బదిలీ""ఇన్పుట్ పరికరం""ఇంటర్నెట్ యాక్సెస్"
@@ -300,7 +300,7 @@
"ఎల్లప్పుడూ మొబైల్ డేటాను యాక్టివ్గా ఉంచు, Wi‑Fi యాక్టివ్గా ఉన్నా కూడా (వేగవంతమైన నెట్వర్క్ మార్పు కోసం).""అందుబాటులో ఉంటే టెథెరింగ్ హార్డ్వేర్ వేగవృద్ధిని ఉపయోగించండి""USB డీబగ్గింగ్ను అనుమతించాలా?"
- "USB డీబగ్గింగ్ అనేది అభివృద్ధి ప్రయోజనాల కోసం మాత్రమే ఉద్దేశించబడింది. మీ కంప్యూటర్ మరియు మీ పరికరం మధ్య డేటాను కాపీ చేయడానికి, నోటిఫికేషన్ లేకుండా మీ పరికరంలో అనువర్తనాలను ఇన్స్టాల్ చేయడానికి మరియు లాగ్ డేటాను చదవడానికి దీన్ని ఉపయోగించండి."
+ "USB డీబగ్గింగ్ అనేది అభివృద్ధి ప్రయోజనాల కోసం మాత్రమే ఉద్దేశించబడింది. మీ కంప్యూటర్ మరియు మీ పరికరం మధ్య డేటాను కాపీ చేయడానికి, నోటిఫికేషన్ లేకుండా మీ పరికరంలో యాప్లను ఇన్స్టాల్ చేయడానికి మరియు లాగ్ డేటాను చదవడానికి దీన్ని ఉపయోగించండి.""వైర్లెస్ డీబగ్గింగ్ను అనుమతించాలా?""వైర్లెస్ డీబగ్గింగ్ అనేది అభివృద్ధి ప్రయోజనాల కోసం మాత్రమే ఉద్దేశించబడింది. మీ కంప్యూటర్, పరికరాల మధ్య డేటాను కాపీ చేయడానికి, నోటిఫికేషన్ లేకుండా మీ పరికరంలో యాప్లను ఇన్స్టాల్ చేయడానికి, లాగ్ డేటాను చదవడానికి దీన్ని ఉపయోగించండి.""మీరు గతంలో ప్రామాణీకరించిన అన్ని కంప్యూటర్ల నుండి USB డీబగ్గింగ్కు ప్రాప్యతను ఉపసంహరించాలా?"
@@ -480,7 +480,7 @@
"సక్రియ ఇన్పుట్ పద్ధతులు""సిస్టమ్ భాషలను ఉపయోగించు""%1$s యొక్క సెట్టింగ్లను తెరవడం విఫలమైంది"
- "ఈ ఇన్పుట్ పద్ధతి మీరు టైప్ చేసే మొత్తం వచనాన్ని అలాగే పాస్వర్డ్లు మరియు క్రెడిట్ కార్డు నంబర్ల వంటి వ్యక్తిగత డేటాను సేకరించగలదు. ఇది %1$s అనువర్తనంలో అందించబడుతుంది. ఈ ఇన్పుట్ పద్ధతిని ఉపయోగించాలా?"
+ "ఈ ఇన్పుట్ పద్ధతి మీరు టైప్ చేసే మొత్తం వచనాన్ని అలాగే పాస్వర్డ్లు మరియు క్రెడిట్ కార్డు నంబర్ల వంటి వ్యక్తిగత డేటాను సేకరించగలదు. ఇది %1$s యాప్లో అందించబడుతుంది. ఈ ఇన్పుట్ పద్ధతిని ఉపయోగించాలా?""గమనిక: రీబూట్ చేసాక, మీరు మీ ఫోన్ను అన్లాక్ చేసే వరకు ఈ యాప్ ప్రారంభం కాదు""IMS నమోదు స్థితి""నమోదు చేయబడింది"
@@ -526,8 +526,8 @@
"లీజు గడువు %sతో ముగుస్తుంది""షేర్ చేసిన డేటాను తొలగించు""మీరు ఖచ్చితంగా ఈ షేర్ చేసిన డేటాను తొలగించాలనుకుంటున్నారా?"
- "వినియోగదారులు వారి స్వంత అనువర్తనాలను మరియు కంటెంట్ను కలిగి ఉన్నారు"
- "మీరు మీ ఖాతా నుండి అనువర్తనాలకు మరియు కంటెంట్కు ప్రాప్యతను పరిమితం చేయవచ్చు"
+ "వినియోగదారులు వారి స్వంత యాప్లను మరియు కంటెంట్ను కలిగి ఉన్నారు"
+ "మీరు మీ ఖాతా నుండి యాప్లకు మరియు కంటెంట్కు ప్రాప్యతను పరిమితం చేయవచ్చు""యూజర్""పరిమితం చేయబడిన ప్రొఫైల్""కొత్త వినియోగదారుని జోడించాలా?"
From 8f71a21677fc9d8887ec1aca35fb4f0afecec638 Mon Sep 17 00:00:00 2001
From: Mady Mellor
Date: Wed, 14 Jul 2021 13:15:19 -0700
Subject: [PATCH 018/671] [QPR1] Fix dismiss not working in landscape
In stack animation controller only one target would ever
be added so when the target is re-created after rotating
then it wouldn't be used.
Test: - have some bubbles, drag them around, rotate device, try to
dismiss them => they can be dismissed in landscape
- get more bubbles, rotate back to portrait, try to dismiss
them => they can be dismissed in portrait
- drag the stack around the edges of the screen and verify that
the only magnetic spot is where the dismiss target is
Fixes: 193008696
Change-Id: I6b24b1f9d301d37749dc67c95392fd6c8451df00
Merged-In: I6b24b1f9d301d37749dc67c95392fd6c8451df00
---
.../wm/shell/bubbles/BubbleStackView.java | 21 +++++++------------
.../animation/StackAnimationController.java | 7 ++-----
.../common/magnetictarget/MagnetizedObject.kt | 7 +++++++
3 files changed, 17 insertions(+), 18 deletions(-)
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleStackView.java b/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleStackView.java
index c0df06f2954f..ac97c8f80617 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleStackView.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleStackView.java
@@ -576,20 +576,17 @@ public class BubbleStackView extends FrameLayout
mBubbleContainer.setActiveController(mStackAnimationController);
hideFlyoutImmediate();
- if (!mPositioner.showingInTaskbar()) {
- // Also, save the magnetized stack so we can dispatch touch events to it.
- mMagnetizedObject = mStackAnimationController.getMagnetizedStack(
- mMagneticTarget);
- mMagnetizedObject.setMagnetListener(mStackMagnetListener);
- } else {
+ if (mPositioner.showingInTaskbar()) {
// In taskbar, the stack isn't draggable so we shouldn't dispatch touch events.
mMagnetizedObject = null;
+ } else {
+ // Save the magnetized stack so we can dispatch touch events to it.
+ mMagnetizedObject = mStackAnimationController.getMagnetizedStack();
+ mMagnetizedObject.clearAllTargets();
+ mMagnetizedObject.addTarget(mMagneticTarget);
+ mMagnetizedObject.setMagnetListener(mStackMagnetListener);
}
- // Also, save the magnetized stack so we can dispatch touch events to it.
- mMagnetizedObject = mStackAnimationController.getMagnetizedStack(mMagneticTarget);
- mMagnetizedObject.setMagnetListener(mStackMagnetListener);
-
mIsDraggingStack = true;
// Cancel animations to make the stack temporarily invisible, since we're now
@@ -881,7 +878,6 @@ public class BubbleStackView extends FrameLayout
mRelativeStackPositionBeforeRotation = null;
}
- setUpDismissView();
if (mIsExpanded) {
// Re-draw bubble row and pointer for new orientation.
beforeExpandedViewAnimation();
@@ -1043,10 +1039,9 @@ public class BubbleStackView extends FrameLayout
contentResolver, "bubble_dismiss_radius", mBubbleSize * 2 /* default */);
// Save the MagneticTarget instance for the newly set up view - we'll add this to the
- // MagnetizedObjects.
+ // MagnetizedObjects when the dismiss view gets shown.
mMagneticTarget = new MagnetizedObject.MagneticTarget(
mDismissView.getCircle(), dismissRadius);
-
mBubbleContainer.bringToFront();
}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/animation/StackAnimationController.java b/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/animation/StackAnimationController.java
index 0802fb59a008..636e1452aa9b 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/animation/StackAnimationController.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/animation/StackAnimationController.java
@@ -1024,11 +1024,9 @@ public class StackAnimationController extends
}
/**
- * Returns the {@link MagnetizedObject} instance for the bubble stack, with the provided
- * {@link MagnetizedObject.MagneticTarget} added as a target.
+ * Returns the {@link MagnetizedObject} instance for the bubble stack.
*/
- public MagnetizedObject getMagnetizedStack(
- MagnetizedObject.MagneticTarget target) {
+ public MagnetizedObject getMagnetizedStack() {
if (mMagnetizedStack == null) {
mMagnetizedStack = new MagnetizedObject(
mLayout.getContext(),
@@ -1053,7 +1051,6 @@ public class StackAnimationController extends
loc[1] = (int) mStackPosition.y;
}
};
- mMagnetizedStack.addTarget(target);
mMagnetizedStack.setHapticsEnabled(true);
mMagnetizedStack.setFlingToTargetMinVelocity(FLING_TO_DISMISS_MIN_VELOCITY);
}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/common/magnetictarget/MagnetizedObject.kt b/libs/WindowManager/Shell/src/com/android/wm/shell/common/magnetictarget/MagnetizedObject.kt
index 9f6dd1f27b62..9e012598554b 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/common/magnetictarget/MagnetizedObject.kt
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/common/magnetictarget/MagnetizedObject.kt
@@ -302,6 +302,13 @@ abstract class MagnetizedObject(
associatedTargets.remove(target)
}
+ /**
+ * Removes all associated targets from this object.
+ */
+ fun clearAllTargets() {
+ associatedTargets.clear()
+ }
+
/**
* Provide this method with all motion events that move the magnetized object. If the
* location of the motion events moves within the magnetic field of a target, or indicate a
From 55479777dd42067ff5e8830454c18f8bb817757d Mon Sep 17 00:00:00 2001
From: Mady Mellor
Date: Thu, 29 Jul 2021 14:29:50 -0700
Subject: [PATCH 019/671] DO NOT MERGE [QPR1] Fix QS having a white when opened
over bubbles
mBehindTint now controls the background of quick settings.
I think this wasn't the case in R when the bubble state
was written & it was never updated appropriately whenever
that changed.
Seems like most of the code in the unlocked state should
apply to bubbles so just copied it in and updated the
test.
Test: atest ScrimControllerTest
Bug: 191338071
Change-Id: I90fa26760d346a67d42b22d8e562d5b4c66f3017
---
.../systemui/statusbar/phone/ScrimState.java | 38 ++++++++++++++++---
.../statusbar/phone/ScrimControllerTest.java | 2 +-
2 files changed, 33 insertions(+), 7 deletions(-)
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimState.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimState.java
index 06811932ac0c..a73fec8455d5 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimState.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimState.java
@@ -278,15 +278,41 @@ public enum ScrimState {
BUBBLE_EXPANDED {
@Override
public void prepare(ScrimState previousState) {
- mFrontTint = Color.TRANSPARENT;
- mBehindTint = Color.TRANSPARENT;
- mBubbleTint = Color.BLACK;
+ mBehindAlpha = mClipQsScrim ? 1 : 0;
+ mNotifAlpha = 0;
+ mFrontAlpha = 0;
- mFrontAlpha = 0f;
- mBehindAlpha = mDefaultScrimAlpha;
+ mAnimationDuration = mKeyguardFadingAway
+ ? mKeyguardFadingAwayDuration
+ : StatusBar.FADE_KEYGUARD_DURATION;
+
+ mAnimateChange = !mLaunchingAffordanceWithPreview;
+
+ mFrontTint = Color.TRANSPARENT;
+ mBehindTint = Color.BLACK;
+ mBubbleTint = Color.BLACK;
+ mBlankScreen = false;
+
+ if (previousState == ScrimState.AOD) {
+ // Set all scrims black, before they fade transparent.
+ updateScrimColor(mScrimInFront, 1f /* alpha */, Color.BLACK /* tint */);
+ updateScrimColor(mScrimBehind, 1f /* alpha */, Color.BLACK /* tint */);
+ if (mScrimForBubble != null) {
+ updateScrimColor(mScrimForBubble, 1f /* alpha */, Color.BLACK /* tint */);
+ }
+
+ // Scrims should still be black at the end of the transition.
+ mFrontTint = Color.BLACK;
+ mBehindTint = Color.BLACK;
+ mBubbleTint = Color.BLACK;
+ mBlankScreen = true;
+ }
+
+ if (mClipQsScrim) {
+ updateScrimColor(mScrimBehind, 1f /* alpha */, Color.BLACK);
+ }
mAnimationDuration = ScrimController.ANIMATION_DURATION;
- mBlankScreen = false;
}
};
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/ScrimControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/ScrimControllerTest.java
index 678b193073c2..73164fa35fcc 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/ScrimControllerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/ScrimControllerTest.java
@@ -621,7 +621,7 @@ public class ScrimControllerTest extends SysuiTestCase {
assertScrimTinted(Map.of(
mScrimInFront, false,
- mScrimBehind, false,
+ mScrimBehind, true,
mScrimForBubble, true
));
From 6c582e973d2bb8eb03edf974dd3ce2222837aaf1 Mon Sep 17 00:00:00 2001
From: Joe Bolinger
Date: Tue, 10 Aug 2021 14:20:12 -0700
Subject: [PATCH 020/671] Remove new task flag when launching unicorn
enrollment.
Bug: 196103931
Test: manual (enroll via settings)
Change-Id: I35aae96e4ebb0c13bc567bb926f2e7a549f554ba
---
.../enterprise/BiometricActionDisabledByAdminController.java | 1 -
1 file changed, 1 deletion(-)
diff --git a/packages/SettingsLib/src/com/android/settingslib/enterprise/BiometricActionDisabledByAdminController.java b/packages/SettingsLib/src/com/android/settingslib/enterprise/BiometricActionDisabledByAdminController.java
index e0339dacf5ac..d205eaab6656 100644
--- a/packages/SettingsLib/src/com/android/settingslib/enterprise/BiometricActionDisabledByAdminController.java
+++ b/packages/SettingsLib/src/com/android/settingslib/enterprise/BiometricActionDisabledByAdminController.java
@@ -65,7 +65,6 @@ public class BiometricActionDisabledByAdminController extends BaseActionDisabled
Log.d(TAG, "Positive button clicked, component: " + enforcedAdmin.component);
final Intent intent = new Intent(ACTION_LEARN_MORE)
.putExtra(EXTRA_SETTING_KEY, EXTRA_SETTING_VALUE)
- .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
.setPackage(enforcedAdmin.component.getPackageName());
context.startActivity(intent);
};
From fef9b3757c4a31f60592f25c4e056f9e2ae9444b Mon Sep 17 00:00:00 2001
From: Winson
Date: Thu, 8 Jul 2021 12:07:08 -0700
Subject: [PATCH 021/671] Unexport all PackageInstaller receivers
All of PackageInstaller's declared receivers receive system broadcasts,
so they do not need to be exported. Leaving them exported opens up
vulnerabilities for apps to launch them and execute functionality that
PackageInstaller includes.
Bug: 191283525
Test: manual, verify receivers still work
Test: atest com.android.packageinstaller.test.ExportedComponentTest
Merged-In: I782fc21c848831a2a4aeab736cd47ad45781b290
Change-Id: I782fc21c848831a2a4aeab736cd47ad45781b290
(cherry picked from commit 0806568d4133e1dc736ebcc45f62655165366a9e)
---
packages/PackageInstaller/AndroidManifest.xml | 8 +--
packages/PackageInstaller/TEST_MAPPING | 5 +-
.../packageinstaller/Android.bp | 39 +++++++++++++++
.../packageinstaller/AndroidManifest.xml | 29 +++++++++++
.../packageinstaller/AndroidTest.xml | 29 +++++++++++
.../test/ExportedComponentTest.kt | 50 +++++++++++++++++++
6 files changed, 155 insertions(+), 5 deletions(-)
create mode 100644 services/tests/PackageManager/packageinstaller/Android.bp
create mode 100644 services/tests/PackageManager/packageinstaller/AndroidManifest.xml
create mode 100644 services/tests/PackageManager/packageinstaller/AndroidTest.xml
create mode 100644 services/tests/PackageManager/packageinstaller/src/com/android/packageinstaller/test/ExportedComponentTest.kt
diff --git a/packages/PackageInstaller/AndroidManifest.xml b/packages/PackageInstaller/AndroidManifest.xml
index 48cdf1647d86..197b7b2b0eaf 100644
--- a/packages/PackageInstaller/AndroidManifest.xml
+++ b/packages/PackageInstaller/AndroidManifest.xml
@@ -31,7 +31,7 @@
android:directBootAware="true">
+ android:exported="false">
@@ -76,7 +76,7 @@
+ android:exported="false">
@@ -106,14 +106,14 @@
+ android:exported="false">
+ android:exported="false">
diff --git a/packages/PackageInstaller/TEST_MAPPING b/packages/PackageInstaller/TEST_MAPPING
index 5d7b9bb36f75..cef9014ec229 100644
--- a/packages/PackageInstaller/TEST_MAPPING
+++ b/packages/PackageInstaller/TEST_MAPPING
@@ -19,6 +19,9 @@
},
{
"name": "CtsPackageUninstallTestCases"
+ },
+ {
+ "name": "PackageInstallerTests"
}
]
-}
\ No newline at end of file
+}
diff --git a/services/tests/PackageManager/packageinstaller/Android.bp b/services/tests/PackageManager/packageinstaller/Android.bp
new file mode 100644
index 000000000000..35d754b4adc5
--- /dev/null
+++ b/services/tests/PackageManager/packageinstaller/Android.bp
@@ -0,0 +1,39 @@
+// Copyright (C) 2021 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 {
+ // See: http://go/android-license-faq
+ // A large-scale-change added 'default_applicable_licenses' to import
+ // all of the 'license_kinds' from "frameworks_base_license"
+ // to get the below license kinds:
+ // SPDX-license-identifier-Apache-2.0
+ default_applicable_licenses: ["frameworks_base_license"],
+}
+
+android_test {
+ name: "PackageInstallerTests",
+ srcs: [
+ "src/**/*.java",
+ "src/**/*.kt",
+ ],
+ static_libs: [
+ "androidx.test.rules",
+ "androidx.test.runner",
+ "junit",
+ "kotlin-test",
+ "truth-prebuilt",
+ ],
+ platform_apis: true,
+ test_suites: ["device-tests"],
+}
diff --git a/services/tests/PackageManager/packageinstaller/AndroidManifest.xml b/services/tests/PackageManager/packageinstaller/AndroidManifest.xml
new file mode 100644
index 000000000000..d7062587c4bc
--- /dev/null
+++ b/services/tests/PackageManager/packageinstaller/AndroidManifest.xml
@@ -0,0 +1,29 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/services/tests/PackageManager/packageinstaller/AndroidTest.xml b/services/tests/PackageManager/packageinstaller/AndroidTest.xml
new file mode 100644
index 000000000000..c39285ffca38
--- /dev/null
+++ b/services/tests/PackageManager/packageinstaller/AndroidTest.xml
@@ -0,0 +1,29 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/services/tests/PackageManager/packageinstaller/src/com/android/packageinstaller/test/ExportedComponentTest.kt b/services/tests/PackageManager/packageinstaller/src/com/android/packageinstaller/test/ExportedComponentTest.kt
new file mode 100644
index 000000000000..d7d2726c1583
--- /dev/null
+++ b/services/tests/PackageManager/packageinstaller/src/com/android/packageinstaller/test/ExportedComponentTest.kt
@@ -0,0 +1,50 @@
+/*
+ * Copyright (C) 2021 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.packageinstaller.test
+
+import android.content.Context
+import android.content.Intent
+import android.content.pm.PackageManager
+import android.net.Uri
+import androidx.test.InstrumentationRegistry
+import com.google.common.truth.Truth.assertThat
+import com.google.common.truth.Truth.assertWithMessage
+import org.junit.Test
+
+class ExportedComponentTest {
+
+ private val context: Context = InstrumentationRegistry.getContext()
+
+ @Test
+ fun verifyNoExportedReceivers() {
+ val intent = Intent(Intent.ACTION_INSTALL_PACKAGE).apply {
+ data = Uri.parse("content://mockForTest")
+ }
+ val packageInstallers = context.packageManager.queryIntentActivities(intent,
+ PackageManager.MATCH_DEFAULT_ONLY or PackageManager.MATCH_DISABLED_COMPONENTS)
+ .map { it.activityInfo.packageName }
+ .distinct()
+ .map { context.packageManager.getPackageInfo(it, PackageManager.GET_RECEIVERS) }
+
+ assertThat(packageInstallers).isNotEmpty()
+
+ packageInstallers.forEach {
+ val exported = it.receivers.filter { it.exported }
+ assertWithMessage("Receivers should not be exported").that(exported).isEmpty()
+ }
+ }
+}
From 5cf033ccb7b5e07fbe7bbfa75bbec490386122b9 Mon Sep 17 00:00:00 2001
From: Emilian Peev
Date: Tue, 10 Aug 2021 15:23:55 -0700
Subject: [PATCH 022/671] Camera: Return sequence id for advanced extension
requests
Allow 'IRequestProcessorImpl' to return the camera sequence id
in response to capture requests.
Bug: 196090349
Test: atest -c
cts/tests/camera/src/android/hardware/camera2/cts/CameraExtensionSessionTest.java
Change-Id: I3d67e4ba1b4503cf71c31751920e916d014ef3ab
---
.../extension/IRequestProcessorImpl.aidl | 6 +++---
.../CameraAdvancedExtensionSessionImpl.java | 18 +++++++++---------
.../CameraExtensionsProxyService.java | 10 +++++-----
3 files changed, 17 insertions(+), 17 deletions(-)
diff --git a/core/java/android/hardware/camera2/extension/IRequestProcessorImpl.aidl b/core/java/android/hardware/camera2/extension/IRequestProcessorImpl.aidl
index 52595a8c5a2d..88b03a472c41 100644
--- a/core/java/android/hardware/camera2/extension/IRequestProcessorImpl.aidl
+++ b/core/java/android/hardware/camera2/extension/IRequestProcessorImpl.aidl
@@ -24,9 +24,9 @@ import android.hardware.camera2.extension.Request;
interface IRequestProcessorImpl
{
void setImageProcessor(in OutputConfigId outputConfigId, in IImageProcessorImpl imageProcessor);
- boolean submit(in Request request, in IRequestCallback callback);
- boolean submitBurst(in List requests, in IRequestCallback callback);
- boolean setRepeating(in Request request, in IRequestCallback callback);
+ int submit(in Request request, in IRequestCallback callback);
+ int submitBurst(in List requests, in IRequestCallback callback);
+ int setRepeating(in Request request, in IRequestCallback callback);
void abortCaptures();
void stopRepeating();
}
diff --git a/core/java/android/hardware/camera2/impl/CameraAdvancedExtensionSessionImpl.java b/core/java/android/hardware/camera2/impl/CameraAdvancedExtensionSessionImpl.java
index 02245e49e611..8da6551f3d15 100644
--- a/core/java/android/hardware/camera2/impl/CameraAdvancedExtensionSessionImpl.java
+++ b/core/java/android/hardware/camera2/impl/CameraAdvancedExtensionSessionImpl.java
@@ -864,14 +864,15 @@ public final class CameraAdvancedExtensionSessionImpl extends CameraExtensionSes
}
@Override
- public boolean submit(Request request, IRequestCallback callback) {
+ public int submit(Request request, IRequestCallback callback) {
ArrayList captureList = new ArrayList<>();
captureList.add(request);
return submitBurst(captureList, callback);
}
@Override
- public boolean submitBurst(List requests, IRequestCallback callback) {
+ public int submitBurst(List requests, IRequestCallback callback) {
+ int seqId = -1;
synchronized (mInterfaceLock) {
try {
CaptureCallbackHandler captureCallback = new CaptureCallbackHandler(callback);
@@ -880,37 +881,36 @@ public final class CameraAdvancedExtensionSessionImpl extends CameraExtensionSes
captureRequests.add(initializeCaptureRequest(mCameraDevice, request,
mCameraConfigMap));
}
- mCaptureSession.captureBurstRequests(captureRequests,
+ seqId = mCaptureSession.captureBurstRequests(captureRequests,
new CameraExtensionUtils.HandlerExecutor(mHandler), captureCallback);
} catch (CameraAccessException e) {
Log.e(TAG, "Failed to submit capture requests!");
- return false;
} catch (IllegalStateException e) {
Log.e(TAG, "Capture session closed!");
}
}
- return true;
+ return seqId;
}
@Override
- public boolean setRepeating(Request request, IRequestCallback callback) {
+ public int setRepeating(Request request, IRequestCallback callback) {
+ int seqId = -1;
synchronized (mInterfaceLock) {
try {
CaptureRequest repeatingRequest = initializeCaptureRequest(mCameraDevice,
request, mCameraConfigMap);
CaptureCallbackHandler captureCallback = new CaptureCallbackHandler(callback);
- mCaptureSession.setSingleRepeatingRequest(repeatingRequest,
+ seqId = mCaptureSession.setSingleRepeatingRequest(repeatingRequest,
new CameraExtensionUtils.HandlerExecutor(mHandler), captureCallback);
} catch (CameraAccessException e) {
Log.e(TAG, "Failed to enable repeating request!");
- return false;
} catch (IllegalStateException e) {
Log.e(TAG, "Capture session closed!");
}
}
- return true;
+ return seqId;
}
@Override
diff --git a/packages/services/CameraExtensionsProxy/src/com/android/cameraextensions/CameraExtensionsProxyService.java b/packages/services/CameraExtensionsProxy/src/com/android/cameraextensions/CameraExtensionsProxyService.java
index 561d079cb984..b0893cc360b7 100644
--- a/packages/services/CameraExtensionsProxy/src/com/android/cameraextensions/CameraExtensionsProxyService.java
+++ b/packages/services/CameraExtensionsProxy/src/com/android/cameraextensions/CameraExtensionsProxyService.java
@@ -970,14 +970,14 @@ public class CameraExtensionsProxyService extends Service {
}
@Override
- public boolean submit(Request request, Callback callback) {
+ public int submit(Request request, Callback callback) {
ArrayList requests = new ArrayList<>();
requests.add(request);
return submit(requests, callback);
}
@Override
- public boolean submit(List requests, Callback callback) {
+ public int submit(List requests, Callback callback) {
ArrayList captureRequests =
new ArrayList<>();
int requestId = 0;
@@ -992,11 +992,11 @@ public class CameraExtensionsProxyService extends Service {
} catch (RemoteException e) {
Log.e(TAG, "Failed to submit request due to remote exception!");
}
- return false;
+ return -1;
}
@Override
- public boolean setRepeating(Request request, Callback callback) {
+ public int setRepeating(Request request, Callback callback) {
try {
ArrayList requests = new ArrayList<>();
requests.add(request);
@@ -1007,7 +1007,7 @@ public class CameraExtensionsProxyService extends Service {
Log.e(TAG, "Failed to submit repeating request due to remote exception!");
}
- return false;
+ return -1;
}
@Override
From a0ced2aa9ec636417d085696c9274d6cd17713a0 Mon Sep 17 00:00:00 2001
From: Emilian Peev
Date: Tue, 10 Aug 2021 17:07:17 -0700
Subject: [PATCH 023/671] Camera: Initialize the forward processor along with
the repeating pipeline
Some preview extensions of the image processor type expect to recevive
'onOutputSurface' calls before the session is enabled by 'onEnableSession'.
Bug: 187341271
Test: atest -c
cts/tests/camera/src/android/hardware/camera2/cts/CameraExtensionSessionTest.java
Change-Id: I67147ec24553cf87d23e33c63692fa7e59c57e5f
---
.../hardware/camera2/impl/CameraExtensionSessionImpl.java | 1 +
1 file changed, 1 insertion(+)
diff --git a/core/java/android/hardware/camera2/impl/CameraExtensionSessionImpl.java b/core/java/android/hardware/camera2/impl/CameraExtensionSessionImpl.java
index ecd24914c566..71047af69b87 100644
--- a/core/java/android/hardware/camera2/impl/CameraExtensionSessionImpl.java
+++ b/core/java/android/hardware/camera2/impl/CameraExtensionSessionImpl.java
@@ -251,6 +251,7 @@ public final class CameraExtensionSessionImpl extends CameraExtensionSession {
CameraExtensionCharacteristics.PROCESSING_INPUT_FORMAT);
mPreviewImageProcessor.onResolutionUpdate(new Size(repeatingSurfaceInfo.mWidth,
repeatingSurfaceInfo.mHeight));
+ mPreviewImageProcessor.onOutputSurface(null, -1);
mRepeatingRequestImageReader = ImageReader.newInstance(repeatingSurfaceInfo.mWidth,
repeatingSurfaceInfo.mHeight,
CameraExtensionCharacteristics.PROCESSING_INPUT_FORMAT, PREVIEW_QUEUE_SIZE,
From 3418e49eb9689f3a8649914fdf93a1ce80fca76c Mon Sep 17 00:00:00 2001
From: Shan Huang
Date: Wed, 11 Aug 2021 00:13:33 +0000
Subject: [PATCH 024/671] Fix hard edge on charging ripple.
Bug: 196132025
Test: Manual
Change-Id: I12eed187fcffc352de5637142b3189c159b3f097
---
.../android/systemui/statusbar/charging/ChargingRippleView.kt | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/charging/ChargingRippleView.kt b/packages/SystemUI/src/com/android/systemui/statusbar/charging/ChargingRippleView.kt
index 4a467ce3c987..d01fc93ee84c 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/charging/ChargingRippleView.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/charging/ChargingRippleView.kt
@@ -104,7 +104,7 @@ class ChargingRippleView(context: Context?, attrs: AttributeSet?) : View(context
// the active effect area. Values here should be kept in sync with the
// animation implementation in the ripple shader.
val maskRadius = (1 - (1 - rippleShader.progress) * (1 - rippleShader.progress) *
- (1 - rippleShader.progress)) * radius * 1.5f
+ (1 - rippleShader.progress)) * radius * 2
canvas?.drawCircle(origin.x, origin.y, maskRadius, ripplePaint)
}
}
From 3f3563c3ae329b5e31c815f91138a2a61c0aa71d Mon Sep 17 00:00:00 2001
From: Govinda Wasserman
Date: Tue, 10 Aug 2021 23:10:00 -0400
Subject: [PATCH 025/671] Fixes AssistOrbController crash
AssistOrbController caused a crash by trying to remove a view that was
not attached. This change adds a check if the view is attached before
removal.
Test: Tested locally
BUG: 195902117
FIX: 195902117
Change-Id: Ibc65a9b1789c7ee629c28de31392fffc0536ed70
---
.../src/com/android/systemui/assist/AssistOrbController.java | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/packages/SystemUI/src/com/android/systemui/assist/AssistOrbController.java b/packages/SystemUI/src/com/android/systemui/assist/AssistOrbController.java
index 81a13a236685..408201558a9b 100644
--- a/packages/SystemUI/src/com/android/systemui/assist/AssistOrbController.java
+++ b/packages/SystemUI/src/com/android/systemui/assist/AssistOrbController.java
@@ -57,7 +57,9 @@ public class AssistOrbController {
public void run() {
mView.removeCallbacks(this);
mView.show(false /* show */, true /* animate */, () -> {
- mWindowManager.removeView(mView);
+ if (mView.isAttachedToWindow()) {
+ mWindowManager.removeView(mView);
+ }
});
}
};
From 3796d9756a3e62988813051a24aca7a7db58ca2b Mon Sep 17 00:00:00 2001
From: Julia Reynolds
Date: Fri, 30 Jul 2021 13:47:52 -0400
Subject: [PATCH 026/671] Simply ignore invalid keys
Test: NotificationManagerServiceTest
Fixes: 194697004
Fixes: 194697001
Change-Id: Ide8d56b8d76019304e0b6339ec15d14ca462d0f2
(cherry picked from commit 70d1d86d831961a22c9e9dc060072bb3a3d3e707)
---
.../NotificationManagerService.java | 6 +--
.../NotificationManagerServiceTest.java | 46 +++++++++++++++++++
2 files changed, 48 insertions(+), 4 deletions(-)
diff --git a/services/core/java/com/android/server/notification/NotificationManagerService.java b/services/core/java/com/android/server/notification/NotificationManagerService.java
index b54e8f973bd6..207baf539345 100755
--- a/services/core/java/com/android/server/notification/NotificationManagerService.java
+++ b/services/core/java/com/android/server/notification/NotificationManagerService.java
@@ -4363,8 +4363,7 @@ public class NotificationManagerService extends SystemService {
final int userId = r.getSbn().getUserId();
if (userId != info.userid && userId != UserHandle.USER_ALL &&
!mUserProfiles.isCurrentProfile(userId)) {
- throw new SecurityException("Disallowed call from listener: "
- + info.service);
+ continue;
}
cancelNotificationFromListenerLocked(info, callingUid, callingPid,
r.getSbn().getPackageName(), r.getSbn().getTag(),
@@ -4431,8 +4430,7 @@ public class NotificationManagerService extends SystemService {
final int userId = r.getSbn().getUserId();
if (userId != info.userid && userId != UserHandle.USER_ALL
&& !mUserProfiles.isCurrentProfile(userId)) {
- throw new SecurityException("Disallowed call from listener: "
- + info.service);
+ continue;
}
seen.add(r);
if (!r.isSeen()) {
diff --git a/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java b/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java
index f57c416e4a97..7bbf3e6c3b2e 100755
--- a/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java
+++ b/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java
@@ -4792,6 +4792,52 @@ public class NotificationManagerServiceTest extends UiServiceTestCase {
verify(mAppUsageStats).reportInterruptiveNotification(anyString(), anyString(), anyInt());
}
+ @Test
+ public void testSetNotificationsShownFromListener_protectsCrossUserInformation()
+ throws RemoteException {
+ Notification.Builder nb = new Notification.Builder(
+ mContext, mTestNotificationChannel.getId())
+ .setContentTitle("foo")
+ .setSmallIcon(android.R.drawable.sym_def_app_icon);
+ StatusBarNotification sbn = new StatusBarNotification(PKG, PKG, 1,
+ "tag" + System.currentTimeMillis(), UserHandle.PER_USER_RANGE, 0,
+ nb.build(), UserHandle.getUserHandleForUid(mUid + UserHandle.PER_USER_RANGE),
+ null, 0);
+ final NotificationRecord r =
+ new NotificationRecord(mContext, sbn, mTestNotificationChannel);
+ r.setTextChanged(true);
+ mService.addNotification(r);
+
+ // no security exception!
+ mBinderService.setNotificationsShownFromListener(null, new String[] {r.getKey()});
+
+ verify(mAppUsageStats, never()).reportInterruptiveNotification(
+ anyString(), anyString(), anyInt());
+ }
+
+ @Test
+ public void testCancelNotificationsFromListener_protectsCrossUserInformation()
+ throws RemoteException {
+ Notification.Builder nb = new Notification.Builder(
+ mContext, mTestNotificationChannel.getId())
+ .setContentTitle("foo")
+ .setSmallIcon(android.R.drawable.sym_def_app_icon);
+ StatusBarNotification sbn = new StatusBarNotification(PKG, PKG, 1,
+ "tag" + System.currentTimeMillis(), UserHandle.PER_USER_RANGE, 0,
+ nb.build(), UserHandle.getUserHandleForUid(mUid + UserHandle.PER_USER_RANGE),
+ null, 0);
+ final NotificationRecord r =
+ new NotificationRecord(mContext, sbn, mTestNotificationChannel);
+ r.setTextChanged(true);
+ mService.addNotification(r);
+
+ // no security exception!
+ mBinderService.cancelNotificationsFromListener(null, new String[] {r.getKey()});
+
+ waitForIdle();
+ assertEquals(1, mService.getNotificationRecordCount());
+ }
+
@Test
public void testMaybeRecordInterruptionLocked_doesNotRecordTwice()
throws RemoteException {
From 408d0a2a53b1f70d26f1fb43063bf1350978930f Mon Sep 17 00:00:00 2001
From: Beverly
Date: Mon, 2 Aug 2021 14:57:29 -0400
Subject: [PATCH 027/671] On devices with udfps supported, show auth ripple
Show the auth ripple if the user enters the device
via the unlock icon (where the udfps icon would normally be).
Test: manual
Fixes: 195162787
Change-Id: Ie65dce30c009f94a0472f566c3663a0de2bc063b
---
.../src/com/android/keyguard/LockIconViewController.java | 9 ++++++++-
.../android/systemui/biometrics/AuthRippleController.kt | 2 +-
2 files changed, 9 insertions(+), 2 deletions(-)
diff --git a/packages/SystemUI/src/com/android/keyguard/LockIconViewController.java b/packages/SystemUI/src/com/android/keyguard/LockIconViewController.java
index 509ac8a6d9fe..aa8cbd710e90 100644
--- a/packages/SystemUI/src/com/android/keyguard/LockIconViewController.java
+++ b/packages/SystemUI/src/com/android/keyguard/LockIconViewController.java
@@ -46,6 +46,7 @@ import androidx.core.view.accessibility.AccessibilityNodeInfoCompat;
import com.android.systemui.Dumpable;
import com.android.systemui.R;
import com.android.systemui.biometrics.AuthController;
+import com.android.systemui.biometrics.AuthRippleController;
import com.android.systemui.biometrics.UdfpsController;
import com.android.systemui.dagger.qualifiers.Main;
import com.android.systemui.dump.DumpManager;
@@ -99,6 +100,7 @@ public class LockIconViewController extends ViewController impleme
@NonNull private CharSequence mUnlockedLabel;
@NonNull private CharSequence mLockedLabel;
@Nullable private final Vibrator mVibrator;
+ @Nullable private final AuthRippleController mAuthRippleController;
private boolean mIsDozing;
private boolean mIsBouncerShowing;
@@ -135,7 +137,8 @@ public class LockIconViewController extends ViewController impleme
@NonNull AccessibilityManager accessibilityManager,
@NonNull ConfigurationController configurationController,
@NonNull @Main DelayableExecutor executor,
- @Nullable Vibrator vibrator
+ @Nullable Vibrator vibrator,
+ @Nullable AuthRippleController authRippleController
) {
super(view);
mStatusBarStateController = statusBarStateController;
@@ -148,6 +151,7 @@ public class LockIconViewController extends ViewController impleme
mConfigurationController = configurationController;
mExecutor = executor;
mVibrator = vibrator;
+ mAuthRippleController = authRippleController;
final Context context = view.getContext();
mUnlockIcon = mView.getContext().getResources().getDrawable(
@@ -538,6 +542,9 @@ public class LockIconViewController extends ViewController impleme
// pre-emptively set to true to hide view
mIsBouncerShowing = true;
+ if (mUdfpsSupported && mShowUnlockIcon && mAuthRippleController != null) {
+ mAuthRippleController.showRipple(FINGERPRINT);
+ }
updateVisibility();
mKeyguardViewController.showBouncer(/* scrim */ true);
}
diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/AuthRippleController.kt b/packages/SystemUI/src/com/android/systemui/biometrics/AuthRippleController.kt
index 1df8ad5e51fb..66b45e5900bf 100644
--- a/packages/SystemUI/src/com/android/systemui/biometrics/AuthRippleController.kt
+++ b/packages/SystemUI/src/com/android/systemui/biometrics/AuthRippleController.kt
@@ -79,7 +79,7 @@ class AuthRippleController @Inject constructor(
notificationShadeWindowController.setForcePluginOpen(false, this)
}
- private fun showRipple(biometricSourceType: BiometricSourceType?) {
+ fun showRipple(biometricSourceType: BiometricSourceType?) {
if (!keyguardUpdateMonitor.isKeyguardVisible ||
keyguardUpdateMonitor.userNeedsStrongAuth()) {
return
From e21597da375818850c6e1289455e74efa5530cfe Mon Sep 17 00:00:00 2001
From: Matt Pietal
Date: Wed, 11 Aug 2021 13:04:50 -0400
Subject: [PATCH 028/671] Crash on device controls availability
Post the incoming event to the view's handler to avoid crashing when
attempting to update the on the wrong thread.
Fixes: 196008691
Test: manual (cannot repro locally but would most likely happen after reboot)
Change-Id: I3777d5a43e0ff3a56910124a93670eef1b027fe0
---
.../statusbar/phone/KeyguardBottomAreaView.java | 14 ++++++++------
1 file changed, 8 insertions(+), 6 deletions(-)
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBottomAreaView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBottomAreaView.java
index 0a4e59c0391e..4701d8b32ee6 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBottomAreaView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBottomAreaView.java
@@ -203,13 +203,15 @@ public class KeyguardBottomAreaView extends FrameLayout implements View.OnClickL
private ControlsListingController.ControlsListingCallback mListingCallback =
new ControlsListingController.ControlsListingCallback() {
public void onServicesUpdated(List serviceInfos) {
- boolean available = !serviceInfos.isEmpty();
+ post(() -> {
+ boolean available = !serviceInfos.isEmpty();
- if (available != mControlServicesAvailable) {
- mControlServicesAvailable = available;
- updateControlsVisibility();
- updateAffordanceColors();
- }
+ if (available != mControlServicesAvailable) {
+ mControlServicesAvailable = available;
+ updateControlsVisibility();
+ updateAffordanceColors();
+ }
+ });
}
};
From d4db713dccc0fffd1934a81bdc6a57303f5c3ec9 Mon Sep 17 00:00:00 2001
From: Hui Yu
Date: Thu, 5 Aug 2021 12:26:38 -0700
Subject: [PATCH 029/671] Reduce background FGS start WTF log messages.
In ActivityManagerConstants, add key "fgs_start_allowed_log_sample_rate"
for the "allowed" WTF log sample rate, default sample rate is 25%; add key
"fgs_start_denied_log_sample_rate" for the "denied" WTF log sample rate, default sample rate
is 100%.
In ActiveServices.java, use these two sample rates for the FGS start WTF
log messages.
Bug: 195672687
Test: build and run.
Change-Id: I21cd83552b2988f7e5233094d93f93ba1b6af04a
---
.../com/android/server/am/ActiveServices.java | 9 +++-
.../server/am/ActivityManagerConstants.java | 42 +++++++++++++++++++
2 files changed, 50 insertions(+), 1 deletion(-)
diff --git a/services/core/java/com/android/server/am/ActiveServices.java b/services/core/java/com/android/server/am/ActiveServices.java
index 45e6f1ec4bf8..8311e6ccba2e 100644
--- a/services/core/java/com/android/server/am/ActiveServices.java
+++ b/services/core/java/com/android/server/am/ActiveServices.java
@@ -6278,10 +6278,17 @@ public final class ActiveServices {
final String msg = "Background started FGS: "
+ ((r.mAllowStartForeground != REASON_DENIED) ? "Allowed " : "Disallowed ")
+ r.mInfoAllowStartForeground;
- Slog.wtfQuiet(TAG, msg);
if (r.mAllowStartForeground != REASON_DENIED) {
+ if (ActivityManagerUtils.shouldSamplePackageForAtom(r.packageName,
+ mAm.mConstants.mFgsStartAllowedLogSampleRate)) {
+ Slog.wtfQuiet(TAG, msg);
+ }
Slog.i(TAG, msg);
} else {
+ if (ActivityManagerUtils.shouldSamplePackageForAtom(r.packageName,
+ mAm.mConstants.mFgsStartDeniedLogSampleRate)) {
+ Slog.wtfQuiet(TAG, msg);
+ }
Slog.w(TAG, msg);
}
r.mLoggedInfoAllowStartForeground = true;
diff --git a/services/core/java/com/android/server/am/ActivityManagerConstants.java b/services/core/java/com/android/server/am/ActivityManagerConstants.java
index ac0a1985ac89..eeb41a3df969 100644
--- a/services/core/java/com/android/server/am/ActivityManagerConstants.java
+++ b/services/core/java/com/android/server/am/ActivityManagerConstants.java
@@ -108,6 +108,8 @@ final class ActivityManagerConstants extends ContentObserver {
static final String KEY_FG_TO_BG_FGS_GRACE_DURATION = "fg_to_bg_fgs_grace_duration";
static final String KEY_FGS_START_FOREGROUND_TIMEOUT = "fgs_start_foreground_timeout";
static final String KEY_FGS_ATOM_SAMPLE_RATE = "fgs_atom_sample_rate";
+ static final String KEY_FGS_START_ALLOWED_LOG_SAMPLE_RATE = "fgs_start_allowed_log_sample_rate";
+ static final String KEY_FGS_START_DENIED_LOG_SAMPLE_RATE = "fgs_start_denied_log_sample_rate";
static final String KEY_FGS_ALLOW_OPT_OUT = "fgs_allow_opt_out";
private static final int DEFAULT_MAX_CACHED_PROCESSES = 32;
@@ -152,6 +154,8 @@ final class ActivityManagerConstants extends ContentObserver {
private static final long DEFAULT_FG_TO_BG_FGS_GRACE_DURATION = 5 * 1000;
private static final int DEFAULT_FGS_START_FOREGROUND_TIMEOUT_MS = 10 * 1000;
private static final float DEFAULT_FGS_ATOM_SAMPLE_RATE = 1; // 100 %
+ private static final float DEFAULT_FGS_START_ALLOWED_LOG_SAMPLE_RATE = 0.25f; // 25%
+ private static final float DEFAULT_FGS_START_DENIED_LOG_SAMPLE_RATE = 1; // 100%
/**
* Same as {@link TEMPORARY_ALLOW_LIST_TYPE_FOREGROUND_SERVICE_NOT_ALLOWED}
*/
@@ -495,6 +499,20 @@ final class ActivityManagerConstants extends ContentObserver {
*/
volatile float mFgsAtomSampleRate = DEFAULT_FGS_ATOM_SAMPLE_RATE;
+ /**
+ * Sample rate for the allowed FGS start WTF logs.
+ *
+ * If the value is 0.1, 10% of the logs would be sampled.
+ */
+ volatile float mFgsStartAllowedLogSampleRate = DEFAULT_FGS_START_ALLOWED_LOG_SAMPLE_RATE;
+
+ /**
+ * Sample rate for the denied FGS start WTF logs.
+ *
+ * If the value is 0.1, 10% of the logs would be sampled.
+ */
+ volatile float mFgsStartDeniedLogSampleRate = DEFAULT_FGS_START_DENIED_LOG_SAMPLE_RATE;
+
/**
* Whether to allow "opt-out" from the foreground service restrictions.
* (https://developer.android.com/about/versions/12/foreground-services)
@@ -711,6 +729,12 @@ final class ActivityManagerConstants extends ContentObserver {
case KEY_FGS_ATOM_SAMPLE_RATE:
updateFgsAtomSamplePercent();
break;
+ case KEY_FGS_START_ALLOWED_LOG_SAMPLE_RATE:
+ updateFgsStartAllowedLogSamplePercent();
+ break;
+ case KEY_FGS_START_DENIED_LOG_SAMPLE_RATE:
+ updateFgsStartDeniedLogSamplePercent();
+ break;
case KEY_FGS_ALLOW_OPT_OUT:
updateFgsAllowOptOut();
break;
@@ -1057,6 +1081,20 @@ final class ActivityManagerConstants extends ContentObserver {
DEFAULT_FGS_ATOM_SAMPLE_RATE);
}
+ private void updateFgsStartAllowedLogSamplePercent() {
+ mFgsStartAllowedLogSampleRate = DeviceConfig.getFloat(
+ DeviceConfig.NAMESPACE_ACTIVITY_MANAGER,
+ KEY_FGS_START_ALLOWED_LOG_SAMPLE_RATE,
+ DEFAULT_FGS_START_ALLOWED_LOG_SAMPLE_RATE);
+ }
+
+ private void updateFgsStartDeniedLogSamplePercent() {
+ mFgsStartDeniedLogSampleRate = DeviceConfig.getFloat(
+ DeviceConfig.NAMESPACE_ACTIVITY_MANAGER,
+ KEY_FGS_START_DENIED_LOG_SAMPLE_RATE,
+ DEFAULT_FGS_START_DENIED_LOG_SAMPLE_RATE);
+ }
+
private void updateFgsAllowOptOut() {
mFgsAllowOptOut = DeviceConfig.getBoolean(
DeviceConfig.NAMESPACE_ACTIVITY_MANAGER,
@@ -1285,6 +1323,10 @@ final class ActivityManagerConstants extends ContentObserver {
pw.print("="); pw.println(mFgsStartRestrictionCheckCallerTargetSdk);
pw.print(" "); pw.print(KEY_FGS_ATOM_SAMPLE_RATE);
pw.print("="); pw.println(mFgsAtomSampleRate);
+ pw.print(" "); pw.print(KEY_FGS_START_ALLOWED_LOG_SAMPLE_RATE);
+ pw.print("="); pw.println(mFgsStartAllowedLogSampleRate);
+ pw.print(" "); pw.print(KEY_FGS_START_DENIED_LOG_SAMPLE_RATE);
+ pw.print("="); pw.println(mFgsStartDeniedLogSampleRate);
pw.print(" "); pw.print(KEY_PUSH_MESSAGING_OVER_QUOTA_BEHAVIOR);
pw.print("="); pw.println(mPushMessagingOverQuotaBehavior);
pw.print(" "); pw.print(KEY_FGS_ALLOW_OPT_OUT);
From f0fa7f9b4aaee876053486d988909df9dc64e990 Mon Sep 17 00:00:00 2001
From: Jeff Sharkey
Date: Tue, 10 Aug 2021 16:50:52 -0600
Subject: [PATCH 030/671] Register IBluetoothManagerCallback per-process.
As part of introducing AttributionSource across the Bluetooth stack
earlier this year, each BluetoothAdapter instance is now associated
with a specific AttributionSource, and several instances of shared
static code were made BluetoothAdapter-specific so they could be
augmented with the relevant AttributionSource.
However, processes that create many BluetoothAdapter instances can
overload the system, since a IBluetoothManagerCallback was registered
for each instance. This change mitigates this by only registering a
single IBluetoothManagerCallback for the entire process, and it
then reuses the existing sProxyServiceStateCallbacks list for
dispatching events to all active adapters within the process.
Since it's so late in the release, we keep both mService and
sService intact to minimize the size of this CL; future work should
refactor to a more robust design, such as Supplier.
Bug: 195286998, 172022978
Test: atest BluetoothInstrumentationTests
Change-Id: I012f3f65e61eaf55e40436486806e56506c928ee
---
.../android/bluetooth/BluetoothAdapter.java | 184 ++++++++++++------
.../android/bluetooth/BluetoothSocket.java | 6 +-
2 files changed, 127 insertions(+), 63 deletions(-)
diff --git a/core/java/android/bluetooth/BluetoothAdapter.java b/core/java/android/bluetooth/BluetoothAdapter.java
index 8398be1af49a..5094498dbee5 100644
--- a/core/java/android/bluetooth/BluetoothAdapter.java
+++ b/core/java/android/bluetooth/BluetoothAdapter.java
@@ -64,6 +64,8 @@ import android.os.SystemProperties;
import android.util.Log;
import android.util.Pair;
+import com.android.internal.annotations.GuardedBy;
+
import java.io.IOException;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
@@ -78,6 +80,7 @@ import java.util.Map;
import java.util.Objects;
import java.util.Set;
import java.util.UUID;
+import java.util.WeakHashMap;
import java.util.concurrent.Executor;
import java.util.concurrent.TimeoutException;
import java.util.concurrent.locks.ReentrantReadWriteLock;
@@ -715,10 +718,21 @@ public final class BluetoothAdapter {
private final IBluetoothManager mManagerService;
private final AttributionSource mAttributionSource;
+ // Yeah, keeping both mService and sService isn't pretty, but it's too late
+ // in the current release for a major refactoring, so we leave them both
+ // intact until this can be cleaned up in a future release
+
@UnsupportedAppUsage
+ @GuardedBy("mServiceLock")
private IBluetooth mService;
private final ReentrantReadWriteLock mServiceLock = new ReentrantReadWriteLock();
+ @GuardedBy("sServiceLock")
+ private static boolean sServiceRegistered;
+ @GuardedBy("sServiceLock")
+ private static IBluetooth sService;
+ private static final Object sServiceLock = new Object();
+
private final Object mLock = new Object();
private final Map mLeScanClients;
private final Map>>
@@ -792,19 +806,11 @@ public final class BluetoothAdapter {
* Use {@link #getDefaultAdapter} to get the BluetoothAdapter instance.
*/
BluetoothAdapter(IBluetoothManager managerService, AttributionSource attributionSource) {
- if (managerService == null) {
- throw new IllegalArgumentException("bluetooth manager service is null");
- }
- try {
- mServiceLock.writeLock().lock();
- mService = managerService.registerAdapter(mManagerCallback);
- } catch (RemoteException e) {
- Log.e(TAG, "", e);
- } finally {
- mServiceLock.writeLock().unlock();
- }
mManagerService = Objects.requireNonNull(managerService);
mAttributionSource = Objects.requireNonNull(attributionSource);
+ synchronized (mServiceLock.writeLock()) {
+ mService = getBluetoothService(mManagerCallback);
+ }
mLeScanClients = new HashMap();
mToken = new Binder(DESCRIPTOR);
}
@@ -3154,21 +3160,16 @@ public final class BluetoothAdapter {
}
}
- @SuppressLint("AndroidFrameworkBluetoothPermission")
- private final IBluetoothManagerCallback mManagerCallback =
+ private static final IBluetoothManagerCallback sManagerCallback =
new IBluetoothManagerCallback.Stub() {
- @SuppressLint("AndroidFrameworkRequiresPermission")
public void onBluetoothServiceUp(IBluetooth bluetoothService) {
if (DBG) {
Log.d(TAG, "onBluetoothServiceUp: " + bluetoothService);
}
- mServiceLock.writeLock().lock();
- mService = bluetoothService;
- mServiceLock.writeLock().unlock();
-
- synchronized (mProxyServiceStateCallbacks) {
- for (IBluetoothManagerCallback cb : mProxyServiceStateCallbacks) {
+ synchronized (sServiceLock) {
+ sService = bluetoothService;
+ for (IBluetoothManagerCallback cb : sProxyServiceStateCallbacks.keySet()) {
try {
if (cb != null) {
cb.onBluetoothServiceUp(bluetoothService);
@@ -3180,6 +3181,56 @@ public final class BluetoothAdapter {
}
}
}
+ }
+
+ public void onBluetoothServiceDown() {
+ if (DBG) {
+ Log.d(TAG, "onBluetoothServiceDown");
+ }
+
+ synchronized (sServiceLock) {
+ sService = null;
+ for (IBluetoothManagerCallback cb : sProxyServiceStateCallbacks.keySet()) {
+ try {
+ if (cb != null) {
+ cb.onBluetoothServiceDown();
+ } else {
+ Log.d(TAG, "onBluetoothServiceDown: cb is null!");
+ }
+ } catch (Exception e) {
+ Log.e(TAG, "", e);
+ }
+ }
+ }
+ }
+
+ public void onBrEdrDown() {
+ if (VDBG) {
+ Log.i(TAG, "onBrEdrDown");
+ }
+
+ synchronized (sServiceLock) {
+ for (IBluetoothManagerCallback cb : sProxyServiceStateCallbacks.keySet()) {
+ try {
+ if (cb != null) {
+ cb.onBrEdrDown();
+ } else {
+ Log.d(TAG, "onBrEdrDown: cb is null!");
+ }
+ } catch (Exception e) {
+ Log.e(TAG, "", e);
+ }
+ }
+ }
+ }
+ };
+
+ private final IBluetoothManagerCallback mManagerCallback =
+ new IBluetoothManagerCallback.Stub() {
+ public void onBluetoothServiceUp(IBluetooth bluetoothService) {
+ synchronized (mServiceLock.writeLock()) {
+ mService = bluetoothService;
+ }
synchronized (mMetadataListeners) {
mMetadataListeners.forEach((device, pair) -> {
try {
@@ -3204,12 +3255,7 @@ public final class BluetoothAdapter {
}
public void onBluetoothServiceDown() {
- if (DBG) {
- Log.d(TAG, "onBluetoothServiceDown: " + mService);
- }
-
- try {
- mServiceLock.writeLock().lock();
+ synchronized (mServiceLock.writeLock()) {
mService = null;
if (mLeScanClients != null) {
mLeScanClients.clear();
@@ -3220,29 +3266,10 @@ public final class BluetoothAdapter {
if (mBluetoothLeScanner != null) {
mBluetoothLeScanner.cleanup();
}
- } finally {
- mServiceLock.writeLock().unlock();
- }
-
- synchronized (mProxyServiceStateCallbacks) {
- for (IBluetoothManagerCallback cb : mProxyServiceStateCallbacks) {
- try {
- if (cb != null) {
- cb.onBluetoothServiceDown();
- } else {
- Log.d(TAG, "onBluetoothServiceDown: cb is null!");
- }
- } catch (Exception e) {
- Log.e(TAG, "", e);
- }
- }
}
}
public void onBrEdrDown() {
- if (VDBG) {
- Log.i(TAG, "onBrEdrDown: " + mService);
- }
}
};
@@ -3477,15 +3504,12 @@ public final class BluetoothAdapter {
protected void finalize() throws Throwable {
try {
- mManagerService.unregisterAdapter(mManagerCallback);
- } catch (RemoteException e) {
- Log.e(TAG, "", e);
+ removeServiceStateCallback(mManagerCallback);
} finally {
super.finalize();
}
}
-
/**
* Validate a String Bluetooth address, such as "00:43:A8:23:10:F0"
*
Alphabetic characters must be uppercase to be valid.
@@ -3549,24 +3573,64 @@ public final class BluetoothAdapter {
return mAttributionSource;
}
- private final ArrayList mProxyServiceStateCallbacks =
- new ArrayList();
+ @GuardedBy("sServiceLock")
+ private static final WeakHashMap sProxyServiceStateCallbacks =
+ new WeakHashMap<>();
+
+ /*package*/ IBluetooth getBluetoothService() {
+ synchronized (sServiceLock) {
+ if (sProxyServiceStateCallbacks.isEmpty()) {
+ throw new IllegalStateException(
+ "Anonymous service access requires at least one lifecycle in process");
+ }
+ return sService;
+ }
+ }
@UnsupportedAppUsage
/*package*/ IBluetooth getBluetoothService(IBluetoothManagerCallback cb) {
- synchronized (mProxyServiceStateCallbacks) {
- if (cb == null) {
- Log.w(TAG, "getBluetoothService() called with no BluetoothManagerCallback");
- } else if (!mProxyServiceStateCallbacks.contains(cb)) {
- mProxyServiceStateCallbacks.add(cb);
- }
+ Objects.requireNonNull(cb);
+ synchronized (sServiceLock) {
+ sProxyServiceStateCallbacks.put(cb, null);
+ registerOrUnregisterAdapterLocked();
+ return sService;
}
- return mService;
}
/*package*/ void removeServiceStateCallback(IBluetoothManagerCallback cb) {
- synchronized (mProxyServiceStateCallbacks) {
- mProxyServiceStateCallbacks.remove(cb);
+ Objects.requireNonNull(cb);
+ synchronized (sServiceLock) {
+ sProxyServiceStateCallbacks.remove(cb);
+ registerOrUnregisterAdapterLocked();
+ }
+ }
+
+ /**
+ * Handle registering (or unregistering) a single process-wide
+ * {@link IBluetoothManagerCallback} based on the presence of local
+ * {@link #sProxyServiceStateCallbacks} clients.
+ */
+ @GuardedBy("sServiceLock")
+ private void registerOrUnregisterAdapterLocked() {
+ final boolean isRegistered = sServiceRegistered;
+ final boolean wantRegistered = !sProxyServiceStateCallbacks.isEmpty();
+
+ if (isRegistered != wantRegistered) {
+ if (wantRegistered) {
+ try {
+ sService = mManagerService.registerAdapter(sManagerCallback);
+ } catch (RemoteException e) {
+ throw e.rethrowFromSystemServer();
+ }
+ } else {
+ try {
+ mManagerService.unregisterAdapter(sManagerCallback);
+ sService = null;
+ } catch (RemoteException e) {
+ throw e.rethrowFromSystemServer();
+ }
+ }
+ sServiceRegistered = wantRegistered;
}
}
diff --git a/core/java/android/bluetooth/BluetoothSocket.java b/core/java/android/bluetooth/BluetoothSocket.java
index bb409d5360f9..1655b62bbfec 100644
--- a/core/java/android/bluetooth/BluetoothSocket.java
+++ b/core/java/android/bluetooth/BluetoothSocket.java
@@ -399,7 +399,7 @@ public final class BluetoothSocket implements Closeable {
try {
if (mSocketState == SocketState.CLOSED) throw new IOException("socket closed");
IBluetooth bluetoothProxy =
- BluetoothAdapter.getDefaultAdapter().getBluetoothService(null);
+ BluetoothAdapter.getDefaultAdapter().getBluetoothService();
if (bluetoothProxy == null) throw new IOException("Bluetooth is off");
mPfd = bluetoothProxy.getSocketManager().connectSocket(mDevice, mType,
mUuid, mPort, getSecurityFlags());
@@ -438,7 +438,7 @@ public final class BluetoothSocket implements Closeable {
/*package*/ int bindListen() {
int ret;
if (mSocketState == SocketState.CLOSED) return EBADFD;
- IBluetooth bluetoothProxy = BluetoothAdapter.getDefaultAdapter().getBluetoothService(null);
+ IBluetooth bluetoothProxy = BluetoothAdapter.getDefaultAdapter().getBluetoothService();
if (bluetoothProxy == null) {
Log.e(TAG, "bindListen fail, reason: bluetooth is off");
return -1;
@@ -706,7 +706,7 @@ public final class BluetoothSocket implements Closeable {
throw new IOException("socket closed");
}
IBluetooth bluetoothProxy =
- BluetoothAdapter.getDefaultAdapter().getBluetoothService(null);
+ BluetoothAdapter.getDefaultAdapter().getBluetoothService();
if (bluetoothProxy == null) {
throw new IOException("Bluetooth is off");
}
From 04bcff1e9f5d4f718bd2e9ac2feb8afc7abea32c Mon Sep 17 00:00:00 2001
From: Mark Renouf
Date: Wed, 11 Aug 2021 18:57:28 +0000
Subject: [PATCH 031/671] Return packageName to scroll capture requests from
SysUI
Bug: 195013652
Test: manual
Change-Id: Ib623e34031b7a5117d9c5afb439fc382f9c77dd1
---
.../android/view/ScrollCaptureResponse.java | 49 ++++++++++++++++---
core/java/android/view/ViewRootImpl.java | 1 +
2 files changed, 43 insertions(+), 7 deletions(-)
diff --git a/core/java/android/view/ScrollCaptureResponse.java b/core/java/android/view/ScrollCaptureResponse.java
index 8808827b248a..758f9ab935cf 100644
--- a/core/java/android/view/ScrollCaptureResponse.java
+++ b/core/java/android/view/ScrollCaptureResponse.java
@@ -53,6 +53,10 @@ public class ScrollCaptureResponse implements Parcelable {
@Nullable
private String mWindowTitle = null;
+ /** The package which owns the window. */
+ @Nullable
+ private String mPackageName = null;
+
/** Carries additional logging and debugging information when enabled. */
@NonNull
@DataClass.PluralOf("message")
@@ -77,7 +81,7 @@ public class ScrollCaptureResponse implements Parcelable {
- // Code below generated by codegen v1.0.22.
+ // Code below generated by codegen v1.0.23.
//
// DO NOT MODIFY!
// CHECKSTYLE:OFF Generated code
@@ -97,6 +101,7 @@ public class ScrollCaptureResponse implements Parcelable {
@Nullable Rect windowBounds,
@Nullable Rect boundsInWindow,
@Nullable String windowTitle,
+ @Nullable String packageName,
@NonNull ArrayList messages) {
this.mDescription = description;
com.android.internal.util.AnnotationValidations.validate(
@@ -105,6 +110,7 @@ public class ScrollCaptureResponse implements Parcelable {
this.mWindowBounds = windowBounds;
this.mBoundsInWindow = boundsInWindow;
this.mWindowTitle = windowTitle;
+ this.mPackageName = packageName;
this.mMessages = messages;
com.android.internal.util.AnnotationValidations.validate(
NonNull.class, null, mMessages);
@@ -152,6 +158,14 @@ public class ScrollCaptureResponse implements Parcelable {
return mWindowTitle;
}
+ /**
+ * The package name of the process the window is owned by.
+ */
+ @DataClass.Generated.Member
+ public @Nullable String getPackageName() {
+ return mPackageName;
+ }
+
/**
* Carries additional logging and debugging information when enabled.
*/
@@ -172,6 +186,7 @@ public class ScrollCaptureResponse implements Parcelable {
"windowBounds = " + mWindowBounds + ", " +
"boundsInWindow = " + mBoundsInWindow + ", " +
"windowTitle = " + mWindowTitle + ", " +
+ "packageName = " + mPackageName + ", " +
"messages = " + mMessages +
" }";
}
@@ -187,12 +202,14 @@ public class ScrollCaptureResponse implements Parcelable {
if (mWindowBounds != null) flg |= 0x4;
if (mBoundsInWindow != null) flg |= 0x8;
if (mWindowTitle != null) flg |= 0x10;
+ if (mPackageName != null) flg |= 0x20;
dest.writeByte(flg);
dest.writeString(mDescription);
if (mConnection != null) dest.writeStrongInterface(mConnection);
if (mWindowBounds != null) dest.writeTypedObject(mWindowBounds, flags);
if (mBoundsInWindow != null) dest.writeTypedObject(mBoundsInWindow, flags);
if (mWindowTitle != null) dest.writeString(mWindowTitle);
+ if (mPackageName != null) dest.writeString(mPackageName);
dest.writeStringList(mMessages);
}
@@ -213,6 +230,7 @@ public class ScrollCaptureResponse implements Parcelable {
Rect windowBounds = (flg & 0x4) == 0 ? null : (Rect) in.readTypedObject(Rect.CREATOR);
Rect boundsInWindow = (flg & 0x8) == 0 ? null : (Rect) in.readTypedObject(Rect.CREATOR);
String windowTitle = (flg & 0x10) == 0 ? null : in.readString();
+ String packageName = (flg & 0x20) == 0 ? null : in.readString();
ArrayList messages = new ArrayList<>();
in.readStringList(messages);
@@ -223,6 +241,7 @@ public class ScrollCaptureResponse implements Parcelable {
this.mWindowBounds = windowBounds;
this.mBoundsInWindow = boundsInWindow;
this.mWindowTitle = windowTitle;
+ this.mPackageName = packageName;
this.mMessages = messages;
com.android.internal.util.AnnotationValidations.validate(
NonNull.class, null, mMessages);
@@ -256,6 +275,7 @@ public class ScrollCaptureResponse implements Parcelable {
private @Nullable Rect mWindowBounds;
private @Nullable Rect mBoundsInWindow;
private @Nullable String mWindowTitle;
+ private @Nullable String mPackageName;
private @NonNull ArrayList mMessages;
private long mBuilderFieldsSet = 0L;
@@ -318,13 +338,24 @@ public class ScrollCaptureResponse implements Parcelable {
return this;
}
+ /**
+ * The package name of the process the window is owned by.
+ */
+ @DataClass.Generated.Member
+ public @NonNull Builder setPackageName(@NonNull String value) {
+ checkNotUsed();
+ mBuilderFieldsSet |= 0x20;
+ mPackageName = value;
+ return this;
+ }
+
/**
* Carries additional logging and debugging information when enabled.
*/
@DataClass.Generated.Member
public @NonNull Builder setMessages(@NonNull ArrayList value) {
checkNotUsed();
- mBuilderFieldsSet |= 0x20;
+ mBuilderFieldsSet |= 0x40;
mMessages = value;
return this;
}
@@ -340,7 +371,7 @@ public class ScrollCaptureResponse implements Parcelable {
/** Builds the instance. This builder should not be touched after calling this! */
public @NonNull ScrollCaptureResponse build() {
checkNotUsed();
- mBuilderFieldsSet |= 0x40; // Mark builder used
+ mBuilderFieldsSet |= 0x80; // Mark builder used
if ((mBuilderFieldsSet & 0x1) == 0) {
mDescription = "";
@@ -358,6 +389,9 @@ public class ScrollCaptureResponse implements Parcelable {
mWindowTitle = null;
}
if ((mBuilderFieldsSet & 0x20) == 0) {
+ mPackageName = null;
+ }
+ if ((mBuilderFieldsSet & 0x40) == 0) {
mMessages = new ArrayList<>();
}
ScrollCaptureResponse o = new ScrollCaptureResponse(
@@ -366,12 +400,13 @@ public class ScrollCaptureResponse implements Parcelable {
mWindowBounds,
mBoundsInWindow,
mWindowTitle,
+ mPackageName,
mMessages);
return o;
}
private void checkNotUsed() {
- if ((mBuilderFieldsSet & 0x40) != 0) {
+ if ((mBuilderFieldsSet & 0x80) != 0) {
throw new IllegalStateException(
"This Builder should not be reused. Use a new Builder instance instead");
}
@@ -379,10 +414,10 @@ public class ScrollCaptureResponse implements Parcelable {
}
@DataClass.Generated(
- time = 1614833185795L,
- codegenVersion = "1.0.22",
+ time = 1628630366187L,
+ codegenVersion = "1.0.23",
sourceFile = "frameworks/base/core/java/android/view/ScrollCaptureResponse.java",
- inputSignatures = "private @android.annotation.NonNull java.lang.String mDescription\nprivate @android.annotation.Nullable @com.android.internal.util.DataClass.MaySetToNull android.view.IScrollCaptureConnection mConnection\nprivate @android.annotation.Nullable android.graphics.Rect mWindowBounds\nprivate @android.annotation.Nullable android.graphics.Rect mBoundsInWindow\nprivate @android.annotation.Nullable java.lang.String mWindowTitle\nprivate @android.annotation.NonNull @com.android.internal.util.DataClass.PluralOf(\"message\") java.util.ArrayList mMessages\npublic boolean isConnected()\npublic void close()\nclass ScrollCaptureResponse extends java.lang.Object implements [android.os.Parcelable]\n@com.android.internal.util.DataClass(genToString=true, genGetters=true)")
+ inputSignatures = "private @android.annotation.NonNull java.lang.String mDescription\nprivate @android.annotation.Nullable @com.android.internal.util.DataClass.MaySetToNull android.view.IScrollCaptureConnection mConnection\nprivate @android.annotation.Nullable android.graphics.Rect mWindowBounds\nprivate @android.annotation.Nullable android.graphics.Rect mBoundsInWindow\nprivate @android.annotation.Nullable java.lang.String mWindowTitle\nprivate @android.annotation.Nullable java.lang.String mPackageName\nprivate @android.annotation.NonNull @com.android.internal.util.DataClass.PluralOf(\"message\") java.util.ArrayList mMessages\npublic boolean isConnected()\npublic void close()\nclass ScrollCaptureResponse extends java.lang.Object implements [android.os.Parcelable]\n@com.android.internal.util.DataClass(genToString=true, genGetters=true)")
@Deprecated
private void __metadata() {}
diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java
index 3550a31f9038..985f20b5ca30 100644
--- a/core/java/android/view/ViewRootImpl.java
+++ b/core/java/android/view/ViewRootImpl.java
@@ -9493,6 +9493,7 @@ public final class ViewRootImpl implements ViewParent,
ScrollCaptureResponse.Builder response = new ScrollCaptureResponse.Builder();
response.setWindowTitle(getTitle().toString());
+ response.setPackageName(mContext.getPackageName());
StringWriter writer = new StringWriter();
IndentingPrintWriter pw = new IndentingPrintWriter(writer);
From 71bc80de7b5342215d786a5f4307cb26bc2f2806 Mon Sep 17 00:00:00 2001
From: Mark Renouf
Date: Wed, 11 Aug 2021 19:06:23 +0000
Subject: [PATCH 032/671] requestScrollCapture: provide package name on
exception
Bug: 195013652
Test: manual
Change-Id: Icdd5a0ac1af599c31cda343231af3cb313d201c1
---
.../core/java/com/android/server/wm/WindowManagerService.java | 1 +
1 file changed, 1 insertion(+)
diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java
index 1ec9187d7a76..058cccb9836a 100644
--- a/services/core/java/com/android/server/wm/WindowManagerService.java
+++ b/services/core/java/com/android/server/wm/WindowManagerService.java
@@ -7061,6 +7061,7 @@ public class WindowManagerService extends IWindowManager.Stub
"requestScrollCapture: caught exception dispatching to window."
+ "token=%s", targetWindow.mClient.asBinder());
responseBuilder.setWindowTitle(targetWindow.getName());
+ responseBuilder.setPackageName(targetWindow.getOwningPackage());
responseBuilder.setDescription(String.format("caught exception: %s", e));
listener.onScrollCaptureResponse(responseBuilder.build());
}
From 1f3071d540fcefca6ca941568b7486657cd9198a Mon Sep 17 00:00:00 2001
From: Jayant Chowdhary
Date: Mon, 9 Aug 2021 23:34:04 +0000
Subject: [PATCH 033/671] camera2: Documentation updates for ultra high
resolution sensors.
Bug: 195987968
1) Document mininum pixel array size restriction for ultra high resolution sensors.
2) Add docs explaining mandatory stream combinations for ultra high resolution sensors.
Change-Id: Ic630259a57906c475210465588eda1a5cc3f68ec
Signed-off-by: Jayant Chowdhary
---
.../hardware/camera2/CameraDevice.java | 27 +++++++++++++++++++
.../hardware/camera2/CameraMetadata.java | 6 ++++-
2 files changed, 32 insertions(+), 1 deletion(-)
diff --git a/core/java/android/hardware/camera2/CameraDevice.java b/core/java/android/hardware/camera2/CameraDevice.java
index af48b71f9962..3c1ec3e629a9 100644
--- a/core/java/android/hardware/camera2/CameraDevice.java
+++ b/core/java/android/hardware/camera2/CameraDevice.java
@@ -807,6 +807,23 @@ public abstract class CameraDevice implements AutoCloseable {
* The same logic applies to other hardware levels and capabilities.
*
*
+ *
Devices with the ULTRA_HIGH_RESOLUTION_SENSOR capability have some additional guarantees
+ * which clients can take advantage of :
+ *
+ *
Additional guaranteed combinations for ULTRA_HIGH_RESOLUTION sensors
+ *
Target 1
Target 2
Target 3
Sample use case(s)
+ *
Type
SC Map
Max size
Type
SC Map
Max size
Type
SC Map
Max size
+ *
{@code YUV / JPEG / RAW}
{@code MAX_RES}
{@code MAX}
{@code PRIV / YUV}
{@code DEFAULT}
{@code PREVIEW}
Ultra high res still image capture with preview
+ *
{@code YUV / JPEG / RAW}
{@code MAX_RES}
{@code MAX}
{@code PRIV}
{@code DEFAULT}
{@code PREVIEW}
{@code PRIV / YUV}
{@code DEFAULT}
{@code RECORD}
Ultra high res still capture with preview + app based RECORD size analysis
+ *
{@code YUV / JPEG / RAW}
{@code MAX_RES}
{@code MAX}
{@code PRIV}
{@code DEFAULT}
{@code PREVIEW}
{@code JPEG / YUV / RAW}
{@code DEFAULT}
{@code MAX}
Ultra high res still image capture with preview + default sensor pixel mode analysis stream
+ *
+ *
+ *
Here, SC Map, refers to the {@link StreamConfigurationMap}, the target stream sizes must
+ * be chosen from. {@code DEFAULT} refers to the default sensor pixel mode {@link
+ * StreamConfigurationMap} and {@code MAX_RES} refers to the maximum resolution {@link
+ * StreamConfigurationMap}. The same capture request must not mix targets from
+ * {@link StreamConfigurationMap}s corresponding to different sensor pixel modes.
+ *
*
Since the capabilities of camera devices vary greatly, a given camera device may support
* target combinations with sizes outside of these guarantees, but this can only be tested for
* by calling {@link #isSessionConfigurationSupported} or attempting to create a session with
@@ -989,6 +1006,16 @@ public abstract class CameraDevice implements AutoCloseable {
*
Devices with the ULTRA_HIGH_RESOLUTION_SENSOR capability have some additional guarantees
+ * which clients can take advantage of :
+ *
+ *
Additional guaranteed combinations for ULTRA_HIGH_RESOLUTION sensors (YUV / PRIV inputs are guaranteed only if YUV / PRIVATE reprocessing are supported)
+ *
Input
Target 1
Target 2
Target 3
Sample use case(s)
+ *
Type
SC Map
Max size
Type
SC Map
Max size
Type
SC Map
Max size
Type
SC Map
Max size
+ *
{@code RAW}
{@code MAX_RES}
{@code MAX}
{@code RAW}
{@code MAX_RES}
{@code MAX}
{@code PRIV / YUV}
{@code DEFAULT}
{@code PREVIEW}
RAW remosaic reprocessing with seperate preview
+ *
{@code RAW}
{@code MAX_RES}
{@code MAX}
{@code RAW}
{@code MAX_RES}
{@code MAX}
{@code PRIV / YUV}
{@code DEFAULT}
{@code PREVIEW}
{@code JPEG / YUV}
{@code MAX_RES}
{@code MAX}
Ultra high res RAW -> JPEG / YUV with seperate preview
+ *
{@code YUV / PRIV}
{@code MAX_RES}
{@code MAX}
{@code YUV / PRIV}
{@code MAX_RES}
{@code MAX}
{@code YUV / PRIV}
{@code DEFAULT}
{@code PREVIEW}
{@code JPEG }
{@code MAX_RES}
{@code MAX}
Ultra high res PRIV / YUV -> YUV / JPEG reprocessing with seperate preview
+ *
* No additional mandatory stream combinations for RAW capability and LEVEL-3 hardware level.
*
*
diff --git a/core/java/android/hardware/camera2/CameraMetadata.java b/core/java/android/hardware/camera2/CameraMetadata.java
index d9fa56e1cbaa..4b35294826db 100644
--- a/core/java/android/hardware/camera2/CameraMetadata.java
+++ b/core/java/android/hardware/camera2/CameraMetadata.java
@@ -1138,10 +1138,14 @@ public abstract class CameraMetadata {
* {@link CameraCharacteristics#SCALER_STREAM_CONFIGURATION_MAP android.scaler.streamConfigurationMap} describes the streams supported in 'default'
* mode.
* The stream configurations supported in 'max resolution' mode are described by
- * {@link CameraCharacteristics#SCALER_STREAM_CONFIGURATION_MAP_MAXIMUM_RESOLUTION android.scaler.streamConfigurationMapMaximumResolution}.
+ * {@link CameraCharacteristics#SCALER_STREAM_CONFIGURATION_MAP_MAXIMUM_RESOLUTION android.scaler.streamConfigurationMapMaximumResolution}.
+ * The maximum resolution mode pixel array size of a camera device
+ * ({@link CameraCharacteristics#SENSOR_INFO_PIXEL_ARRAY_SIZE android.sensor.info.pixelArraySize}) with this capability,
+ * will be at least 24 megapixels.
*
* @see CameraCharacteristics#SCALER_STREAM_CONFIGURATION_MAP
* @see CameraCharacteristics#SCALER_STREAM_CONFIGURATION_MAP_MAXIMUM_RESOLUTION
+ * @see CameraCharacteristics#SENSOR_INFO_PIXEL_ARRAY_SIZE
* @see CameraCharacteristics#REQUEST_AVAILABLE_CAPABILITIES
*/
public static final int REQUEST_AVAILABLE_CAPABILITIES_ULTRA_HIGH_RESOLUTION_SENSOR = 16;
From 09e4403d209e287cbdeb0a0d6e3249920a935164 Mon Sep 17 00:00:00 2001
From: Hai Zhang
Date: Wed, 11 Aug 2021 20:38:34 +0000
Subject: [PATCH 034/671] Read permission state before scanning packages.
The readLegacyPermissionStateTEMP() call was originally introduced right
before the old updateAllPermissions() call in ag/12329540 probably
because we wanted to make sure packages have been properly scanned and
reconciled before permission code tries to read permission state in
combination with the existing package settings. But in the case of OTA
removing a system app, it is possible for the permission state to change
during the package reconciliation so the permission state should indeed
be read earlier. It should actually be fine to read the permission state
earlier as well because in
Settings.RuntimePermissionPersistence.readStateForUserSyncLPr() (part of
Settings.readLPw()), we are also consulting the not-yet-reconciled
package settings and that has been fine for a long time.
Fixes: 196177583
Test: presubmit
Change-Id: I01dae1da934f927ca87b62773b6673a9b3aefb8a
---
.../core/java/com/android/server/pm/PackageManagerService.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java
index 904a1f0d6f4f..4e3dfe4625d2 100644
--- a/services/core/java/com/android/server/pm/PackageManagerService.java
+++ b/services/core/java/com/android/server/pm/PackageManagerService.java
@@ -7220,6 +7220,7 @@ public class PackageManagerService extends IPackageManager.Stub
t.traceEnd();
mPermissionManager.readLegacyPermissionsTEMP(mSettings.mPermissions);
+ mPermissionManager.readLegacyPermissionStateTEMP();
if (!mOnlyCore && mFirstBoot) {
requestCopyPreoptedFiles(mInjector);
@@ -7635,7 +7636,6 @@ public class PackageManagerService extends IPackageManager.Stub
+ ((SystemClock.uptimeMillis()-startTime)/1000f)
+ " seconds");
- mPermissionManager.readLegacyPermissionStateTEMP();
// If the build fingerprint has changed since the last time we booted,
// we need to re-grant app permission to catch any new ones that
// appear. This is really a hack, and means that apps can in some
From e2e6e67bf7e57cb5b2d1e530af9e79711f04f8de Mon Sep 17 00:00:00 2001
From: Jeff Sharkey
Date: Tue, 10 Aug 2021 12:11:18 -0600
Subject: [PATCH 035/671] Preserve certain "Nearby devices" implicit grants.
We're willing to preserve an implicit "Nearby devices" permission
grant if this app was already able to interact with nearby devices
via background location access.
If the app doesn't have background location access, then the implicit
"Nearby devices" grant will be revoked as normal. If the "Nearby
devices" permission had already been revoked through some other
means, it will remain revoked.
Bug: 195931693
Test: atest CtsPermission2TestCases CtsPermission3TestCases
Change-Id: I7d8df91954525da6473f70cb1759d9507e6a5606
---
.../permission/PermissionManagerService.java | 24 ++++++++++++++++---
1 file changed, 21 insertions(+), 3 deletions(-)
diff --git a/services/core/java/com/android/server/pm/permission/PermissionManagerService.java b/services/core/java/com/android/server/pm/permission/PermissionManagerService.java
index 08a67d7f4bb5..1133faabcf69 100644
--- a/services/core/java/com/android/server/pm/permission/PermissionManagerService.java
+++ b/services/core/java/com/android/server/pm/permission/PermissionManagerService.java
@@ -217,6 +217,8 @@ public class PermissionManagerService extends IPermissionManager.Stub {
/** All storage permissions */
private static final List STORAGE_PERMISSIONS = new ArrayList<>();
+ /** All nearby devices permissions */
+ private static final List NEARBY_DEVICES_PERMISSIONS = new ArrayList<>();
/** If the permission of the value is granted, so is the key */
private static final Map FULLER_PERMISSION_MAP = new HashMap<>();
@@ -233,6 +235,9 @@ public class PermissionManagerService extends IPermissionManager.Stub {
STORAGE_PERMISSIONS.add(Manifest.permission.READ_EXTERNAL_STORAGE);
STORAGE_PERMISSIONS.add(Manifest.permission.WRITE_EXTERNAL_STORAGE);
STORAGE_PERMISSIONS.add(Manifest.permission.ACCESS_MEDIA_LOCATION);
+ NEARBY_DEVICES_PERMISSIONS.add(Manifest.permission.BLUETOOTH_ADVERTISE);
+ NEARBY_DEVICES_PERMISSIONS.add(Manifest.permission.BLUETOOTH_CONNECT);
+ NEARBY_DEVICES_PERMISSIONS.add(Manifest.permission.BLUETOOTH_SCAN);
}
/** Set of source package names for Privileged Permission Allowlist */
@@ -3076,13 +3081,26 @@ public class PermissionManagerService extends IPermissionManager.Stub {
Permission bp = mRegistry.getPermission(permission);
if (bp != null && bp.isRuntime()) {
int flags = ps.getPermissionFlags(permission);
-
if ((flags & FLAG_PERMISSION_REVOKE_WHEN_REQUESTED) != 0) {
-
int flagsToRemove = FLAG_PERMISSION_REVOKE_WHEN_REQUESTED;
+ // We're willing to preserve an implicit "Nearby devices"
+ // permission grant if this app was already able to interact
+ // with nearby devices via background location access
+ boolean preserveGrant = false;
+ if (ArrayUtils.contains(NEARBY_DEVICES_PERMISSIONS, permission)
+ && ps.isPermissionGranted(
+ android.Manifest.permission.ACCESS_BACKGROUND_LOCATION)
+ && (ps.getPermissionFlags(
+ android.Manifest.permission.ACCESS_BACKGROUND_LOCATION)
+ & (FLAG_PERMISSION_REVOKE_WHEN_REQUESTED
+ | FLAG_PERMISSION_REVOKED_COMPAT)) == 0) {
+ preserveGrant = true;
+ }
+
if ((flags & BLOCKING_PERMISSION_FLAGS) == 0
- && supportsRuntimePermissions) {
+ && supportsRuntimePermissions
+ && !preserveGrant) {
if (ps.revokePermission(bp)) {
if (DEBUG_PERMISSIONS) {
Slog.i(TAG, "Revoking runtime permission "
From 4fa06df1b8fbb252f1d6ce2412e8a42ea5d8271e Mon Sep 17 00:00:00 2001
From: Evan Severson
Date: Wed, 11 Aug 2021 13:25:21 -0700
Subject: [PATCH 036/671] Fix boot loop when upgrading sensor privacy file
Also add new testcase for sensor privacy service boot.
Test: atest SensorPrivacyServiceMockingTest CtsSensorPrivacyTestCases
Manually test booting with old file version
Fixes: 195913883
Change-Id: I9d8791e5f27c881afd9e23f94fb5fb9dc891fda4
---
.../android/server/SensorPrivacyService.java | 20 +++++++++++++------
.../persisted_file6.xml | 3 +++
.../SensorPrivacyServiceMockingTest.java | 4 ++++
3 files changed, 21 insertions(+), 6 deletions(-)
create mode 100644 services/tests/mockingservicestests/assets/SensorPrivacyServiceMockingTest/persisted_file6.xml
diff --git a/services/core/java/com/android/server/SensorPrivacyService.java b/services/core/java/com/android/server/SensorPrivacyService.java
index 422e8ae14862..91b2440f71fe 100644
--- a/services/core/java/com/android/server/SensorPrivacyService.java
+++ b/services/core/java/com/android/server/SensorPrivacyService.java
@@ -1021,7 +1021,15 @@ public final class SensorPrivacyService extends SystemService {
}
}
- return upgradeAndInit(version, map);
+ try {
+ return upgradeAndInit(version, map);
+ } catch (Exception e) {
+ Log.wtf(TAG, "Failed to upgrade and set sensor privacy state,"
+ + " resetting to default.", e);
+ mEnabled = new SparseBooleanArray();
+ mIndividualEnabled = new SparseArray<>();
+ return true;
+ }
}
private boolean upgradeAndInit(int version, SparseArray map) {
@@ -1037,22 +1045,22 @@ public final class SensorPrivacyService extends SystemService {
final int[] users = getLocalService(UserManagerInternal.class).getUserIds();
if (version == 0) {
final boolean enabled = (boolean) map.get(VER0_ENABLED);
- final SparseBooleanArray individualEnabled =
- (SparseBooleanArray) map.get(VER0_INDIVIDUAL_ENABLED);
+ final SparseArray individualEnabled =
+ (SparseArray) map.get(VER0_INDIVIDUAL_ENABLED);
final SparseBooleanArray perUserEnabled = new SparseBooleanArray();
- final SparseArray perUserIndividualEnabled =
+ final SparseArray> perUserIndividualEnabled =
new SparseArray<>();
// Copy global state to each user
for (int i = 0; i < users.length; i++) {
int user = users[i];
perUserEnabled.put(user, enabled);
- SparseBooleanArray userIndividualSensorEnabled = new SparseBooleanArray();
+ SparseArray userIndividualSensorEnabled = new SparseArray<>();
perUserIndividualEnabled.put(user, userIndividualSensorEnabled);
for (int j = 0; j < individualEnabled.size(); j++) {
final int sensor = individualEnabled.keyAt(j);
- final boolean isSensorEnabled = individualEnabled.valueAt(j);
+ final SensorState isSensorEnabled = individualEnabled.valueAt(j);
userIndividualSensorEnabled.put(sensor, isSensorEnabled);
}
}
diff --git a/services/tests/mockingservicestests/assets/SensorPrivacyServiceMockingTest/persisted_file6.xml b/services/tests/mockingservicestests/assets/SensorPrivacyServiceMockingTest/persisted_file6.xml
new file mode 100644
index 000000000000..b3c142285c8a
--- /dev/null
+++ b/services/tests/mockingservicestests/assets/SensorPrivacyServiceMockingTest/persisted_file6.xml
@@ -0,0 +1,3 @@
+
+
+
diff --git a/services/tests/mockingservicestests/src/com/android/server/sensorprivacy/SensorPrivacyServiceMockingTest.java b/services/tests/mockingservicestests/src/com/android/server/sensorprivacy/SensorPrivacyServiceMockingTest.java
index 844687f34555..ba79a764b672 100644
--- a/services/tests/mockingservicestests/src/com/android/server/sensorprivacy/SensorPrivacyServiceMockingTest.java
+++ b/services/tests/mockingservicestests/src/com/android/server/sensorprivacy/SensorPrivacyServiceMockingTest.java
@@ -60,6 +60,8 @@ public class SensorPrivacyServiceMockingTest {
String.format(PERSISTENCE_FILE_PATHS_TEMPLATE, 4);
public static final String PERSISTENCE_FILE5 =
String.format(PERSISTENCE_FILE_PATHS_TEMPLATE, 5);
+ public static final String PERSISTENCE_FILE6 =
+ String.format(PERSISTENCE_FILE_PATHS_TEMPLATE, 6);
private Context mContext;
@Mock
@@ -111,6 +113,7 @@ public class SensorPrivacyServiceMockingTest {
initServiceWithPersistenceFile(onDeviceFile, PERSISTENCE_FILE3);
initServiceWithPersistenceFile(onDeviceFile, PERSISTENCE_FILE4);
initServiceWithPersistenceFile(onDeviceFile, PERSISTENCE_FILE5);
+ initServiceWithPersistenceFile(onDeviceFile, PERSISTENCE_FILE6);
// Try all files with two known users
doReturn(new int[]{0, 10}).when(mMockedUserManagerInternal).getUserIds();
@@ -124,6 +127,7 @@ public class SensorPrivacyServiceMockingTest {
initServiceWithPersistenceFile(onDeviceFile, PERSISTENCE_FILE3);
initServiceWithPersistenceFile(onDeviceFile, PERSISTENCE_FILE4);
initServiceWithPersistenceFile(onDeviceFile, PERSISTENCE_FILE5);
+ initServiceWithPersistenceFile(onDeviceFile, PERSISTENCE_FILE6);
} finally {
mockitoSession.finishMocking();
From f6dbea381aafedc6b78008fc51b1c70068a8b2bf Mon Sep 17 00:00:00 2001
From: Nate Jiang
Date: Tue, 10 Aug 2021 12:22:22 -0700
Subject: [PATCH 037/671] Remove modules-utils-build_system from filegroup
Remove modules-utils-build_system from static lib of service-wifi.jar,
because it is already in static lib of framework-wifi.jar
Cherry-picked from https://android-review.googlesource.com/1792931
Bug: 195965491
Test: build apex
Merged-In: Ica496e67dd8b7c83aa93a512d06ad1a05d1c9c8d
Change-Id: Ib2fc438eb01787a0910c29601b579c17d06130de
---
services/net/Android.bp | 1 -
1 file changed, 1 deletion(-)
diff --git a/services/net/Android.bp b/services/net/Android.bp
index a822257e1a74..53ce6b264651 100644
--- a/services/net/Android.bp
+++ b/services/net/Android.bp
@@ -52,7 +52,6 @@ java_library {
// classes generated by netd_aidl_interfaces-platform-java above.
"netd_aidl_interface-V3-java",
"networkstack-client",
- "modules-utils-build_system",
],
apex_available: [
"com.android.wifi",
From 00f00ace62b2a6684bf0022d606f34a6f34278c7 Mon Sep 17 00:00:00 2001
From: synch
Date: Thu, 12 Aug 2021 14:43:22 +0800
Subject: [PATCH 038/671] fix a bug that extra is not actually set to the
query.
Bug: 196294479
Test: manually
Change-Id: I765ac6b996880c607aee4ed5e627c1c33bde2b6d
---
core/java/android/app/search/Query.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/core/java/android/app/search/Query.java b/core/java/android/app/search/Query.java
index c64e10723ca6..f073b4e50555 100644
--- a/core/java/android/app/search/Query.java
+++ b/core/java/android/app/search/Query.java
@@ -70,7 +70,7 @@ public final class Query implements Parcelable {
@NonNull Bundle extras) {
mInput = input;
mTimestampMillis = timestampMillis;
- mExtras = extras == null ? extras : new Bundle();
+ mExtras = extras != null ? extras : new Bundle();
}
/**
From 1168d9d014cfc0e007c311db92ff2d69cc30df18 Mon Sep 17 00:00:00 2001
From: Ray Essick
Date: Tue, 10 Aug 2021 14:27:42 -0700
Subject: [PATCH 039/671] Rename android.media.MediaTranscodeManager ->
MediaTranscodingManager
renamed to avoid conflict with existing copy in the R framework.jar.
The framework.jar copy was removed during S development
Bug: 195608856
Test: build
Test: cts-tradefed run cts -m CtsMediaTranscodingTestCases
Change-Id: I40ab066cd61be8d278f21cc788016f2edd6bb86e
---
apex/media/framework/Android.bp | 2 +-
apex/media/framework/api/system-current.txt | 38 +++++++++----------
.../media/MediaFrameworkInitializer.java | 4 +-
...ager.java => MediaTranscodingManager.java} | 22 +++++------
core/java/android/content/Context.java | 4 +-
5 files changed, 35 insertions(+), 35 deletions(-)
rename apex/media/framework/java/android/media/{MediaTranscodeManager.java => MediaTranscodingManager.java} (99%)
diff --git a/apex/media/framework/Android.bp b/apex/media/framework/Android.bp
index 1bf732ba33f2..d963e68d80ec 100644
--- a/apex/media/framework/Android.bp
+++ b/apex/media/framework/Android.bp
@@ -120,7 +120,7 @@ filegroup {
srcs: [
"java/android/media/ApplicationMediaCapabilities.java",
"java/android/media/MediaFeature.java",
- "java/android/media/MediaTranscodeManager.java",
+ "java/android/media/MediaTranscodingManager.java",
],
path: "java",
}
diff --git a/apex/media/framework/api/system-current.txt b/apex/media/framework/api/system-current.txt
index ce68447df051..6eea769d9f57 100644
--- a/apex/media/framework/api/system-current.txt
+++ b/apex/media/framework/api/system-current.txt
@@ -1,15 +1,15 @@
// Signature format: 2.0
package android.media {
- public final class MediaTranscodeManager {
- method @Nullable public android.media.MediaTranscodeManager.TranscodingSession enqueueRequest(@NonNull android.media.MediaTranscodeManager.TranscodingRequest, @NonNull java.util.concurrent.Executor, @NonNull android.media.MediaTranscodeManager.OnTranscodingFinishedListener);
+ public final class MediaTranscodingManager {
+ method @Nullable public android.media.MediaTranscodingManager.TranscodingSession enqueueRequest(@NonNull android.media.MediaTranscodingManager.TranscodingRequest, @NonNull java.util.concurrent.Executor, @NonNull android.media.MediaTranscodingManager.OnTranscodingFinishedListener);
}
- @java.lang.FunctionalInterface public static interface MediaTranscodeManager.OnTranscodingFinishedListener {
- method public void onTranscodingFinished(@NonNull android.media.MediaTranscodeManager.TranscodingSession);
+ @java.lang.FunctionalInterface public static interface MediaTranscodingManager.OnTranscodingFinishedListener {
+ method public void onTranscodingFinished(@NonNull android.media.MediaTranscodingManager.TranscodingSession);
}
- public abstract static class MediaTranscodeManager.TranscodingRequest {
+ public abstract static class MediaTranscodingManager.TranscodingRequest {
method public int getClientPid();
method public int getClientUid();
method @Nullable public android.os.ParcelFileDescriptor getDestinationFileDescriptor();
@@ -18,13 +18,13 @@ package android.media {
method @NonNull public android.net.Uri getSourceUri();
}
- public static class MediaTranscodeManager.TranscodingRequest.VideoFormatResolver {
- ctor public MediaTranscodeManager.TranscodingRequest.VideoFormatResolver(@NonNull android.media.ApplicationMediaCapabilities, @NonNull android.media.MediaFormat);
+ public static class MediaTranscodingManager.TranscodingRequest.VideoFormatResolver {
+ ctor public MediaTranscodingManager.TranscodingRequest.VideoFormatResolver(@NonNull android.media.ApplicationMediaCapabilities, @NonNull android.media.MediaFormat);
method @Nullable public android.media.MediaFormat resolveVideoFormat();
method public boolean shouldTranscode();
}
- public static final class MediaTranscodeManager.TranscodingSession {
+ public static final class MediaTranscodingManager.TranscodingSession {
method public boolean addClientUid(int);
method public void cancel();
method @NonNull public java.util.List getClientUids();
@@ -33,7 +33,7 @@ package android.media {
method public int getResult();
method public int getSessionId();
method public int getStatus();
- method public void setOnProgressUpdateListener(@NonNull java.util.concurrent.Executor, @Nullable android.media.MediaTranscodeManager.TranscodingSession.OnProgressUpdateListener);
+ method public void setOnProgressUpdateListener(@NonNull java.util.concurrent.Executor, @Nullable android.media.MediaTranscodingManager.TranscodingSession.OnProgressUpdateListener);
field public static final int ERROR_DROPPED_BY_SERVICE = 1; // 0x1
field public static final int ERROR_NONE = 0; // 0x0
field public static final int ERROR_SERVICE_DIED = 2; // 0x2
@@ -47,21 +47,21 @@ package android.media {
field public static final int STATUS_RUNNING = 2; // 0x2
}
- @java.lang.FunctionalInterface public static interface MediaTranscodeManager.TranscodingSession.OnProgressUpdateListener {
- method public void onProgressUpdate(@NonNull android.media.MediaTranscodeManager.TranscodingSession, @IntRange(from=0, to=100) int);
+ @java.lang.FunctionalInterface public static interface MediaTranscodingManager.TranscodingSession.OnProgressUpdateListener {
+ method public void onProgressUpdate(@NonNull android.media.MediaTranscodingManager.TranscodingSession, @IntRange(from=0, to=100) int);
}
- public static final class MediaTranscodeManager.VideoTranscodingRequest extends android.media.MediaTranscodeManager.TranscodingRequest {
+ public static final class MediaTranscodingManager.VideoTranscodingRequest extends android.media.MediaTranscodingManager.TranscodingRequest {
method @NonNull public android.media.MediaFormat getVideoTrackFormat();
}
- public static final class MediaTranscodeManager.VideoTranscodingRequest.Builder {
- ctor public MediaTranscodeManager.VideoTranscodingRequest.Builder(@NonNull android.net.Uri, @NonNull android.net.Uri, @NonNull android.media.MediaFormat);
- method @NonNull public android.media.MediaTranscodeManager.VideoTranscodingRequest build();
- method @NonNull public android.media.MediaTranscodeManager.VideoTranscodingRequest.Builder setClientPid(int);
- method @NonNull public android.media.MediaTranscodeManager.VideoTranscodingRequest.Builder setClientUid(int);
- method @NonNull public android.media.MediaTranscodeManager.VideoTranscodingRequest.Builder setDestinationFileDescriptor(@NonNull android.os.ParcelFileDescriptor);
- method @NonNull public android.media.MediaTranscodeManager.VideoTranscodingRequest.Builder setSourceFileDescriptor(@NonNull android.os.ParcelFileDescriptor);
+ public static final class MediaTranscodingManager.VideoTranscodingRequest.Builder {
+ ctor public MediaTranscodingManager.VideoTranscodingRequest.Builder(@NonNull android.net.Uri, @NonNull android.net.Uri, @NonNull android.media.MediaFormat);
+ method @NonNull public android.media.MediaTranscodingManager.VideoTranscodingRequest build();
+ method @NonNull public android.media.MediaTranscodingManager.VideoTranscodingRequest.Builder setClientPid(int);
+ method @NonNull public android.media.MediaTranscodingManager.VideoTranscodingRequest.Builder setClientUid(int);
+ method @NonNull public android.media.MediaTranscodingManager.VideoTranscodingRequest.Builder setDestinationFileDescriptor(@NonNull android.os.ParcelFileDescriptor);
+ method @NonNull public android.media.MediaTranscodingManager.VideoTranscodingRequest.Builder setSourceFileDescriptor(@NonNull android.os.ParcelFileDescriptor);
}
}
diff --git a/apex/media/framework/java/android/media/MediaFrameworkInitializer.java b/apex/media/framework/java/android/media/MediaFrameworkInitializer.java
index de2924e160b6..75a56b7231d9 100644
--- a/apex/media/framework/java/android/media/MediaFrameworkInitializer.java
+++ b/apex/media/framework/java/android/media/MediaFrameworkInitializer.java
@@ -75,8 +75,8 @@ public class MediaFrameworkInitializer {
public static void registerServiceWrappers() {
SystemServiceRegistry.registerContextAwareService(
Context.MEDIA_TRANSCODING_SERVICE,
- MediaTranscodeManager.class,
- context -> new MediaTranscodeManager(context)
+ MediaTranscodingManager.class,
+ context -> new MediaTranscodingManager(context)
);
if (SdkLevel.isAtLeastS()) {
SystemServiceRegistry.registerContextAwareService(
diff --git a/apex/media/framework/java/android/media/MediaTranscodeManager.java b/apex/media/framework/java/android/media/MediaTranscodingManager.java
similarity index 99%
rename from apex/media/framework/java/android/media/MediaTranscodeManager.java
rename to apex/media/framework/java/android/media/MediaTranscodingManager.java
index 5742d43f83b7..93d58d07f81a 100644
--- a/apex/media/framework/java/android/media/MediaTranscodeManager.java
+++ b/apex/media/framework/java/android/media/MediaTranscodingManager.java
@@ -54,7 +54,7 @@ import java.util.concurrent.Executors;
/**
Android 12 introduces Compatible media transcoding feature. See
- Compatible media transcoding. MediaTranscodeManager provides an interface to the system's media
+ Compatible media transcoding. MediaTranscodingManager provides an interface to the system's media
transcoding service and can be used to transcode media files, e.g. transcoding a video from HEVC to
AVC.
@@ -69,7 +69,7 @@ import java.util.concurrent.Executors;
To transcode a media file, first create a {@link TranscodingRequest} through its builder class
{@link VideoTranscodingRequest.Builder}. Transcode requests are then enqueue to the manager through
- {@link MediaTranscodeManager#enqueueRequest(
+ {@link MediaTranscodingManager#enqueueRequest(
TranscodingRequest, Executor, OnTranscodingFinishedListener)}
TranscodeRequest are processed based on client process's priority and request priority. When a
transcode operation is completed the caller is notified via its
@@ -87,8 +87,8 @@ import java.util.concurrent.Executors;
*/
@MinSdk(Build.VERSION_CODES.S)
@SystemApi
-public final class MediaTranscodeManager {
- private static final String TAG = "MediaTranscodeManager";
+public final class MediaTranscodingManager {
+ private static final String TAG = "MediaTranscodingManager";
/** Maximum number of retry to connect to the service. */
private static final int CONNECT_SERVICE_RETRY_COUNT = 100;
@@ -127,7 +127,7 @@ public final class MediaTranscodeManager {
private final Object mLock = new Object();
@GuardedBy("mLock")
@NonNull private ITranscodingClient mTranscodingClient = null;
- private static MediaTranscodeManager sMediaTranscodeManager;
+ private static MediaTranscodingManager sMediaTranscodingManager;
private void handleTranscodingFinished(int sessionId, TranscodingResultParcel result) {
synchronized (mPendingTranscodingSessions) {
@@ -306,7 +306,7 @@ public final class MediaTranscodeManager {
}
try {
- // Do not set hasRetried for retry initiated by MediaTranscodeManager.
+ // Do not set hasRetried for retry initiated by MediaTranscodingManager.
session.retryInternal(false /*setHasRetried*/);
} catch (Exception re) {
// TODO(hkuang): Return correct error code to the client.
@@ -423,7 +423,7 @@ public final class MediaTranscodeManager {
/**
* @hide
*/
- public MediaTranscodeManager(@NonNull Context context) {
+ public MediaTranscodingManager(@NonNull Context context) {
mContext = context;
mContentResolver = mContext.getContentResolver();
mPackageName = mContext.getPackageName();
@@ -1348,7 +1348,7 @@ public final class MediaTranscodeManager {
@IntRange(from = 0, to = 100) int progress);
}
- private final MediaTranscodeManager mManager;
+ private final MediaTranscodingManager mManager;
private Executor mListenerExecutor;
private OnTranscodingFinishedListener mListener;
private int mSessionId = -1;
@@ -1374,7 +1374,7 @@ public final class MediaTranscodeManager {
private final TranscodingRequest mRequest;
private TranscodingSession(
- @NonNull MediaTranscodeManager manager,
+ @NonNull MediaTranscodingManager manager,
@NonNull TranscodingRequest request,
@NonNull TranscodingSessionParcel parcel,
@NonNull @CallbackExecutor Executor executor,
@@ -1675,10 +1675,10 @@ public final class MediaTranscodeManager {
/**
* Enqueues a TranscodingRequest for execution.
- *
Upon successfully accepting the request, MediaTranscodeManager will return a
+ *
Upon successfully accepting the request, MediaTranscodingManager will return a
* {@link TranscodingSession} to the client. Client should use {@link TranscodingSession} to
* track the progress and get the result.
- *
MediaTranscodeManager will return null if fails to accept the request due to service
+ *
MediaTranscodingManager will return null if fails to accept the request due to service
* rebooting. Client could retry again after receiving null.
*
* @param transcodingRequest The TranscodingRequest to enqueue.
diff --git a/core/java/android/content/Context.java b/core/java/android/content/Context.java
index c02dcfd3d681..27027721109d 100644
--- a/core/java/android/content/Context.java
+++ b/core/java/android/content/Context.java
@@ -4464,11 +4464,11 @@ public abstract class Context {
/**
* Use with {@link #getSystemService(String)} to retrieve a {@link
- * android.media.MediaTranscodeManager} for transcoding media.
+ * android.media.MediaTranscodingManager} for transcoding media.
*
* @hide
* @see #getSystemService(String)
- * @see android.media.MediaTranscodeManager
+ * @see android.media.MediaTranscodingManager
*/
@SystemApi
public static final String MEDIA_TRANSCODING_SERVICE = "media_transcoding";
From 27da5b04d44e76e884f8148684eb36311923c651 Mon Sep 17 00:00:00 2001
From: Bill Lin
Date: Thu, 12 Aug 2021 14:11:25 +0800
Subject: [PATCH 040/671] Don't create one-handed-background-panel after
rotation
From code flow, when onConfigurationChanged() by rotating
OneHandedBackgroundPanelOrganizer#showBackgroundPanelLayer()
will be invoked and then create one-handed-background-panel
even though OHM is not activated.
Besides, this could introduce overhead on SF.
Test: manual rotate and dumpsys check HWC layers
Test: atest WMShellUnitTests
Bug: 196306312
Change-Id: Ia766078d5c76b08ab5b24e0ce965ad1d085e4686
---
.../OneHandedBackgroundPanelOrganizer.java | 17 ++++++++++++++++-
.../shell/onehanded/OneHandedController.java | 1 +
...OneHandedBackgroundPanelOrganizerTest.java | 19 +++++++++++++++++++
3 files changed, 36 insertions(+), 1 deletion(-)
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/onehanded/OneHandedBackgroundPanelOrganizer.java b/libs/WindowManager/Shell/src/com/android/wm/shell/onehanded/OneHandedBackgroundPanelOrganizer.java
index 97461e607e66..d3274706631b 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/onehanded/OneHandedBackgroundPanelOrganizer.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/onehanded/OneHandedBackgroundPanelOrganizer.java
@@ -16,6 +16,8 @@
package com.android.wm.shell.onehanded;
+import static com.android.wm.shell.onehanded.OneHandedState.STATE_ACTIVE;
+
import android.animation.ValueAnimator;
import android.content.Context;
import android.graphics.Color;
@@ -46,7 +48,7 @@ import java.util.concurrent.Executor;
* the screen has entered one handed mode.
*/
public class OneHandedBackgroundPanelOrganizer extends DisplayAreaOrganizer
- implements OneHandedAnimationCallback {
+ implements OneHandedAnimationCallback, OneHandedState.OnStateChangedListener {
private static final String TAG = "OneHandedBackgroundPanelOrganizer";
private static final int THEME_COLOR_OFFSET = 10;
private static final int ALPHA_ANIMATION_DURATION = 200;
@@ -56,6 +58,7 @@ public class OneHandedBackgroundPanelOrganizer extends DisplayAreaOrganizer
private final OneHandedSurfaceTransactionHelper.SurfaceControlTransactionFactory
mTransactionFactory;
+ private @OneHandedState.State int mCurrentState;
private ValueAnimator mAlphaAnimator;
private float mTranslationFraction;
@@ -180,6 +183,9 @@ public class OneHandedBackgroundPanelOrganizer extends DisplayAreaOrganizer
* Called when transition finished.
*/
public void onStopFinished() {
+ if (mAlphaAnimator == null) {
+ return;
+ }
mAlphaAnimator.start();
}
@@ -224,6 +230,10 @@ public class OneHandedBackgroundPanelOrganizer extends DisplayAreaOrganizer
*/
public void onConfigurationChanged() {
updateThemeColors();
+
+ if (mCurrentState != STATE_ACTIVE) {
+ return;
+ }
showBackgroundPanelLayer();
}
@@ -242,6 +252,11 @@ public class OneHandedBackgroundPanelOrganizer extends DisplayAreaOrganizer
return Math.max(origColor - THEME_COLOR_OFFSET, 0) / 255.0f;
}
+ @Override
+ public void onStateChanged(int newState) {
+ mCurrentState = newState;
+ }
+
void dump(@NonNull PrintWriter pw) {
final String innerPrefix = " ";
pw.println(TAG);
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/onehanded/OneHandedController.java b/libs/WindowManager/Shell/src/com/android/wm/shell/onehanded/OneHandedController.java
index b0fe856df7c8..954ca14b4960 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/onehanded/OneHandedController.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/onehanded/OneHandedController.java
@@ -307,6 +307,7 @@ public class OneHandedController implements RemoteCallable
mAccessibilityManager.addAccessibilityStateChangeListener(
mAccessibilityStateChangeListener);
+ mState.addSListeners(mBackgroundPanelOrganizer);
mState.addSListeners(mTutorialHandler);
}
diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/onehanded/OneHandedBackgroundPanelOrganizerTest.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/onehanded/OneHandedBackgroundPanelOrganizerTest.java
index 99c610765c04..7b9553c5ef9b 100644
--- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/onehanded/OneHandedBackgroundPanelOrganizerTest.java
+++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/onehanded/OneHandedBackgroundPanelOrganizerTest.java
@@ -19,6 +19,9 @@ package com.android.wm.shell.onehanded;
import static android.view.Display.DEFAULT_DISPLAY;
import static android.window.DisplayAreaOrganizer.FEATURE_ONE_HANDED_BACKGROUND_PANEL;
+import static com.android.wm.shell.onehanded.OneHandedState.STATE_ACTIVE;
+import static com.android.wm.shell.onehanded.OneHandedState.STATE_NONE;
+
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.ArgumentMatchers.anyInt;
@@ -109,4 +112,20 @@ public class OneHandedBackgroundPanelOrganizerTest extends OneHandedTestCase {
assertThat(mSpiedBackgroundPanelOrganizer.mBackgroundSurface).isNull();
}
+
+ @Test
+ public void testStateNone_onConfigurationChanged() {
+ mSpiedBackgroundPanelOrganizer.onStateChanged(STATE_NONE);
+ mSpiedBackgroundPanelOrganizer.onConfigurationChanged();
+
+ verify(mSpiedBackgroundPanelOrganizer, never()).showBackgroundPanelLayer();
+ }
+
+ @Test
+ public void testStateActivate_onConfigurationChanged() {
+ mSpiedBackgroundPanelOrganizer.onStateChanged(STATE_ACTIVE);
+ mSpiedBackgroundPanelOrganizer.onConfigurationChanged();
+
+ verify(mSpiedBackgroundPanelOrganizer).showBackgroundPanelLayer();
+ }
}
From 06ab67deba756f5e983bbf67b2e33fdc84c6a637 Mon Sep 17 00:00:00 2001
From: Bill Yi
Date: Thu, 12 Aug 2021 10:52:19 +0000
Subject: [PATCH 041/671] Import translations. DO NOT MERGE ANYWHERE
Auto-generated-cl: translation import
Change-Id: If792f4153405671db72e1d2ab42dd7af9e771603
---
core/res/res/values-ta/strings.xml | 2 +-
core/res/res/values-te/strings.xml | 108 ++++++++++++++---------------
2 files changed, 55 insertions(+), 55 deletions(-)
diff --git a/core/res/res/values-ta/strings.xml b/core/res/res/values-ta/strings.xml
index 6f0b84c73016..489bd73dc5a3 100644
--- a/core/res/res/values-ta/strings.xml
+++ b/core/res/res/values-ta/strings.xml
@@ -166,7 +166,7 @@
"நெறிமுறை ஆதரிக்கப்படவில்லை.""பாதுகாப்பான இணைப்பை நிறுவ முடியவில்லை.""URL தவறாக உள்ளதால் பக்கத்தைத் திறக்க முடியவில்லை."
- "கோப்பை அணுக முடியவில்லை."
+ "ஃபைலை அணுக முடியவில்லை.""கோரப்பட்ட கோப்பைக் கண்டறிய முடியவில்லை.""மிக அதிகமான கோரிக்கைகள் செயல்படுத்தப்படுகின்றன. பிறகு முயற்சிக்கவும்.""%1$s க்கான உள்நுழைவு பிழை"
diff --git a/core/res/res/values-te/strings.xml b/core/res/res/values-te/strings.xml
index ddbb3e3677aa..5d0117384d0a 100644
--- a/core/res/res/values-te/strings.xml
+++ b/core/res/res/values-te/strings.xml
@@ -82,7 +82,7 @@
"వాయిస్ సేవ లేదు""వాయిస్ సేవ లేదా అత్యవసర కాలింగ్ లేదు""మీ క్యారియర్ తాత్కాలికంగా ఆఫ్ చేయబడింది"
- "SIM %d కోసం మీ క్యారియర్ తాత్కాలికంగా ఆఫ్ చేసారు"
+ "SIM %d కోసం మీ క్యారియర్ తాత్కాలికంగా ఆఫ్ చేశారు""మొబైల్ నెట్వర్క్ అందుబాటులో లేదు""ప్రాధాన్య నెట్వర్క్ను మార్చుకోవడానికి ప్రయత్నించండి. మార్చడానికి నొక్కండి.""అత్యవసర కాలింగ్ అందుబాటులో లేదు"
@@ -91,8 +91,8 @@
"కాల్ ఫార్వార్డింగ్""అత్యవసర కాల్బ్యాక్ మోడ్""మొబైల్ డేటా స్థితి"
- "SMS సందేశాలు"
- "వాయిస్ మెయిల్ సందేశాలు"
+ "SMS మెసేజ్లు"
+ "వాయిస్ మెయిల్ మెసేజ్లు""Wi-Fi కాలింగ్""SIM స్టేటస్""అధిక ప్రాధాన్యత గల SIM స్థితి"
@@ -124,7 +124,7 @@
"సేవ కోసం శోధిస్తోంది""Wi‑Fi కాలింగ్ని సెటప్ చేయడం సాధ్యపడలేదు"
- "Wi-Fiతో కాల్స్ను చేయడానికి మరియు సందేశాలను పంపించడానికి, మొదట ఈ సేవను సెటప్ చేయాల్సిందిగా మీ క్యారియర్కి చెప్పండి. ఆ తర్వాత సెట్టింగ్ల నుండి Wi-Fi కాలింగ్ని మళ్లీ ఆన్ చేయండి. (లోపం కోడ్: %1$s)"
+ "Wi-Fiతో కాల్స్ను చేయడానికి మరియు మెసేజ్లను పంపించడానికి, మొదట ఈ సేవను సెటప్ చేయాల్సిందిగా మీ క్యారియర్కి చెప్పండి. ఆ తర్వాత సెట్టింగ్ల నుండి Wi-Fi కాలింగ్ని మళ్లీ ఆన్ చేయండి. (లోపం కోడ్: %1$s)""మీ క్యారియర్తో Wi‑Fi కాలింగ్ని నమోదు చేయడంలో సమస్య: %1$s"
@@ -187,7 +187,7 @@
"కార్యాలయ ప్రొఫైల్ తొలగించబడింది""కార్యాలయ ప్రొఫైల్ నిర్వాహక యాప్ లేదు లేదా పాడైంది. తత్ఫలితంగా, మీ కార్యాలయ ప్రొఫైల్ మరియు సంబంధిత డేటా తొలగించబడ్డాయి. సహాయం కోసం మీ నిర్వాహకులను సంప్రదించండి.""ఈ పరికరంలో మీ కార్యాలయ ప్రొఫైల్ ఇప్పుడు అందుబాటులో లేదు"
- "చాలా ఎక్కువ పాస్వర్డ్ ప్రయత్నాలు చేసారు"
+ "చాలా ఎక్కువ పాస్వర్డ్ ప్రయత్నాలు చేశారు""వ్యక్తిగత వినియోగం కోసం నిర్వాహకులు పరికరాన్ని తీసి వేశారు""పరికరం నిర్వహించబడింది""మీ సంస్థ ఈ పరికరాన్ని నిర్వహిస్తుంది మరియు నెట్వర్క్ ట్రాఫిక్ని పర్యవేక్షించవచ్చు. వివరాల కోసం నొక్కండి."
@@ -244,7 +244,7 @@
"సెషన్ను ముగించు""స్క్రీన్షాట్""బగ్ రిపోర్ట్"
- "ఇది ఇ-మెయిల్ సందేశం రూపంలో పంపడానికి మీ ప్రస్తుత పరికర స్థితి గురించి సమాచారాన్ని సేకరిస్తుంది. బగ్ రిపోర్ట్ను ప్రారంభించడం మొదలుకొని పంపడానికి సిద్ధం చేసే వరకు ఇందుకు కొంత సమయం పడుతుంది; దయచేసి ఓపిక పట్టండి."
+ "ఇది ఇ-మెయిల్ మెసేజ్ రూపంలో పంపడానికి మీ ప్రస్తుత పరికర స్థితి గురించి సమాచారాన్ని సేకరిస్తుంది. బగ్ రిపోర్ట్ను ప్రారంభించడం మొదలుకొని పంపడానికి సిద్ధం చేసే వరకు ఇందుకు కొంత సమయం పడుతుంది; దయచేసి ఓపిక పట్టండి.""ప్రభావశీల రిపోర్ట్""చాలా సందర్భాల్లో దీన్ని ఉపయోగించండి. ఇది రిపోర్ట్ ప్రోగ్రెస్ను ట్రాక్ చేయడానికి, సమస్య గురించి మరిన్ని వివరాలను నమోదు చేయడానికి మరియు స్క్రీన్షాట్లు తీయడానికి మిమ్మల్ని అనుమతిస్తుంది. ఇది నివేదించడానికి ఎక్కువ సమయం పట్టే తక్కువ వినియోగ విభాగాలను విడిచిపెట్టవచ్చు.""పూర్తి రిపోర్ట్"
@@ -272,8 +272,8 @@
"సెక్యూరిటీ""కార్ మోడ్""ఖాతా స్థితి"
- "డెవలపర్ సందేశాలు"
- "ముఖ్యమైన డెవలపర్ సందేశాలు"
+ "డెవలపర్ మెసేజ్లు"
+ "ముఖ్యమైన డెవలపర్ మెసేజ్లు""అప్డేట్లు""నెట్వర్క్ స్థితి""నెట్వర్క్ హెచ్చరికలు"
@@ -300,7 +300,7 @@
"Calendar""మీ క్యాలెండర్ను యాక్సెస్ చేయడానికి""SMS"
- "SMS సందేశాలను పంపడం మరియు వీక్షించడం"
+ "SMS మెసేజ్లను పంపడం మరియు వీక్షించడం""ఫైల్స్, మీడియా""మీ పరికరంలోని ఫోటోలు, మీడియా మరియు ఫైళ్లను యాక్సెస్ చేయడానికి""మైక్రోఫోన్"
@@ -343,24 +343,24 @@
"కాల్ను వేరే నంబర్కు దారి మళ్లించే లేదా మొత్తంగా కాల్ను ఆపివేసే ఎంపిక సహాయంతో అవుట్గోయింగ్ కాల్ సమయంలో డయల్ చేయబడుతున్న నంబర్ను చూడటానికి యాప్ను అనుమతిస్తుంది.""ఫోన్ కాల్స్కు సమాధానమివ్వు""ఇన్కమింగ్ ఫోన్ కాల్స్కు సమాధానమివ్వడానికి యాప్ను అనుమతిస్తుంది."
- "వచన సందేశాలను (SMS) స్వీకరించడం"
- "SMS సందేశాలను స్వీకరించడానికి మరియు ప్రాసెస్ చేయడానికి యాప్ను అనుమతిస్తుంది. యాప్ మీ డివైజ్కు పంపబడిన సందేశాలను మీకు చూపకుండానే పర్యవేక్షించగలదని లేదా తొలగించగలదని దీని అర్థం."
- "వచన సందేశాలను (MMS) స్వీకరించడం"
- "MMS సందేశాలను స్వీకరించడానికి మరియు ప్రాసెస్ చేయడానికి యాప్ను అనుమతిస్తుంది. యాప్ మీ డివైజ్కు పంపబడిన సందేశాలను మీకు చూపకుండానే పర్యవేక్షించగలదని లేదా తొలగించగలదని దీని అర్థం."
- "సెల్ ప్రసార సందేశాలను ఫార్వర్డ్ చేయడం"
- "సెల్ ప్రసార సందేశాలను అందుకుంటే, వాటిని ఫార్వర్డ్ చేసే విధంగా సెల్ ప్రసార మాడ్యూల్కు కట్టుబడి ఉండటానికి యాప్ను అనుమతిస్తుంది. సెల్ ప్రసార హెచ్చరికలు అత్యవసర పరిస్థితుల గురించి మిమ్మల్ని హెచ్చరించడానికి కొన్ని స్థానాల్లో అందించబడతాయి. అత్యవసర సెల్ ప్రసారం అందుకున్నప్పుడు హానికరమైన యాప్లు మీ పరికరం యొక్క పనితీరు లేదా నిర్వహణకు అంతరాయం కలిగించవచ్చు."
- "సెల్ ప్రసార సందేశాలను చదవడం"
- "మీ పరికరం స్వీకరించిన సెల్ ప్రసార సందేశాలను చదవడానికి యాప్ను అనుమతిస్తుంది. సెల్ ప్రసార హెచ్చరికలు అత్యవసర పరిస్థితుల గురించి మిమ్మల్ని హెచ్చరించడానికి కొన్ని స్థానాల్లో అందించబడతాయి. అత్యవసర సెల్ ప్రసారం స్వీకరించినప్పుడు హానికరమైన యాప్లు మీ పరికరం యొక్క పనితీరు లేదా నిర్వహణకు అంతరాయం కలిగించవచ్చు."
+ "వచన మెసేజ్లను (SMS) స్వీకరించడం"
+ "SMS మెసేజ్లను స్వీకరించడానికి మరియు ప్రాసెస్ చేయడానికి యాప్ను అనుమతిస్తుంది. యాప్ మీ డివైజ్కు పంపబడిన మెసేజ్లను మీకు చూపకుండానే పర్యవేక్షించగలదని లేదా తొలగించగలదని దీని అర్థం."
+ "వచన మెసేజ్లను (MMS) స్వీకరించడం"
+ "MMS మెసేజ్లను స్వీకరించడానికి మరియు ప్రాసెస్ చేయడానికి యాప్ను అనుమతిస్తుంది. యాప్ మీ డివైజ్కు పంపబడిన మెసేజ్లను మీకు చూపకుండానే పర్యవేక్షించగలదని లేదా తొలగించగలదని దీని అర్థం."
+ "సెల్ ప్రసార మెసేజ్లను ఫార్వర్డ్ చేయడం"
+ "సెల్ ప్రసార మెసేజ్లను అందుకుంటే, వాటిని ఫార్వర్డ్ చేసే విధంగా సెల్ ప్రసార మాడ్యూల్కు కట్టుబడి ఉండటానికి యాప్ను అనుమతిస్తుంది. సెల్ ప్రసార హెచ్చరికలు అత్యవసర పరిస్థితుల గురించి మిమ్మల్ని హెచ్చరించడానికి కొన్ని స్థానాల్లో అందించబడతాయి. అత్యవసర సెల్ ప్రసారం అందుకున్నప్పుడు హానికరమైన యాప్లు మీ పరికరం యొక్క పనితీరు లేదా నిర్వహణకు అంతరాయం కలిగించవచ్చు."
+ "సెల్ ప్రసార మెసేజ్లను చదవడం"
+ "మీ పరికరం స్వీకరించిన సెల్ ప్రసార మెసేజ్లను చదవడానికి యాప్ను అనుమతిస్తుంది. సెల్ ప్రసార హెచ్చరికలు అత్యవసర పరిస్థితుల గురించి మిమ్మల్ని హెచ్చరించడానికి కొన్ని స్థానాల్లో అందించబడతాయి. అత్యవసర సెల్ ప్రసారం స్వీకరించినప్పుడు హానికరమైన యాప్లు మీ పరికరం యొక్క పనితీరు లేదా నిర్వహణకు అంతరాయం కలిగించవచ్చు.""చందా చేయబడిన ఫీడ్లను చదవడం""ప్రస్తుతం సమకాలీకరించిన ఫీడ్ల గురించి వివరాలను పొందడానికి యాప్ను అనుమతిస్తుంది."
- "SMS సందేశాలను పంపడం మరియు వీక్షించడం"
- "SMS సందేశాలు పంపడానికి యాప్ను అనుమతిస్తుంది. దీని వలన ఊహించని ఛార్జీలు విధించబడవచ్చు. హానికరమైన యాప్లు మీ నిర్ధారణ లేకుండానే సందేశాలను పంపడం ద్వారా మీకు డబ్బు ఖర్చయ్యేలా చేయవచ్చు."
- "మీ వచన సందేశాలు (SMS లేదా MMS) చదవడం"
- "ఈ యాప్ మీ టాబ్లెట్లో నిల్వ చేసిన అన్ని SMS (వచన) సందేశాలను చదవగలదు."
+ "SMS మెసేజ్లను పంపడం మరియు వీక్షించడం"
+ "SMS మెసేజ్లు పంపడానికి యాప్ను అనుమతిస్తుంది. దీని వలన ఊహించని ఛార్జీలు విధించబడవచ్చు. హానికరమైన యాప్లు మీ నిర్ధారణ లేకుండానే మెసేజ్లను పంపడం ద్వారా మీకు డబ్బు ఖర్చయ్యేలా చేయవచ్చు."
+ "మీ వచన మెసేజ్లు (SMS లేదా MMS) చదవడం"
+ "ఈ యాప్ మీ టాబ్లెట్లో నిల్వ చేసిన అన్ని SMS (వచన) మెసేజ్లను చదవగలదు.""ఈ యాప్ మీ Android TV పరికరంలో నిల్వ అయిన SMS (వచనం) సందేశాలన్నింటినీ చదవగలదు."
- "ఈ యాప్ మీ ఫోన్లో నిల్వ చేసిన అన్ని SMS (వచన) సందేశాలను చదవగలదు."
- "వచన సందేశాలను (WAP) స్వీకరించడం"
- "WAP సందేశాలను స్వీకరించడానికి మరియు ప్రాసెస్ చేయడానికి యాప్ను అనుమతిస్తుంది. ఈ అనుమతి మీకు పంపబడిన సందేశాలను మీకు చూపకుండానే పర్యవేక్షించగల లేదా తొలగించగల సామర్థ్యాన్ని కలిగి ఉంటుంది."
+ "ఈ యాప్ మీ ఫోన్లో నిల్వ చేసిన అన్ని SMS (వచన) మెసేజ్లను చదవగలదు."
+ "వచన మెసేజ్లను (WAP) స్వీకరించడం"
+ "WAP మెసేజ్లను స్వీకరించడానికి మరియు ప్రాసెస్ చేయడానికి యాప్ను అనుమతిస్తుంది. ఈ అనుమతి మీకు పంపబడిన మెసేజ్లను మీకు చూపకుండానే పర్యవేక్షించగల లేదా తొలగించగల సామర్థ్యాన్ని కలిగి ఉంటుంది.""అమలవుతున్న యాప్లను పునరుద్ధరించడం""ప్రస్తుతం మరియు ఇటీవల అమలవుతున్న విధుల గురించి వివరణాత్మక సమాచారాన్ని తిరిగి పొందడానికి యాప్ను అనుమతిస్తుంది. ఇది పరికరంలో ఉపయోగించబడిన యాప్ల గురించి సమాచారాన్ని కనుగొనడానికి యాప్ను అనుమతించవచ్చు.""ప్రొఫైల్ మరియు పరికర యజమానులను నిర్వహించడం"
@@ -416,9 +416,9 @@
"ఈ యాప్ మీ Android TV పరికరంలో నిల్వ చేసిన క్యాలెండర్ ఈవెంట్లన్నీ చదవగలదు, మీ క్యాలెండర్ డేటాను షేర్ చేయగలదు లేదా సేవ్ చేయగలదు.""ఈ యాప్ మీ ఫోన్లో నిల్వ చేసిన క్యాలెండర్ ఈవెంట్లన్నీ చదవగలదు మరియు మీ క్యాలెండర్ డేటాను షేర్ చేయగలదు లేదా సేవ్ చేయగలదు.""యజమానికి తెలియకుండానే క్యాలెండర్ ఈవెంట్లను జోడించి లేదా సవరించి, అతిథులకు ఇమెయిల్ పంపడం"
- "ఈ యాప్ మీ టాబ్లెట్లో క్యాలెండర్ ఈవెంట్లను జోడించగలదు, తీసివేయగలదు లేదా మార్చగలదు. ఈ యాప్ క్యాలెండర్ యజమానుల నుండి వచ్చినట్లుగా సందేశాలను పంపగలదు లేదా ఈవెంట్లను వాటి యజమానులకు తెలియకుండానే మార్చగలదు."
- "ఈ యాప్ మీ Android TV పరికరంలో క్యాలెండర్ ఈవెంట్లను జోడించగలదు, తీసివేయగలదు లేదా మార్చగలదు. ఈ యాప్ క్యాలెండర్ యజమానుల నుండి వచ్చినట్లుగా సందేశాలను పంపగలదు లేదా ఈవెంట్లను వాటి యజమానులకు తెలియకుండానే మార్చగలదు."
- "ఈ యాప్ మీ ఫోన్లో క్యాలెండర్ ఈవెంట్లను జోడించగలదు, తీసివేయగలదు లేదా మార్చగలదు. ఈ యాప్ క్యాలెండర్ యజమానుల నుండి వచ్చినట్లుగా సందేశాలను పంపగలదు లేదా ఈవెంట్లను వాటి యజమానులకు తెలియకుండానే మార్చగలదు."
+ "ఈ యాప్ మీ టాబ్లెట్లో క్యాలెండర్ ఈవెంట్లను జోడించగలదు, తీసివేయగలదు లేదా మార్చగలదు. ఈ యాప్ క్యాలెండర్ యజమానుల నుండి వచ్చినట్లుగా మెసేజ్లను పంపగలదు లేదా ఈవెంట్లను వాటి యజమానులకు తెలియకుండానే మార్చగలదు."
+ "ఈ యాప్ మీ Android TV పరికరంలో క్యాలెండర్ ఈవెంట్లను జోడించగలదు, తీసివేయగలదు లేదా మార్చగలదు. ఈ యాప్ క్యాలెండర్ యజమానుల నుండి వచ్చినట్లుగా మెసేజ్లను పంపగలదు లేదా ఈవెంట్లను వాటి యజమానులకు తెలియకుండానే మార్చగలదు."
+ "ఈ యాప్ మీ ఫోన్లో క్యాలెండర్ ఈవెంట్లను జోడించగలదు, తీసివేయగలదు లేదా మార్చగలదు. ఈ యాప్ క్యాలెండర్ యజమానుల నుండి వచ్చినట్లుగా మెసేజ్లను పంపగలదు లేదా ఈవెంట్లను వాటి యజమానులకు తెలియకుండానే మార్చగలదు.""అదనపు స్థాన ప్రదాత ఆదేశాలను యాక్సెస్ చేయడం""అదనపు స్థాన ప్రదాత ఆదేశాలను యాక్సెస్ చేయడానికి యాప్ను అనుమతిస్తుంది. ఇది GPS లేదా ఇతర స్థాన మూలాల నిర్వహణలో యాప్ ప్రమేయం ఉండేలా అనుమతించవచ్చు.""స్క్రీన్పై ఉన్నప్పుడు మాత్రమే ఖచ్చితమైన స్థానాన్ని యాక్సెస్ చేయండి"
@@ -556,8 +556,8 @@
"వేలిముద్రను నిల్వ చేయడం సాధ్యపడదు. దయచేసి ఇప్పటికే ఉన్న వేలిముద్రను తీసివేయండి.""వేలిముద్ర గడువు సమయం చేరుకుంది. మళ్లీ ప్రయత్నించండి.""వేలిముద్ర కార్యకలాపం రద్దయింది."
- "వేలిముద్ర చర్యని వినియోగదారు రద్దు చేసారు."
- "చాలా ఎక్కువ ప్రయత్నాలు చేసారు. తర్వాత మళ్లీ ప్రయత్నించండి."
+ "వేలిముద్ర చర్యని వినియోగదారు రద్దు చేశారు."
+ "చాలా ఎక్కువ ప్రయత్నాలు చేశారు. తర్వాత మళ్లీ ప్రయత్నించండి.""అనేకసార్లు ప్రయత్నించారు. వేలిముద్ర సెన్సార్ నిలిపివేయబడింది.""మళ్లీ ప్రయత్నించండి.""వేలిముద్రలు నమోదు చేయబడలేదు."
@@ -601,7 +601,7 @@
"కొత్త ముఖం డేటాను నిల్వ చేయడం కాదు. మొదట పాతది తొలిగించండి.""ముఖ కార్యకలాపం రద్దయింది.""ఫేస్ అన్లాక్ను యూజర్ రద్దు చేశారు."
- "చాలా ఎక్కువ ప్రయత్నాలు చేసారు. తర్వాత మళ్లీ ప్రయత్నించండి."
+ "చాలా ఎక్కువ ప్రయత్నాలు చేశారు. తర్వాత మళ్లీ ప్రయత్నించండి.""చాలా సార్లు ప్రయత్నించారు. ఫేస్ అన్లాక్ డిజేబుల్ చేయబడింది.""ముఖం ధృవీకరించలేకపోయింది. మళ్లీ ప్రయత్నించండి.""మీరు ఫేస్ అన్లాక్ను సెటప్ చేయలేదు."
@@ -662,7 +662,7 @@
"DRM ప్రమాణపత్రాలను తీసివేయడం""DRM ప్రమాణపత్రాలను తీసివేయడానికి యాప్ను అనుమతిస్తుంది. సాధారణ యాప్లకు ఎప్పటికీ అవసరం ఉండదు.""క్యారియర్ సందేశ సేవకు అనుబంధించడం"
- "క్యారియర్ సందేశ సేవ యొక్క అగ్ర-స్థాయి ఇంటర్ఫేస్కు అనుబంధించడానికి హోల్డర్ను అనుమతిస్తుంది. సాధారణ యాప్లకు ఎప్పటికీ అవసరం ఉండదు."
+ "క్యారియర్ మెసేజింగ్ సర్వీస్ యొక్క అగ్ర-స్థాయి ఇంటర్ఫేస్కు అనుబంధించడానికి హోల్డర్ను అనుమతిస్తుంది. సాధారణ యాప్లకు ఎప్పటికీ అవసరం ఉండదు.""క్యారియర్ సేవలకు అనుబంధించడం""క్యారియర్ సేవలకు అనుబంధించడానికి హోల్డర్ను అనుమతిస్తుంది. సాధారణ యాప్లకు ఎప్పటికీ అవసరం ఉండదు.""అంతరాయం కలిగించవద్దును యాక్సెస్ చేయడం"
@@ -858,21 +858,21 @@
"సిమ్ కార్డు లాక్ చేయబడింది.""సిమ్ కార్డును అన్లాక్ చేస్తోంది…""మీరు మీ అన్లాక్ నమూనాను %1$d సార్లు తప్పుగా గీసారు. \n\n%2$d సెకన్లలో మళ్లీ ప్రయత్నించండి."
- "మీరు మీ పాస్వర్డ్ను %1$d సార్లు తప్పుగా టైప్ చేసారు. \n\n%2$d సెకన్లలో మళ్లీ ప్రయత్నించండి."
- "మీరు మీ పిన్ను %1$d సార్లు తప్పుగా టైప్ చేసారు. \n\n%2$d సెకన్లలో మళ్లీ ప్రయత్నించండి."
+ "మీరు మీ పాస్వర్డ్ను %1$d సార్లు తప్పుగా టైప్ చేశారు. \n\n%2$d సెకన్లలో మళ్లీ ప్రయత్నించండి."
+ "మీరు మీ పిన్ను %1$d సార్లు తప్పుగా టైప్ చేశారు. \n\n%2$d సెకన్లలో మళ్లీ ప్రయత్నించండి.""మీరు మీ అన్లాక్ నమూనాని %1$d సార్లు తప్పుగా గీసారు. మరో %2$d విజయవంతం కాని ప్రయత్నాల తర్వాత, మీరు మీ Google సైన్ఇన్ను ఉపయోగించి మీ టాబ్లెట్ను అన్లాక్ చేయడానికి అడగబడతారు.\n\n %3$d సెకన్లలో మళ్లీ ప్రయత్నించండి.""మీరు మీ అన్లాక్ నమూనాని %1$d సార్లు తప్పుగా గీసారు. మరో %2$d విఫల ప్రయత్నాల తర్వాత, మీరు మీ Google సైన్ఇన్ను ఉపయోగించి మీ Android TV పరికరాన్ని అన్లాక్ చేయాల్సిందిగా మీకు తెలపబడుతుంది.\n\n %3$d సెకన్లలో మళ్లీ ప్రయత్నించండి.""మీరు మీ అన్లాక్ నమూనాని %1$d సార్లు తప్పుగా గీసారు. మరో %2$d విజయవంతం కాని ప్రయత్నాల తర్వాత, మీరు మీ Google సైన్ఇన్ను ఉపయోగించి మీ ఫోన్ను అన్లాక్ చేయడానికి అడగబడతారు.\n\n %3$d సెకన్లలో మళ్లీ ప్రయత్నించండి.""మీరు టాబ్లెట్ను అన్లాక్ చేయడానికి %1$d సార్లు తప్పుగా ప్రయత్నించారు. మరో %2$d వైఫల్య ప్రయత్నాల తర్వాత, టాబ్లెట్ ఫ్యాక్టరీ డిఫాల్ట్కు రీసెట్ చేయబడుతుంది మరియు మొత్తం వినియోగదారు డేటాను కోల్పోవడం సంభవిస్తుంది."
- "మీరు మీ Android TV పరికరాన్ని అన్లాక్ చేయడానికి %1$d సార్లు విఫల ప్రయత్నాలు చేసారు. మరో %2$d విఫల ప్రయత్నాల తర్వాత, మీ Android TV పరికరం ఫ్యాక్టరీ డిఫాల్ట్కి రీసెట్ చేయబడుతుంది, అలాగే వినియోగదారు డేటా మొత్తాన్ని కోల్పోతారు."
+ "మీరు మీ Android TV పరికరాన్ని అన్లాక్ చేయడానికి %1$d సార్లు విఫల ప్రయత్నాలు చేశారు. మరో %2$d విఫల ప్రయత్నాల తర్వాత, మీ Android TV పరికరం ఫ్యాక్టరీ డిఫాల్ట్కి రీసెట్ చేయబడుతుంది, అలాగే వినియోగదారు డేటా మొత్తాన్ని కోల్పోతారు.""మీరు ఫోన్ను అన్లాక్ చేయడానికి %1$d సార్లు తప్పుగా ప్రయత్నించారు. మరో %2$d వైఫల్య ప్రయత్నాల తర్వాత, ఫోన్ ఫ్యాక్టరీ డిఫాల్ట్కు రీసెట్ చేయబడుతుంది మరియు మొత్తం వినియోగదారు డేటాను కోల్పోవడం సంభవిస్తుంది.""మీరు టాబ్లెట్ను అన్లాక్ చేయడానికి %d సార్లు తప్పుగా ప్రయత్నించారు. టాబ్లెట్ ఇప్పుడు ఫ్యాక్టరీ డిఫాల్ట్కు రీసెట్ చేయబడుతుంది."
- "మీరు మీ Android TV పరికరాన్ని అన్లాక్ చేయడానికి %d సార్లు విఫల ప్రయత్నాలు చేసారు. మీ Android TV పరికరం ఇప్పుడు ఫ్యాక్టరీ రీసెట్ చేయబడుతుంది."
+ "మీరు మీ Android TV పరికరాన్ని అన్లాక్ చేయడానికి %d సార్లు విఫల ప్రయత్నాలు చేశారు. మీ Android TV పరికరం ఇప్పుడు ఫ్యాక్టరీ రీసెట్ చేయబడుతుంది.""మీరు ఫోన్ను అన్లాక్ చేయడానికి %d సార్లు తప్పుగా ప్రయత్నించారు. ఫోన్ ఇప్పుడు ఫ్యాక్టరీ డిఫాల్ట్కు రీసెట్ చేయబడుతుంది.""%d సెకన్లలో మళ్లీ ప్రయత్నించండి.""నమూనాను మర్చిపోయారా?""ఖాతా అన్లాక్"
- "చాలా ఎక్కువ ఆకృతి ప్రయత్నాలు చేసారు"
+ "చాలా ఎక్కువ ఆకృతి ప్రయత్నాలు చేశారు""అన్లాక్ చేయడానికి, మీ Google ఖాతాతో సైన్ ఇన్ చేయండి.""వినియోగదారు పేరు (ఇమెయిల్)""పాస్వర్డ్"
@@ -959,7 +959,7 @@
"అలారం సెట్ చేయడం""ఇన్స్టాల్ చేయబడిన అలారం గడియారం యాప్లో అలారంను సెట్ చేయడానికి యాప్ను అనుమతిస్తుంది. కొన్ని అలారం గల గడియారం యాప్లు ఈ ఫీచర్ను అమలు చేయకపోవచ్చు.""వాయిస్ మెయిల్ను జోడించడం"
- "మీ వాయిస్ మెయిల్ ఇన్బాక్స్కి సందేశాలను జోడించడానికి యాప్ను అనుమతిస్తుంది."
+ "మీ వాయిస్ మెయిల్ ఇన్బాక్స్కి మెసేజ్లను జోడించడానికి యాప్ను అనుమతిస్తుంది.""బ్రౌజర్ భౌగోళిక స్థానం అనుమతులను సవరించడం""బ్రౌజర్ యొక్క భౌగోళిక స్థానం అనుమతులను సవరించడానికి యాప్ను అనుమతిస్తుంది. హానికరమైన యాప్లు ఏకపక్ష వెబ్ సైట్లకు స్థాన సమాచారాన్ని అనుమతించడానికి దీన్ని ఉపయోగించవచ్చు.""మీరు బ్రౌజర్ ఈ పాస్వర్డ్ను గుర్తుపెట్టుకోవాలని కోరుకుంటున్నారా?"
@@ -1261,11 +1261,11 @@
"ఆమోదిస్తున్నాను""తిరస్కరిస్తున్నాను""అక్షరాన్ని చొప్పించండి"
- "SMS సందేశాలు పంపుతోంది"
- "<b>%1$s</b> పెద్ద సంఖ్యలో SMS సందేశాలను పంపుతోంది. సందేశాలను పంపడం కొనసాగించడానికి మీరు ఈ యాప్ను అనుమతించాలనుకుంటున్నారా?"
+ "SMS మెసేజ్లు పంపుతోంది"
+ "<b>%1$s</b> పెద్ద సంఖ్యలో SMS మెసేజ్లను పంపుతోంది. మెసేజ్లను పంపడం కొనసాగించడానికి మీరు ఈ యాప్ను అనుమతించాలనుకుంటున్నారా?""అనుమతిస్తున్నాను""తిరస్కరిస్తున్నాను"
- "<b>%1$s</b> ఒక సందేశాన్ని <b>%2$s</b>కి పంపాలనుకుంటోంది."
+ "<b>%1$s</b> ఒక మెసేజ్ను <b>%2$s</b>కి పంపాలనుకుంటోంది.""దీని వలన మీ మొబైల్ ఖాతాకు ""ఛార్జీలు విధించబడవచ్చు"".""దీని వలన మీ మొబైల్ ఖాతాకు ఛార్జీలు విధించబడవచ్చు.""పంపు"
@@ -1598,7 +1598,7 @@
"PUK కోడ్ 8 సంఖ్యలు ఉండాలి.""సరైన PUK కోడ్ను మళ్లీ నమోదు చేయండి. పునరావృత ప్రయత్నాల వలన సిమ్ శాశ్వతంగా నిలిపివేయబడుతుంది.""పిన్ కోడ్లు సరిపోలలేదు"
- "చాలా ఎక్కువ ఆకృతి ప్రయత్నాలు చేసారు"
+ "చాలా ఎక్కువ ఆకృతి ప్రయత్నాలు చేశారు""అన్లాక్ చేయడానికి, మీ Google ఖాతాతో సైన్ ఇన్ చేయండి.""వినియోగదారు పేరు (ఇమెయిల్)""పాస్వర్డ్"
@@ -1606,15 +1606,15 @@
"చెల్లని వినియోగదారు పేరు లేదా పాస్వర్డ్.""మీ వినియోగదారు పేరు లేదా పాస్వర్డ్ను మర్చిపోయారా?\n""google.com/accounts/recovery""ని సందర్శించండి.""ఖాతాను తనిఖీ చేస్తోంది…"
- "మీరు మీ పిన్ను %1$d సార్లు తప్పుగా టైప్ చేసారు. \n\n%2$d సెకన్లలో మళ్లీ ప్రయత్నించండి."
- "మీరు మీ పాస్వర్డ్ను %1$d సార్లు తప్పుగా టైప్ చేసారు. \n\n%2$d సెకన్లలో మళ్లీ ప్రయత్నించండి."
+ "మీరు మీ పిన్ను %1$d సార్లు తప్పుగా టైప్ చేశారు. \n\n%2$d సెకన్లలో మళ్లీ ప్రయత్నించండి."
+ "మీరు మీ పాస్వర్డ్ను %1$d సార్లు తప్పుగా టైప్ చేశారు. \n\n%2$d సెకన్లలో మళ్లీ ప్రయత్నించండి.""మీరు మీ అన్లాక్ నమూనాను %1$d సార్లు తప్పుగా గీసారు. \n\n%2$d సెకన్లలో మళ్లీ ప్రయత్నించండి."
- "మీరు టాబ్లెట్ను అన్లాక్ చేయడానికి %1$d చెల్లని ప్రయత్నాలు చేసారు. మరో %2$d విఫల ప్రయత్నాల తర్వాత, టాబ్లెట్ ఫ్యాక్టరీ డిఫాల్ట్కు రీసెట్ చేయబడుతుంది మరియు మొత్తం వినియోగదారు డేటాను కోల్పోవడం సంభవిస్తుంది."
- "మీరు మీ Android TV పరికరాన్ని అన్లాక్ చేయడానికి %1$d సార్లు విఫల ప్రయత్నాలు చేసారు. మరో %2$d విఫల ప్రయత్నాల తర్వాత, మీ Android TV పరికరం ఫ్యాక్టరీ డిఫాల్ట్కి రీసెట్ చేయబడుతుంది, అలాగే వినియోగదారు డేటా మొత్తాన్ని కోల్పోతారు."
- "మీరు ఫోన్ను అన్లాక్ చేయడానికి %1$d చెల్లని ప్రయత్నాలు చేసారు. మరో %2$d విఫల ప్రయత్నాల తర్వాత, ఫోన్ ఫ్యాక్టరీ డిఫాల్ట్కు రీసెట్ చేయబడుతుంది మరియు మొత్తం వినియోగదారు డేటాను కోల్పోవడం సంభవిస్తుంది."
- "మీరు టాబ్లెట్ను అన్లాక్ చేయడానికి %d చెల్లని ప్రయత్నాలు చేసారు. టాబ్లెట్ ఇప్పుడు ఫ్యాక్టరీ డిఫాల్ట్కు రీసెట్ చేయబడుతుంది."
- "మీరు మీ Android TV పరికరాన్ని అన్లాక్ చేయడానికి %d సార్లు విఫల ప్రయత్నాలు చేసారు. మీ Android TV పరికరం ఇప్పుడు ఫ్యాక్టరీ రీసెట్ చేయబడుతుంది."
- "మీరు ఫోన్ను అన్లాక్ చేయడానికి %d చెల్లని ప్రయత్నాలు చేసారు. ఫోన్ ఇప్పుడు ఫ్యాక్టరీ డిఫాల్ట్కు రీసెట్ చేయబడుతుంది."
+ "మీరు టాబ్లెట్ను అన్లాక్ చేయడానికి %1$d చెల్లని ప్రయత్నాలు చేశారు. మరో %2$d విఫల ప్రయత్నాల తర్వాత, టాబ్లెట్ ఫ్యాక్టరీ డిఫాల్ట్కు రీసెట్ చేయబడుతుంది మరియు మొత్తం వినియోగదారు డేటాను కోల్పోవడం సంభవిస్తుంది."
+ "మీరు మీ Android TV పరికరాన్ని అన్లాక్ చేయడానికి %1$d సార్లు విఫల ప్రయత్నాలు చేశారు. మరో %2$d విఫల ప్రయత్నాల తర్వాత, మీ Android TV పరికరం ఫ్యాక్టరీ డిఫాల్ట్కి రీసెట్ చేయబడుతుంది, అలాగే వినియోగదారు డేటా మొత్తాన్ని కోల్పోతారు."
+ "మీరు ఫోన్ను అన్లాక్ చేయడానికి %1$d చెల్లని ప్రయత్నాలు చేశారు. మరో %2$d విఫల ప్రయత్నాల తర్వాత, ఫోన్ ఫ్యాక్టరీ డిఫాల్ట్కు రీసెట్ చేయబడుతుంది మరియు మొత్తం వినియోగదారు డేటాను కోల్పోవడం సంభవిస్తుంది."
+ "మీరు టాబ్లెట్ను అన్లాక్ చేయడానికి %d చెల్లని ప్రయత్నాలు చేశారు. టాబ్లెట్ ఇప్పుడు ఫ్యాక్టరీ డిఫాల్ట్కు రీసెట్ చేయబడుతుంది."
+ "మీరు మీ Android TV పరికరాన్ని అన్లాక్ చేయడానికి %d సార్లు విఫల ప్రయత్నాలు చేశారు. మీ Android TV పరికరం ఇప్పుడు ఫ్యాక్టరీ రీసెట్ చేయబడుతుంది."
+ "మీరు ఫోన్ను అన్లాక్ చేయడానికి %d చెల్లని ప్రయత్నాలు చేశారు. ఫోన్ ఇప్పుడు ఫ్యాక్టరీ డిఫాల్ట్కు రీసెట్ చేయబడుతుంది.""మీరు మీ అన్లాక్ నమూనాను %1$d సార్లు తప్పుగా గీసారు. మరో %2$d విఫల ప్రయత్నాల తర్వాత, ఇమెయిల్ ఖాతాను ఉపయోగించి మీ టాబ్లెట్ను అన్లాక్ చేయాల్సిందిగా మిమ్మల్ని అడుగుతారు.\n\n %3$d సెకన్లలో మళ్లీ ప్రయత్నించండి.""మీరు మీ అన్లాక్ నమూనాను %1$d సార్లు తప్పుగా గీశారు. మరో %2$d విఫల ప్రయత్నాల తర్వాత మీ Android TV పరికరాన్ని ఇమెయిల్ ఖాతా ద్వారా అన్లాక్ చేయాల్సిందిగా మిమ్మల్ని కోరడం జరుగుతుంది.\n\n %3$d సెకన్లలో మళ్లీ ప్రయత్నించండి.""మీరు మీ అన్లాక్ నమూనాను %1$d సార్లు తప్పుగా గీసారు. మరో %2$d విఫల ప్రయత్నాల తర్వాత, ఇమెయిల్ ఖాతాను ఉపయోగించి మీ ఫోన్ను అన్లాక్ చేయాల్సిందిగా మిమ్మల్ని అడుగుతారు.\n\n %3$d సెకన్లలో మళ్లీ ప్రయత్నించండి."
@@ -1789,7 +1789,7 @@
"అన్పిన్ చేయడానికి ముందు పిన్ కోసం అడుగు""అన్పిన్ చేయడానికి ముందు అన్లాక్ ఆకృతి కోసం అడుగు""అన్పిన్ చేయడానికి ముందు పాస్వర్డ్ కోసం అడుగు"
- "మీ నిర్వాహకులు ఇన్స్టాల్ చేసారు"
+ "మీ నిర్వాహకులు ఇన్స్టాల్ చేశారు""మీ నిర్వాహకులు నవీకరించారు""మీ నిర్వాహకులు తొలగించారు""సరే"
@@ -1871,7 +1871,7 @@
%1$d ఎంచుకోబడింది"వర్గీకరించబడలేదు"
- "మీరు ఈ నోటిఫికేషన్ల ప్రాముఖ్యతను సెట్ చేసారు."
+ "మీరు ఈ నోటిఫికేషన్ల ప్రాముఖ్యతను సెట్ చేశారు.""ఇందులో పేర్కొనబడిన వ్యక్తులను బట్టి ఇది చాలా ముఖ్యమైనది.""అనుకూల యాప్ నోటిఫికేషన్""%2$sతో కొత్త వినియోగదారుని సృష్టించడానికి %1$sను అనుమతించాలా (ఈ ఖాతాతో ఇప్పటికే ఒక వినియోగదారు ఉన్నారు) ?"
@@ -1894,7 +1894,7 @@
"%1$s ప్రస్తుతం అందుబాటులో లేదు.""ఈ యాప్ పాత వెర్షన్ Android కోసం రూపొందించబడింది మరియు అది సరిగ్గా పని చేయకపోవచ్చు. అప్డేట్ల కోసం తనిఖీ చేయడానికి ప్రయత్నించండి లేదా డెవలపర్ని సంప్రదించండి.""అప్డేట్ కోసం తనిఖీ చేయండి"
- "మీకు కొత్త సందేశాలు ఉన్నాయి"
+ "మీకు కొత్త మెసేజ్లు ఉన్నాయి""వీక్షించడానికి SMS యాప్ను తెరవండి""కొంత ఫంక్షనాలిటీ పరిమితం కావచ్చు""కార్యాలయ ప్రొఫైల్ లాక్ అయింది"
@@ -1962,8 +1962,8 @@
"ప్రశాంతంగా ఉండండి మరియు దగ్గర్లో తలదాచుకోండి.""వెంటనే తీర ప్రాంతాలు మరియు నదీ పరీవాహక ప్రాంతాలను ఖాళీ చేసి మెట్ట ప్రాంతాలకు తరలి వెళ్లండి.""ప్రశాంతంగా ఉండండి మరియు దగ్గర్లో తలదాచుకోండి."
- "అత్యవసర సందేశాల పరీక్ష"
- "ప్రత్యుత్తరం పంపండి"
+ "అత్యవసర మెసేజ్ల పరీక్ష"
+ "రిప్లయి పంపండి""వాయిస్ కోసం SIM అనుమతించబడదు""వాయిస్ కోసం SIM సదుపాయం లేదు"
From 5e41ab2531a5ae318c4b108b704d73fb44757064 Mon Sep 17 00:00:00 2001
From: Bill Yi
Date: Thu, 12 Aug 2021 11:26:05 +0000
Subject: [PATCH 042/671] Import translations. DO NOT MERGE ANYWHERE
Auto-generated-cl: translation import
Change-Id: Idec26abfd22fd28c553202a79b303b3a87a1312b
---
core/res/res/values-ta/strings.xml | 2 +-
core/res/res/values-te/strings.xml | 108 ++++++++++++++---------------
2 files changed, 55 insertions(+), 55 deletions(-)
diff --git a/core/res/res/values-ta/strings.xml b/core/res/res/values-ta/strings.xml
index 52d31c6bf034..1f1f036b51c3 100644
--- a/core/res/res/values-ta/strings.xml
+++ b/core/res/res/values-ta/strings.xml
@@ -166,7 +166,7 @@
"நெறிமுறை ஆதரிக்கப்படவில்லை.""பாதுகாப்பான இணைப்பை நிறுவ முடியவில்லை.""URL தவறாக உள்ளதால் பக்கத்தைத் திறக்க முடியவில்லை."
- "கோப்பை அணுக முடியவில்லை."
+ "ஃபைலை அணுக முடியவில்லை.""கோரப்பட்ட கோப்பைக் கண்டறிய முடியவில்லை.""மிக அதிகமான கோரிக்கைகள் செயல்படுத்தப்படுகின்றன. பிறகு முயற்சிக்கவும்.""%1$s க்கான உள்நுழைவு பிழை"
diff --git a/core/res/res/values-te/strings.xml b/core/res/res/values-te/strings.xml
index c569f2f4270b..387592f68e56 100644
--- a/core/res/res/values-te/strings.xml
+++ b/core/res/res/values-te/strings.xml
@@ -82,7 +82,7 @@
"వాయిస్ సేవ లేదు""వాయిస్ సేవ లేదా అత్యవసర కాలింగ్ లేదు""మీ క్యారియర్ తాత్కాలికంగా ఆఫ్ చేయబడింది"
- "SIM %d కోసం మీ క్యారియర్ తాత్కాలికంగా ఆఫ్ చేసారు"
+ "SIM %d కోసం మీ క్యారియర్ తాత్కాలికంగా ఆఫ్ చేశారు""మొబైల్ నెట్వర్క్ అందుబాటులో లేదు""ప్రాధాన్య నెట్వర్క్ను మార్చుకోవడానికి ప్రయత్నించండి. మార్చడానికి నొక్కండి.""అత్యవసర కాలింగ్ అందుబాటులో లేదు"
@@ -91,8 +91,8 @@
"కాల్ ఫార్వార్డింగ్""అత్యవసర కాల్బ్యాక్ మోడ్""మొబైల్ డేటా స్థితి"
- "SMS సందేశాలు"
- "వాయిస్ మెయిల్ సందేశాలు"
+ "SMS మెసేజ్లు"
+ "వాయిస్ మెయిల్ మెసేజ్లు""Wi-Fi కాలింగ్""SIM స్టేటస్""అధిక ప్రాధాన్యత గల SIM స్థితి"
@@ -124,7 +124,7 @@
"సేవ కోసం శోధిస్తోంది""Wi‑Fi కాలింగ్ని సెటప్ చేయడం సాధ్యపడలేదు"
- "Wi-Fiతో కాల్స్ను చేయడానికి మరియు సందేశాలను పంపించడానికి, మొదట ఈ సేవను సెటప్ చేయాల్సిందిగా మీ క్యారియర్కి చెప్పండి. ఆ తర్వాత సెట్టింగ్ల నుండి Wi-Fi కాలింగ్ని మళ్లీ ఆన్ చేయండి. (లోపం కోడ్: %1$s)"
+ "Wi-Fiతో కాల్స్ను చేయడానికి మరియు మెసేజ్లను పంపించడానికి, మొదట ఈ సేవను సెటప్ చేయాల్సిందిగా మీ క్యారియర్కి చెప్పండి. ఆ తర్వాత సెట్టింగ్ల నుండి Wi-Fi కాలింగ్ని మళ్లీ ఆన్ చేయండి. (లోపం కోడ్: %1$s)""మీ క్యారియర్తో Wi‑Fi కాలింగ్ని నమోదు చేయడంలో సమస్య: %1$s"
@@ -187,7 +187,7 @@
"కార్యాలయ ప్రొఫైల్ తొలగించబడింది""కార్యాలయ ప్రొఫైల్ నిర్వాహక యాప్ లేదు లేదా పాడైంది. తత్ఫలితంగా, మీ కార్యాలయ ప్రొఫైల్ మరియు సంబంధిత డేటా తొలగించబడ్డాయి. సహాయం కోసం మీ నిర్వాహకులను సంప్రదించండి.""ఈ పరికరంలో మీ కార్యాలయ ప్రొఫైల్ ఇప్పుడు అందుబాటులో లేదు"
- "చాలా ఎక్కువ పాస్వర్డ్ ప్రయత్నాలు చేసారు"
+ "చాలా ఎక్కువ పాస్వర్డ్ ప్రయత్నాలు చేశారు""వ్యక్తిగత వినియోగం కోసం నిర్వాహకులు పరికరాన్ని తీసి వేశారు""పరికరం నిర్వహించబడింది""మీ సంస్థ ఈ పరికరాన్ని నిర్వహిస్తుంది మరియు నెట్వర్క్ ట్రాఫిక్ని పర్యవేక్షించవచ్చు. వివరాల కోసం నొక్కండి."
@@ -244,7 +244,7 @@
"సెషన్ను ముగించు""స్క్రీన్షాట్""బగ్ రిపోర్ట్"
- "ఇది ఇ-మెయిల్ సందేశం రూపంలో పంపడానికి మీ ప్రస్తుత పరికర స్థితి గురించి సమాచారాన్ని సేకరిస్తుంది. బగ్ రిపోర్ట్ను ప్రారంభించడం మొదలుకొని పంపడానికి సిద్ధం చేసే వరకు ఇందుకు కొంత సమయం పడుతుంది; దయచేసి ఓపిక పట్టండి."
+ "ఇది ఇ-మెయిల్ మెసేజ్ రూపంలో పంపడానికి మీ ప్రస్తుత పరికర స్థితి గురించి సమాచారాన్ని సేకరిస్తుంది. బగ్ రిపోర్ట్ను ప్రారంభించడం మొదలుకొని పంపడానికి సిద్ధం చేసే వరకు ఇందుకు కొంత సమయం పడుతుంది; దయచేసి ఓపిక పట్టండి.""ప్రభావశీల రిపోర్ట్""చాలా సందర్భాల్లో దీన్ని ఉపయోగించండి. ఇది రిపోర్ట్ ప్రోగ్రెస్ను ట్రాక్ చేయడానికి, సమస్య గురించి మరిన్ని వివరాలను నమోదు చేయడానికి మరియు స్క్రీన్షాట్లు తీయడానికి మిమ్మల్ని అనుమతిస్తుంది. ఇది నివేదించడానికి ఎక్కువ సమయం పట్టే తక్కువ వినియోగ విభాగాలను విడిచిపెట్టవచ్చు.""పూర్తి రిపోర్ట్"
@@ -272,8 +272,8 @@
"సెక్యూరిటీ""కార్ మోడ్""ఖాతా స్థితి"
- "డెవలపర్ సందేశాలు"
- "ముఖ్యమైన డెవలపర్ సందేశాలు"
+ "డెవలపర్ మెసేజ్లు"
+ "ముఖ్యమైన డెవలపర్ మెసేజ్లు""అప్డేట్లు""నెట్వర్క్ స్థితి""నెట్వర్క్ హెచ్చరికలు"
@@ -300,7 +300,7 @@
"Calendar""మీ క్యాలెండర్ను యాక్సెస్ చేయడానికి""SMS"
- "SMS సందేశాలను పంపడం మరియు వీక్షించడం"
+ "SMS మెసేజ్లను పంపడం మరియు వీక్షించడం""ఫైల్స్, మీడియా""మీ పరికరంలోని ఫోటోలు, మీడియా మరియు ఫైళ్లను యాక్సెస్ చేయడానికి""మైక్రోఫోన్"
@@ -343,24 +343,24 @@
"కాల్ను వేరే నంబర్కు దారి మళ్లించే లేదా మొత్తంగా కాల్ను ఆపివేసే ఎంపిక సహాయంతో అవుట్గోయింగ్ కాల్ సమయంలో డయల్ చేయబడుతున్న నంబర్ను చూడటానికి యాప్ను అనుమతిస్తుంది.""ఫోన్ కాల్స్కు సమాధానమివ్వు""ఇన్కమింగ్ ఫోన్ కాల్స్కు సమాధానమివ్వడానికి యాప్ను అనుమతిస్తుంది."
- "వచన సందేశాలను (SMS) స్వీకరించడం"
- "SMS సందేశాలను స్వీకరించడానికి మరియు ప్రాసెస్ చేయడానికి యాప్ను అనుమతిస్తుంది. యాప్ మీ డివైజ్కు పంపబడిన సందేశాలను మీకు చూపకుండానే పర్యవేక్షించగలదని లేదా తొలగించగలదని దీని అర్థం."
- "వచన సందేశాలను (MMS) స్వీకరించడం"
- "MMS సందేశాలను స్వీకరించడానికి మరియు ప్రాసెస్ చేయడానికి యాప్ను అనుమతిస్తుంది. యాప్ మీ డివైజ్కు పంపబడిన సందేశాలను మీకు చూపకుండానే పర్యవేక్షించగలదని లేదా తొలగించగలదని దీని అర్థం."
- "సెల్ ప్రసార సందేశాలను ఫార్వర్డ్ చేయడం"
- "సెల్ ప్రసార సందేశాలను అందుకుంటే, వాటిని ఫార్వర్డ్ చేసే విధంగా సెల్ ప్రసార మాడ్యూల్కు కట్టుబడి ఉండటానికి యాప్ను అనుమతిస్తుంది. సెల్ ప్రసార హెచ్చరికలు అత్యవసర పరిస్థితుల గురించి మిమ్మల్ని హెచ్చరించడానికి కొన్ని స్థానాల్లో అందించబడతాయి. అత్యవసర సెల్ ప్రసారం అందుకున్నప్పుడు హానికరమైన యాప్లు మీ పరికరం యొక్క పనితీరు లేదా నిర్వహణకు అంతరాయం కలిగించవచ్చు."
- "సెల్ ప్రసార సందేశాలను చదవడం"
- "మీ పరికరం స్వీకరించిన సెల్ ప్రసార సందేశాలను చదవడానికి యాప్ను అనుమతిస్తుంది. సెల్ ప్రసార హెచ్చరికలు అత్యవసర పరిస్థితుల గురించి మిమ్మల్ని హెచ్చరించడానికి కొన్ని స్థానాల్లో అందించబడతాయి. అత్యవసర సెల్ ప్రసారం స్వీకరించినప్పుడు హానికరమైన యాప్లు మీ పరికరం యొక్క పనితీరు లేదా నిర్వహణకు అంతరాయం కలిగించవచ్చు."
+ "వచన మెసేజ్లను (SMS) స్వీకరించడం"
+ "SMS మెసేజ్లను స్వీకరించడానికి మరియు ప్రాసెస్ చేయడానికి యాప్ను అనుమతిస్తుంది. యాప్ మీ డివైజ్కు పంపబడిన మెసేజ్లను మీకు చూపకుండానే పర్యవేక్షించగలదని లేదా తొలగించగలదని దీని అర్థం."
+ "వచన మెసేజ్లను (MMS) స్వీకరించడం"
+ "MMS మెసేజ్లను స్వీకరించడానికి మరియు ప్రాసెస్ చేయడానికి యాప్ను అనుమతిస్తుంది. యాప్ మీ డివైజ్కు పంపబడిన మెసేజ్లను మీకు చూపకుండానే పర్యవేక్షించగలదని లేదా తొలగించగలదని దీని అర్థం."
+ "సెల్ ప్రసార మెసేజ్లను ఫార్వర్డ్ చేయడం"
+ "సెల్ ప్రసార మెసేజ్లను అందుకుంటే, వాటిని ఫార్వర్డ్ చేసే విధంగా సెల్ ప్రసార మాడ్యూల్కు కట్టుబడి ఉండటానికి యాప్ను అనుమతిస్తుంది. సెల్ ప్రసార హెచ్చరికలు అత్యవసర పరిస్థితుల గురించి మిమ్మల్ని హెచ్చరించడానికి కొన్ని స్థానాల్లో అందించబడతాయి. అత్యవసర సెల్ ప్రసారం అందుకున్నప్పుడు హానికరమైన యాప్లు మీ పరికరం యొక్క పనితీరు లేదా నిర్వహణకు అంతరాయం కలిగించవచ్చు."
+ "సెల్ ప్రసార మెసేజ్లను చదవడం"
+ "మీ పరికరం స్వీకరించిన సెల్ ప్రసార మెసేజ్లను చదవడానికి యాప్ను అనుమతిస్తుంది. సెల్ ప్రసార హెచ్చరికలు అత్యవసర పరిస్థితుల గురించి మిమ్మల్ని హెచ్చరించడానికి కొన్ని స్థానాల్లో అందించబడతాయి. అత్యవసర సెల్ ప్రసారం స్వీకరించినప్పుడు హానికరమైన యాప్లు మీ పరికరం యొక్క పనితీరు లేదా నిర్వహణకు అంతరాయం కలిగించవచ్చు.""చందా చేయబడిన ఫీడ్లను చదవడం""ప్రస్తుతం సమకాలీకరించిన ఫీడ్ల గురించి వివరాలను పొందడానికి యాప్ను అనుమతిస్తుంది."
- "SMS సందేశాలను పంపడం మరియు వీక్షించడం"
- "SMS సందేశాలు పంపడానికి యాప్ను అనుమతిస్తుంది. దీని వలన ఊహించని ఛార్జీలు విధించబడవచ్చు. హానికరమైన యాప్లు మీ నిర్ధారణ లేకుండానే సందేశాలను పంపడం ద్వారా మీకు డబ్బు ఖర్చయ్యేలా చేయవచ్చు."
- "మీ వచన సందేశాలు (SMS లేదా MMS) చదవడం"
- "ఈ యాప్ మీ టాబ్లెట్లో నిల్వ చేసిన అన్ని SMS (వచన) సందేశాలను చదవగలదు."
+ "SMS మెసేజ్లను పంపడం మరియు వీక్షించడం"
+ "SMS మెసేజ్లు పంపడానికి యాప్ను అనుమతిస్తుంది. దీని వలన ఊహించని ఛార్జీలు విధించబడవచ్చు. హానికరమైన యాప్లు మీ నిర్ధారణ లేకుండానే మెసేజ్లను పంపడం ద్వారా మీకు డబ్బు ఖర్చయ్యేలా చేయవచ్చు."
+ "మీ వచన మెసేజ్లు (SMS లేదా MMS) చదవడం"
+ "ఈ యాప్ మీ టాబ్లెట్లో నిల్వ చేసిన అన్ని SMS (వచన) మెసేజ్లను చదవగలదు.""ఈ యాప్ మీ Android TV పరికరంలో నిల్వ అయిన SMS (వచనం) సందేశాలన్నింటినీ చదవగలదు."
- "ఈ యాప్ మీ ఫోన్లో నిల్వ చేసిన అన్ని SMS (వచన) సందేశాలను చదవగలదు."
- "వచన సందేశాలను (WAP) స్వీకరించడం"
- "WAP సందేశాలను స్వీకరించడానికి మరియు ప్రాసెస్ చేయడానికి యాప్ను అనుమతిస్తుంది. ఈ అనుమతి మీకు పంపబడిన సందేశాలను మీకు చూపకుండానే పర్యవేక్షించగల లేదా తొలగించగల సామర్థ్యాన్ని కలిగి ఉంటుంది."
+ "ఈ యాప్ మీ ఫోన్లో నిల్వ చేసిన అన్ని SMS (వచన) మెసేజ్లను చదవగలదు."
+ "వచన మెసేజ్లను (WAP) స్వీకరించడం"
+ "WAP మెసేజ్లను స్వీకరించడానికి మరియు ప్రాసెస్ చేయడానికి యాప్ను అనుమతిస్తుంది. ఈ అనుమతి మీకు పంపబడిన మెసేజ్లను మీకు చూపకుండానే పర్యవేక్షించగల లేదా తొలగించగల సామర్థ్యాన్ని కలిగి ఉంటుంది.""అమలవుతున్న యాప్లను పునరుద్ధరించడం""ప్రస్తుతం మరియు ఇటీవల అమలవుతున్న విధుల గురించి వివరణాత్మక సమాచారాన్ని తిరిగి పొందడానికి యాప్ను అనుమతిస్తుంది. ఇది పరికరంలో ఉపయోగించబడిన యాప్ల గురించి సమాచారాన్ని కనుగొనడానికి యాప్ను అనుమతించవచ్చు.""ప్రొఫైల్ మరియు పరికర యజమానులను నిర్వహించడం"
@@ -416,9 +416,9 @@
"ఈ యాప్ మీ Android TV పరికరంలో నిల్వ చేసిన క్యాలెండర్ ఈవెంట్లన్నీ చదవగలదు, మీ క్యాలెండర్ డేటాను షేర్ చేయగలదు లేదా సేవ్ చేయగలదు.""ఈ యాప్ మీ ఫోన్లో నిల్వ చేసిన క్యాలెండర్ ఈవెంట్లన్నీ చదవగలదు మరియు మీ క్యాలెండర్ డేటాను షేర్ చేయగలదు లేదా సేవ్ చేయగలదు.""యజమానికి తెలియకుండానే క్యాలెండర్ ఈవెంట్లను జోడించి లేదా సవరించి, అతిథులకు ఇమెయిల్ పంపడం"
- "ఈ యాప్ మీ టాబ్లెట్లో క్యాలెండర్ ఈవెంట్లను జోడించగలదు, తీసివేయగలదు లేదా మార్చగలదు. ఈ యాప్ క్యాలెండర్ యజమానుల నుండి వచ్చినట్లుగా సందేశాలను పంపగలదు లేదా ఈవెంట్లను వాటి యజమానులకు తెలియకుండానే మార్చగలదు."
- "ఈ యాప్ మీ Android TV పరికరంలో క్యాలెండర్ ఈవెంట్లను జోడించగలదు, తీసివేయగలదు లేదా మార్చగలదు. ఈ యాప్ క్యాలెండర్ యజమానుల నుండి వచ్చినట్లుగా సందేశాలను పంపగలదు లేదా ఈవెంట్లను వాటి యజమానులకు తెలియకుండానే మార్చగలదు."
- "ఈ యాప్ మీ ఫోన్లో క్యాలెండర్ ఈవెంట్లను జోడించగలదు, తీసివేయగలదు లేదా మార్చగలదు. ఈ యాప్ క్యాలెండర్ యజమానుల నుండి వచ్చినట్లుగా సందేశాలను పంపగలదు లేదా ఈవెంట్లను వాటి యజమానులకు తెలియకుండానే మార్చగలదు."
+ "ఈ యాప్ మీ టాబ్లెట్లో క్యాలెండర్ ఈవెంట్లను జోడించగలదు, తీసివేయగలదు లేదా మార్చగలదు. ఈ యాప్ క్యాలెండర్ యజమానుల నుండి వచ్చినట్లుగా మెసేజ్లను పంపగలదు లేదా ఈవెంట్లను వాటి యజమానులకు తెలియకుండానే మార్చగలదు."
+ "ఈ యాప్ మీ Android TV పరికరంలో క్యాలెండర్ ఈవెంట్లను జోడించగలదు, తీసివేయగలదు లేదా మార్చగలదు. ఈ యాప్ క్యాలెండర్ యజమానుల నుండి వచ్చినట్లుగా మెసేజ్లను పంపగలదు లేదా ఈవెంట్లను వాటి యజమానులకు తెలియకుండానే మార్చగలదు."
+ "ఈ యాప్ మీ ఫోన్లో క్యాలెండర్ ఈవెంట్లను జోడించగలదు, తీసివేయగలదు లేదా మార్చగలదు. ఈ యాప్ క్యాలెండర్ యజమానుల నుండి వచ్చినట్లుగా మెసేజ్లను పంపగలదు లేదా ఈవెంట్లను వాటి యజమానులకు తెలియకుండానే మార్చగలదు.""అదనపు స్థాన ప్రదాత ఆదేశాలను యాక్సెస్ చేయడం""అదనపు స్థాన ప్రదాత ఆదేశాలను యాక్సెస్ చేయడానికి యాప్ను అనుమతిస్తుంది. ఇది GPS లేదా ఇతర స్థాన మూలాల నిర్వహణలో యాప్ ప్రమేయం ఉండేలా అనుమతించవచ్చు.""స్క్రీన్పై ఉన్నప్పుడు మాత్రమే ఖచ్చితమైన స్థానాన్ని యాక్సెస్ చేయండి"
@@ -556,8 +556,8 @@
"వేలిముద్రను నిల్వ చేయడం సాధ్యపడదు. దయచేసి ఇప్పటికే ఉన్న వేలిముద్రను తీసివేయండి.""వేలిముద్ర గడువు సమయం చేరుకుంది. మళ్లీ ప్రయత్నించండి.""వేలిముద్ర కార్యకలాపం రద్దయింది."
- "వేలిముద్ర చర్యని వినియోగదారు రద్దు చేసారు."
- "చాలా ఎక్కువ ప్రయత్నాలు చేసారు. తర్వాత మళ్లీ ప్రయత్నించండి."
+ "వేలిముద్ర చర్యని వినియోగదారు రద్దు చేశారు."
+ "చాలా ఎక్కువ ప్రయత్నాలు చేశారు. తర్వాత మళ్లీ ప్రయత్నించండి.""అనేకసార్లు ప్రయత్నించారు. వేలిముద్ర సెన్సార్ నిలిపివేయబడింది.""మళ్లీ ప్రయత్నించండి.""వేలిముద్రలు నమోదు చేయబడలేదు."
@@ -601,7 +601,7 @@
"కొత్త ముఖం డేటాను నిల్వ చేయడం కాదు. మొదట పాతది తొలిగించండి.""ముఖ కార్యకలాపం రద్దయింది.""ఫేస్ అన్లాక్ను యూజర్ రద్దు చేశారు."
- "చాలా ఎక్కువ ప్రయత్నాలు చేసారు. తర్వాత మళ్లీ ప్రయత్నించండి."
+ "చాలా ఎక్కువ ప్రయత్నాలు చేశారు. తర్వాత మళ్లీ ప్రయత్నించండి.""చాలా సార్లు ప్రయత్నించారు. ఫేస్ అన్లాక్ డిజేబుల్ చేయబడింది.""ముఖం ధృవీకరించలేకపోయింది. మళ్లీ ప్రయత్నించండి.""మీరు ఫేస్ అన్లాక్ను సెటప్ చేయలేదు."
@@ -662,7 +662,7 @@
"DRM ప్రమాణపత్రాలను తీసివేయడం""DRM ప్రమాణపత్రాలను తీసివేయడానికి యాప్ను అనుమతిస్తుంది. సాధారణ యాప్లకు ఎప్పటికీ అవసరం ఉండదు.""క్యారియర్ సందేశ సేవకు అనుబంధించడం"
- "క్యారియర్ సందేశ సేవ యొక్క అగ్ర-స్థాయి ఇంటర్ఫేస్కు అనుబంధించడానికి హోల్డర్ను అనుమతిస్తుంది. సాధారణ యాప్లకు ఎప్పటికీ అవసరం ఉండదు."
+ "క్యారియర్ మెసేజింగ్ సర్వీస్ యొక్క అగ్ర-స్థాయి ఇంటర్ఫేస్కు అనుబంధించడానికి హోల్డర్ను అనుమతిస్తుంది. సాధారణ యాప్లకు ఎప్పటికీ అవసరం ఉండదు.""క్యారియర్ సేవలకు అనుబంధించడం""క్యారియర్ సేవలకు అనుబంధించడానికి హోల్డర్ను అనుమతిస్తుంది. సాధారణ యాప్లకు ఎప్పటికీ అవసరం ఉండదు.""అంతరాయం కలిగించవద్దును యాక్సెస్ చేయడం"
@@ -858,21 +858,21 @@
"సిమ్ కార్డు లాక్ చేయబడింది.""సిమ్ కార్డును అన్లాక్ చేస్తోంది…""మీరు మీ అన్లాక్ నమూనాను %1$d సార్లు తప్పుగా గీసారు. \n\n%2$d సెకన్లలో మళ్లీ ప్రయత్నించండి."
- "మీరు మీ పాస్వర్డ్ను %1$d సార్లు తప్పుగా టైప్ చేసారు. \n\n%2$d సెకన్లలో మళ్లీ ప్రయత్నించండి."
- "మీరు మీ పిన్ను %1$d సార్లు తప్పుగా టైప్ చేసారు. \n\n%2$d సెకన్లలో మళ్లీ ప్రయత్నించండి."
+ "మీరు మీ పాస్వర్డ్ను %1$d సార్లు తప్పుగా టైప్ చేశారు. \n\n%2$d సెకన్లలో మళ్లీ ప్రయత్నించండి."
+ "మీరు మీ పిన్ను %1$d సార్లు తప్పుగా టైప్ చేశారు. \n\n%2$d సెకన్లలో మళ్లీ ప్రయత్నించండి.""మీరు మీ అన్లాక్ నమూనాని %1$d సార్లు తప్పుగా గీసారు. మరో %2$d విజయవంతం కాని ప్రయత్నాల తర్వాత, మీరు మీ Google సైన్ఇన్ను ఉపయోగించి మీ టాబ్లెట్ను అన్లాక్ చేయడానికి అడగబడతారు.\n\n %3$d సెకన్లలో మళ్లీ ప్రయత్నించండి.""మీరు మీ అన్లాక్ నమూనాని %1$d సార్లు తప్పుగా గీసారు. మరో %2$d విఫల ప్రయత్నాల తర్వాత, మీరు మీ Google సైన్ఇన్ను ఉపయోగించి మీ Android TV పరికరాన్ని అన్లాక్ చేయాల్సిందిగా మీకు తెలపబడుతుంది.\n\n %3$d సెకన్లలో మళ్లీ ప్రయత్నించండి.""మీరు మీ అన్లాక్ నమూనాని %1$d సార్లు తప్పుగా గీసారు. మరో %2$d విజయవంతం కాని ప్రయత్నాల తర్వాత, మీరు మీ Google సైన్ఇన్ను ఉపయోగించి మీ ఫోన్ను అన్లాక్ చేయడానికి అడగబడతారు.\n\n %3$d సెకన్లలో మళ్లీ ప్రయత్నించండి.""మీరు టాబ్లెట్ను అన్లాక్ చేయడానికి %1$d సార్లు తప్పుగా ప్రయత్నించారు. మరో %2$d వైఫల్య ప్రయత్నాల తర్వాత, టాబ్లెట్ ఫ్యాక్టరీ డిఫాల్ట్కు రీసెట్ చేయబడుతుంది మరియు మొత్తం వినియోగదారు డేటాను కోల్పోవడం సంభవిస్తుంది."
- "మీరు మీ Android TV పరికరాన్ని అన్లాక్ చేయడానికి %1$d సార్లు విఫల ప్రయత్నాలు చేసారు. మరో %2$d విఫల ప్రయత్నాల తర్వాత, మీ Android TV పరికరం ఫ్యాక్టరీ డిఫాల్ట్కి రీసెట్ చేయబడుతుంది, అలాగే వినియోగదారు డేటా మొత్తాన్ని కోల్పోతారు."
+ "మీరు మీ Android TV పరికరాన్ని అన్లాక్ చేయడానికి %1$d సార్లు విఫల ప్రయత్నాలు చేశారు. మరో %2$d విఫల ప్రయత్నాల తర్వాత, మీ Android TV పరికరం ఫ్యాక్టరీ డిఫాల్ట్కి రీసెట్ చేయబడుతుంది, అలాగే వినియోగదారు డేటా మొత్తాన్ని కోల్పోతారు.""మీరు ఫోన్ను అన్లాక్ చేయడానికి %1$d సార్లు తప్పుగా ప్రయత్నించారు. మరో %2$d వైఫల్య ప్రయత్నాల తర్వాత, ఫోన్ ఫ్యాక్టరీ డిఫాల్ట్కు రీసెట్ చేయబడుతుంది మరియు మొత్తం వినియోగదారు డేటాను కోల్పోవడం సంభవిస్తుంది.""మీరు టాబ్లెట్ను అన్లాక్ చేయడానికి %d సార్లు తప్పుగా ప్రయత్నించారు. టాబ్లెట్ ఇప్పుడు ఫ్యాక్టరీ డిఫాల్ట్కు రీసెట్ చేయబడుతుంది."
- "మీరు మీ Android TV పరికరాన్ని అన్లాక్ చేయడానికి %d సార్లు విఫల ప్రయత్నాలు చేసారు. మీ Android TV పరికరం ఇప్పుడు ఫ్యాక్టరీ రీసెట్ చేయబడుతుంది."
+ "మీరు మీ Android TV పరికరాన్ని అన్లాక్ చేయడానికి %d సార్లు విఫల ప్రయత్నాలు చేశారు. మీ Android TV పరికరం ఇప్పుడు ఫ్యాక్టరీ రీసెట్ చేయబడుతుంది.""మీరు ఫోన్ను అన్లాక్ చేయడానికి %d సార్లు తప్పుగా ప్రయత్నించారు. ఫోన్ ఇప్పుడు ఫ్యాక్టరీ డిఫాల్ట్కు రీసెట్ చేయబడుతుంది.""%d సెకన్లలో మళ్లీ ప్రయత్నించండి.""నమూనాను మర్చిపోయారా?""ఖాతా అన్లాక్"
- "చాలా ఎక్కువ ఆకృతి ప్రయత్నాలు చేసారు"
+ "చాలా ఎక్కువ ఆకృతి ప్రయత్నాలు చేశారు""అన్లాక్ చేయడానికి, మీ Google ఖాతాతో సైన్ ఇన్ చేయండి.""వినియోగదారు పేరు (ఇమెయిల్)""పాస్వర్డ్"
@@ -959,7 +959,7 @@
"అలారం సెట్ చేయడం""ఇన్స్టాల్ చేయబడిన అలారం గడియారం యాప్లో అలారంను సెట్ చేయడానికి యాప్ను అనుమతిస్తుంది. కొన్ని అలారం గల గడియారం యాప్లు ఈ ఫీచర్ను అమలు చేయకపోవచ్చు.""వాయిస్ మెయిల్ను జోడించడం"
- "మీ వాయిస్ మెయిల్ ఇన్బాక్స్కి సందేశాలను జోడించడానికి యాప్ను అనుమతిస్తుంది."
+ "మీ వాయిస్ మెయిల్ ఇన్బాక్స్కి మెసేజ్లను జోడించడానికి యాప్ను అనుమతిస్తుంది.""బ్రౌజర్ భౌగోళిక స్థానం అనుమతులను సవరించడం""బ్రౌజర్ యొక్క భౌగోళిక స్థానం అనుమతులను సవరించడానికి యాప్ను అనుమతిస్తుంది. హానికరమైన యాప్లు ఏకపక్ష వెబ్ సైట్లకు స్థాన సమాచారాన్ని అనుమతించడానికి దీన్ని ఉపయోగించవచ్చు.""మీరు బ్రౌజర్ ఈ పాస్వర్డ్ను గుర్తుపెట్టుకోవాలని కోరుకుంటున్నారా?"
@@ -1261,11 +1261,11 @@
"ఆమోదిస్తున్నాను""తిరస్కరిస్తున్నాను""అక్షరాన్ని చొప్పించండి"
- "SMS సందేశాలు పంపుతోంది"
- "<b>%1$s</b> పెద్ద సంఖ్యలో SMS సందేశాలను పంపుతోంది. సందేశాలను పంపడం కొనసాగించడానికి మీరు ఈ యాప్ను అనుమతించాలనుకుంటున్నారా?"
+ "SMS మెసేజ్లు పంపుతోంది"
+ "<b>%1$s</b> పెద్ద సంఖ్యలో SMS మెసేజ్లను పంపుతోంది. మెసేజ్లను పంపడం కొనసాగించడానికి మీరు ఈ యాప్ను అనుమతించాలనుకుంటున్నారా?""అనుమతిస్తున్నాను""తిరస్కరిస్తున్నాను"
- "<b>%1$s</b> ఒక సందేశాన్ని <b>%2$s</b>కి పంపాలనుకుంటోంది."
+ "<b>%1$s</b> ఒక మెసేజ్ను <b>%2$s</b>కి పంపాలనుకుంటోంది.""దీని వలన మీ మొబైల్ ఖాతాకు ""ఛార్జీలు విధించబడవచ్చు"".""దీని వలన మీ మొబైల్ ఖాతాకు ఛార్జీలు విధించబడవచ్చు.""పంపు"
@@ -1598,7 +1598,7 @@
"PUK కోడ్ 8 సంఖ్యలు ఉండాలి.""సరైన PUK కోడ్ను మళ్లీ నమోదు చేయండి. పునరావృత ప్రయత్నాల వలన సిమ్ శాశ్వతంగా నిలిపివేయబడుతుంది.""పిన్ కోడ్లు సరిపోలలేదు"
- "చాలా ఎక్కువ ఆకృతి ప్రయత్నాలు చేసారు"
+ "చాలా ఎక్కువ ఆకృతి ప్రయత్నాలు చేశారు""అన్లాక్ చేయడానికి, మీ Google ఖాతాతో సైన్ ఇన్ చేయండి.""వినియోగదారు పేరు (ఇమెయిల్)""పాస్వర్డ్"
@@ -1606,15 +1606,15 @@
"చెల్లని వినియోగదారు పేరు లేదా పాస్వర్డ్.""మీ వినియోగదారు పేరు లేదా పాస్వర్డ్ను మర్చిపోయారా?\n""google.com/accounts/recovery""ని సందర్శించండి.""ఖాతాను తనిఖీ చేస్తోంది…"
- "మీరు మీ పిన్ను %1$d సార్లు తప్పుగా టైప్ చేసారు. \n\n%2$d సెకన్లలో మళ్లీ ప్రయత్నించండి."
- "మీరు మీ పాస్వర్డ్ను %1$d సార్లు తప్పుగా టైప్ చేసారు. \n\n%2$d సెకన్లలో మళ్లీ ప్రయత్నించండి."
+ "మీరు మీ పిన్ను %1$d సార్లు తప్పుగా టైప్ చేశారు. \n\n%2$d సెకన్లలో మళ్లీ ప్రయత్నించండి."
+ "మీరు మీ పాస్వర్డ్ను %1$d సార్లు తప్పుగా టైప్ చేశారు. \n\n%2$d సెకన్లలో మళ్లీ ప్రయత్నించండి.""మీరు మీ అన్లాక్ నమూనాను %1$d సార్లు తప్పుగా గీసారు. \n\n%2$d సెకన్లలో మళ్లీ ప్రయత్నించండి."
- "మీరు టాబ్లెట్ను అన్లాక్ చేయడానికి %1$d చెల్లని ప్రయత్నాలు చేసారు. మరో %2$d విఫల ప్రయత్నాల తర్వాత, టాబ్లెట్ ఫ్యాక్టరీ డిఫాల్ట్కు రీసెట్ చేయబడుతుంది మరియు మొత్తం వినియోగదారు డేటాను కోల్పోవడం సంభవిస్తుంది."
- "మీరు మీ Android TV పరికరాన్ని అన్లాక్ చేయడానికి %1$d సార్లు విఫల ప్రయత్నాలు చేసారు. మరో %2$d విఫల ప్రయత్నాల తర్వాత, మీ Android TV పరికరం ఫ్యాక్టరీ డిఫాల్ట్కి రీసెట్ చేయబడుతుంది, అలాగే వినియోగదారు డేటా మొత్తాన్ని కోల్పోతారు."
- "మీరు ఫోన్ను అన్లాక్ చేయడానికి %1$d చెల్లని ప్రయత్నాలు చేసారు. మరో %2$d విఫల ప్రయత్నాల తర్వాత, ఫోన్ ఫ్యాక్టరీ డిఫాల్ట్కు రీసెట్ చేయబడుతుంది మరియు మొత్తం వినియోగదారు డేటాను కోల్పోవడం సంభవిస్తుంది."
- "మీరు టాబ్లెట్ను అన్లాక్ చేయడానికి %d చెల్లని ప్రయత్నాలు చేసారు. టాబ్లెట్ ఇప్పుడు ఫ్యాక్టరీ డిఫాల్ట్కు రీసెట్ చేయబడుతుంది."
- "మీరు మీ Android TV పరికరాన్ని అన్లాక్ చేయడానికి %d సార్లు విఫల ప్రయత్నాలు చేసారు. మీ Android TV పరికరం ఇప్పుడు ఫ్యాక్టరీ రీసెట్ చేయబడుతుంది."
- "మీరు ఫోన్ను అన్లాక్ చేయడానికి %d చెల్లని ప్రయత్నాలు చేసారు. ఫోన్ ఇప్పుడు ఫ్యాక్టరీ డిఫాల్ట్కు రీసెట్ చేయబడుతుంది."
+ "మీరు టాబ్లెట్ను అన్లాక్ చేయడానికి %1$d చెల్లని ప్రయత్నాలు చేశారు. మరో %2$d విఫల ప్రయత్నాల తర్వాత, టాబ్లెట్ ఫ్యాక్టరీ డిఫాల్ట్కు రీసెట్ చేయబడుతుంది మరియు మొత్తం వినియోగదారు డేటాను కోల్పోవడం సంభవిస్తుంది."
+ "మీరు మీ Android TV పరికరాన్ని అన్లాక్ చేయడానికి %1$d సార్లు విఫల ప్రయత్నాలు చేశారు. మరో %2$d విఫల ప్రయత్నాల తర్వాత, మీ Android TV పరికరం ఫ్యాక్టరీ డిఫాల్ట్కి రీసెట్ చేయబడుతుంది, అలాగే వినియోగదారు డేటా మొత్తాన్ని కోల్పోతారు."
+ "మీరు ఫోన్ను అన్లాక్ చేయడానికి %1$d చెల్లని ప్రయత్నాలు చేశారు. మరో %2$d విఫల ప్రయత్నాల తర్వాత, ఫోన్ ఫ్యాక్టరీ డిఫాల్ట్కు రీసెట్ చేయబడుతుంది మరియు మొత్తం వినియోగదారు డేటాను కోల్పోవడం సంభవిస్తుంది."
+ "మీరు టాబ్లెట్ను అన్లాక్ చేయడానికి %d చెల్లని ప్రయత్నాలు చేశారు. టాబ్లెట్ ఇప్పుడు ఫ్యాక్టరీ డిఫాల్ట్కు రీసెట్ చేయబడుతుంది."
+ "మీరు మీ Android TV పరికరాన్ని అన్లాక్ చేయడానికి %d సార్లు విఫల ప్రయత్నాలు చేశారు. మీ Android TV పరికరం ఇప్పుడు ఫ్యాక్టరీ రీసెట్ చేయబడుతుంది."
+ "మీరు ఫోన్ను అన్లాక్ చేయడానికి %d చెల్లని ప్రయత్నాలు చేశారు. ఫోన్ ఇప్పుడు ఫ్యాక్టరీ డిఫాల్ట్కు రీసెట్ చేయబడుతుంది.""మీరు మీ అన్లాక్ నమూనాను %1$d సార్లు తప్పుగా గీసారు. మరో %2$d విఫల ప్రయత్నాల తర్వాత, ఇమెయిల్ ఖాతాను ఉపయోగించి మీ టాబ్లెట్ను అన్లాక్ చేయాల్సిందిగా మిమ్మల్ని అడుగుతారు.\n\n %3$d సెకన్లలో మళ్లీ ప్రయత్నించండి.""మీరు మీ అన్లాక్ నమూనాను %1$d సార్లు తప్పుగా గీశారు. మరో %2$d విఫల ప్రయత్నాల తర్వాత మీ Android TV పరికరాన్ని ఇమెయిల్ ఖాతా ద్వారా అన్లాక్ చేయాల్సిందిగా మిమ్మల్ని కోరడం జరుగుతుంది.\n\n %3$d సెకన్లలో మళ్లీ ప్రయత్నించండి.""మీరు మీ అన్లాక్ నమూనాను %1$d సార్లు తప్పుగా గీసారు. మరో %2$d విఫల ప్రయత్నాల తర్వాత, ఇమెయిల్ ఖాతాను ఉపయోగించి మీ ఫోన్ను అన్లాక్ చేయాల్సిందిగా మిమ్మల్ని అడుగుతారు.\n\n %3$d సెకన్లలో మళ్లీ ప్రయత్నించండి."
@@ -1789,7 +1789,7 @@
"అన్పిన్ చేయడానికి ముందు పిన్ కోసం అడుగు""అన్పిన్ చేయడానికి ముందు అన్లాక్ ఆకృతి కోసం అడుగు""అన్పిన్ చేయడానికి ముందు పాస్వర్డ్ కోసం అడుగు"
- "మీ నిర్వాహకులు ఇన్స్టాల్ చేసారు"
+ "మీ నిర్వాహకులు ఇన్స్టాల్ చేశారు""మీ నిర్వాహకులు నవీకరించారు""మీ నిర్వాహకులు తొలగించారు""సరే"
@@ -1871,7 +1871,7 @@
%1$d ఎంచుకోబడింది"వర్గీకరించబడలేదు"
- "మీరు ఈ నోటిఫికేషన్ల ప్రాముఖ్యతను సెట్ చేసారు."
+ "మీరు ఈ నోటిఫికేషన్ల ప్రాముఖ్యతను సెట్ చేశారు.""ఇందులో పేర్కొనబడిన వ్యక్తులను బట్టి ఇది చాలా ముఖ్యమైనది.""అనుకూల యాప్ నోటిఫికేషన్""%2$sతో కొత్త వినియోగదారుని సృష్టించడానికి %1$sను అనుమతించాలా (ఈ ఖాతాతో ఇప్పటికే ఒక వినియోగదారు ఉన్నారు) ?"
@@ -1894,7 +1894,7 @@
"%1$s ప్రస్తుతం అందుబాటులో లేదు.""ఈ యాప్ పాత వెర్షన్ Android కోసం రూపొందించబడింది మరియు అది సరిగ్గా పని చేయకపోవచ్చు. అప్డేట్ల కోసం తనిఖీ చేయడానికి ప్రయత్నించండి లేదా డెవలపర్ని సంప్రదించండి.""అప్డేట్ కోసం తనిఖీ చేయండి"
- "మీకు కొత్త సందేశాలు ఉన్నాయి"
+ "మీకు కొత్త మెసేజ్లు ఉన్నాయి""వీక్షించడానికి SMS యాప్ను తెరవండి""కొంత ఫంక్షనాలిటీ పరిమితం కావచ్చు""కార్యాలయ ప్రొఫైల్ లాక్ అయింది"
@@ -1962,8 +1962,8 @@
"ప్రశాంతంగా ఉండండి మరియు దగ్గర్లో తలదాచుకోండి.""వెంటనే తీర ప్రాంతాలు మరియు నదీ పరీవాహక ప్రాంతాలను ఖాళీ చేసి మెట్ట ప్రాంతాలకు తరలి వెళ్లండి.""ప్రశాంతంగా ఉండండి మరియు దగ్గర్లో తలదాచుకోండి."
- "అత్యవసర సందేశాల పరీక్ష"
- "ప్రత్యుత్తరం పంపండి"
+ "అత్యవసర మెసేజ్ల పరీక్ష"
+ "రిప్లయి పంపండి""వాయిస్ కోసం SIM అనుమతించబడదు""వాయిస్ కోసం SIM సదుపాయం లేదు"
From 5338485ad145ee564f7215015bdfa3df6a548c5c Mon Sep 17 00:00:00 2001
From: Bill Yi
Date: Thu, 12 Aug 2021 11:51:55 +0000
Subject: [PATCH 043/671] Import translations. DO NOT MERGE ANYWHERE
Auto-generated-cl: translation import
Change-Id: I5fe68c823c4bca642c4ab82900fd242834a1f413
---
core/res/res/values-ta/strings.xml | 2 +-
core/res/res/values-te/strings.xml | 108 ++++++++++++++---------------
2 files changed, 55 insertions(+), 55 deletions(-)
diff --git a/core/res/res/values-ta/strings.xml b/core/res/res/values-ta/strings.xml
index 18b588cd395c..4a5be62120f6 100644
--- a/core/res/res/values-ta/strings.xml
+++ b/core/res/res/values-ta/strings.xml
@@ -169,7 +169,7 @@
"நெறிமுறை ஆதரிக்கப்படவில்லை.""பாதுகாப்பான இணைப்பை நிறுவ முடியவில்லை.""URL தவறாக உள்ளதால் பக்கத்தைத் திறக்க முடியவில்லை."
- "கோப்பை அணுக முடியவில்லை."
+ "ஃபைலை அணுக முடியவில்லை.""கோரப்பட்ட கோப்பைக் கண்டறிய முடியவில்லை.""மிக அதிகமான கோரிக்கைகள் செயல்படுத்தப்படுகின்றன. பிறகு முயற்சிக்கவும்.""%1$s க்கான உள்நுழைவு பிழை"
diff --git a/core/res/res/values-te/strings.xml b/core/res/res/values-te/strings.xml
index 1d2fd8a0885b..08bf970fb5ab 100644
--- a/core/res/res/values-te/strings.xml
+++ b/core/res/res/values-te/strings.xml
@@ -82,7 +82,7 @@
"వాయిస్ సేవ లేదు""వాయిస్ సేవ లేదా అత్యవసర కాలింగ్ లేదు""మీ క్యారియర్ తాత్కాలికంగా ఆఫ్ చేయబడింది"
- "SIM %d కోసం మీ క్యారియర్ తాత్కాలికంగా ఆఫ్ చేసారు"
+ "SIM %d కోసం మీ క్యారియర్ తాత్కాలికంగా ఆఫ్ చేశారు""మొబైల్ నెట్వర్క్ అందుబాటులో లేదు""ప్రాధాన్య నెట్వర్క్ను మార్చుకోవడానికి ప్రయత్నించండి. మార్చడానికి నొక్కండి.""అత్యవసర కాలింగ్ అందుబాటులో లేదు"
@@ -91,8 +91,8 @@
"కాల్ ఫార్వార్డింగ్""అత్యవసర కాల్బ్యాక్ మోడ్""మొబైల్ డేటా స్థితి"
- "SMS సందేశాలు"
- "వాయిస్ మెయిల్ సందేశాలు"
+ "SMS మెసేజ్లు"
+ "వాయిస్ మెయిల్ మెసేజ్లు""Wi-Fi కాలింగ్""SIM స్టేటస్""అధిక ప్రాధాన్యత గల SIM స్థితి"
@@ -124,7 +124,7 @@
"సేవ కోసం శోధిస్తోంది""Wi‑Fi కాలింగ్ని సెటప్ చేయడం సాధ్యపడలేదు"
- "Wi-Fiతో కాల్స్ను చేయడానికి మరియు సందేశాలను పంపించడానికి, మొదట ఈ సేవను సెటప్ చేయాల్సిందిగా మీ క్యారియర్కి చెప్పండి. ఆ తర్వాత సెట్టింగ్ల నుండి Wi-Fi కాలింగ్ని మళ్లీ ఆన్ చేయండి. (లోపం కోడ్: %1$s)"
+ "Wi-Fiతో కాల్స్ను చేయడానికి మరియు మెసేజ్లను పంపించడానికి, మొదట ఈ సేవను సెటప్ చేయాల్సిందిగా మీ క్యారియర్కి చెప్పండి. ఆ తర్వాత సెట్టింగ్ల నుండి Wi-Fi కాలింగ్ని మళ్లీ ఆన్ చేయండి. (లోపం కోడ్: %1$s)""మీ క్యారియర్తో Wi‑Fi కాలింగ్ని నమోదు చేయడంలో సమస్య: %1$s"
@@ -190,7 +190,7 @@
"కార్యాలయ ప్రొఫైల్ తొలగించబడింది""కార్యాలయ ప్రొఫైల్ నిర్వాహక యాప్ లేదు లేదా పాడైంది. తత్ఫలితంగా, మీ కార్యాలయ ప్రొఫైల్ మరియు సంబంధిత డేటా తొలగించబడ్డాయి. సహాయం కోసం మీ నిర్వాహకులను సంప్రదించండి.""ఈ పరికరంలో మీ కార్యాలయ ప్రొఫైల్ ఇప్పుడు అందుబాటులో లేదు"
- "చాలా ఎక్కువ పాస్వర్డ్ ప్రయత్నాలు చేసారు"
+ "చాలా ఎక్కువ పాస్వర్డ్ ప్రయత్నాలు చేశారు""వ్యక్తిగత వినియోగం కోసం నిర్వాహకులు పరికరాన్ని తీసి వేశారు""పరికరం నిర్వహించబడింది""మీ సంస్థ ఈ పరికరాన్ని నిర్వహిస్తుంది మరియు నెట్వర్క్ ట్రాఫిక్ని పర్యవేక్షించవచ్చు. వివరాల కోసం నొక్కండి."
@@ -251,7 +251,7 @@
"సెషన్ను ముగించు""స్క్రీన్షాట్""బగ్ రిపోర్ట్"
- "ఇది ఇ-మెయిల్ సందేశం రూపంలో పంపడానికి మీ ప్రస్తుత పరికర స్థితి గురించి సమాచారాన్ని సేకరిస్తుంది. బగ్ రిపోర్ట్ను ప్రారంభించడం మొదలుకొని పంపడానికి సిద్ధం చేసే వరకు ఇందుకు కొంత సమయం పడుతుంది; దయచేసి ఓపిక పట్టండి."
+ "ఇది ఇ-మెయిల్ మెసేజ్ రూపంలో పంపడానికి మీ ప్రస్తుత పరికర స్థితి గురించి సమాచారాన్ని సేకరిస్తుంది. బగ్ రిపోర్ట్ను ప్రారంభించడం మొదలుకొని పంపడానికి సిద్ధం చేసే వరకు ఇందుకు కొంత సమయం పడుతుంది; దయచేసి ఓపిక పట్టండి.""ప్రభావశీల రిపోర్ట్""చాలా సందర్భాల్లో దీన్ని ఉపయోగించండి. ఇది రిపోర్ట్ ప్రోగ్రెస్ను ట్రాక్ చేయడానికి, సమస్య గురించి మరిన్ని వివరాలను నమోదు చేయడానికి మరియు స్క్రీన్షాట్లు తీయడానికి మిమ్మల్ని అనుమతిస్తుంది. ఇది నివేదించడానికి ఎక్కువ సమయం పట్టే తక్కువ వినియోగ విభాగాలను విడిచిపెట్టవచ్చు.""పూర్తి రిపోర్ట్"
@@ -279,8 +279,8 @@
"సెక్యూరిటీ""కార్ మోడ్""ఖాతా స్థితి"
- "డెవలపర్ సందేశాలు"
- "ముఖ్యమైన డెవలపర్ సందేశాలు"
+ "డెవలపర్ మెసేజ్లు"
+ "ముఖ్యమైన డెవలపర్ మెసేజ్లు""అప్డేట్లు""నెట్వర్క్ స్థితి""నెట్వర్క్ హెచ్చరికలు"
@@ -309,7 +309,7 @@
"Calendar""మీ క్యాలెండర్ను యాక్సెస్ చేయడానికి""SMS"
- "SMS సందేశాలను పంపడం మరియు వీక్షించడం"
+ "SMS మెసేజ్లను పంపడం మరియు వీక్షించడం""ఫైల్స్, మీడియా""మీ పరికరంలోని ఫోటోలు, మీడియా మరియు ఫైళ్లను యాక్సెస్ చేయడానికి""మైక్రోఫోన్"
@@ -356,26 +356,26 @@
"కాల్ను వేరే నంబర్కు దారి మళ్లించే లేదా మొత్తంగా కాల్ను ఆపివేసే ఎంపిక సహాయంతో అవుట్గోయింగ్ కాల్ సమయంలో డయల్ చేయబడుతున్న నంబర్ను చూడటానికి యాప్ను అనుమతిస్తుంది.""ఫోన్ కాల్స్కు సమాధానమివ్వు""ఇన్కమింగ్ ఫోన్ కాల్స్కు సమాధానమివ్వడానికి యాప్ను అనుమతిస్తుంది."
- "వచన సందేశాలను (SMS) స్వీకరించడం"
- "SMS సందేశాలను స్వీకరించడానికి మరియు ప్రాసెస్ చేయడానికి యాప్ను అనుమతిస్తుంది. యాప్ మీ డివైజ్కు పంపబడిన సందేశాలను మీకు చూపకుండానే పర్యవేక్షించగలదని లేదా తొలగించగలదని దీని అర్థం."
- "వచన సందేశాలను (MMS) స్వీకరించడం"
- "MMS సందేశాలను స్వీకరించడానికి మరియు ప్రాసెస్ చేయడానికి యాప్ను అనుమతిస్తుంది. యాప్ మీ డివైజ్కు పంపబడిన సందేశాలను మీకు చూపకుండానే పర్యవేక్షించగలదని లేదా తొలగించగలదని దీని అర్థం."
- "సెల్ ప్రసార సందేశాలను ఫార్వర్డ్ చేయడం"
- "సెల్ ప్రసార సందేశాలను అందుకుంటే, వాటిని ఫార్వర్డ్ చేసే విధంగా సెల్ ప్రసార మాడ్యూల్కు కట్టుబడి ఉండటానికి యాప్ను అనుమతిస్తుంది. సెల్ ప్రసార హెచ్చరికలు అత్యవసర పరిస్థితుల గురించి మిమ్మల్ని హెచ్చరించడానికి కొన్ని స్థానాల్లో అందించబడతాయి. అత్యవసర సెల్ ప్రసారం అందుకున్నప్పుడు హానికరమైన యాప్లు మీ పరికరం యొక్క పనితీరు లేదా నిర్వహణకు అంతరాయం కలిగించవచ్చు."
+ "వచన మెసేజ్లను (SMS) స్వీకరించడం"
+ "SMS మెసేజ్లను స్వీకరించడానికి మరియు ప్రాసెస్ చేయడానికి యాప్ను అనుమతిస్తుంది. యాప్ మీ డివైజ్కు పంపబడిన మెసేజ్లను మీకు చూపకుండానే పర్యవేక్షించగలదని లేదా తొలగించగలదని దీని అర్థం."
+ "వచన మెసేజ్లను (MMS) స్వీకరించడం"
+ "MMS మెసేజ్లను స్వీకరించడానికి మరియు ప్రాసెస్ చేయడానికి యాప్ను అనుమతిస్తుంది. యాప్ మీ డివైజ్కు పంపబడిన మెసేజ్లను మీకు చూపకుండానే పర్యవేక్షించగలదని లేదా తొలగించగలదని దీని అర్థం."
+ "సెల్ ప్రసార మెసేజ్లను ఫార్వర్డ్ చేయడం"
+ "సెల్ ప్రసార మెసేజ్లను అందుకుంటే, వాటిని ఫార్వర్డ్ చేసే విధంగా సెల్ ప్రసార మాడ్యూల్కు కట్టుబడి ఉండటానికి యాప్ను అనుమతిస్తుంది. సెల్ ప్రసార హెచ్చరికలు అత్యవసర పరిస్థితుల గురించి మిమ్మల్ని హెచ్చరించడానికి కొన్ని స్థానాల్లో అందించబడతాయి. అత్యవసర సెల్ ప్రసారం అందుకున్నప్పుడు హానికరమైన యాప్లు మీ పరికరం యొక్క పనితీరు లేదా నిర్వహణకు అంతరాయం కలిగించవచ్చు.""కొనసాగుతున్న కాల్స్ను మేనేజ్ చేయి""మీ పరికరంలో కొనసాగుతున్న కాల్స్ను చూడటానికి అలాగే వాటిని కంట్రోల్ చేయడానికి ఒక యాప్కు అనుమతిస్తోంది."
- "సెల్ ప్రసార సందేశాలను చదవడం"
- "మీ పరికరం స్వీకరించిన సెల్ ప్రసార సందేశాలను చదవడానికి యాప్ను అనుమతిస్తుంది. సెల్ ప్రసార హెచ్చరికలు అత్యవసర పరిస్థితుల గురించి మిమ్మల్ని హెచ్చరించడానికి కొన్ని స్థానాల్లో అందించబడతాయి. అత్యవసర సెల్ ప్రసారం స్వీకరించినప్పుడు హానికరమైన యాప్లు మీ పరికరం యొక్క పనితీరు లేదా నిర్వహణకు అంతరాయం కలిగించవచ్చు."
+ "సెల్ ప్రసార మెసేజ్లను చదవడం"
+ "మీ పరికరం స్వీకరించిన సెల్ ప్రసార మెసేజ్లను చదవడానికి యాప్ను అనుమతిస్తుంది. సెల్ ప్రసార హెచ్చరికలు అత్యవసర పరిస్థితుల గురించి మిమ్మల్ని హెచ్చరించడానికి కొన్ని స్థానాల్లో అందించబడతాయి. అత్యవసర సెల్ ప్రసారం స్వీకరించినప్పుడు హానికరమైన యాప్లు మీ పరికరం యొక్క పనితీరు లేదా నిర్వహణకు అంతరాయం కలిగించవచ్చు.""చందా చేయబడిన ఫీడ్లను చదవడం""ప్రస్తుతం సమకాలీకరించిన ఫీడ్ల గురించి వివరాలను పొందడానికి యాప్ను అనుమతిస్తుంది."
- "SMS సందేశాలను పంపడం మరియు వీక్షించడం"
- "SMS సందేశాలు పంపడానికి యాప్ను అనుమతిస్తుంది. దీని వలన ఊహించని ఛార్జీలు విధించబడవచ్చు. హానికరమైన యాప్లు మీ నిర్ధారణ లేకుండానే సందేశాలను పంపడం ద్వారా మీకు డబ్బు ఖర్చయ్యేలా చేయవచ్చు."
- "మీ వచన సందేశాలు (SMS లేదా MMS) చదవడం"
- "ఈ యాప్ మీ టాబ్లెట్లో నిల్వ చేసిన అన్ని SMS (వచన) సందేశాలను చదవగలదు."
+ "SMS మెసేజ్లను పంపడం మరియు వీక్షించడం"
+ "SMS మెసేజ్లు పంపడానికి యాప్ను అనుమతిస్తుంది. దీని వలన ఊహించని ఛార్జీలు విధించబడవచ్చు. హానికరమైన యాప్లు మీ నిర్ధారణ లేకుండానే మెసేజ్లను పంపడం ద్వారా మీకు డబ్బు ఖర్చయ్యేలా చేయవచ్చు."
+ "మీ వచన మెసేజ్లు (SMS లేదా MMS) చదవడం"
+ "ఈ యాప్ మీ టాబ్లెట్లో నిల్వ చేసిన అన్ని SMS (వచన) మెసేజ్లను చదవగలదు.""ఈ యాప్ మీ Android TV పరికరంలో నిల్వ అయిన SMS (వచనం) సందేశాలన్నింటినీ చదవగలదు."
- "ఈ యాప్ మీ ఫోన్లో నిల్వ చేసిన అన్ని SMS (వచన) సందేశాలను చదవగలదు."
- "వచన సందేశాలను (WAP) స్వీకరించడం"
- "WAP సందేశాలను స్వీకరించడానికి మరియు ప్రాసెస్ చేయడానికి యాప్ను అనుమతిస్తుంది. ఈ అనుమతి మీకు పంపబడిన సందేశాలను మీకు చూపకుండానే పర్యవేక్షించగల లేదా తొలగించగల సామర్థ్యాన్ని కలిగి ఉంటుంది."
+ "ఈ యాప్ మీ ఫోన్లో నిల్వ చేసిన అన్ని SMS (వచన) మెసేజ్లను చదవగలదు."
+ "వచన మెసేజ్లను (WAP) స్వీకరించడం"
+ "WAP మెసేజ్లను స్వీకరించడానికి మరియు ప్రాసెస్ చేయడానికి యాప్ను అనుమతిస్తుంది. ఈ అనుమతి మీకు పంపబడిన మెసేజ్లను మీకు చూపకుండానే పర్యవేక్షించగల లేదా తొలగించగల సామర్థ్యాన్ని కలిగి ఉంటుంది.""అమలవుతున్న యాప్లను పునరుద్ధరించడం""ప్రస్తుతం మరియు ఇటీవల అమలవుతున్న విధుల గురించి వివరణాత్మక సమాచారాన్ని తిరిగి పొందడానికి యాప్ను అనుమతిస్తుంది. ఇది పరికరంలో ఉపయోగించబడిన యాప్ల గురించి సమాచారాన్ని కనుగొనడానికి యాప్ను అనుమతించవచ్చు.""ప్రొఫైల్ మరియు పరికర యజమానులను నిర్వహించడం"
@@ -431,9 +431,9 @@
"ఈ యాప్ మీ Android TV పరికరంలో నిల్వ చేసిన క్యాలెండర్ ఈవెంట్లన్నీ చదవగలదు, మీ క్యాలెండర్ డేటాను షేర్ చేయగలదు లేదా సేవ్ చేయగలదు.""ఈ యాప్ మీ ఫోన్లో నిల్వ చేసిన క్యాలెండర్ ఈవెంట్లన్నీ చదవగలదు మరియు మీ క్యాలెండర్ డేటాను షేర్ చేయగలదు లేదా సేవ్ చేయగలదు.""యజమానికి తెలియకుండానే క్యాలెండర్ ఈవెంట్లను జోడించి లేదా సవరించి, అతిథులకు ఇమెయిల్ పంపడం"
- "ఈ యాప్ మీ టాబ్లెట్లో క్యాలెండర్ ఈవెంట్లను జోడించగలదు, తీసివేయగలదు లేదా మార్చగలదు. ఈ యాప్ క్యాలెండర్ యజమానుల నుండి వచ్చినట్లుగా సందేశాలను పంపగలదు లేదా ఈవెంట్లను వాటి యజమానులకు తెలియకుండానే మార్చగలదు."
- "ఈ యాప్ మీ Android TV పరికరంలో క్యాలెండర్ ఈవెంట్లను జోడించగలదు, తీసివేయగలదు లేదా మార్చగలదు. ఈ యాప్ క్యాలెండర్ యజమానుల నుండి వచ్చినట్లుగా సందేశాలను పంపగలదు లేదా ఈవెంట్లను వాటి యజమానులకు తెలియకుండానే మార్చగలదు."
- "ఈ యాప్ మీ ఫోన్లో క్యాలెండర్ ఈవెంట్లను జోడించగలదు, తీసివేయగలదు లేదా మార్చగలదు. ఈ యాప్ క్యాలెండర్ యజమానుల నుండి వచ్చినట్లుగా సందేశాలను పంపగలదు లేదా ఈవెంట్లను వాటి యజమానులకు తెలియకుండానే మార్చగలదు."
+ "ఈ యాప్ మీ టాబ్లెట్లో క్యాలెండర్ ఈవెంట్లను జోడించగలదు, తీసివేయగలదు లేదా మార్చగలదు. ఈ యాప్ క్యాలెండర్ యజమానుల నుండి వచ్చినట్లుగా మెసేజ్లను పంపగలదు లేదా ఈవెంట్లను వాటి యజమానులకు తెలియకుండానే మార్చగలదు."
+ "ఈ యాప్ మీ Android TV పరికరంలో క్యాలెండర్ ఈవెంట్లను జోడించగలదు, తీసివేయగలదు లేదా మార్చగలదు. ఈ యాప్ క్యాలెండర్ యజమానుల నుండి వచ్చినట్లుగా మెసేజ్లను పంపగలదు లేదా ఈవెంట్లను వాటి యజమానులకు తెలియకుండానే మార్చగలదు."
+ "ఈ యాప్ మీ ఫోన్లో క్యాలెండర్ ఈవెంట్లను జోడించగలదు, తీసివేయగలదు లేదా మార్చగలదు. ఈ యాప్ క్యాలెండర్ యజమానుల నుండి వచ్చినట్లుగా మెసేజ్లను పంపగలదు లేదా ఈవెంట్లను వాటి యజమానులకు తెలియకుండానే మార్చగలదు.""అదనపు స్థాన ప్రదాత ఆదేశాలను యాక్సెస్ చేయడం""అదనపు స్థాన ప్రదాత ఆదేశాలను యాక్సెస్ చేయడానికి యాప్ను అనుమతిస్తుంది. ఇది GPS లేదా ఇతర స్థాన మూలాల నిర్వహణలో యాప్ ప్రమేయం ఉండేలా అనుమతించవచ్చు.""స్క్రీన్పై ఉన్నప్పుడు మాత్రమే ఖచ్చితమైన స్థానాన్ని యాక్సెస్ చేయండి"
@@ -594,8 +594,8 @@
"వేలిముద్రను సెటప్ చేయడం సాధ్యం కాదు""వేలిముద్ర గడువు సమయం చేరుకుంది. మళ్లీ ప్రయత్నించండి.""వేలిముద్ర కార్యకలాపం రద్దయింది."
- "వేలిముద్ర చర్యని వినియోగదారు రద్దు చేసారు."
- "చాలా ఎక్కువ ప్రయత్నాలు చేసారు. తర్వాత మళ్లీ ప్రయత్నించండి."
+ "వేలిముద్ర చర్యని వినియోగదారు రద్దు చేశారు."
+ "చాలా ఎక్కువ ప్రయత్నాలు చేశారు. తర్వాత మళ్లీ ప్రయత్నించండి.""అనేకసార్లు ప్రయత్నించారు. వేలిముద్ర సెన్సార్ నిలిపివేయబడింది.""మళ్లీ ప్రయత్నించండి.""వేలిముద్రలు నమోదు చేయబడలేదు."
@@ -647,7 +647,7 @@
"కొత్త ముఖం డేటాను నిల్వ చేయడం కాదు. మొదట పాతది తొలిగించండి.""ముఖ కార్యకలాపం రద్దయింది.""ఫేస్ అన్లాక్ను యూజర్ రద్దు చేశారు"
- "చాలా ఎక్కువ ప్రయత్నాలు చేసారు. తర్వాత మళ్లీ ప్రయత్నించండి."
+ "చాలా ఎక్కువ ప్రయత్నాలు చేశారు. తర్వాత మళ్లీ ప్రయత్నించండి.""చాలా ఎక్కువ సార్లు ప్రయత్నించారు. ఫేస్ అన్లాక్ డిజేబుల్ చేయబడింది.""చాలా ఎక్కువ సార్లు ప్రయత్నించారు. బదులుగా స్క్రీన్ లాక్ను ఎంటర్ చేయండి.""ముఖం ధృవీకరించలేకపోయింది. మళ్లీ ప్రయత్నించండి."
@@ -713,7 +713,7 @@
"DRM ప్రమాణపత్రాలను తీసివేయడం""DRM ప్రమాణపత్రాలను తీసివేయడానికి యాప్ను అనుమతిస్తుంది. సాధారణ యాప్లకు ఎప్పటికీ అవసరం ఉండదు.""క్యారియర్ సందేశ సేవకు అనుబంధించడం"
- "క్యారియర్ సందేశ సేవ యొక్క అగ్ర-స్థాయి ఇంటర్ఫేస్కు అనుబంధించడానికి హోల్డర్ను అనుమతిస్తుంది. సాధారణ యాప్లకు ఎప్పటికీ అవసరం ఉండదు."
+ "క్యారియర్ మెసేజింగ్ సర్వీస్ యొక్క అగ్ర-స్థాయి ఇంటర్ఫేస్కు అనుబంధించడానికి హోల్డర్ను అనుమతిస్తుంది. సాధారణ యాప్లకు ఎప్పటికీ అవసరం ఉండదు.""క్యారియర్ సేవలకు అనుబంధించడం""క్యారియర్ సేవలకు అనుబంధించడానికి హోల్డర్ను అనుమతిస్తుంది. సాధారణ యాప్లకు ఎప్పటికీ అవసరం ఉండదు.""అంతరాయం కలిగించవద్దును యాక్సెస్ చేయడం"
@@ -911,21 +911,21 @@
"సిమ్ కార్డు లాక్ చేయబడింది.""సిమ్ కార్డును అన్లాక్ చేస్తోంది…""మీరు మీ అన్లాక్ నమూనాను %1$d సార్లు తప్పుగా గీసారు. \n\n%2$d సెకన్లలో మళ్లీ ప్రయత్నించండి."
- "మీరు మీ పాస్వర్డ్ను %1$d సార్లు తప్పుగా టైప్ చేసారు. \n\n%2$d సెకన్లలో మళ్లీ ప్రయత్నించండి."
- "మీరు మీ పిన్ను %1$d సార్లు తప్పుగా టైప్ చేసారు. \n\n%2$d సెకన్లలో మళ్లీ ప్రయత్నించండి."
+ "మీరు మీ పాస్వర్డ్ను %1$d సార్లు తప్పుగా టైప్ చేశారు. \n\n%2$d సెకన్లలో మళ్లీ ప్రయత్నించండి."
+ "మీరు మీ పిన్ను %1$d సార్లు తప్పుగా టైప్ చేశారు. \n\n%2$d సెకన్లలో మళ్లీ ప్రయత్నించండి.""మీరు మీ అన్లాక్ నమూనాని %1$d సార్లు తప్పుగా గీసారు. మరో %2$d విజయవంతం కాని ప్రయత్నాల తర్వాత, మీరు మీ Google సైన్ఇన్ను ఉపయోగించి మీ టాబ్లెట్ను అన్లాక్ చేయడానికి అడగబడతారు.\n\n %3$d సెకన్లలో మళ్లీ ప్రయత్నించండి.""మీరు మీ అన్లాక్ నమూనాని %1$d సార్లు తప్పుగా గీసారు. మరో %2$d విఫల ప్రయత్నాల తర్వాత, మీరు మీ Google సైన్ఇన్ను ఉపయోగించి మీ Android TV పరికరాన్ని అన్లాక్ చేయాల్సిందిగా మీకు తెలపబడుతుంది.\n\n %3$d సెకన్లలో మళ్లీ ప్రయత్నించండి.""మీరు మీ అన్లాక్ నమూనాని %1$d సార్లు తప్పుగా గీసారు. మరో %2$d విజయవంతం కాని ప్రయత్నాల తర్వాత, మీరు మీ Google సైన్ఇన్ను ఉపయోగించి మీ ఫోన్ను అన్లాక్ చేయడానికి అడగబడతారు.\n\n %3$d సెకన్లలో మళ్లీ ప్రయత్నించండి.""మీరు టాబ్లెట్ను అన్లాక్ చేయడానికి %1$d సార్లు తప్పుగా ప్రయత్నించారు. మరో %2$d వైఫల్య ప్రయత్నాల తర్వాత, టాబ్లెట్ ఫ్యాక్టరీ డిఫాల్ట్కు రీసెట్ చేయబడుతుంది మరియు మొత్తం వినియోగదారు డేటాను కోల్పోవడం సంభవిస్తుంది."
- "మీరు మీ Android TV పరికరాన్ని అన్లాక్ చేయడానికి %1$d సార్లు విఫల ప్రయత్నాలు చేసారు. మరో %2$d విఫల ప్రయత్నాల తర్వాత, మీ Android TV పరికరం ఫ్యాక్టరీ డిఫాల్ట్కి రీసెట్ చేయబడుతుంది, అలాగే వినియోగదారు డేటా మొత్తాన్ని కోల్పోతారు."
+ "మీరు మీ Android TV పరికరాన్ని అన్లాక్ చేయడానికి %1$d సార్లు విఫల ప్రయత్నాలు చేశారు. మరో %2$d విఫల ప్రయత్నాల తర్వాత, మీ Android TV పరికరం ఫ్యాక్టరీ డిఫాల్ట్కి రీసెట్ చేయబడుతుంది, అలాగే వినియోగదారు డేటా మొత్తాన్ని కోల్పోతారు.""మీరు ఫోన్ను అన్లాక్ చేయడానికి %1$d సార్లు తప్పుగా ప్రయత్నించారు. మరో %2$d వైఫల్య ప్రయత్నాల తర్వాత, ఫోన్ ఫ్యాక్టరీ డిఫాల్ట్కు రీసెట్ చేయబడుతుంది మరియు మొత్తం వినియోగదారు డేటాను కోల్పోవడం సంభవిస్తుంది.""మీరు టాబ్లెట్ను అన్లాక్ చేయడానికి %d సార్లు తప్పుగా ప్రయత్నించారు. టాబ్లెట్ ఇప్పుడు ఫ్యాక్టరీ డిఫాల్ట్కు రీసెట్ చేయబడుతుంది."
- "మీరు మీ Android TV పరికరాన్ని అన్లాక్ చేయడానికి %d సార్లు విఫల ప్రయత్నాలు చేసారు. మీ Android TV పరికరం ఇప్పుడు ఫ్యాక్టరీ రీసెట్ చేయబడుతుంది."
+ "మీరు మీ Android TV పరికరాన్ని అన్లాక్ చేయడానికి %d సార్లు విఫల ప్రయత్నాలు చేశారు. మీ Android TV పరికరం ఇప్పుడు ఫ్యాక్టరీ రీసెట్ చేయబడుతుంది.""మీరు ఫోన్ను అన్లాక్ చేయడానికి %d సార్లు తప్పుగా ప్రయత్నించారు. ఫోన్ ఇప్పుడు ఫ్యాక్టరీ డిఫాల్ట్కు రీసెట్ చేయబడుతుంది.""%d సెకన్లలో మళ్లీ ప్రయత్నించండి.""నమూనాను మర్చిపోయారా?""ఖాతా అన్లాక్"
- "చాలా ఎక్కువ ఆకృతి ప్రయత్నాలు చేసారు"
+ "చాలా ఎక్కువ ఆకృతి ప్రయత్నాలు చేశారు""అన్లాక్ చేయడానికి, మీ Google ఖాతాతో సైన్ ఇన్ చేయండి.""వినియోగదారు పేరు (ఇమెయిల్)""పాస్వర్డ్"
@@ -1012,7 +1012,7 @@
"అలారం సెట్ చేయడం""ఇన్స్టాల్ చేయబడిన అలారం గడియారం యాప్లో అలారంను సెట్ చేయడానికి యాప్ను అనుమతిస్తుంది. కొన్ని అలారం గల గడియారం యాప్లు ఈ ఫీచర్ను అమలు చేయకపోవచ్చు.""వాయిస్ మెయిల్ను జోడించడం"
- "మీ వాయిస్ మెయిల్ ఇన్బాక్స్కి సందేశాలను జోడించడానికి యాప్ను అనుమతిస్తుంది."
+ "మీ వాయిస్ మెయిల్ ఇన్బాక్స్కి మెసేజ్లను జోడించడానికి యాప్ను అనుమతిస్తుంది.""బ్రౌజర్ భౌగోళిక స్థానం అనుమతులను సవరించడం""బ్రౌజర్ యొక్క భౌగోళిక స్థానం అనుమతులను సవరించడానికి యాప్ను అనుమతిస్తుంది. హానికరమైన యాప్లు ఏకపక్ష వెబ్ సైట్లకు స్థాన సమాచారాన్ని అనుమతించడానికి దీన్ని ఉపయోగించవచ్చు.""మీరు బ్రౌజర్ ఈ పాస్వర్డ్ను గుర్తుపెట్టుకోవాలని కోరుకుంటున్నారా?"
@@ -1325,11 +1325,11 @@
"ఆమోదిస్తున్నాను""తిరస్కరిస్తున్నాను""అక్షరాన్ని చొప్పించండి"
- "SMS సందేశాలు పంపుతోంది"
- "<b>%1$s</b> పెద్ద సంఖ్యలో SMS సందేశాలను పంపుతోంది. సందేశాలను పంపడం కొనసాగించడానికి మీరు ఈ యాప్ను అనుమతించాలనుకుంటున్నారా?"
+ "SMS మెసేజ్లు పంపుతోంది"
+ "<b>%1$s</b> పెద్ద సంఖ్యలో SMS మెసేజ్లను పంపుతోంది. మెసేజ్లను పంపడం కొనసాగించడానికి మీరు ఈ యాప్ను అనుమతించాలనుకుంటున్నారా?""అనుమతిస్తున్నాను""తిరస్కరిస్తున్నాను"
- "<b>%1$s</b> ఒక సందేశాన్ని <b>%2$s</b>కి పంపాలనుకుంటోంది."
+ "<b>%1$s</b> ఒక మెసేజ్ను <b>%2$s</b>కి పంపాలనుకుంటోంది.""దీని వలన మీ మొబైల్ ఖాతాకు ""ఛార్జీలు విధించబడవచ్చు"".""దీని వలన మీ మొబైల్ ఖాతాకు ఛార్జీలు విధించబడవచ్చు.""పంపు"
@@ -1664,7 +1664,7 @@
"PUK కోడ్ 8 సంఖ్యలు ఉండాలి.""సరైన PUK కోడ్ను మళ్లీ నమోదు చేయండి. పునరావృత ప్రయత్నాల వలన సిమ్ శాశ్వతంగా నిలిపివేయబడుతుంది.""పిన్ కోడ్లు సరిపోలలేదు"
- "చాలా ఎక్కువ ఆకృతి ప్రయత్నాలు చేసారు"
+ "చాలా ఎక్కువ ఆకృతి ప్రయత్నాలు చేశారు""అన్లాక్ చేయడానికి, మీ Google ఖాతాతో సైన్ ఇన్ చేయండి.""వినియోగదారు పేరు (ఇమెయిల్)""పాస్వర్డ్"
@@ -1672,15 +1672,15 @@
"చెల్లని వినియోగదారు పేరు లేదా పాస్వర్డ్.""మీ వినియోగదారు పేరు లేదా పాస్వర్డ్ను మర్చిపోయారా?\n""google.com/accounts/recovery""ని సందర్శించండి.""ఖాతాను తనిఖీ చేస్తోంది…"
- "మీరు మీ పిన్ను %1$d సార్లు తప్పుగా టైప్ చేసారు. \n\n%2$d సెకన్లలో మళ్లీ ప్రయత్నించండి."
- "మీరు మీ పాస్వర్డ్ను %1$d సార్లు తప్పుగా టైప్ చేసారు. \n\n%2$d సెకన్లలో మళ్లీ ప్రయత్నించండి."
+ "మీరు మీ పిన్ను %1$d సార్లు తప్పుగా టైప్ చేశారు. \n\n%2$d సెకన్లలో మళ్లీ ప్రయత్నించండి."
+ "మీరు మీ పాస్వర్డ్ను %1$d సార్లు తప్పుగా టైప్ చేశారు. \n\n%2$d సెకన్లలో మళ్లీ ప్రయత్నించండి.""మీరు మీ అన్లాక్ నమూనాను %1$d సార్లు తప్పుగా గీసారు. \n\n%2$d సెకన్లలో మళ్లీ ప్రయత్నించండి."
- "మీరు టాబ్లెట్ను అన్లాక్ చేయడానికి %1$d చెల్లని ప్రయత్నాలు చేసారు. మరో %2$d విఫల ప్రయత్నాల తర్వాత, టాబ్లెట్ ఫ్యాక్టరీ డిఫాల్ట్కు రీసెట్ చేయబడుతుంది మరియు మొత్తం వినియోగదారు డేటాను కోల్పోవడం సంభవిస్తుంది."
- "మీరు మీ Android TV పరికరాన్ని అన్లాక్ చేయడానికి %1$d సార్లు విఫల ప్రయత్నాలు చేసారు. మరో %2$d విఫల ప్రయత్నాల తర్వాత, మీ Android TV పరికరం ఫ్యాక్టరీ డిఫాల్ట్కి రీసెట్ చేయబడుతుంది, అలాగే వినియోగదారు డేటా మొత్తాన్ని కోల్పోతారు."
- "మీరు ఫోన్ను అన్లాక్ చేయడానికి %1$d చెల్లని ప్రయత్నాలు చేసారు. మరో %2$d విఫల ప్రయత్నాల తర్వాత, ఫోన్ ఫ్యాక్టరీ డిఫాల్ట్కు రీసెట్ చేయబడుతుంది మరియు మొత్తం వినియోగదారు డేటాను కోల్పోవడం సంభవిస్తుంది."
- "మీరు టాబ్లెట్ను అన్లాక్ చేయడానికి %d చెల్లని ప్రయత్నాలు చేసారు. టాబ్లెట్ ఇప్పుడు ఫ్యాక్టరీ డిఫాల్ట్కు రీసెట్ చేయబడుతుంది."
- "మీరు మీ Android TV పరికరాన్ని అన్లాక్ చేయడానికి %d సార్లు విఫల ప్రయత్నాలు చేసారు. మీ Android TV పరికరం ఇప్పుడు ఫ్యాక్టరీ రీసెట్ చేయబడుతుంది."
- "మీరు ఫోన్ను అన్లాక్ చేయడానికి %d చెల్లని ప్రయత్నాలు చేసారు. ఫోన్ ఇప్పుడు ఫ్యాక్టరీ డిఫాల్ట్కు రీసెట్ చేయబడుతుంది."
+ "మీరు టాబ్లెట్ను అన్లాక్ చేయడానికి %1$d చెల్లని ప్రయత్నాలు చేశారు. మరో %2$d విఫల ప్రయత్నాల తర్వాత, టాబ్లెట్ ఫ్యాక్టరీ డిఫాల్ట్కు రీసెట్ చేయబడుతుంది మరియు మొత్తం వినియోగదారు డేటాను కోల్పోవడం సంభవిస్తుంది."
+ "మీరు మీ Android TV పరికరాన్ని అన్లాక్ చేయడానికి %1$d సార్లు విఫల ప్రయత్నాలు చేశారు. మరో %2$d విఫల ప్రయత్నాల తర్వాత, మీ Android TV పరికరం ఫ్యాక్టరీ డిఫాల్ట్కి రీసెట్ చేయబడుతుంది, అలాగే వినియోగదారు డేటా మొత్తాన్ని కోల్పోతారు."
+ "మీరు ఫోన్ను అన్లాక్ చేయడానికి %1$d చెల్లని ప్రయత్నాలు చేశారు. మరో %2$d విఫల ప్రయత్నాల తర్వాత, ఫోన్ ఫ్యాక్టరీ డిఫాల్ట్కు రీసెట్ చేయబడుతుంది మరియు మొత్తం వినియోగదారు డేటాను కోల్పోవడం సంభవిస్తుంది."
+ "మీరు టాబ్లెట్ను అన్లాక్ చేయడానికి %d చెల్లని ప్రయత్నాలు చేశారు. టాబ్లెట్ ఇప్పుడు ఫ్యాక్టరీ డిఫాల్ట్కు రీసెట్ చేయబడుతుంది."
+ "మీరు మీ Android TV పరికరాన్ని అన్లాక్ చేయడానికి %d సార్లు విఫల ప్రయత్నాలు చేశారు. మీ Android TV పరికరం ఇప్పుడు ఫ్యాక్టరీ రీసెట్ చేయబడుతుంది."
+ "మీరు ఫోన్ను అన్లాక్ చేయడానికి %d చెల్లని ప్రయత్నాలు చేశారు. ఫోన్ ఇప్పుడు ఫ్యాక్టరీ డిఫాల్ట్కు రీసెట్ చేయబడుతుంది.""మీరు మీ అన్లాక్ నమూనాను %1$d సార్లు తప్పుగా గీసారు. మరో %2$d విఫల ప్రయత్నాల తర్వాత, ఇమెయిల్ ఖాతాను ఉపయోగించి మీ టాబ్లెట్ను అన్లాక్ చేయాల్సిందిగా మిమ్మల్ని అడుగుతారు.\n\n %3$d సెకన్లలో మళ్లీ ప్రయత్నించండి.""మీరు మీ అన్లాక్ నమూనాను %1$d సార్లు తప్పుగా గీశారు. మరో %2$d విఫల ప్రయత్నాల తర్వాత మీ Android TV పరికరాన్ని ఇమెయిల్ ఖాతా ద్వారా అన్లాక్ చేయాల్సిందిగా మిమ్మల్ని కోరడం జరుగుతుంది.\n\n %3$d సెకన్లలో మళ్లీ ప్రయత్నించండి.""మీరు మీ అన్లాక్ నమూనాను %1$d సార్లు తప్పుగా గీసారు. మరో %2$d విఫల ప్రయత్నాల తర్వాత, ఇమెయిల్ ఖాతాను ఉపయోగించి మీ ఫోన్ను అన్లాక్ చేయాల్సిందిగా మిమ్మల్ని అడుగుతారు.\n\n %3$d సెకన్లలో మళ్లీ ప్రయత్నించండి."
@@ -1869,7 +1869,7 @@
"అన్పిన్ చేయడానికి ముందు పిన్ కోసం అడుగు""అన్పిన్ చేయడానికి ముందు అన్లాక్ ఆకృతి కోసం అడుగు""అన్పిన్ చేయడానికి ముందు పాస్వర్డ్ కోసం అడుగు"
- "మీ నిర్వాహకులు ఇన్స్టాల్ చేసారు"
+ "మీ నిర్వాహకులు ఇన్స్టాల్ చేశారు""మీ నిర్వాహకులు నవీకరించారు""మీ నిర్వాహకులు తొలగించారు""సరే"
@@ -1961,7 +1961,7 @@
%1$d ఎంచుకోబడింది"వర్గీకరించబడలేదు"
- "మీరు ఈ నోటిఫికేషన్ల ప్రాముఖ్యతను సెట్ చేసారు."
+ "మీరు ఈ నోటిఫికేషన్ల ప్రాముఖ్యతను సెట్ చేశారు.""ఇందులో పేర్కొనబడిన వ్యక్తులను బట్టి ఇది చాలా ముఖ్యమైనది.""అనుకూల యాప్ నోటిఫికేషన్""%2$sతో కొత్త వినియోగదారుని సృష్టించడానికి %1$sను అనుమతించాలా (ఈ ఖాతాతో ఇప్పటికే ఒక వినియోగదారు ఉన్నారు) ?"
@@ -1984,7 +1984,7 @@
"%1$s ప్రస్తుతం అందుబాటులో లేదు.""ఈ యాప్ పాత వెర్షన్ Android కోసం రూపొందించబడింది మరియు అది సరిగ్గా పని చేయకపోవచ్చు. అప్డేట్ల కోసం తనిఖీ చేయడానికి ప్రయత్నించండి లేదా డెవలపర్ని సంప్రదించండి.""అప్డేట్ కోసం తనిఖీ చేయండి"
- "మీకు కొత్త సందేశాలు ఉన్నాయి"
+ "మీకు కొత్త మెసేజ్లు ఉన్నాయి""వీక్షించడానికి SMS యాప్ను తెరవండి""కొంత ఫంక్షనాలిటీ పరిమితం కావచ్చు""కార్యాలయ ప్రొఫైల్ లాక్ అయింది"
@@ -2053,8 +2053,8 @@
"ప్రశాంతంగా ఉండండి మరియు దగ్గర్లో తలదాచుకోండి.""వెంటనే తీర ప్రాంతాలు మరియు నదీ పరీవాహక ప్రాంతాలను ఖాళీ చేసి మెట్ట ప్రాంతాలకు తరలి వెళ్లండి.""ప్రశాంతంగా ఉండండి మరియు దగ్గర్లో తలదాచుకోండి."
- "అత్యవసర సందేశాల పరీక్ష"
- "ప్రత్యుత్తరం పంపండి"
+ "అత్యవసర మెసేజ్ల పరీక్ష"
+ "రిప్లయి పంపండి""వాయిస్ కోసం SIM అనుమతించబడదు""వాయిస్ కోసం SIM సదుపాయం లేదు"
From 5167131c79dfec789d652c556703022c4010b92b Mon Sep 17 00:00:00 2001
From: Ming-Shin Lu
Date: Fri, 6 Aug 2021 22:43:00 +0800
Subject: [PATCH 044/671] Improve shouldRestoreImeVisibility perf
shouldRestoreImeVisibility(token) used to check if the task window
token should restore IME visibliity by checking the tasksnapshot.
Previously by default it calls mAtmService.getTaskSnapshot() to load
tasksnapshot from the disk if the does not exist, which caused
additional bitmap allocation to see if the tasksnapshot is not active.
Since we only check the IME surface from the tasksnapshot when
the task is still running. Also, after the next booted, tapping
the tasksnapshot from the overview will be refreshed with
splashscreen that we don't trying to restore IME visiblity
for that case.
Use WMS#getTaskSnapshot with specifying restoreFromDisk parameter as
false to get the active tasksnapshot from memory.
Fix: 195347355
Test: Enable systrace on device from developer option,
launch an App with showing IME, swiping up to the overview
and then tapping the original task again, expect no
additional EGLContext created in the systrace.
Change-Id: I0abb5d6d77fdb200c737e7582923ced9ee98ad05
---
.../java/com/android/server/wm/WindowManagerService.java | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java
index 1ec9187d7a76..b42ba702916d 100644
--- a/services/core/java/com/android/server/wm/WindowManagerService.java
+++ b/services/core/java/com/android/server/wm/WindowManagerService.java
@@ -8606,8 +8606,9 @@ public class WindowManagerService extends IWindowManager.Stub
if (imeTargetWindowTask == null) {
return false;
}
- final TaskSnapshot snapshot = mAtmService.getTaskSnapshot(imeTargetWindowTask.mTaskId,
- false /* isLowResolution */);
+ final TaskSnapshot snapshot = getTaskSnapshot(imeTargetWindowTask.mTaskId,
+ imeTargetWindowTask.mUserId, false /* isLowResolution */,
+ false /* restoreFromDisk */);
return snapshot != null && snapshot.hasImeSurface();
}
}
From 795147073b834d0024bc1a8bc84790e124f42f3c Mon Sep 17 00:00:00 2001
From: Matt Pietal
Date: Mon, 2 Aug 2021 09:36:45 -0400
Subject: [PATCH 045/671] KeyguardViewMediatorTest - Flaky test fix
Keep new test changes isolated to the new test to avoid disruption
to the existing tests
Fixes: 196295234
Test: atest KeyguardViewMediatorTest
Change-Id: Ia7706ce8b3923c1bf4fccd3f15edf97c60893472
(cherry picked from commit d4f5bde12fa5d1eccd6d0042b186cda56c621e9b)
---
.../android/systemui/keyguard/KeyguardViewMediatorTest.java | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/KeyguardViewMediatorTest.java b/packages/SystemUI/tests/src/com/android/systemui/keyguard/KeyguardViewMediatorTest.java
index ad0878031679..31d70f5c811f 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/KeyguardViewMediatorTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/KeyguardViewMediatorTest.java
@@ -67,7 +67,7 @@ import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
@RunWith(AndroidTestingRunner.class)
-@TestableLooper.RunWithLooper(setAsMainLooper = true)
+@TestableLooper.RunWithLooper
@SmallTest
public class KeyguardViewMediatorTest extends SysuiTestCase {
private KeyguardViewMediator mViewMediator;
@@ -126,7 +126,6 @@ public class KeyguardViewMediatorTest extends SysuiTestCase {
mUnlockedScreenOffAnimationController,
() -> mNotificationShadeDepthController);
mViewMediator.start();
- mViewMediator.onSystemReady();
}
@Test
@@ -165,8 +164,10 @@ public class KeyguardViewMediatorTest extends SysuiTestCase {
}
@Test
+ @TestableLooper.RunWithLooper(setAsMainLooper = true)
public void restoreBouncerWhenSimLockedAndKeyguardIsGoingAway() {
// When showing and provisioned
+ mViewMediator.onSystemReady();
when(mUpdateMonitor.isDeviceProvisioned()).thenReturn(true);
mViewMediator.setShowingLocked(true);
From 9eb0f18a8dba03b6176a719c65d018a83f35d452 Mon Sep 17 00:00:00 2001
From: Miranda Kephart
Date: Thu, 15 Jul 2021 11:49:23 -0400
Subject: [PATCH 046/671] Move screenshot UI to avoid covering nav bar
Bug: 193552343
Fix: 193552343
Test: manual; visual inspection
Change-Id: Idbf632c268cb753079d432cbe197f06e9abaf11d
---
.../res/layout/global_screenshot_static.xml | 1 -
packages/SystemUI/res/values/dimens.xml | 3 +--
.../screenshot/ScreenshotController.java | 9 +++----
.../systemui/screenshot/ScreenshotView.java | 25 +++++++++++++------
4 files changed, 22 insertions(+), 16 deletions(-)
diff --git a/packages/SystemUI/res/layout/global_screenshot_static.xml b/packages/SystemUI/res/layout/global_screenshot_static.xml
index e4a96947aa6a..6a9254cad8f4 100644
--- a/packages/SystemUI/res/layout/global_screenshot_static.xml
+++ b/packages/SystemUI/res/layout/global_screenshot_static.xml
@@ -36,7 +36,6 @@
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginEnd="@dimen/screenshot_action_container_margin_horizontal"
- android:layout_marginBottom="@dimen/screenshot_action_container_offset_y"
android:paddingEnd="@dimen/screenshot_action_container_padding_right"
android:paddingVertical="@dimen/screenshot_action_container_padding_vertical"
android:elevation="1dp"
diff --git a/packages/SystemUI/res/values/dimens.xml b/packages/SystemUI/res/values/dimens.xml
index 6ad9ab9a26ec..2dc5560380af 100644
--- a/packages/SystemUI/res/values/dimens.xml
+++ b/packages/SystemUI/res/values/dimens.xml
@@ -331,11 +331,10 @@
80dp242dp4dp
- 24dp
+ 8dp16dp48dp8dp
- 16dp18dp4dp8dp
diff --git a/packages/SystemUI/src/com/android/systemui/screenshot/ScreenshotController.java b/packages/SystemUI/src/com/android/systemui/screenshot/ScreenshotController.java
index 16872b08b9c8..37f0e0425035 100644
--- a/packages/SystemUI/src/com/android/systemui/screenshot/ScreenshotController.java
+++ b/packages/SystemUI/src/com/android/systemui/screenshot/ScreenshotController.java
@@ -559,8 +559,8 @@ public class ScreenshotController {
mScreenshotView.reset();
}
- mScreenshotView.updateOrientation(mWindowManager.getCurrentWindowMetrics()
- .getWindowInsets().getDisplayCutout());
+ mScreenshotView.updateOrientation(
+ mWindowManager.getCurrentWindowMetrics().getWindowInsets());
mScreenBitmap = screenshot;
@@ -594,9 +594,8 @@ public class ScreenshotController {
// Delay scroll capture eval a bit to allow the underlying activity
// to set up in the new orientation.
mScreenshotHandler.postDelayed(this::requestScrollCapture, 150);
- mScreenshotView.updateDisplayCutoutMargins(
- mWindowManager.getCurrentWindowMetrics().getWindowInsets()
- .getDisplayCutout());
+ mScreenshotView.updateInsets(
+ mWindowManager.getCurrentWindowMetrics().getWindowInsets());
// screenshot animation calculations won't be valid anymore, so just end
if (mScreenshotAnimation != null && mScreenshotAnimation.isRunning()) {
mScreenshotAnimation.end();
diff --git a/packages/SystemUI/src/com/android/systemui/screenshot/ScreenshotView.java b/packages/SystemUI/src/com/android/systemui/screenshot/ScreenshotView.java
index e9e62f26a10e..827e6a674c34 100644
--- a/packages/SystemUI/src/com/android/systemui/screenshot/ScreenshotView.java
+++ b/packages/SystemUI/src/com/android/systemui/screenshot/ScreenshotView.java
@@ -414,21 +414,30 @@ public class ScreenshotView extends FrameLayout implements
mScreenshotPreview.setImageDrawable(createScreenDrawable(mResources, bitmap, screenInsets));
}
- void updateDisplayCutoutMargins(DisplayCutout cutout) {
+ void updateInsets(WindowInsets insets) {
int orientation = mContext.getResources().getConfiguration().orientation;
mOrientationPortrait = (orientation == ORIENTATION_PORTRAIT);
FrameLayout.LayoutParams p =
(FrameLayout.LayoutParams) mScreenshotStatic.getLayoutParams();
+ DisplayCutout cutout = insets.getDisplayCutout();
+ Insets navBarInsets = insets.getInsets(WindowInsets.Type.navigationBars());
if (cutout == null) {
- p.setMargins(0, 0, 0, 0);
+ p.setMargins(0, 0, 0, navBarInsets.bottom);
} else {
Insets waterfall = cutout.getWaterfallInsets();
if (mOrientationPortrait) {
- p.setMargins(waterfall.left, Math.max(cutout.getSafeInsetTop(), waterfall.top),
- waterfall.right, Math.max(cutout.getSafeInsetBottom(), waterfall.bottom));
+ p.setMargins(
+ waterfall.left,
+ Math.max(cutout.getSafeInsetTop(), waterfall.top),
+ waterfall.right,
+ Math.max(cutout.getSafeInsetBottom(),
+ Math.max(navBarInsets.bottom, waterfall.bottom)));
} else {
- p.setMargins(Math.max(cutout.getSafeInsetLeft(), waterfall.left), waterfall.top,
- Math.max(cutout.getSafeInsetRight(), waterfall.right), waterfall.bottom);
+ p.setMargins(
+ Math.max(cutout.getSafeInsetLeft(), waterfall.left),
+ waterfall.top,
+ Math.max(cutout.getSafeInsetRight(), waterfall.right),
+ Math.max(navBarInsets.bottom, waterfall.bottom));
}
}
mStaticLeftMargin = p.leftMargin;
@@ -436,10 +445,10 @@ public class ScreenshotView extends FrameLayout implements
mScreenshotStatic.requestLayout();
}
- void updateOrientation(DisplayCutout cutout) {
+ void updateOrientation(WindowInsets insets) {
int orientation = mContext.getResources().getConfiguration().orientation;
mOrientationPortrait = (orientation == ORIENTATION_PORTRAIT);
- updateDisplayCutoutMargins(cutout);
+ updateInsets(insets);
int screenshotFixedSize =
mContext.getResources().getDimensionPixelSize(R.dimen.global_screenshot_x_scale);
ViewGroup.LayoutParams params = mScreenshotPreview.getLayoutParams();
From dc059a5f7349717def72df8c0417a064b6860762 Mon Sep 17 00:00:00 2001
From: Fabian Kozynski
Date: Thu, 8 Jul 2021 12:40:58 -0400
Subject: [PATCH 047/671] Add chevron to Screen cast tile
Adds the chevron when it's not casting and we expect to open a dialog
Test: manual
Test: atest CastTileTest
Fixes: 191154648
Change-Id: Ib3e70d3c8dbc797fd85a6781743270ed4abc7e63
Merged-In: Ib3e70d3c8dbc797fd85a6781743270ed4abc7e63
(cherry picked from commit 9dd955bd0cd08674a5f3a791ab6fee5085bf4afc)
---
.../android/systemui/qs/tiles/CastTile.java | 17 +++--
.../systemui/qs/tiles/CastTileTest.java | 74 +++++++++++++++++++
2 files changed, 86 insertions(+), 5 deletions(-)
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/CastTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/CastTile.java
index 4b13015361cc..04f089d31664 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/CastTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/CastTile.java
@@ -150,11 +150,7 @@ public class CastTile extends QSTileImpl {
}
List activeDevices = getActiveDevices();
- // We want to pop up the media route selection dialog if we either have no active devices
- // (neither routes nor projection), or if we have an active route. In other cases, we assume
- // that a projection is active. This is messy, but this tile never correctly handled the
- // case where multiple devices were active :-/.
- if (activeDevices.isEmpty() || (activeDevices.get(0).tag instanceof RouteInfo)) {
+ if (willPopDetail()) {
mActivityStarter.postQSRunnableDismissingKeyguard(() -> {
showDetail(true);
});
@@ -163,6 +159,15 @@ public class CastTile extends QSTileImpl {
}
}
+ // We want to pop up the media route selection dialog if we either have no active devices
+ // (neither routes nor projection), or if we have an active route. In other cases, we assume
+ // that a projection is active. This is messy, but this tile never correctly handled the
+ // case where multiple devices were active :-/.
+ private boolean willPopDetail() {
+ List activeDevices = getActiveDevices();
+ return activeDevices.isEmpty() || (activeDevices.get(0).tag instanceof RouteInfo);
+ }
+
private List getActiveDevices() {
ArrayList activeDevices = new ArrayList<>();
for (CastDevice device : mController.getCastDevices()) {
@@ -234,10 +239,12 @@ public class CastTile extends QSTileImpl {
state.contentDescription = state.contentDescription + ","
+ mContext.getString(R.string.accessibility_quick_settings_open_details);
state.expandedAccessibilityClassName = Button.class.getName();
+ state.forceExpandIcon = willPopDetail();
} else {
state.state = Tile.STATE_UNAVAILABLE;
String noWifi = mContext.getString(R.string.quick_settings_cast_no_wifi);
state.secondaryLabel = noWifi;
+ state.forceExpandIcon = false;
}
state.stateDescription = state.stateDescription + ", " + state.secondaryLabel;
mDetailAdapter.updateItems(devices);
diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/CastTileTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/CastTileTest.java
index d44a52607707..e939411e4a2a 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/CastTileTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/CastTileTest.java
@@ -17,6 +17,7 @@ package com.android.systemui.qs.tiles;
import static junit.framework.Assert.assertTrue;
import static junit.framework.TestCase.assertEquals;
+import static org.junit.Assert.assertFalse;
import static org.mockito.ArgumentMatchers.same;
import static org.mockito.Mockito.any;
import static org.mockito.Mockito.mock;
@@ -327,4 +328,77 @@ public class CastTileTest extends SysuiTestCase {
assertEquals(Tile.STATE_ACTIVE, mCastTile.getState().state);
assertTrue(mCastTile.getState().secondaryLabel.toString().startsWith(connected.name));
}
+
+ @Test
+ public void testExpandView_wifiNotConnected() {
+ mCastTile.refreshState();
+ mTestableLooper.processAllMessages();
+
+ assertFalse(mCastTile.getState().forceExpandIcon);
+ }
+
+ @Test
+ public void testExpandView_wifiEnabledNotCasting() {
+ enableWifiAndProcessMessages();
+
+ assertTrue(mCastTile.getState().forceExpandIcon);
+ }
+
+ @Test
+ public void testExpandView_casting_projection() {
+ CastController.CastDevice device = new CastController.CastDevice();
+ device.state = CastController.CastDevice.STATE_CONNECTED;
+ List devices = new ArrayList<>();
+ devices.add(device);
+ when(mController.getCastDevices()).thenReturn(devices);
+
+ enableWifiAndProcessMessages();
+
+ assertFalse(mCastTile.getState().forceExpandIcon);
+ }
+
+ @Test
+ public void testExpandView_connecting_projection() {
+ CastController.CastDevice connecting = new CastController.CastDevice();
+ connecting.state = CastDevice.STATE_CONNECTING;
+ connecting.name = "Test Casting Device";
+
+ List devices = new ArrayList<>();
+ devices.add(connecting);
+ when(mController.getCastDevices()).thenReturn(devices);
+
+ enableWifiAndProcessMessages();
+
+ assertFalse(mCastTile.getState().forceExpandIcon);
+ }
+
+ @Test
+ public void testExpandView_casting_mediaRoute() {
+ CastController.CastDevice device = new CastController.CastDevice();
+ device.state = CastDevice.STATE_CONNECTED;
+ device.tag = mock(MediaRouter.RouteInfo.class);
+ List devices = new ArrayList<>();
+ devices.add(device);
+ when(mController.getCastDevices()).thenReturn(devices);
+
+ enableWifiAndProcessMessages();
+
+ assertTrue(mCastTile.getState().forceExpandIcon);
+ }
+
+ @Test
+ public void testExpandView_connecting_mediaRoute() {
+ CastController.CastDevice connecting = new CastController.CastDevice();
+ connecting.state = CastDevice.STATE_CONNECTING;
+ connecting.tag = mock(RouteInfo.class);
+ connecting.name = "Test Casting Device";
+
+ List devices = new ArrayList<>();
+ devices.add(connecting);
+ when(mController.getCastDevices()).thenReturn(devices);
+
+ enableWifiAndProcessMessages();
+
+ assertTrue(mCastTile.getState().forceExpandIcon);
+ }
}
From c14dd63160ee9fb303e3cd92ff63825a1303362a Mon Sep 17 00:00:00 2001
From: Evan Laird
Date: Wed, 4 Aug 2021 11:50:07 -0400
Subject: [PATCH 048/671] Accessibility for privacy status animations
This CL adds contentDescriptions to the privacy event chip and the
ongoing privacy dot views. This is a partial fix which allows talkback
for the ongoing privacy chip, and allows talkback scrolling to the
privacy dot. However, due to the fact that the dot lives in a different
window, the privacy dot shows up in the wrong part of the accesibility
tree and still needs to be virtually placed in the status bar.
Bug: 187197696
Test: manual
Change-Id: I6210e18c75a1aab61cbcf619a9a31c459fffe544
---
.../events/PrivacyDotViewController.kt | 17 +++++--
.../systemui/statusbar/events/StatusEvent.kt | 12 ++++-
.../SystemEventChipAnimationController.kt | 3 +-
.../events/SystemEventCoordinator.kt | 11 ++++-
.../events/SystemStatusAnimationScheduler.kt | 46 +++++++++----------
5 files changed, 59 insertions(+), 30 deletions(-)
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/events/PrivacyDotViewController.kt b/packages/SystemUI/src/com/android/systemui/statusbar/events/PrivacyDotViewController.kt
index 29cfb07a14f9..1037e576f263 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/events/PrivacyDotViewController.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/events/PrivacyDotViewController.kt
@@ -497,7 +497,12 @@ class PrivacyDotViewController @Inject constructor(
}
if (state.designatedCorner != currentViewState.designatedCorner) {
+ currentViewState.designatedCorner?.contentDescription = null
+ state.designatedCorner?.contentDescription = state.contentDescription
+
updateDesignatedCorner(state.designatedCorner, state.shouldShowDot())
+ } else if (state.contentDescription != currentViewState.contentDescription) {
+ state.designatedCorner?.contentDescription = state.contentDescription
}
val shouldShow = state.shouldShowDot()
@@ -514,9 +519,13 @@ class PrivacyDotViewController @Inject constructor(
private val systemStatusAnimationCallback: SystemStatusAnimationCallback =
object : SystemStatusAnimationCallback {
- override fun onSystemStatusAnimationTransitionToPersistentDot(): Animator? {
+ override fun onSystemStatusAnimationTransitionToPersistentDot(
+ contentDescr: String?
+ ): Animator? {
synchronized(lock) {
- nextViewState = nextViewState.copy(systemPrivacyEventIsActive = true)
+ nextViewState = nextViewState.copy(
+ systemPrivacyEventIsActive = true,
+ contentDescription = contentDescr)
}
return null
@@ -620,7 +629,9 @@ private data class ViewState(
val rotation: Int = 0,
val height: Int = 0,
val cornerIndex: Int = -1,
- val designatedCorner: View? = null
+ val designatedCorner: View? = null,
+
+ val contentDescription: String? = null
) {
fun shouldShowDot(): Boolean {
return systemPrivacyEventIsActive && !shadeExpanded && !qsExpanded
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/events/StatusEvent.kt b/packages/SystemUI/src/com/android/systemui/statusbar/events/StatusEvent.kt
index 539020d52db5..d4d84c138b20 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/events/StatusEvent.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/events/StatusEvent.kt
@@ -34,6 +34,7 @@ interface StatusEvent {
// Whether or not to show an animation for this event
val showAnimation: Boolean
val viewCreator: (context: Context) -> View
+ var contentDescription: String?
// Update this event with values from another event.
fun updateFromEvent(other: StatusEvent?) {
@@ -50,6 +51,7 @@ class BatteryEvent : StatusEvent {
override val priority = 50
override val forceVisible = false
override val showAnimation = true
+ override var contentDescription: String? = ""
override val viewCreator: (context: Context) -> View = { context ->
val iv = ImageView(context)
@@ -62,7 +64,9 @@ class BatteryEvent : StatusEvent {
return javaClass.simpleName
}
}
+
class PrivacyEvent(override val showAnimation: Boolean = true) : StatusEvent {
+ override var contentDescription: String? = null
override val priority = 100
override val forceVisible = true
var privacyItems: List = listOf()
@@ -72,6 +76,7 @@ class PrivacyEvent(override val showAnimation: Boolean = true) : StatusEvent {
val v = LayoutInflater.from(context)
.inflate(R.layout.ongoing_privacy_chip, null) as OngoingPrivacyChip
v.privacyList = privacyItems
+ v.contentDescription = contentDescription
privacyChip = v
v
}
@@ -81,7 +86,9 @@ class PrivacyEvent(override val showAnimation: Boolean = true) : StatusEvent {
}
override fun shouldUpdateFromEvent(other: StatusEvent?): Boolean {
- return other is PrivacyEvent && other.privacyItems != privacyItems
+ return other is PrivacyEvent &&
+ (other.privacyItems != privacyItems ||
+ other.contentDescription != contentDescription)
}
override fun updateFromEvent(other: StatusEvent?) {
@@ -90,6 +97,9 @@ class PrivacyEvent(override val showAnimation: Boolean = true) : StatusEvent {
}
privacyItems = other.privacyItems
+ contentDescription = other.contentDescription
+
+ privacyChip?.contentDescription = other.contentDescription
privacyChip?.privacyList = other.privacyItems
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/events/SystemEventChipAnimationController.kt b/packages/SystemUI/src/com/android/systemui/statusbar/events/SystemEventChipAnimationController.kt
index b861c1db9b8b..7291b5a8be3b 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/events/SystemEventChipAnimationController.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/events/SystemEventChipAnimationController.kt
@@ -34,8 +34,7 @@ import com.android.systemui.statusbar.phone.StatusBarWindowView
import javax.inject.Inject
/**
- * //TODO: this _probably_ doesn't control a window anymore
- * Controls the window for system event animations.
+ * Controls the view for system event animations.
*/
class SystemEventChipAnimationController @Inject constructor(
private val context: Context,
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/events/SystemEventCoordinator.kt b/packages/SystemUI/src/com/android/systemui/statusbar/events/SystemEventCoordinator.kt
index ba50659f5567..04f7492e8562 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/events/SystemEventCoordinator.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/events/SystemEventCoordinator.kt
@@ -16,9 +16,12 @@
package com.android.systemui.statusbar.events
+import android.content.Context
import android.provider.DeviceConfig
import android.provider.DeviceConfig.NAMESPACE_PRIVACY
+import com.android.systemui.R
import com.android.systemui.dagger.SysUISingleton
+import com.android.systemui.privacy.PrivacyChipBuilder
import com.android.systemui.privacy.PrivacyItem
import com.android.systemui.privacy.PrivacyItemController
import com.android.systemui.statusbar.policy.BatteryController
@@ -33,7 +36,8 @@ import javax.inject.Inject
class SystemEventCoordinator @Inject constructor(
private val systemClock: SystemClock,
private val batteryController: BatteryController,
- private val privacyController: PrivacyItemController
+ private val privacyController: PrivacyItemController,
+ private val context: Context
) {
private lateinit var scheduler: SystemStatusAnimationScheduler
@@ -66,6 +70,11 @@ class SystemEventCoordinator @Inject constructor(
fun notifyPrivacyItemsChanged(showAnimation: Boolean = true) {
val event = PrivacyEvent(showAnimation)
event.privacyItems = privacyStateListener.currentPrivacyItems
+ event.contentDescription = {
+ val items = PrivacyChipBuilder(context, event.privacyItems).joinTypes()
+ context.getString(
+ R.string.ongoing_privacy_chip_content_multiple_apps, items)
+ }()
scheduler.onStatusEvent(event)
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/events/SystemStatusAnimationScheduler.kt b/packages/SystemUI/src/com/android/systemui/statusbar/events/SystemStatusAnimationScheduler.kt
index f30010cf4d1c..f1610d866f34 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/events/SystemStatusAnimationScheduler.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/events/SystemStatusAnimationScheduler.kt
@@ -100,17 +100,20 @@ class SystemStatusAnimationScheduler @Inject constructor(
// Don't deal with threading for now (no need let's be honest)
Assert.isMainThread()
- if (event.priority > scheduledEvent?.priority ?: -1 ||
- scheduledEvent?.shouldUpdateFromEvent(event) == true) {
+ if ((event.priority > scheduledEvent?.priority ?: -1) &&
+ animationState != ANIMATING_OUT &&
+ (animationState != SHOWING_PERSISTENT_DOT && event.forceVisible)) {
+ // events can only be scheduled if a higher priority or no other event is in progress
if (DEBUG) {
Log.d(TAG, "scheduling event $event")
}
- if (event.showAnimation) {
- scheduleEvent(event)
- } else if (event.forceVisible) {
- hasPersistentDot = true
- notifyTransitionToPersistentDot()
+
+ scheduleEvent(event)
+ } else if (scheduledEvent?.shouldUpdateFromEvent(event) == true) {
+ if (DEBUG) {
+ Log.d(TAG, "updating current event from: $event")
}
+ scheduledEvent?.updateFromEvent(event)
} else {
if (DEBUG) {
Log.d(TAG, "ignoring event $event")
@@ -142,24 +145,18 @@ class SystemStatusAnimationScheduler @Inject constructor(
* Clear the scheduled event (if any) and schedule a new one
*/
private fun scheduleEvent(event: StatusEvent) {
- if (animationState == ANIMATING_OUT ||
- (animationState == SHOWING_PERSISTENT_DOT && event.forceVisible)) {
- // do not schedule an event or change the current one
- return
- }
+ scheduledEvent = event
- // If we are showing the chip, possibly update the current event, rather than replacing
- if (scheduledEvent?.shouldUpdateFromEvent(event) == true) {
- scheduledEvent?.updateFromEvent(event)
- return
- } else {
- scheduledEvent = event
- }
-
- if (scheduledEvent!!.forceVisible) {
+ if (event.forceVisible) {
hasPersistentDot = true
}
+ // If animations are turned off, we'll transition directly to the dot
+ if (!event.showAnimation && event.forceVisible) {
+ notifyTransitionToPersistentDot()
+ return
+ }
+
// Schedule the animation to start after a debounce period
cancelExecutionRunnable = executor.executeDelayed({
cancelExecutionRunnable = null
@@ -218,7 +215,7 @@ class SystemStatusAnimationScheduler @Inject constructor(
private fun notifyTransitionToPersistentDot(): Animator? {
val anims: List = listeners.mapNotNull {
- it.onSystemStatusAnimationTransitionToPersistentDot()
+ it.onSystemStatusAnimationTransitionToPersistentDot(scheduledEvent?.contentDescription)
}
if (anims.isNotEmpty()) {
val aSet = AnimatorSet()
@@ -346,7 +343,10 @@ interface SystemStatusAnimationCallback {
@JvmDefault fun onSystemChromeAnimationEnd() {}
// Best method name, change my mind
- @JvmDefault fun onSystemStatusAnimationTransitionToPersistentDot(): Animator? { return null }
+ @JvmDefault
+ fun onSystemStatusAnimationTransitionToPersistentDot(contentDescription: String?): Animator? {
+ return null
+ }
@JvmDefault fun onHidePersistentDot(): Animator? { return null }
}
From 8542a9b919c2e21b64b33bb77903c17cc2992ff4 Mon Sep 17 00:00:00 2001
From: Bill Yi
Date: Thu, 12 Aug 2021 14:54:12 +0000
Subject: [PATCH 049/671] Import translations. DO NOT MERGE ANYWHERE
Auto-generated-cl: translation import
Change-Id: I20ee1ee43943f08620e1245d5aef9a75cf2b49aa
---
packages/PrintSpooler/res/values-ta/strings.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/packages/PrintSpooler/res/values-ta/strings.xml b/packages/PrintSpooler/res/values-ta/strings.xml
index eaf05b104046..7ffac67c5a8e 100644
--- a/packages/PrintSpooler/res/values-ta/strings.xml
+++ b/packages/PrintSpooler/res/values-ta/strings.xml
@@ -63,7 +63,7 @@
"இந்தப் பிரிண்டர் பற்றிய கூடுதல் தகவல்""இயக்கத்திலுள்ள அச்சுப் பணிகள்""தோல்வியடைந்த அச்சுப் பணிகள்"
- "கோப்பை உருவாக்க முடியவில்லை"
+ "ஃபைலை உருவாக்க முடியவில்லை""சில அச்சுப் பொறிகள் முடக்கப்பட்டன""பிரிண்டர்களைத் தேடுகிறது""அச்சுப் பொறிகள் இல்லை"
From 1b16b4e2fb42709cdbb11a9e8fb747f6dfe6f62c Mon Sep 17 00:00:00 2001
From: Bill Yi
Date: Thu, 12 Aug 2021 14:57:39 +0000
Subject: [PATCH 050/671] Import translations. DO NOT MERGE ANYWHERE
Auto-generated-cl: translation import
Change-Id: I56cdbac567545b01afcd620fcb986f59327faffd
---
packages/PrintSpooler/res/values-ta/strings.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/packages/PrintSpooler/res/values-ta/strings.xml b/packages/PrintSpooler/res/values-ta/strings.xml
index eaf05b104046..7ffac67c5a8e 100644
--- a/packages/PrintSpooler/res/values-ta/strings.xml
+++ b/packages/PrintSpooler/res/values-ta/strings.xml
@@ -63,7 +63,7 @@
"இந்தப் பிரிண்டர் பற்றிய கூடுதல் தகவல்""இயக்கத்திலுள்ள அச்சுப் பணிகள்""தோல்வியடைந்த அச்சுப் பணிகள்"
- "கோப்பை உருவாக்க முடியவில்லை"
+ "ஃபைலை உருவாக்க முடியவில்லை""சில அச்சுப் பொறிகள் முடக்கப்பட்டன""பிரிண்டர்களைத் தேடுகிறது""அச்சுப் பொறிகள் இல்லை"
From ef466173ffe1afbf3ab3bf506a4de4a9f8e03442 Mon Sep 17 00:00:00 2001
From: Bill Yi
Date: Thu, 12 Aug 2021 15:00:53 +0000
Subject: [PATCH 051/671] Import translations. DO NOT MERGE ANYWHERE
Auto-generated-cl: translation import
Change-Id: I972fe444661c11faa7c7089b6db8fb866a9b304d
---
packages/PrintSpooler/res/values-ta/strings.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/packages/PrintSpooler/res/values-ta/strings.xml b/packages/PrintSpooler/res/values-ta/strings.xml
index eaf05b104046..7ffac67c5a8e 100644
--- a/packages/PrintSpooler/res/values-ta/strings.xml
+++ b/packages/PrintSpooler/res/values-ta/strings.xml
@@ -63,7 +63,7 @@
"இந்தப் பிரிண்டர் பற்றிய கூடுதல் தகவல்""இயக்கத்திலுள்ள அச்சுப் பணிகள்""தோல்வியடைந்த அச்சுப் பணிகள்"
- "கோப்பை உருவாக்க முடியவில்லை"
+ "ஃபைலை உருவாக்க முடியவில்லை""சில அச்சுப் பொறிகள் முடக்கப்பட்டன""பிரிண்டர்களைத் தேடுகிறது""அச்சுப் பொறிகள் இல்லை"
From 4480cbe942c1ea70b988bed6241b73c0a319fd26 Mon Sep 17 00:00:00 2001
From: Bill Yi
Date: Thu, 12 Aug 2021 15:26:28 +0000
Subject: [PATCH 052/671] Import translations. DO NOT MERGE ANYWHERE
Auto-generated-cl: translation import
Change-Id: I8aad520cc75a0bbc8996bb66a13a5d9534a8185a
---
packages/SystemUI/res/values-te/strings.xml | 14 +++++++-------
1 file changed, 7 insertions(+), 7 deletions(-)
diff --git a/packages/SystemUI/res/values-te/strings.xml b/packages/SystemUI/res/values-te/strings.xml
index da56f85b7908..84e7520ef9e0 100644
--- a/packages/SystemUI/res/values-te/strings.xml
+++ b/packages/SystemUI/res/values-te/strings.xml
@@ -54,7 +54,7 @@
"%2$sని నిర్వహించడానికి %1$sని తెరవాలా?""ఈ USB ఉపకరణంతో ఇన్స్టాల్ చేయబడిన యాప్లు ఏవీ పని చేయవు. ఈ ఉపకరణం గురించి %1$sలో మరింత తెలుసుకోండి""USB ఉపకరణం"
- "వీక్షించండి"
+ "చూడండి""%2$s కనెక్ట్ అయి ఉన్న ఎల్లప్పుడూ %1$sని తెరవండి""%2$s కనెక్ట్ అయి ఉన్న ఎల్లప్పుడూ %1$sని తెరవండి""USB డీబగ్గింగ్ను అనుమతించాలా?"
@@ -502,7 +502,7 @@
"బ్యాటరీ సేవర్ ఆన్లో ఉంది""పనితీరుని మరియు నేపథ్య డేటాను తగ్గిస్తుంది""బ్యాటరీ సేవర్ను ఆఫ్ చేయండి"
- "రికార్డ్ చేస్తున్నప్పుడు లేదా ప్రసారం చేస్తున్నప్పుడు, మీ స్క్రీన్పై ప్రదర్శించబడిన లేదా మీ పరికరం నుండి ప్లే చేయబడిన సమాచారం మొత్తాన్ని, %s యాక్సెస్ చేయగలుగుతుంది. ఈ సమాచారంలో, పాస్వర్డ్లు, చెల్లింపు వివరాలు, ఫోటోలు, సందేశాలు, మీరు ప్లే చేసే ఆడియో వంటివి ఉంటాయి."
+ "రికార్డ్ చేస్తున్నప్పుడు లేదా ప్రసారం చేస్తున్నప్పుడు, మీ స్క్రీన్పై ప్రదర్శించబడిన లేదా మీ పరికరం నుండి ప్లే చేయబడిన సమాచారం మొత్తాన్ని, %s యాక్సెస్ చేయగలుగుతుంది. ఈ సమాచారంలో, పాస్వర్డ్లు, చెల్లింపు వివరాలు, ఫోటోలు, మెసేజ్లు, మీరు ప్లే చేసే ఆడియో వంటివి ఉంటాయి.""రికార్డ్ చేస్తున్నప్పుడు లేదా ప్రసారం చేస్తున్నప్పుడు మీ స్క్రీన్పై ప్రదర్శించబడిన లేదా మీ పరికరం నుండి ప్లే చేయబడిన సమాచారం మొత్తాన్ని, ఈ ఫంక్షన్ను అందిస్తున్న సర్వీస్ యాక్సెస్ చేయగలదు. ఈ సమాచారంలో, పాస్వర్డ్లు, పేమెంట్ వివరాలు, ఫోటోలు, మెసేజ్లు, మీరు ప్లే చేసే ఆడియో వంటివి ఉంటాయి.""రికార్డ్ చేయడం లేదా ప్రసారం చేయడం ప్రారంభించాలా?""%sతో రికార్డ్ చేయడం లేదా ప్రసారం చేయడం ప్రారంభించాలా?"
@@ -544,13 +544,13 @@
"CA ప్రమాణపత్రాలు""VPNని నిలిపివేయి""VPNను డిస్కనెక్ట్ చేయి"
- "విధానాలను వీక్షించండి"
+ "విధానాలను చూడండి""ఈ పరికరం %1$sకు చెందినది.\n\nసెట్టింగ్లను, కార్పొరేట్ యాక్సెస్ను, యాప్లను, మీ పరికరానికి సంబంధించిన డేటాను, అలాగే మీ పరికరం యొక్క లొకేషన్ సమాచారాన్ని మీ IT అడ్మిన్ పర్యవేక్షించగలరు, మేనేజ్ చేయగలరు.\n\nమరింత సమాచారం కోసం, మీ IT అడ్మిన్ను సంప్రదించండి.""ఈ పరికరం మీ సంస్థకు చెందినది.\n\nసెట్టింగ్లను, కార్పొరేట్ యాక్సెస్ను, యాప్లను, మీ పరికరానికి సంబంధించిన డేటాను, అలాగే మీ పరికరం యొక్క లొకేషన్ సమాచారాన్ని మీ IT అడ్మిన్ పర్యవేక్షించగలరు, మేనేజ్ చేయగలరు.\n\nమరింత సమాచారం కోసం, మీ IT అడ్మిన్ను సంప్రదించండి.""ఈ పరికరంలో మీ సంస్థ ఒక ప్రమాణపత్ర అధికారాన్ని ఇన్స్టాల్ చేసింది. మీ సురక్షిత నెట్వర్క్ ట్రాఫిక్ పర్యవేక్షించబడవచ్చు లేదా సవరించబడవచ్చు.""మీ కార్యాలయ ప్రొఫైల్లో మీ సంస్థ ఒక ప్రమాణపత్ర అధికారాన్ని ఇన్స్టాల్ చేసింది. మీ సురక్షిత నెట్వర్క్ ట్రాఫిక్ పర్యవేక్షించబడవచ్చు లేదా సవరించబడవచ్చు.""ఈ పరికరంలో ప్రమాణపత్ర అధికారం ఇన్స్టాల్ చేయబడింది. మీ సురక్షిత నెట్వర్క్ ట్రాఫిక్ పర్యవేక్షించబడవచ్చు లేదా సవరించబడవచ్చు."
- "మీ నిర్వాహకులు మీ పరికరంలోని ట్రాఫిక్ని పర్యవేక్షించగల నెట్వర్క్ లాగింగ్ని ఆన్ చేసారు."
+ "మీ నిర్వాహకులు మీ పరికరంలోని ట్రాఫిక్ని పర్యవేక్షించగల నెట్వర్క్ లాగింగ్ని ఆన్ చేశారు.""మీరు %1$sకి కనెక్ట్ చేయబడ్డారు, ఇది ఇమెయిల్లు, యాప్లు మరియు వెబ్సైట్లతో సహా మీ నెట్వర్క్ కార్యాచరణను పర్యవేక్షించగలదు.""మీరు ఇమెయిల్లు, యాప్లు మరియు వెబ్సైట్లతో సహా మీ నెట్వర్క్ కార్యాచరణను పర్యవేక్షించగల %1$s మరియు %2$sకి కనెక్ట్ చేయబడ్డారు.""మీ కార్యాలయ ప్రొఫైల్ ఇమెయిల్లు, యాప్లు మరియు వెబ్సైట్లతో సహా మీ నెట్వర్క్ కార్యాచరణను పర్యవేక్షించగల %1$sకి కనెక్ట్ చేయబడింది."
@@ -565,7 +565,7 @@
"VPN సెట్టింగ్లను తెరవండి"" ""విశ్వసనీయ ఆధారాలను తెరువు"
- "మీ నిర్వాహకులు మీ పరికరంలోని ట్రాఫిక్ని పర్యవేక్షించగల నెట్వర్క్ లాగింగ్ని ఆన్ చేసారు.\n\nమరింత సమాచారం కావాలంటే, మీ నిర్వాహకులను సంప్రదించండి."
+ "మీ నిర్వాహకులు మీ పరికరంలోని ట్రాఫిక్ని పర్యవేక్షించగల నెట్వర్క్ లాగింగ్ని ఆన్ చేశారు.\n\nమరింత సమాచారం కావాలంటే, మీ నిర్వాహకులను సంప్రదించండి.""మీరు VPN కనెక్షన్ సెటప్ చేయడానికి ఒక యాప్నకు అనుమతి ఇచ్చారు.\n\nఈ యాప్ ఇమెయిల్లు,యాప్లు మరియు వెబ్సైట్లతో సహా మీ డివైజ్ మరియు నెట్వర్క్ కార్యకలాపాన్ని పర్యవేక్షించగలదు.""%1$s ద్వారా మీ కార్యాలయ ప్రొఫైల్ నిర్వహించబడుతోంది.\n\nఇమెయిల్లు, యాప్లు మరియు వెబ్సైట్లతో సహా మీ నెట్వర్క్ కార్యాచరణను పర్యవేక్షించగల సామర్థ్యం మీ నిర్వాహకులకు ఉంది.\n\nమరింత సమాచారం కావాలంటే, మీ నిర్వాహకులను సంప్రదించండి.\n\nమీరు VPNకి కూడా కనెక్ట్ అయ్యారు, ఇది మీ నెట్వర్క్ కార్యాచరణను పర్యవేక్షించగలదు.""VPN"
@@ -900,7 +900,7 @@
"శీఘ్ర సెట్టింగ్లను తెరవండి.""శీఘ్ర సెట్టింగ్లను మూసివేయండి.""అలారం సెట్ చేయబడింది."
- "%s వలె సైన్ ఇన్ చేసారు"
+ "%s వలె సైన్ ఇన్ చేశారు""ఇంటర్నెట్ లేదు""వివరాలను తెరవండి.""%s కారణంగా అందుబాటులో లేదు"
@@ -947,7 +947,7 @@
"అలర్ట్లు""బ్యాటరీ""స్క్రీన్షాట్లు"
- "సాధారణ సందేశాలు"
+ "సాధారణ మెసేజ్లు""స్టోరేజ్""సూచనలు""ఇన్స్టంట్ యాప్లు"
From 4fb7feae33e2231a6aa52c22ec8066e86ddd45ef Mon Sep 17 00:00:00 2001
From: Bill Yi
Date: Thu, 12 Aug 2021 15:38:45 +0000
Subject: [PATCH 053/671] Import translations. DO NOT MERGE ANYWHERE
Auto-generated-cl: translation import
Change-Id: I74e1f420080903b39e163ab6732b60d060ff8873
---
packages/SystemUI/res-keyguard/values-te/strings.xml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/packages/SystemUI/res-keyguard/values-te/strings.xml b/packages/SystemUI/res-keyguard/values-te/strings.xml
index d44003bc5b95..9c7e64fe847a 100644
--- a/packages/SystemUI/res-keyguard/values-te/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-te/strings.xml
@@ -82,8 +82,8 @@
"PUK కోడ్ అనేది 8 లేదా అంతకంటే ఎక్కువ సంఖ్యలు ఉండాలి.""సరైన PUK కోడ్ను మళ్లీ నమోదు చేయండి. ఎక్కువసార్లు ప్రయత్నించడం వలన SIM శాశ్వతంగా నిలిపివేయబడుతుంది.""నమూనాని చాలా ఎక్కువసార్లు గీసారు"
- "మీరు మీ పిన్ను %1$d సార్లు తప్పుగా టైప్ చేసారు. \n\n%2$d సెకన్లలో మళ్లీ ప్రయత్నించండి."
- "మీరు మీ పాస్వర్డ్ను %1$d సార్లు తప్పుగా టైప్ చేసారు. \n\n%2$d సెకన్లలో మళ్లీ ప్రయత్నించండి."
+ "మీరు మీ పిన్ను %1$d సార్లు తప్పుగా టైప్ చేశారు. \n\n%2$d సెకన్లలో మళ్లీ ప్రయత్నించండి."
+ "మీరు మీ పాస్వర్డ్ను %1$d సార్లు తప్పుగా టైప్ చేశారు. \n\n%2$d సెకన్లలో మళ్లీ ప్రయత్నించండి.""మీరు మీ అన్లాక్ నమూనాను %1$d సార్లు తప్పుగా గీసారు. \n\n%2$d సెకన్లలో మళ్లీ ప్రయత్నించండి.""SIM పిన్ కోడ్ తప్పు, ఇప్పుడు మీ డివైజ్ను అన్లాక్ చేయాలంటే, మీరు తప్పనిసరిగా మీ క్యారియర్ను సంప్రదించాలి."
From f7615bdd36a28498870e56c2d6f85e3ecfc57497 Mon Sep 17 00:00:00 2001
From: Bill Yi
Date: Thu, 12 Aug 2021 15:48:18 +0000
Subject: [PATCH 054/671] Import translations. DO NOT MERGE ANYWHERE
Auto-generated-cl: translation import
Change-Id: I62f3141754b233600850b2b9a881e7b57dedc1a3
---
packages/SystemUI/res/values-te/strings.xml | 14 +++++++-------
1 file changed, 7 insertions(+), 7 deletions(-)
diff --git a/packages/SystemUI/res/values-te/strings.xml b/packages/SystemUI/res/values-te/strings.xml
index a86aa96df55d..3d1adf04b9cb 100644
--- a/packages/SystemUI/res/values-te/strings.xml
+++ b/packages/SystemUI/res/values-te/strings.xml
@@ -54,7 +54,7 @@
"%2$sని నిర్వహించడానికి %1$sని తెరవాలా?""ఈ USB ఉపకరణంతో ఇన్స్టాల్ చేయబడిన యాప్లు ఏవీ పని చేయవు. ఈ ఉపకరణం గురించి %1$sలో మరింత తెలుసుకోండి""USB ఉపకరణం"
- "వీక్షించండి"
+ "చూడండి""%2$s కనెక్ట్ అయి ఉన్న ఎల్లప్పుడూ %1$sని తెరవండి""%2$s కనెక్ట్ అయి ఉన్న ఎల్లప్పుడూ %1$sని తెరవండి""USB డీబగ్గింగ్ను అనుమతించాలా?"
@@ -501,7 +501,7 @@
"బ్యాటరీ సేవర్ ఆన్లో ఉంది""పనితీరుని మరియు నేపథ్య డేటాను తగ్గిస్తుంది""బ్యాటరీ సేవర్ను ఆఫ్ చేయండి"
- "రికార్డ్ చేస్తున్నప్పుడు లేదా ప్రసారం చేస్తున్నప్పుడు, మీ స్క్రీన్పై ప్రదర్శించబడిన లేదా మీ పరికరం నుండి ప్లే చేయబడిన సమాచారం మొత్తాన్ని, %s యాక్సెస్ చేయగలుగుతుంది. ఈ సమాచారంలో, పాస్వర్డ్లు, చెల్లింపు వివరాలు, ఫోటోలు, సందేశాలు, మీరు ప్లే చేసే ఆడియో వంటివి ఉంటాయి."
+ "రికార్డ్ చేస్తున్నప్పుడు లేదా ప్రసారం చేస్తున్నప్పుడు, మీ స్క్రీన్పై ప్రదర్శించబడిన లేదా మీ పరికరం నుండి ప్లే చేయబడిన సమాచారం మొత్తాన్ని, %s యాక్సెస్ చేయగలుగుతుంది. ఈ సమాచారంలో, పాస్వర్డ్లు, చెల్లింపు వివరాలు, ఫోటోలు, మెసేజ్లు, మీరు ప్లే చేసే ఆడియో వంటివి ఉంటాయి.""రికార్డ్ చేస్తున్నప్పుడు లేదా ప్రసారం చేస్తున్నప్పుడు మీ స్క్రీన్పై ప్రదర్శించబడిన లేదా మీ పరికరం నుండి ప్లే చేయబడిన సమాచారం మొత్తాన్ని, ఈ ఫంక్షన్ను అందిస్తున్న సర్వీస్ యాక్సెస్ చేయగలదు. ఈ సమాచారంలో, పాస్వర్డ్లు, పేమెంట్ వివరాలు, ఫోటోలు, మెసేజ్లు, మీరు ప్లే చేసే ఆడియో వంటివి ఉంటాయి.""రికార్డ్ చేయడం లేదా ప్రసారం చేయడం ప్రారంభించాలా?""%sతో రికార్డ్ చేయడం లేదా ప్రసారం చేయడం ప్రారంభించాలా?"
@@ -543,13 +543,13 @@
"CA ప్రమాణపత్రాలు""VPNని నిలిపివేయి""VPNను డిస్కనెక్ట్ చేయి"
- "విధానాలను వీక్షించండి"
+ "విధానాలను చూడండి""ఈ పరికరం %1$sకు చెందినది.\n\nసెట్టింగ్లను, కార్పొరేట్ యాక్సెస్ను, యాప్లను, మీ పరికరానికి సంబంధించిన డేటాను, అలాగే మీ పరికరం యొక్క లొకేషన్ సమాచారాన్ని మీ IT అడ్మిన్ పర్యవేక్షించగలరు, మేనేజ్ చేయగలరు.\n\nమరింత సమాచారం కోసం, మీ IT అడ్మిన్ను సంప్రదించండి.""ఈ పరికరం మీ సంస్థకు చెందినది.\n\nసెట్టింగ్లను, కార్పొరేట్ యాక్సెస్ను, యాప్లను, మీ పరికరానికి సంబంధించిన డేటాను, అలాగే మీ పరికరం యొక్క లొకేషన్ సమాచారాన్ని మీ IT అడ్మిన్ పర్యవేక్షించగలరు, మేనేజ్ చేయగలరు.\n\nమరింత సమాచారం కోసం, మీ IT అడ్మిన్ను సంప్రదించండి.""ఈ పరికరంలో మీ సంస్థ ఒక ప్రమాణపత్ర అధికారాన్ని ఇన్స్టాల్ చేసింది. మీ సురక్షిత నెట్వర్క్ ట్రాఫిక్ పర్యవేక్షించబడవచ్చు లేదా సవరించబడవచ్చు.""మీ కార్యాలయ ప్రొఫైల్లో మీ సంస్థ ఒక ప్రమాణపత్ర అధికారాన్ని ఇన్స్టాల్ చేసింది. మీ సురక్షిత నెట్వర్క్ ట్రాఫిక్ పర్యవేక్షించబడవచ్చు లేదా సవరించబడవచ్చు.""ఈ పరికరంలో ప్రమాణపత్ర అధికారం ఇన్స్టాల్ చేయబడింది. మీ సురక్షిత నెట్వర్క్ ట్రాఫిక్ పర్యవేక్షించబడవచ్చు లేదా సవరించబడవచ్చు."
- "మీ నిర్వాహకులు మీ పరికరంలోని ట్రాఫిక్ని పర్యవేక్షించగల నెట్వర్క్ లాగింగ్ని ఆన్ చేసారు."
+ "మీ నిర్వాహకులు మీ పరికరంలోని ట్రాఫిక్ని పర్యవేక్షించగల నెట్వర్క్ లాగింగ్ని ఆన్ చేశారు.""మీరు %1$sకి కనెక్ట్ చేయబడ్డారు, ఇది ఇమెయిల్లు, యాప్లు మరియు వెబ్సైట్లతో సహా మీ నెట్వర్క్ కార్యాచరణను పర్యవేక్షించగలదు.""మీరు ఇమెయిల్లు, యాప్లు మరియు వెబ్సైట్లతో సహా మీ నెట్వర్క్ కార్యాచరణను పర్యవేక్షించగల %1$s మరియు %2$sకి కనెక్ట్ చేయబడ్డారు.""మీ కార్యాలయ ప్రొఫైల్ ఇమెయిల్లు, యాప్లు మరియు వెబ్సైట్లతో సహా మీ నెట్వర్క్ కార్యాచరణను పర్యవేక్షించగల %1$sకి కనెక్ట్ చేయబడింది."
@@ -564,7 +564,7 @@
"VPN సెట్టింగ్లను తెరవండి"" ""విశ్వసనీయ ఆధారాలను తెరువు"
- "మీ నిర్వాహకులు మీ పరికరంలోని ట్రాఫిక్ని పర్యవేక్షించగల నెట్వర్క్ లాగింగ్ని ఆన్ చేసారు.\n\nమరింత సమాచారం కావాలంటే, మీ నిర్వాహకులను సంప్రదించండి."
+ "మీ నిర్వాహకులు మీ పరికరంలోని ట్రాఫిక్ని పర్యవేక్షించగల నెట్వర్క్ లాగింగ్ని ఆన్ చేశారు.\n\nమరింత సమాచారం కావాలంటే, మీ నిర్వాహకులను సంప్రదించండి.""మీరు VPN కనెక్షన్ సెటప్ చేయడానికి ఒక యాప్నకు అనుమతి ఇచ్చారు.\n\nఈ యాప్ ఇమెయిల్లు,యాప్లు మరియు వెబ్సైట్లతో సహా మీ డివైజ్ మరియు నెట్వర్క్ కార్యకలాపాన్ని పర్యవేక్షించగలదు.""%1$s ద్వారా మీ కార్యాలయ ప్రొఫైల్ నిర్వహించబడుతోంది.\n\nఇమెయిల్లు, యాప్లు మరియు వెబ్సైట్లతో సహా మీ నెట్వర్క్ కార్యాచరణను పర్యవేక్షించగల సామర్థ్యం మీ నిర్వాహకులకు ఉంది.\n\nమరింత సమాచారం కావాలంటే, మీ నిర్వాహకులను సంప్రదించండి.\n\nమీరు VPNకి కూడా కనెక్ట్ అయ్యారు, ఇది మీ నెట్వర్క్ కార్యాచరణను పర్యవేక్షించగలదు.""VPN"
@@ -900,7 +900,7 @@
"శీఘ్ర సెట్టింగ్లను తెరవండి.""శీఘ్ర సెట్టింగ్లను మూసివేయండి.""అలారం సెట్ చేయబడింది."
- "%s వలె సైన్ ఇన్ చేసారు"
+ "%s వలె సైన్ ఇన్ చేశారు""ఇంటర్నెట్ లేదు""వివరాలను తెరవండి.""%s కారణంగా అందుబాటులో లేదు"
@@ -949,7 +949,7 @@
"అలర్ట్లు""బ్యాటరీ""స్క్రీన్షాట్లు"
- "సాధారణ సందేశాలు"
+ "సాధారణ మెసేజ్లు""స్టోరేజ్""సూచనలు""ఇన్స్టంట్ యాప్లు"
From 5c84edacf09bb57396a67f6e28f1059450ed5745 Mon Sep 17 00:00:00 2001
From: Mill Chen
Date: Tue, 10 Aug 2021 15:39:14 +0800
Subject: [PATCH 055/671] Replace private attributes with public resources.
The change replaces all existing usage of private resources in
SettingsLib with corresponding public resources. The only exception
is android:string/config_headlineFontFamily where there's no proper
replaccement.
The library is currently used by bundled apps (such as SettingsGoogle)
and unbundled apps (such as PermissionController and
CellBroadcastReceiver). Since we still want these bundled apps to
reference config_headlineFontFamily properly while not breaking
unbundled apps due to them referencing private attributes, we added a
new attribute settingslib_config_headlineFontFamily (alongside with
other FontFamily variance for completeness) in
SettingsTheme/res/values-v31/strings.xml which points to
config_headlineFontFamily by default. Then, in separate CLs, we will add
resource overrides to these unbundled apps to replace the value of
settingslib_config_headlineFontFamily to point to a public value. While
this means that the style of the pages from the unbundled apps will be
different from the rest of SettingsLib clients, the change provides a
tactical fix to make sure that these unbundled apps won't crash when
shipped to other devices. We can address the issue at its core by
potentially exposing some private resources in future Android releases.
Bug: 191387775
Bug: 190964071
Bug: 196106314
Test: manual test to confirm this is a no-op CL.
Change-Id: Ie25950d9f54964aa40038a27b302ed017e4e4d15
---
.../res/values-v31/styles.xml | 8 ++--
.../res/values/styles.xml | 5 +--
.../BarChartPreference/res/values/styles.xml | 6 +--
.../CollapsingToolbarBaseActivity/Android.bp | 1 +
.../collapsing_toolbar_base_layout.xml | 3 +-
.../themes.xml | 4 +-
.../res/{values => values-v31}/dimens.xml | 0
.../res/{values => values-v31}/styles.xml | 2 +-
.../res/{values => values-v31}/themes.xml | 4 +-
.../FooterPreference/res/values/styles.xml | 3 +-
.../LayoutPreference/res/values/styles.xml | 5 +--
.../settingslib_switch_bar_bg_disabled.xml | 0
.../settingslib_switch_bar_bg_off.xml | 0
.../settingslib_switch_bar_bg_on.xml | 0
.../settingslib_main_switch_bar.xml | 2 +-
.../layout/settingslib_main_switch_bar.xml | 4 +-
.../res/values-v31/dimens.xml | 37 +++++++++++++++++++
.../res/values-v31/styles.xml | 25 +++++++++++++
.../res/values/dimens.xml | 22 +----------
.../res/values/styles.xml | 9 +----
.../color-v31/settingslib_surface_light.xml | 18 +++++++++
.../res/values-night-v31/colors.xml | 5 +++
.../SettingsTheme/res/values-v31/colors.xml | 23 +++++++++++-
.../SettingsTheme/res/values-v31/dimens.xml | 1 +
.../SettingsTheme/res/values-v31/strings.xml | 37 +++++++++++++++++++
.../SettingsTheme/res/values-v31/styles.xml | 8 +++-
.../SettingsTheme/res/values-v31/themes.xml | 2 +-
.../SettingsTheme/res/values/dimens.xml | 1 +
.../SettingsTheme/res/values/themes.xml | 2 +-
.../TopIntroPreference/res/values/styles.xml | 3 +-
30 files changed, 180 insertions(+), 60 deletions(-)
rename packages/SettingsLib/CollapsingToolbarBaseActivity/res/{values-night => values-night-v31}/themes.xml (82%)
rename packages/SettingsLib/CollapsingToolbarBaseActivity/res/{values => values-v31}/dimens.xml (100%)
rename packages/SettingsLib/CollapsingToolbarBaseActivity/res/{values => values-v31}/styles.xml (90%)
rename packages/SettingsLib/CollapsingToolbarBaseActivity/res/{values => values-v31}/themes.xml (82%)
rename packages/SettingsLib/MainSwitchPreference/res/{drawable => drawable-v31}/settingslib_switch_bar_bg_disabled.xml (100%)
rename packages/SettingsLib/MainSwitchPreference/res/{drawable => drawable-v31}/settingslib_switch_bar_bg_off.xml (100%)
rename packages/SettingsLib/MainSwitchPreference/res/{drawable => drawable-v31}/settingslib_switch_bar_bg_on.xml (100%)
create mode 100644 packages/SettingsLib/MainSwitchPreference/res/values-v31/dimens.xml
create mode 100644 packages/SettingsLib/MainSwitchPreference/res/values-v31/styles.xml
create mode 100644 packages/SettingsLib/SettingsTheme/res/color-v31/settingslib_surface_light.xml
create mode 100644 packages/SettingsLib/SettingsTheme/res/values-v31/strings.xml
diff --git a/packages/SettingsLib/BannerMessagePreference/res/values-v31/styles.xml b/packages/SettingsLib/BannerMessagePreference/res/values-v31/styles.xml
index e74ac44ec8a4..fede44feb090 100644
--- a/packages/SettingsLib/BannerMessagePreference/res/values-v31/styles.xml
+++ b/packages/SettingsLib/BannerMessagePreference/res/values-v31/styles.xml
@@ -33,18 +33,18 @@
@@ -58,4 +58,4 @@
parent="android:Widget.DeviceDefault.Button.Borderless.Colored">
?android:attr/colorAccent
-
\ No newline at end of file
+
diff --git a/packages/SettingsLib/BannerMessagePreference/res/values/styles.xml b/packages/SettingsLib/BannerMessagePreference/res/values/styles.xml
index df47c642e402..4c6ed58f4a58 100644
--- a/packages/SettingsLib/BannerMessagePreference/res/values/styles.xml
+++ b/packages/SettingsLib/BannerMessagePreference/res/values/styles.xml
@@ -17,14 +17,13 @@
diff --git a/packages/SettingsLib/BarChartPreference/res/values/styles.xml b/packages/SettingsLib/BarChartPreference/res/values/styles.xml
index 7a3fb7d9386e..d1f562b38760 100644
--- a/packages/SettingsLib/BarChartPreference/res/values/styles.xml
+++ b/packages/SettingsLib/BarChartPreference/res/values/styles.xml
@@ -85,9 +85,9 @@
diff --git a/packages/SettingsLib/CollapsingToolbarBaseActivity/Android.bp b/packages/SettingsLib/CollapsingToolbarBaseActivity/Android.bp
index 2f911c4e6546..238e65ec9a3c 100644
--- a/packages/SettingsLib/CollapsingToolbarBaseActivity/Android.bp
+++ b/packages/SettingsLib/CollapsingToolbarBaseActivity/Android.bp
@@ -19,6 +19,7 @@ android_library {
"com.google.android.material_material",
"SettingsLibSettingsTransition",
"SettingsLibUtils",
+ "SettingsLibSettingsTheme",
],
sdk_version: "system_current",
min_sdk_version: "29",
diff --git a/packages/SettingsLib/CollapsingToolbarBaseActivity/res/layout-v31/collapsing_toolbar_base_layout.xml b/packages/SettingsLib/CollapsingToolbarBaseActivity/res/layout-v31/collapsing_toolbar_base_layout.xml
index 59506564400b..907863e19972 100644
--- a/packages/SettingsLib/CollapsingToolbarBaseActivity/res/layout-v31/collapsing_toolbar_base_layout.xml
+++ b/packages/SettingsLib/CollapsingToolbarBaseActivity/res/layout-v31/collapsing_toolbar_base_layout.xml
@@ -16,7 +16,6 @@
-->
true?attr/colorPrimary
- @*android:color/primary_dark_device_default_settings
- @*android:color/accent_device_default_dark
+ @color/settingslib_primary_dark_device_default_settings
+ @color/settingslib_accent_device_default_dark
\ No newline at end of file
diff --git a/packages/SettingsLib/CollapsingToolbarBaseActivity/res/values/dimens.xml b/packages/SettingsLib/CollapsingToolbarBaseActivity/res/values-v31/dimens.xml
similarity index 100%
rename from packages/SettingsLib/CollapsingToolbarBaseActivity/res/values/dimens.xml
rename to packages/SettingsLib/CollapsingToolbarBaseActivity/res/values-v31/dimens.xml
diff --git a/packages/SettingsLib/CollapsingToolbarBaseActivity/res/values/styles.xml b/packages/SettingsLib/CollapsingToolbarBaseActivity/res/values-v31/styles.xml
similarity index 90%
rename from packages/SettingsLib/CollapsingToolbarBaseActivity/res/values/styles.xml
rename to packages/SettingsLib/CollapsingToolbarBaseActivity/res/values-v31/styles.xml
index 63d397c69353..bda51b5160c8 100644
--- a/packages/SettingsLib/CollapsingToolbarBaseActivity/res/values/styles.xml
+++ b/packages/SettingsLib/CollapsingToolbarBaseActivity/res/values-v31/styles.xml
@@ -16,7 +16,7 @@
-->
diff --git a/packages/SettingsLib/CollapsingToolbarBaseActivity/res/values/themes.xml b/packages/SettingsLib/CollapsingToolbarBaseActivity/res/values-v31/themes.xml
similarity index 82%
rename from packages/SettingsLib/CollapsingToolbarBaseActivity/res/values/themes.xml
rename to packages/SettingsLib/CollapsingToolbarBaseActivity/res/values-v31/themes.xml
index 2e7a6a9181fe..9ecc297c6d36 100644
--- a/packages/SettingsLib/CollapsingToolbarBaseActivity/res/values/themes.xml
+++ b/packages/SettingsLib/CollapsingToolbarBaseActivity/res/values-v31/themes.xml
@@ -18,7 +18,7 @@
\ No newline at end of file
diff --git a/packages/SettingsLib/FooterPreference/res/values/styles.xml b/packages/SettingsLib/FooterPreference/res/values/styles.xml
index 08dd35991f69..5a3bada3e594 100644
--- a/packages/SettingsLib/FooterPreference/res/values/styles.xml
+++ b/packages/SettingsLib/FooterPreference/res/values/styles.xml
@@ -17,9 +17,8 @@
\ No newline at end of file
diff --git a/packages/SettingsLib/LayoutPreference/res/values/styles.xml b/packages/SettingsLib/LayoutPreference/res/values/styles.xml
index 4a99e845a5fc..2ffe6d91651b 100644
--- a/packages/SettingsLib/LayoutPreference/res/values/styles.xml
+++ b/packages/SettingsLib/LayoutPreference/res/values/styles.xml
@@ -24,14 +24,13 @@
+
diff --git a/packages/SettingsLib/MainSwitchPreference/res/values/dimens.xml b/packages/SettingsLib/MainSwitchPreference/res/values/dimens.xml
index 16b8af6a2dab..6362882e2332 100644
--- a/packages/SettingsLib/MainSwitchPreference/res/values/dimens.xml
+++ b/packages/SettingsLib/MainSwitchPreference/res/values/dimens.xml
@@ -1,6 +1,6 @@
- 16dp
-
-
- 24dp
-
-
- 16dp
-
-
- 52dp
-
-
- 72dp
-
- @*android:dimen/config_restrictedIconSize
+ @android:dimen/config_restrictedIconSize16dp
-
- 28dp
-
16dp
diff --git a/packages/SettingsLib/MainSwitchPreference/res/values/styles.xml b/packages/SettingsLib/MainSwitchPreference/res/values/styles.xml
index 3924e301a2d3..870812ae6caf 100644
--- a/packages/SettingsLib/MainSwitchPreference/res/values/styles.xml
+++ b/packages/SettingsLib/MainSwitchPreference/res/values/styles.xml
@@ -1,6 +1,6 @@
+
+
+
\ No newline at end of file
diff --git a/packages/SettingsLib/SettingsTheme/res/values-night-v31/colors.xml b/packages/SettingsLib/SettingsTheme/res/values-night-v31/colors.xml
index 8c7c7ed5b120..e8fd4b24b629 100644
--- a/packages/SettingsLib/SettingsTheme/res/values-night-v31/colors.xml
+++ b/packages/SettingsLib/SettingsTheme/res/values-night-v31/colors.xml
@@ -36,4 +36,9 @@
#f28b82@android:color/system_neutral1_700
+
+ @android:color/system_neutral1_700
+
+
+ @android:color/system_accent1_300
\ No newline at end of file
diff --git a/packages/SettingsLib/SettingsTheme/res/values-v31/colors.xml b/packages/SettingsLib/SettingsTheme/res/values-v31/colors.xml
index 77f1bcd17371..0f20ec326e74 100644
--- a/packages/SettingsLib/SettingsTheme/res/values-v31/colors.xml
+++ b/packages/SettingsLib/SettingsTheme/res/values-v31/colors.xml
@@ -37,9 +37,30 @@
@android:color/system_accent1_600
- @*android:color/surface_light
+ @color/settingslib_surface_light#d93025@android:color/system_neutral2_100
+
+ @android:color/system_neutral1_100
+
+ @android:color/system_accent1_100
+
+ @android:color/system_accent1_600
+
+ @android:color/system_neutral1_900
+
+ @android:color/system_neutral1_50
+
+ @android:color/system_accent1_100
+
+
+ @android:color/system_accent1_600
+
+ @android:color/system_accent2_100
+
+ @android:color/system_neutral1_900
+
+ @android:color/system_neutral1_50
diff --git a/packages/SettingsLib/SettingsTheme/res/values-v31/dimens.xml b/packages/SettingsLib/SettingsTheme/res/values-v31/dimens.xml
index ddcc83eee4bf..1c33f1a57ea5 100644
--- a/packages/SettingsLib/SettingsTheme/res/values-v31/dimens.xml
+++ b/packages/SettingsLib/SettingsTheme/res/values-v31/dimens.xml
@@ -19,4 +19,5 @@
20dp52dp48dp
+ 28dp
diff --git a/packages/SettingsLib/SettingsTheme/res/values-v31/strings.xml b/packages/SettingsLib/SettingsTheme/res/values-v31/strings.xml
new file mode 100644
index 000000000000..6d072a936b15
--- /dev/null
+++ b/packages/SettingsLib/SettingsTheme/res/values-v31/strings.xml
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+ @*android:string/config_headlineFontFamily
+
+
+
+
+ @*android:string/config_headlineFontFamilyMedium
+
+
+
+
+ @*android:string/config_bodyFontFamily
+
+
+
+
+ @*android:string/config_bodyFontFamilyMedium
+
+
diff --git a/packages/SettingsLib/SettingsTheme/res/values-v31/styles.xml b/packages/SettingsLib/SettingsTheme/res/values-v31/styles.xml
index 46f1e030af23..58006369988e 100644
--- a/packages/SettingsLib/SettingsTheme/res/values-v31/styles.xml
+++ b/packages/SettingsLib/SettingsTheme/res/values-v31/styles.xml
@@ -16,12 +16,16 @@
-->
+ parent="@android:style/TextAppearance.DeviceDefault.Medium">
+ ?android:attr/textColorPrimary
+ 14sp
+
\ No newline at end of file
diff --git a/packages/SettingsLib/SettingsTheme/res/values/dimens.xml b/packages/SettingsLib/SettingsTheme/res/values/dimens.xml
index 25f9514c29b7..18af1f9c15d0 100644
--- a/packages/SettingsLib/SettingsTheme/res/values/dimens.xml
+++ b/packages/SettingsLib/SettingsTheme/res/values/dimens.xml
@@ -20,4 +20,5 @@
?android:attr/listPreferredItemPaddingStart56dp72dp
+ 8dp
diff --git a/packages/SettingsLib/SettingsTheme/res/values/themes.xml b/packages/SettingsLib/SettingsTheme/res/values/themes.xml
index 6f2517746ddc..2d881d1a8a7b 100644
--- a/packages/SettingsLib/SettingsTheme/res/values/themes.xml
+++ b/packages/SettingsLib/SettingsTheme/res/values/themes.xml
@@ -35,7 +35,7 @@
adjustResizetrue
diff --git a/packages/SettingsLib/TopIntroPreference/res/values/styles.xml b/packages/SettingsLib/TopIntroPreference/res/values/styles.xml
index 65869b5580b5..b6ca41fb6b6d 100644
--- a/packages/SettingsLib/TopIntroPreference/res/values/styles.xml
+++ b/packages/SettingsLib/TopIntroPreference/res/values/styles.xml
@@ -16,8 +16,7 @@
-->
From 6722b96ff7bf96c45ca1439af537a3c56f48a8c7 Mon Sep 17 00:00:00 2001
From: Bill Yi
Date: Thu, 12 Aug 2021 15:53:44 +0000
Subject: [PATCH 056/671] Import translations. DO NOT MERGE ANYWHERE
Auto-generated-cl: translation import
Change-Id: I9c41f36eda4941517148f3dfa49717b6df478c18
---
packages/SystemUI/res-keyguard/values-te/strings.xml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/packages/SystemUI/res-keyguard/values-te/strings.xml b/packages/SystemUI/res-keyguard/values-te/strings.xml
index 990253a7862f..334252d1ae22 100644
--- a/packages/SystemUI/res-keyguard/values-te/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-te/strings.xml
@@ -83,8 +83,8 @@
"PUK కోడ్ అనేది 8 లేదా అంతకంటే ఎక్కువ సంఖ్యలు ఉండాలి.""సరైన PUK కోడ్ను మళ్లీ నమోదు చేయండి. ఎక్కువసార్లు ప్రయత్నించడం వలన SIM శాశ్వతంగా నిలిపివేయబడుతుంది.""నమూనాని చాలా ఎక్కువసార్లు గీసారు"
- "మీరు మీ పిన్ను %1$d సార్లు తప్పుగా టైప్ చేసారు. \n\n%2$d సెకన్లలో మళ్లీ ప్రయత్నించండి."
- "మీరు మీ పాస్వర్డ్ను %1$d సార్లు తప్పుగా టైప్ చేసారు. \n\n%2$d సెకన్లలో మళ్లీ ప్రయత్నించండి."
+ "మీరు మీ పిన్ను %1$d సార్లు తప్పుగా టైప్ చేశారు. \n\n%2$d సెకన్లలో మళ్లీ ప్రయత్నించండి."
+ "మీరు మీ పాస్వర్డ్ను %1$d సార్లు తప్పుగా టైప్ చేశారు. \n\n%2$d సెకన్లలో మళ్లీ ప్రయత్నించండి.""మీరు మీ అన్లాక్ నమూనాను %1$d సార్లు తప్పుగా గీసారు. \n\n%2$d సెకన్లలో మళ్లీ ప్రయత్నించండి.""SIM పిన్ కోడ్ తప్పు, ఇప్పుడు మీ డివైజ్ను అన్లాక్ చేయాలంటే, మీరు తప్పనిసరిగా మీ క్యారియర్ను సంప్రదించాలి."
From 2984e28472bdcf30fac1d89755bb5f38fe745a22 Mon Sep 17 00:00:00 2001
From: Bill Yi
Date: Thu, 12 Aug 2021 15:59:49 +0000
Subject: [PATCH 057/671] Import translations. DO NOT MERGE ANYWHERE
Auto-generated-cl: translation import
Change-Id: I892f321e606651ae227d58459d195d9bad29a51b
---
packages/SystemUI/res/values-te/strings.xml | 14 +++++++-------
1 file changed, 7 insertions(+), 7 deletions(-)
diff --git a/packages/SystemUI/res/values-te/strings.xml b/packages/SystemUI/res/values-te/strings.xml
index 45236a795573..e285796f6037 100644
--- a/packages/SystemUI/res/values-te/strings.xml
+++ b/packages/SystemUI/res/values-te/strings.xml
@@ -54,7 +54,7 @@
"%2$sని నిర్వహించడానికి %1$sని తెరవాలా?""ఈ USB ఉపకరణంతో ఇన్స్టాల్ చేయబడిన యాప్లు ఏవీ పని చేయవు. ఈ ఉపకరణం గురించి %1$sలో మరింత తెలుసుకోండి""USB ఉపకరణం"
- "వీక్షించండి"
+ "చూడండి""%2$s కనెక్ట్ అయి ఉన్న ఎల్లప్పుడూ %1$sని తెరవండి""%2$s కనెక్ట్ అయి ఉన్న ఎల్లప్పుడూ %1$sని తెరవండి""USB డీబగ్గింగ్ను అనుమతించాలా?"
@@ -506,7 +506,7 @@
"బ్యాటరీ సేవర్ ఆన్లో ఉంది""పనితీరుని మరియు నేపథ్య డేటాను తగ్గిస్తుంది""బ్యాటరీ సేవర్ను ఆఫ్ చేయండి"
- "రికార్డ్ చేస్తున్నప్పుడు లేదా ప్రసారం చేస్తున్నప్పుడు, మీ స్క్రీన్పై ప్రదర్శించబడిన లేదా మీ పరికరం నుండి ప్లే చేయబడిన సమాచారం మొత్తాన్ని, %s యాక్సెస్ చేయగలుగుతుంది. ఈ సమాచారంలో, పాస్వర్డ్లు, చెల్లింపు వివరాలు, ఫోటోలు, సందేశాలు, మీరు ప్లే చేసే ఆడియో వంటివి ఉంటాయి."
+ "రికార్డ్ చేస్తున్నప్పుడు లేదా ప్రసారం చేస్తున్నప్పుడు, మీ స్క్రీన్పై ప్రదర్శించబడిన లేదా మీ పరికరం నుండి ప్లే చేయబడిన సమాచారం మొత్తాన్ని, %s యాక్సెస్ చేయగలుగుతుంది. ఈ సమాచారంలో, పాస్వర్డ్లు, చెల్లింపు వివరాలు, ఫోటోలు, మెసేజ్లు, మీరు ప్లే చేసే ఆడియో వంటివి ఉంటాయి.""రికార్డ్ చేస్తున్నప్పుడు లేదా ప్రసారం చేస్తున్నప్పుడు మీ స్క్రీన్పై ప్రదర్శించబడిన లేదా మీ పరికరం నుండి ప్లే చేయబడిన సమాచారం మొత్తాన్ని, ఈ ఫంక్షన్ను అందిస్తున్న సర్వీస్ యాక్సెస్ చేయగలదు. ఈ సమాచారంలో, పాస్వర్డ్లు, పేమెంట్ వివరాలు, ఫోటోలు, మెసేజ్లు, మీరు ప్లే చేసే ఆడియో వంటివి ఉంటాయి.""రికార్డ్ చేయడం లేదా ప్రసారం చేయడం ప్రారంభించాలా?""%sతో రికార్డ్ చేయడం లేదా ప్రసారం చేయడం ప్రారంభించాలా?"
@@ -552,7 +552,7 @@
"CA ప్రమాణపత్రాలు""VPNని నిలిపివేయి""VPNను డిస్కనెక్ట్ చేయి"
- "విధానాలను వీక్షించండి"
+ "విధానాలను చూడండి""నియంత్రణలను చూడండి""ఈ పరికరం %1$sకు చెందినది.\n\nసెట్టింగ్లను, కార్పొరేట్ యాక్సెస్ను, యాప్లను, మీ పరికరానికి సంబంధించిన డేటాను, అలాగే మీ పరికరం యొక్క లొకేషన్ సమాచారాన్ని మీ IT అడ్మిన్ పర్యవేక్షించగలరు, మేనేజ్ చేయగలరు.\n\nమరింత సమాచారం కోసం, మీ IT అడ్మిన్ను సంప్రదించండి.""%1$s, ఈ పరికరంతో అనుబంధించబడిన డేటాను యాక్సెస్ చేయవచ్చు, యాప్లను మేనేజ్ చేయవచ్చు అలాగే ఈ పరికరాల సెట్టింగ్లను మార్చవచ్చు.\n\nమీకు ఏవైనా సందేహాలు ఉంటే, %2$sను కాంటాక్ట్ చేయండి."
@@ -560,7 +560,7 @@
"ఈ పరికరంలో మీ సంస్థ ఒక ప్రమాణపత్ర అధికారాన్ని ఇన్స్టాల్ చేసింది. మీ సురక్షిత నెట్వర్క్ ట్రాఫిక్ పర్యవేక్షించబడవచ్చు లేదా సవరించబడవచ్చు.""మీ కార్యాలయ ప్రొఫైల్లో మీ సంస్థ ఒక ప్రమాణపత్ర అధికారాన్ని ఇన్స్టాల్ చేసింది. మీ సురక్షిత నెట్వర్క్ ట్రాఫిక్ పర్యవేక్షించబడవచ్చు లేదా సవరించబడవచ్చు.""ఈ పరికరంలో ప్రమాణపత్ర అధికారం ఇన్స్టాల్ చేయబడింది. మీ సురక్షిత నెట్వర్క్ ట్రాఫిక్ పర్యవేక్షించబడవచ్చు లేదా సవరించబడవచ్చు."
- "మీ నిర్వాహకులు మీ పరికరంలోని ట్రాఫిక్ని పర్యవేక్షించగల నెట్వర్క్ లాగింగ్ని ఆన్ చేసారు."
+ "మీ నిర్వాహకులు మీ పరికరంలోని ట్రాఫిక్ని పర్యవేక్షించగల నెట్వర్క్ లాగింగ్ని ఆన్ చేశారు.""మీ అడ్మిన్ నెట్వర్క్ లాగింగ్ను ఆన్ చేశారు, ఇది మీ వర్క్ ప్రొఫైల్లోని ట్రాఫిక్ను పర్యవేక్షిస్తుంది కానీ మీ వ్యక్తిగత ప్రొఫైల్లో కాదు.""మీరు %1$sకి కనెక్ట్ చేయబడ్డారు, ఇది ఇమెయిల్లు, యాప్లు మరియు వెబ్సైట్లతో సహా మీ నెట్వర్క్ కార్యాచరణను పర్యవేక్షించగలదు.""మీరు ఇమెయిల్లు, యాప్లు మరియు వెబ్సైట్లతో సహా మీ నెట్వర్క్ కార్యాచరణను పర్యవేక్షించగల %1$s మరియు %2$sకి కనెక్ట్ చేయబడ్డారు."
@@ -576,7 +576,7 @@
"VPN సెట్టింగ్లను తెరవండి"" ""విశ్వసనీయ ఆధారాలను తెరువు"
- "మీ నిర్వాహకులు మీ పరికరంలోని ట్రాఫిక్ని పర్యవేక్షించగల నెట్వర్క్ లాగింగ్ని ఆన్ చేసారు.\n\nమరింత సమాచారం కావాలంటే, మీ నిర్వాహకులను సంప్రదించండి."
+ "మీ నిర్వాహకులు మీ పరికరంలోని ట్రాఫిక్ని పర్యవేక్షించగల నెట్వర్క్ లాగింగ్ని ఆన్ చేశారు.\n\nమరింత సమాచారం కావాలంటే, మీ నిర్వాహకులను సంప్రదించండి.""మీరు VPN కనెక్షన్ సెటప్ చేయడానికి ఒక యాప్నకు అనుమతి ఇచ్చారు.\n\nఈ యాప్ ఇమెయిల్లు,యాప్లు మరియు వెబ్సైట్లతో సహా మీ డివైజ్ మరియు నెట్వర్క్ కార్యకలాపాన్ని పర్యవేక్షించగలదు.""%1$s ద్వారా మీ కార్యాలయ ప్రొఫైల్ నిర్వహించబడుతోంది.\n\nఇమెయిల్లు, యాప్లు మరియు వెబ్సైట్లతో సహా మీ నెట్వర్క్ కార్యాచరణను పర్యవేక్షించగల సామర్థ్యం మీ నిర్వాహకులకు ఉంది.\n\nమరింత సమాచారం కావాలంటే, మీ నిర్వాహకులను సంప్రదించండి.\n\nమీరు VPNకి కూడా కనెక్ట్ అయ్యారు, ఇది మీ నెట్వర్క్ కార్యాచరణను పర్యవేక్షించగలదు.""ఈ పరికరాన్ని మీ తల్లి/తండ్రి మేనేజ్ చేస్తున్నారు. మీ తల్లి/తండ్రి, మీరు ఉపయోగించే యాప్లు, మీ లొకేషన్, అలాగే మీ పరికర వినియోగ వ్యవధి వంటి సమాచారాన్ని చూడగలరు, మేనేజ్ చేయగలరు."
@@ -925,7 +925,7 @@
"శీఘ్ర సెట్టింగ్లను తెరవండి.""శీఘ్ర సెట్టింగ్లను మూసివేయండి.""అలారం సెట్ చేయబడింది."
- "%s వలె సైన్ ఇన్ చేసారు"
+ "%s వలె సైన్ ఇన్ చేశారు""యూజర్ను ఎంపిక చేయండి""ఇంటర్నెట్ లేదు""వివరాలను తెరవండి."
@@ -963,7 +963,7 @@
"అలర్ట్లు""బ్యాటరీ""స్క్రీన్షాట్లు"
- "సాధారణ సందేశాలు"
+ "సాధారణ మెసేజ్లు""స్టోరేజ్""సూచనలు""ఇన్స్టంట్ యాప్లు"
From 523e8000f95d56567db73b1d031768fd9712d9a9 Mon Sep 17 00:00:00 2001
From: Bill Yi
Date: Thu, 12 Aug 2021 16:18:37 +0000
Subject: [PATCH 058/671] Import translations. DO NOT MERGE ANYWHERE
Auto-generated-cl: translation import
Change-Id: I2ab68c10745d8d521f16a43ce9cb76793edb0350
---
packages/SystemUI/res-keyguard/values-te/strings.xml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/packages/SystemUI/res-keyguard/values-te/strings.xml b/packages/SystemUI/res-keyguard/values-te/strings.xml
index 03bb5ccb333b..ffc875bc22df 100644
--- a/packages/SystemUI/res-keyguard/values-te/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-te/strings.xml
@@ -83,8 +83,8 @@
"PUK కోడ్ అనేది 8 లేదా అంతకంటే ఎక్కువ సంఖ్యలు ఉండాలి.""సరైన PUK కోడ్ను మళ్లీ నమోదు చేయండి. ఎక్కువసార్లు ప్రయత్నించడం వలన SIM శాశ్వతంగా నిలిపివేయబడుతుంది.""నమూనాని చాలా ఎక్కువసార్లు గీసారు"
- "మీరు మీ పిన్ను %1$d సార్లు తప్పుగా టైప్ చేసారు. \n\n%2$d సెకన్లలో మళ్లీ ప్రయత్నించండి."
- "మీరు మీ పాస్వర్డ్ను %1$d సార్లు తప్పుగా టైప్ చేసారు. \n\n%2$d సెకన్లలో మళ్లీ ప్రయత్నించండి."
+ "మీరు మీ పిన్ను %1$d సార్లు తప్పుగా టైప్ చేశారు. \n\n%2$d సెకన్లలో మళ్లీ ప్రయత్నించండి."
+ "మీరు మీ పాస్వర్డ్ను %1$d సార్లు తప్పుగా టైప్ చేశారు. \n\n%2$d సెకన్లలో మళ్లీ ప్రయత్నించండి.""మీరు మీ అన్లాక్ నమూనాను %1$d సార్లు తప్పుగా గీసారు. \n\n%2$d సెకన్లలో మళ్లీ ప్రయత్నించండి.""SIM పిన్ కోడ్ తప్పు, ఇప్పుడు మీ డివైజ్ను అన్లాక్ చేయాలంటే, మీరు తప్పనిసరిగా మీ క్యారియర్ను సంప్రదించాలి."
From edae98a45abd13928a518d858f886c8783b2875c Mon Sep 17 00:00:00 2001
From: Alec Mouri
Date: Wed, 11 Aug 2021 15:42:43 -0700
Subject: [PATCH 059/671] Remove bitwise plane information from ImageFormat's
P010 docs
Some vendors may prefer a different underlying layout for P010 in the
future compared to the one currently supported in gralloc. In
particular, it's not a guarantee that the CB/CR plane is contiguous in
memory with the Y plane.
Bug: 195570363
Test: builds
Change-Id: I01eea78b8555610470959cdb4f0f9ceb16e80f73
---
.../java/android/graphics/ImageFormat.java | 18 ++----------------
1 file changed, 2 insertions(+), 16 deletions(-)
diff --git a/graphics/java/android/graphics/ImageFormat.java b/graphics/java/android/graphics/ImageFormat.java
index 5b79d76dd6b9..884d27f8d887 100644
--- a/graphics/java/android/graphics/ImageFormat.java
+++ b/graphics/java/android/graphics/ImageFormat.java
@@ -178,22 +178,8 @@ public class ImageFormat {
*
Android YUV P010 format.
*
* P010 is a 4:2:0 YCbCr semiplanar format comprised of a WxH Y plane
- * followed immediately by a Wx(H/2) CbCr plane. Each sample is
- * represented by a 16-bit little-endian value, with the lower 6 bits set
- * to zero.
- *
- *
This format assumes
- *
- *
an even height
- *
a vertical stride equal to the height
- *
- *
- *
- *
stride_in_bytes = stride * 2
- *
y_size = stride_in_bytes * height
- *
cbcr_size = stride_in_bytes * (height / 2)
- *
cb_offset = y_size
- *
cr_offset = cb_offset + 2
+ * followed by a Wx(H/2) CbCr plane. Each sample is represented by a 16-bit
+ * little-endian value, with the lower 6 bits set to zero.
*
*
For example, the {@link android.media.Image} object can provide data
* in this format from a {@link android.hardware.camera2.CameraDevice}
From 833d535101ec58b3d6721946e4a97d62f8c5d56d Mon Sep 17 00:00:00 2001
From: Fabian Kozynski
Date: Tue, 13 Jul 2021 11:00:36 -0400
Subject: [PATCH 060/671] Replace DateView with VariableDateView (1/2)
VariableDateView adjusts its pattern (long, short, or empty) depending
on how much space it has to show. This is done from a controller.
Keep DateView for now and replace in next CL for compatibility
Also, move `updateAnimators` out of `onMeasure`, as it creates new
objects.
Test: manual
Test: atest VariableDateViewControllerTest
Fixes: 192574271
Change-Id: I547a2f035cfc7f9eaa9bdea37846a3ba4fbe1475
Merged-In: I547a2f035cfc7f9eaa9bdea37846a3ba4fbe1475
---
.../res-keyguard/values/donottranslate.xml | 3 +
.../res/layout/quick_qs_status_icons.xml | 37 ++-
.../quick_status_bar_header_date_privacy.xml | 6 +-
packages/SystemUI/res/values/attrs.xml | 4 +
.../systemui/qs/QuickStatusBarHeader.java | 22 +-
.../qs/QuickStatusBarHeaderController.java | 16 +-
.../statusbar/policy/VariableDateView.kt | 79 +++++++
.../policy/VariableDateViewController.kt | 221 ++++++++++++++++++
.../qs/QuickStatusBarHeaderControllerTest.kt | 15 +-
.../policy/VariableDateViewControllerTest.kt | 176 ++++++++++++++
10 files changed, 562 insertions(+), 17 deletions(-)
create mode 100644 packages/SystemUI/src/com/android/systemui/statusbar/policy/VariableDateView.kt
create mode 100644 packages/SystemUI/src/com/android/systemui/statusbar/policy/VariableDateViewController.kt
create mode 100644 packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/VariableDateViewControllerTest.kt
diff --git a/packages/SystemUI/res-keyguard/values/donottranslate.xml b/packages/SystemUI/res-keyguard/values/donottranslate.xml
index a4d0ff7269a2..1934457b4bc6 100644
--- a/packages/SystemUI/res-keyguard/values/donottranslate.xml
+++ b/packages/SystemUI/res-keyguard/values/donottranslate.xml
@@ -21,6 +21,9 @@
EEEMMMd
+
+ MMMd
+
hm
diff --git a/packages/SystemUI/res/layout/quick_qs_status_icons.xml b/packages/SystemUI/res/layout/quick_qs_status_icons.xml
index 5b9ca1b26158..966f9929b37c 100644
--- a/packages/SystemUI/res/layout/quick_qs_status_icons.xml
+++ b/packages/SystemUI/res/layout/quick_qs_status_icons.xml
@@ -26,17 +26,38 @@
android:focusable="true"
android:theme="@style/Theme.SystemUI.QuickSettings.Header">
-
+ >
+
+
+
+
+
-
+ systemui:longDatePattern="@string/abbrev_wday_month_day_no_year_alarm"
+ systemui:shortDatePattern="@string/abbrev_month_day_no_year"
+ />
+
+
+
+
diff --git a/packages/SystemUI/src/com/android/systemui/qs/QuickStatusBarHeader.java b/packages/SystemUI/src/com/android/systemui/qs/QuickStatusBarHeader.java
index 77906abce625..19d5fa0ec74f 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/QuickStatusBarHeader.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/QuickStatusBarHeader.java
@@ -42,6 +42,7 @@ import com.android.systemui.statusbar.phone.StatusBarIconController.TintedIconMa
import com.android.systemui.statusbar.phone.StatusBarWindowView;
import com.android.systemui.statusbar.phone.StatusIconContainer;
import com.android.systemui.statusbar.policy.Clock;
+import com.android.systemui.statusbar.policy.VariableDateView;
import java.util.List;
@@ -62,11 +63,14 @@ public class QuickStatusBarHeader extends FrameLayout {
protected QuickQSPanel mHeaderQsPanel;
private View mDatePrivacyView;
private View mDateView;
+ // DateView next to clock. Visible on QQS
+ private VariableDateView mClockDateView;
private View mSecurityHeaderView;
private View mClockIconsView;
private View mContainer;
private View mQSCarriers;
+ private ViewGroup mClockContainer;
private Clock mClockView;
private Space mDatePrivacySeparator;
private View mClockIconsSeparator;
@@ -86,7 +90,6 @@ public class QuickStatusBarHeader extends FrameLayout {
private int mWaterfallTopInset;
private int mCutOutPaddingLeft;
private int mCutOutPaddingRight;
- private float mViewAlpha = 1.0f;
private float mKeyguardExpansionFraction;
private int mTextColorPrimary = Color.TRANSPARENT;
private int mTopViewMeasureHeight;
@@ -123,12 +126,14 @@ public class QuickStatusBarHeader extends FrameLayout {
mIconContainer = findViewById(R.id.statusIcons);
mPrivacyChip = findViewById(R.id.privacy_chip);
mDateView = findViewById(R.id.date);
+ mClockDateView = findViewById(R.id.date_clock);
mSecurityHeaderView = findViewById(R.id.header_text_container);
mClockIconsSeparator = findViewById(R.id.separator);
mRightLayout = findViewById(R.id.rightLayout);
mDateContainer = findViewById(R.id.date_container);
mPrivacyContainer = findViewById(R.id.privacy_container);
+ mClockContainer = findViewById(R.id.clock_container);
mClockView = findViewById(R.id.clock);
mDatePrivacySeparator = findViewById(R.id.space);
// Tint for the battery icons are handled in setupHost()
@@ -177,7 +182,7 @@ public class QuickStatusBarHeader extends FrameLayout {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
if (mDatePrivacyView.getMeasuredHeight() != mTopViewMeasureHeight) {
mTopViewMeasureHeight = mDatePrivacyView.getMeasuredHeight();
- updateAnimators();
+ post(this::updateAnimators);
}
}
@@ -280,7 +285,8 @@ public class QuickStatusBarHeader extends FrameLayout {
TouchAnimator.Builder builder = new TouchAnimator.Builder()
.addFloat(mSecurityHeaderView, "alpha", 0, 1)
// These views appear on expanding down
- .addFloat(mClockView, "alpha", 0, 1)
+ .addFloat(mDateView, "alpha", 0, 0, 1)
+ .addFloat(mClockDateView, "alpha", 1, 0, 0)
.addFloat(mQSCarriers, "alpha", 0, 1)
.setListener(new TouchAnimator.ListenerAdapter() {
@Override
@@ -289,10 +295,14 @@ public class QuickStatusBarHeader extends FrameLayout {
if (!mIsSingleCarrier) {
mIconContainer.addIgnoredSlots(mRssiIgnoredSlots);
}
+ // Make it gone so there's enough room for carrier names
+ mClockDateView.setVisibility(View.GONE);
}
@Override
public void onAnimationStarted() {
+ mClockDateView.setVisibility(View.VISIBLE);
+ mClockDateView.setFreezeSwitching(true);
setSeparatorVisibility(false);
if (!mIsSingleCarrier) {
mIconContainer.addIgnoredSlots(mRssiIgnoredSlots);
@@ -302,6 +312,7 @@ public class QuickStatusBarHeader extends FrameLayout {
@Override
public void onAnimationAtStart() {
super.onAnimationAtStart();
+ mClockDateView.setFreezeSwitching(false);
setSeparatorVisibility(mShowClockIconsSeparator);
// In QQS we never ignore RSSI.
mIconContainer.removeIgnoredSlots(mRssiIgnoredSlots);
@@ -434,10 +445,11 @@ public class QuickStatusBarHeader extends FrameLayout {
mClockIconsSeparator.setVisibility(visible ? View.VISIBLE : View.GONE);
mQSCarriers.setVisibility(visible ? View.GONE : View.VISIBLE);
- LinearLayout.LayoutParams lp = (LinearLayout.LayoutParams) mClockView.getLayoutParams();
+ LinearLayout.LayoutParams lp =
+ (LinearLayout.LayoutParams) mClockContainer.getLayoutParams();
lp.width = visible ? 0 : WRAP_CONTENT;
lp.weight = visible ? 1f : 0f;
- mClockView.setLayoutParams(lp);
+ mClockContainer.setLayoutParams(lp);
lp = (LinearLayout.LayoutParams) mRightLayout.getLayoutParams();
lp.width = visible ? 0 : WRAP_CONTENT;
diff --git a/packages/SystemUI/src/com/android/systemui/qs/QuickStatusBarHeaderController.java b/packages/SystemUI/src/com/android/systemui/qs/QuickStatusBarHeaderController.java
index b8b7f42455bb..0104149de56a 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/QuickStatusBarHeaderController.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/QuickStatusBarHeaderController.java
@@ -41,6 +41,7 @@ import com.android.systemui.statusbar.FeatureFlags;
import com.android.systemui.statusbar.phone.StatusBarIconController;
import com.android.systemui.statusbar.phone.StatusIconContainer;
import com.android.systemui.statusbar.policy.Clock;
+import com.android.systemui.statusbar.policy.VariableDateViewController;
import com.android.systemui.util.ViewController;
import java.util.List;
@@ -71,6 +72,9 @@ class QuickStatusBarHeaderController extends ViewController(view) {
+
+ private var dateFormat: DateFormat? = null
+ private var datePattern = view.longerPattern
+ set(value) {
+ if (field == value) return
+ field = value
+ dateFormat = null
+ if (isAttachedToWindow) {
+ post(::updateClock)
+ }
+ }
+ private var lastWidth = Integer.MAX_VALUE
+ private var lastText = ""
+ private var currentTime = Date()
+
+ // View class easy accessors
+ private val longerPattern: String
+ get() = mView.longerPattern
+ private val shorterPattern: String
+ get() = mView.shorterPattern
+ private fun post(block: () -> Unit) = mView.handler?.post(block)
+
+ private val intentReceiver: BroadcastReceiver = object : BroadcastReceiver() {
+ override fun onReceive(context: Context, intent: Intent) {
+ // If the handler is null, it means we received a broadcast while the view has not
+ // finished being attached or in the process of being detached.
+ // In that case, do not post anything.
+ val handler = mView.handler ?: return
+ val action = intent.action
+ if (
+ Intent.ACTION_TIME_TICK == action ||
+ Intent.ACTION_TIME_CHANGED == action ||
+ Intent.ACTION_TIMEZONE_CHANGED == action ||
+ Intent.ACTION_LOCALE_CHANGED == action
+ ) {
+ if (
+ Intent.ACTION_LOCALE_CHANGED == action ||
+ Intent.ACTION_TIMEZONE_CHANGED == action
+ ) {
+ // need to get a fresh date format
+ handler.post { dateFormat = null }
+ }
+ handler.post(::updateClock)
+ }
+ }
+ }
+
+ private val onMeasureListener = object : VariableDateView.OnMeasureListener {
+ override fun onMeasureAction(availableWidth: Int) {
+ if (availableWidth != lastWidth) {
+ // maybeChangeFormat will post if the pattern needs to change.
+ maybeChangeFormat(availableWidth)
+ lastWidth = availableWidth
+ }
+ }
+ }
+
+ override fun onViewAttached() {
+ val filter = IntentFilter().apply {
+ addAction(Intent.ACTION_TIME_TICK)
+ addAction(Intent.ACTION_TIME_CHANGED)
+ addAction(Intent.ACTION_TIMEZONE_CHANGED)
+ addAction(Intent.ACTION_LOCALE_CHANGED)
+ }
+
+ broadcastDispatcher.registerReceiver(intentReceiver, filter,
+ HandlerExecutor(timeTickHandler), UserHandle.SYSTEM)
+
+ post(::updateClock)
+ mView.onAttach(onMeasureListener)
+ }
+
+ override fun onViewDetached() {
+ dateFormat = null
+ mView.onAttach(null)
+ broadcastDispatcher.unregisterReceiver(intentReceiver)
+ }
+
+ private fun updateClock() {
+ if (dateFormat == null) {
+ dateFormat = getFormatFromPattern(datePattern)
+ }
+
+ currentTime.time = systemClock.currentTimeMillis()
+
+ val text = getTextForFormat(currentTime, dateFormat!!)
+ if (text != lastText) {
+ mView.setText(text)
+ lastText = text
+ }
+ }
+
+ private fun maybeChangeFormat(availableWidth: Int) {
+ if (mView.freezeSwitching ||
+ availableWidth > lastWidth && datePattern == longerPattern ||
+ availableWidth < lastWidth && datePattern == ""
+ ) {
+ // Nothing to do
+ return
+ }
+ if (DEBUG) Log.d(TAG, "Width changed. Maybe changing pattern")
+ // Start with longer pattern and see what fits
+ var text = getTextForFormat(currentTime, getFormatFromPattern(longerPattern))
+ var length = mView.getDesiredWidthForText(text)
+ if (length <= availableWidth) {
+ changePattern(longerPattern)
+ return
+ }
+
+ text = getTextForFormat(currentTime, getFormatFromPattern(shorterPattern))
+ length = mView.getDesiredWidthForText(text)
+ if (length <= availableWidth) {
+ changePattern(shorterPattern)
+ return
+ }
+
+ changePattern("")
+ }
+
+ private fun changePattern(newPattern: String) {
+ if (newPattern.equals(datePattern)) return
+ if (DEBUG) Log.d(TAG, "Changing pattern to $newPattern")
+ datePattern = newPattern
+ }
+
+ class Factory @Inject constructor(
+ private val systemClock: SystemClock,
+ private val broadcastDispatcher: BroadcastDispatcher,
+ @Named(Dependency.TIME_TICK_HANDLER_NAME) private val handler: Handler
+ ) {
+ fun create(view: VariableDateView): VariableDateViewController {
+ return VariableDateViewController(
+ systemClock,
+ broadcastDispatcher,
+ handler,
+ view
+ )
+ }
+ }
+}
\ No newline at end of file
diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/QuickStatusBarHeaderControllerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/qs/QuickStatusBarHeaderControllerTest.kt
index 35360bd19393..8b7e20ed0e5a 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/qs/QuickStatusBarHeaderControllerTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/qs/QuickStatusBarHeaderControllerTest.kt
@@ -36,6 +36,8 @@ import com.android.systemui.statusbar.FeatureFlags
import com.android.systemui.statusbar.phone.StatusBarIconController
import com.android.systemui.statusbar.phone.StatusIconContainer
import com.android.systemui.statusbar.policy.Clock
+import com.android.systemui.statusbar.policy.VariableDateView
+import com.android.systemui.statusbar.policy.VariableDateViewController
import com.android.systemui.util.mockito.any
import com.android.systemui.util.mockito.argumentCaptor
import com.android.systemui.util.mockito.capture
@@ -87,8 +89,14 @@ class QuickStatusBarHeaderControllerTest : SysuiTestCase() {
@Mock
private lateinit var privacyDialogController: PrivacyDialogController
@Mock
+ private lateinit var variableDateViewControllerFactory: VariableDateViewController.Factory
+ @Mock
+ private lateinit var variableDateViewController: VariableDateViewController
+ @Mock
private lateinit var clock: Clock
@Mock
+ private lateinit var variableDateView: VariableDateView
+ @Mock
private lateinit var mockView: View
@Mock(answer = Answers.RETURNS_DEEP_STUBS)
private lateinit var context: Context
@@ -109,6 +117,8 @@ class QuickStatusBarHeaderControllerTest : SysuiTestCase() {
stubViews()
`when`(iconContainer.context).thenReturn(context)
`when`(qsCarrierGroupControllerBuilder.build()).thenReturn(qsCarrierGroupController)
+ `when`(variableDateViewControllerFactory.create(any()))
+ .thenReturn(variableDateViewController)
`when`(view.resources).thenReturn(mContext.resources)
`when`(view.isAttachedToWindow).thenReturn(true)
`when`(view.context).thenReturn(context)
@@ -133,7 +143,8 @@ class QuickStatusBarHeaderControllerTest : SysuiTestCase() {
colorExtractor,
privacyDialogController,
qsExpansionPathInterpolator,
- featureFlags
+ featureFlags,
+ variableDateViewControllerFactory
)
}
@@ -274,6 +285,8 @@ class QuickStatusBarHeaderControllerTest : SysuiTestCase() {
`when`(view.findViewById(R.id.statusIcons)).thenReturn(iconContainer)
`when`(view.findViewById(R.id.privacy_chip)).thenReturn(privacyChip)
`when`(view.findViewById(R.id.clock)).thenReturn(clock)
+ `when`(view.requireViewById(R.id.date)).thenReturn(variableDateView)
+ `when`(view.requireViewById(R.id.date_clock)).thenReturn(variableDateView)
}
private fun setPrivacyController(micCamera: Boolean, location: Boolean) {
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/VariableDateViewControllerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/VariableDateViewControllerTest.kt
new file mode 100644
index 000000000000..871a48c503be
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/VariableDateViewControllerTest.kt
@@ -0,0 +1,176 @@
+/*
+ * Copyright (C) 2021 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.systemui.statusbar.policy
+
+import android.os.Handler
+import android.testing.AndroidTestingRunner
+import android.testing.TestableLooper
+import androidx.test.filters.SmallTest
+import com.android.systemui.SysuiTestCase
+import com.android.systemui.broadcast.BroadcastDispatcher
+import com.android.systemui.util.mockito.any
+import com.android.systemui.util.mockito.capture
+import com.android.systemui.util.time.FakeSystemClock
+import com.google.common.truth.Truth.assertThat
+import org.junit.Before
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.mockito.ArgumentCaptor
+import org.mockito.Captor
+import org.mockito.Mock
+import org.mockito.Mockito.`when`
+import org.mockito.Mockito.anyString
+import org.mockito.Mockito.verify
+import org.mockito.MockitoAnnotations
+import java.util.Date
+
+@RunWith(AndroidTestingRunner::class)
+@TestableLooper.RunWithLooper
+@SmallTest
+class VariableDateViewControllerTest : SysuiTestCase() {
+
+ companion object {
+ private const val TIME_STAMP = 1_500_000_000_000
+ private const val LONG_PATTERN = "EEEMMMd"
+ private const val SHORT_PATTERN = "MMMd"
+ private const val CHAR_WIDTH = 10f
+ }
+
+ @Mock
+ private lateinit var broadcastDispatcher: BroadcastDispatcher
+ @Mock
+ private lateinit var view: VariableDateView
+ @Captor
+ private lateinit var onMeasureListenerCaptor: ArgumentCaptor
+
+ private var lastText: String? = null
+
+ private lateinit var systemClock: FakeSystemClock
+ private lateinit var testableLooper: TestableLooper
+ private lateinit var testableHandler: Handler
+ private lateinit var controller: VariableDateViewController
+
+ private lateinit var longText: String
+ private lateinit var shortText: String
+
+ @Before
+ fun setUp() {
+ MockitoAnnotations.initMocks(this)
+ testableLooper = TestableLooper.get(this)
+ testableHandler = Handler(testableLooper.looper)
+
+ systemClock = FakeSystemClock()
+ systemClock.setCurrentTimeMillis(TIME_STAMP)
+
+ `when`(view.longerPattern).thenReturn(LONG_PATTERN)
+ `when`(view.shorterPattern).thenReturn(SHORT_PATTERN)
+ `when`(view.handler).thenReturn(testableHandler)
+
+ `when`(view.setText(anyString())).thenAnswer {
+ lastText = it.arguments[0] as? String
+ Unit
+ }
+ `when`(view.isAttachedToWindow).thenReturn(true)
+
+ val date = Date(TIME_STAMP)
+ longText = getTextForFormat(date, getFormatFromPattern(LONG_PATTERN))
+ shortText = getTextForFormat(date, getFormatFromPattern(SHORT_PATTERN))
+
+ // Assume some sizes for the text, the controller doesn't need to know if these sizes are
+ // the true ones
+ `when`(view.getDesiredWidthForText(any())).thenAnswer {
+ getTextLength(it.arguments[0] as CharSequence)
+ }
+
+ controller = VariableDateViewController(
+ systemClock,
+ broadcastDispatcher,
+ testableHandler,
+ view
+ )
+
+ controller.init()
+ testableLooper.processAllMessages()
+
+ verify(view).onAttach(capture(onMeasureListenerCaptor))
+ }
+
+ @Test
+ fun testViewStartsWithLongText() {
+ assertThat(lastText).isEqualTo(longText)
+ }
+
+ @Test
+ fun testListenerNotNull() {
+ assertThat(onMeasureListenerCaptor.value).isNotNull()
+ }
+
+ @Test
+ fun testLotsOfSpaceUseLongText() {
+ onMeasureListenerCaptor.value.onMeasureAction(10000)
+
+ testableLooper.processAllMessages()
+ assertThat(lastText).isEqualTo(longText)
+ }
+
+ @Test
+ fun testSmallSpaceUseEmpty() {
+ onMeasureListenerCaptor.value.onMeasureAction(1)
+ testableLooper.processAllMessages()
+
+ assertThat(lastText).isEmpty()
+ }
+
+ @Test
+ fun testSpaceInBetweenUseShortText() {
+ val average = ((getTextLength(longText) + getTextLength(shortText)) / 2).toInt()
+
+ onMeasureListenerCaptor.value.onMeasureAction(average)
+ testableLooper.processAllMessages()
+
+ assertThat(lastText).isEqualTo(shortText)
+ }
+
+ @Test
+ fun testSwitchBackToLonger() {
+ onMeasureListenerCaptor.value.onMeasureAction(1)
+ testableLooper.processAllMessages()
+
+ onMeasureListenerCaptor.value.onMeasureAction(10000)
+ testableLooper.processAllMessages()
+
+ assertThat(lastText).isEqualTo(longText)
+ }
+
+ @Test
+ fun testNoSwitchingWhenFrozen() {
+ `when`(view.freezeSwitching).thenReturn(true)
+
+ val average = ((getTextLength(longText) + getTextLength(shortText)) / 2).toInt()
+ onMeasureListenerCaptor.value.onMeasureAction(average)
+ testableLooper.processAllMessages()
+ assertThat(lastText).isEqualTo(longText)
+
+ onMeasureListenerCaptor.value.onMeasureAction(1)
+ testableLooper.processAllMessages()
+ assertThat(lastText).isEqualTo(longText)
+ }
+
+ private fun getTextLength(text: CharSequence): Float {
+ return text.length * CHAR_WIDTH
+ }
+}
\ No newline at end of file
From 00bb4c6cc1b6206b190a76915a19069c546cac29 Mon Sep 17 00:00:00 2001
From: Lyn Han
Date: Wed, 4 Aug 2021 18:50:03 -0700
Subject: [PATCH 061/671] Fix shade flicker & touch absorption
Intercept MOVE events for closed shade (with no HUNs)
and call startExpandMotion when appropriate.
----------------------------------------------------
Fixes: 188249360 (shade flicker to full height on swipe open)
This bug happened because ag/13733252 introduced
a new behavior (reverted here) where
PVC intercepts only if PanelView is hidden. This means:
=> PanelView initially shows onIntercept(down),
so we do NOT intercept and onTouch(down) does NOT run.
=> PanelView is then hidden onIntercept(move),
so we intercept and onTouch(move) runs.
When onTouch(down) does NOT run and onTouch(move) runs,
we are MISSING the following:
=> onTouch(down): mGestureWaitForTouchSlop = true for closed shade
=> onTouch(move) calls startExpandMotion
=> startExpandMotion: mInitialOffsetOnTouch = 0
=> onTouch(move): newHeight = mInitialOffsetOnTouch = 0
Instead, newHeight = full shade height from previous shade open.
This causes the shade to jump to full height on swipe start.
----------------------------------------------------
Bug: 178277858 (touch absorption / shade not opening on swipe)
This bug happened because onIntercept(move) did not intercept and call
startExpandMotion when we swipe open from closed shade, resulting in
the shade staying closed while child views silently eat the event.
------------------------------------------------
Test: open/close shade with varying drag speeds and flings
=> shade consistently opens with no flicker to full height
Test: swipe-to-dismiss hun, expand hun, swipe down for hun-to-shade
=> no regressions
Change-Id: I26ada34ed173393ee08a96aefd37b1935702bb90
---
.../statusbar/phone/PanelViewController.java | 13 +++++++------
1 file changed, 7 insertions(+), 6 deletions(-)
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelViewController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelViewController.java
index 323a1128d3bb..de0f31d3cf59 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelViewController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelViewController.java
@@ -1211,10 +1211,14 @@ public abstract class PanelViewController {
case MotionEvent.ACTION_MOVE:
final float h = y - mInitialTouchY;
addMovement(event);
- if (canCollapsePanel || mTouchStartedInEmptyArea || mAnimatingOnDown) {
+ final boolean openShadeWithoutHun =
+ mPanelClosedOnDown && !mCollapsedAndHeadsUpOnDown;
+ if (canCollapsePanel || mTouchStartedInEmptyArea || mAnimatingOnDown
+ || openShadeWithoutHun) {
float hAbs = Math.abs(h);
float touchSlop = getTouchSlop(event);
- if ((h < -touchSlop || (mAnimatingOnDown && hAbs > touchSlop))
+ if ((h < -touchSlop
+ || ((openShadeWithoutHun || mAnimatingOnDown) && hAbs > touchSlop))
&& hAbs > Math.abs(x - mInitialTouchX)) {
cancelHeightAnimator();
startExpandMotion(x, y, true /* startTracking */, mExpandedHeight);
@@ -1227,10 +1231,7 @@ public abstract class PanelViewController {
mVelocityTracker.clear();
break;
}
-
- // Finally, if none of the above cases applies, ensure that touches do not get handled
- // by the contents of a panel that is not showing (a bit of a hack to avoid b/178277858)
- return (mView.getVisibility() != View.VISIBLE);
+ return false;
}
@Override
From ba405b787bde5336888dbac56ee4b8fdf117c005 Mon Sep 17 00:00:00 2001
From: Fabian Kozynski
Date: Thu, 29 Jul 2021 10:44:20 -0400
Subject: [PATCH 062/671] Fix support for USER_ALL in FakeSettings
If a content observer was registered to a SettingsProxy using
UserHandle.USER_ALL, testing that was expecting to pass would fail.
This CL fixes that by matching every user to USER_ALL observers that
match the Uri.
Test: atest SystemUITests
Fixes: 194934707
Change-Id: I41a0eb50a2cd1700b03b372bfcc199bebd9aea35
Merged-In: I41a0eb50a2cd1700b03b372bfcc199bebd9aea35
---
.../systemui/util/settings/FakeSettings.java | 21 ++++++++++++++---
.../util/settings/FakeSettingsTest.java | 23 +++++++++++++++++++
2 files changed, 41 insertions(+), 3 deletions(-)
diff --git a/packages/SystemUI/tests/src/com/android/systemui/util/settings/FakeSettings.java b/packages/SystemUI/tests/src/com/android/systemui/util/settings/FakeSettings.java
index 69764227040b..7bb26748a9d9 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/util/settings/FakeSettings.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/util/settings/FakeSettings.java
@@ -31,6 +31,7 @@ public class FakeSettings implements SecureSettings, GlobalSettings, SystemSetti
private final Map mValues = new HashMap<>();
private final Map> mContentObservers =
new HashMap<>();
+ private final Map> mContentObserversAllUsers = new HashMap<>();
public static final Uri CONTENT_URI = Uri.parse("content://settings/fake");
@@ -55,9 +56,15 @@ public class FakeSettings implements SecureSettings, GlobalSettings, SystemSetti
@Override
public void registerContentObserverForUser(Uri uri, boolean notifyDescendents,
ContentObserver settingsObserver, int userHandle) {
- SettingsKey key = new SettingsKey(userHandle, uri.toString());
- mContentObservers.putIfAbsent(key, new ArrayList<>());
- List observers = mContentObservers.get(key);
+ List observers;
+ if (userHandle == UserHandle.USER_ALL) {
+ mContentObserversAllUsers.putIfAbsent(uri.toString(), new ArrayList<>());
+ observers = mContentObserversAllUsers.get(uri.toString());
+ } else {
+ SettingsKey key = new SettingsKey(userHandle, uri.toString());
+ mContentObservers.putIfAbsent(key, new ArrayList<>());
+ observers = mContentObservers.get(key);
+ }
observers.add(settingsObserver);
}
@@ -67,6 +74,10 @@ public class FakeSettings implements SecureSettings, GlobalSettings, SystemSetti
List observers = mContentObservers.get(key);
observers.remove(settingsObserver);
}
+ for (String key : mContentObserversAllUsers.keySet()) {
+ List observers = mContentObserversAllUsers.get(key);
+ observers.remove(settingsObserver);
+ }
}
@Override
@@ -114,6 +125,10 @@ public class FakeSettings implements SecureSettings, GlobalSettings, SystemSetti
for (ContentObserver observer : mContentObservers.getOrDefault(key, new ArrayList<>())) {
observer.dispatchChange(false, List.of(uri), userHandle);
}
+ for (ContentObserver observer :
+ mContentObserversAllUsers.getOrDefault(uri.toString(), new ArrayList<>())) {
+ observer.dispatchChange(false, List.of(uri), userHandle);
+ }
return true;
}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/util/settings/FakeSettingsTest.java b/packages/SystemUI/tests/src/com/android/systemui/util/settings/FakeSettingsTest.java
index 0d560f237a07..34cae58d30e1 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/util/settings/FakeSettingsTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/util/settings/FakeSettingsTest.java
@@ -25,6 +25,7 @@ import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify;
import android.database.ContentObserver;
+import android.os.UserHandle;
import android.provider.Settings;
import android.testing.AndroidTestingRunner;
@@ -88,6 +89,16 @@ public class FakeSettingsTest extends SysuiTestCase {
verify(mContentObserver).dispatchChange(anyBoolean(), any(Collection.class), anyInt());
}
+ @Test
+ public void testRegisterContentObserverAllUsers() {
+ mFakeSettings.registerContentObserverForUser(
+ mFakeSettings.getUriFor("cat"), false, mContentObserver, UserHandle.USER_ALL);
+
+ mFakeSettings.putString("cat", "hat");
+
+ verify(mContentObserver).dispatchChange(anyBoolean(), any(Collection.class), anyInt());
+ }
+
@Test
public void testUnregisterContentObserver() {
mFakeSettings.registerContentObserver("cat", mContentObserver);
@@ -98,4 +109,16 @@ public class FakeSettingsTest extends SysuiTestCase {
verify(mContentObserver, never()).dispatchChange(
anyBoolean(), any(Collection.class), anyInt());
}
+
+ @Test
+ public void testUnregisterContentObserverAllUsers() {
+ mFakeSettings.registerContentObserverForUser(
+ mFakeSettings.getUriFor("cat"), false, mContentObserver, UserHandle.USER_ALL);
+ mFakeSettings.unregisterContentObserver(mContentObserver);
+
+ mFakeSettings.putString("cat", "hat");
+
+ verify(mContentObserver, never()).dispatchChange(
+ anyBoolean(), any(Collection.class), anyInt());
+ }
}
From ee4c4195b692017955e6df8e0731afa6455f0843 Mon Sep 17 00:00:00 2001
From: Cassie
Date: Thu, 22 Jul 2021 15:05:23 -0700
Subject: [PATCH 063/671] Do not display "Network Available" when WiFi
disabled.
Bug: 192655861
Test: manual test
Change-Id: Ib8975af13a6f201f3f1d0a4a0bec845d810d5905
---
.../src/com/android/systemui/qs/tiles/InternetTile.java | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/InternetTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/InternetTile.java
index 7cb1421e3f0f..41a3fb0211a7 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/InternetTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/InternetTile.java
@@ -429,7 +429,7 @@ public class InternetTile extends QSTileImpl {
state.icon = ResourceIcon.get(cb.mWifiSignalIconId);
}
} else if (cb.mNoDefaultNetwork) {
- if (cb.mNoNetworksAvailable) {
+ if (cb.mNoNetworksAvailable || !cb.mEnabled) {
state.icon = ResourceIcon.get(R.drawable.ic_qs_no_internet_unavailable);
state.secondaryLabel = r.getString(R.string.quick_settings_networks_unavailable);
} else {
@@ -489,7 +489,7 @@ public class InternetTile extends QSTileImpl {
state.icon = ResourceIcon.get(R.drawable.ic_qs_no_internet_unavailable);
state.secondaryLabel = r.getString(R.string.status_bar_airplane);
} else if (cb.mNoDefaultNetwork) {
- if (cb.mNoNetworksAvailable) {
+ if (cb.mNoNetworksAvailable || !mSignalCallback.mWifiInfo.mEnabled) {
state.icon = ResourceIcon.get(R.drawable.ic_qs_no_internet_unavailable);
state.secondaryLabel = r.getString(R.string.quick_settings_networks_unavailable);
} else {
From a49d7cbbcc01f54c184ecbd91aab8d7ce5979efe Mon Sep 17 00:00:00 2001
From: Miranda Kephart
Date: Thu, 15 Jul 2021 11:13:40 -0400
Subject: [PATCH 064/671] Make screenshot dismiss to the side on timeout
Makes the dismissal directions consistent between swipe-dismiss
and passive timeout.
Bug: 192281614
Fix: 192281614
Test: manual
Change-Id: Ib56d60f89c3fea0b5c36e5b3bc539da295699388
---
.../systemui/screenshot/ScreenshotView.java | 31 +++++++------------
1 file changed, 12 insertions(+), 19 deletions(-)
diff --git a/packages/SystemUI/src/com/android/systemui/screenshot/ScreenshotView.java b/packages/SystemUI/src/com/android/systemui/screenshot/ScreenshotView.java
index e9e62f26a10e..e660a2bf0c17 100644
--- a/packages/SystemUI/src/com/android/systemui/screenshot/ScreenshotView.java
+++ b/packages/SystemUI/src/com/android/systemui/screenshot/ScreenshotView.java
@@ -118,8 +118,8 @@ public class ScreenshotView extends FrameLayout implements
private static final long SCREENSHOT_TO_CORNER_SCALE_DURATION_MS = 234;
private static final long SCREENSHOT_ACTIONS_EXPANSION_DURATION_MS = 400;
private static final long SCREENSHOT_ACTIONS_ALPHA_DURATION_MS = 100;
- private static final long SCREENSHOT_DISMISS_Y_DURATION_MS = 350;
- private static final long SCREENSHOT_DISMISS_ALPHA_DURATION_MS = 183;
+ private static final long SCREENSHOT_DISMISS_X_DURATION_MS = 350;
+ private static final long SCREENSHOT_DISMISS_ALPHA_DURATION_MS = 350;
private static final long SCREENSHOT_DISMISS_ALPHA_OFFSET_MS = 50; // delay before starting fade
private static final float SCREENSHOT_ACTIONS_START_SCALE_X = .7f;
private static final float ROUNDED_CORNER_RADIUS = .25f;
@@ -978,7 +978,6 @@ public class ScreenshotView extends FrameLayout implements
mScrollingScrim.setVisibility(View.GONE);
mScrollablePreview.setVisibility(View.GONE);
mScreenshotStatic.setTranslationX(0);
- mScreenshotPreview.setTranslationY(0);
mScreenshotPreview.setContentDescription(
mContext.getResources().getString(R.string.screenshot_preview_description));
mScreenshotPreview.setOnClickListener(null);
@@ -994,9 +993,6 @@ public class ScreenshotView extends FrameLayout implements
mSmartChips.clear();
mQuickShareChip = null;
setAlpha(1);
- mDismissButton.setTranslationY(0);
- mActionsContainer.setTranslationY(0);
- mActionsContainerBackground.setTranslationY(0);
mScreenshotSelectorView.stop();
}
@@ -1024,22 +1020,19 @@ public class ScreenshotView extends FrameLayout implements
setAlpha(1 - animation.getAnimatedFraction());
});
- ValueAnimator yAnim = ValueAnimator.ofFloat(0, 1);
- yAnim.setInterpolator(mAccelerateInterpolator);
- yAnim.setDuration(SCREENSHOT_DISMISS_Y_DURATION_MS);
- float screenshotStartY = mScreenshotPreview.getTranslationY();
- float dismissStartY = mDismissButton.getTranslationY();
- yAnim.addUpdateListener(animation -> {
- float yDelta = MathUtils.lerp(0, mDismissDeltaY, animation.getAnimatedFraction());
- mScreenshotPreview.setTranslationY(screenshotStartY + yDelta);
- mScreenshotPreviewBorder.setTranslationY(screenshotStartY + yDelta);
- mDismissButton.setTranslationY(dismissStartY + yDelta);
- mActionsContainer.setTranslationY(yDelta);
- mActionsContainerBackground.setTranslationY(yDelta);
+ ValueAnimator xAnim = ValueAnimator.ofFloat(0, 1);
+ xAnim.setInterpolator(mAccelerateInterpolator);
+ xAnim.setDuration(SCREENSHOT_DISMISS_X_DURATION_MS);
+ float deltaX = mDirectionLTR
+ ? -1 * (mScreenshotPreviewBorder.getX() + mScreenshotPreviewBorder.getWidth())
+ : (mDisplayMetrics.widthPixels - mScreenshotPreviewBorder.getX());
+ xAnim.addUpdateListener(animation -> {
+ float currXDelta = MathUtils.lerp(0, deltaX, animation.getAnimatedFraction());
+ mScreenshotStatic.setTranslationX(currXDelta);
});
AnimatorSet animSet = new AnimatorSet();
- animSet.play(yAnim).with(alphaAnim);
+ animSet.play(xAnim).with(alphaAnim);
return animSet;
}
From 9107a62bb42d25994cda871d3206969805a32a25 Mon Sep 17 00:00:00 2001
From: Huihong Luo
Date: Fri, 23 Jul 2021 12:35:59 -0700
Subject: [PATCH 065/671] Remove Webview Overlays on destroy
When WebViewFunctor is destroyed, overlays needs to be removed.
Bug: 194393522
Test: toggle fullscreen during video playing, and run "adb shell dumpsys
SurfaceFlinger | grep Webview", it should only show onlyi one surface
control
Change-Id: I40d0e503c4f5b25c59886820485e7734716ac859
(cherry picked from commit 9c5158f7a2f3bff0ccfc8e071143aac7b5c95049)
---
libs/hwui/WebViewFunctorManager.cpp | 3 +++
1 file changed, 3 insertions(+)
diff --git a/libs/hwui/WebViewFunctorManager.cpp b/libs/hwui/WebViewFunctorManager.cpp
index df4101109a18..5aad821ad59f 100644
--- a/libs/hwui/WebViewFunctorManager.cpp
+++ b/libs/hwui/WebViewFunctorManager.cpp
@@ -100,6 +100,9 @@ WebViewFunctor::~WebViewFunctor() {
destroyContext();
ATRACE_NAME("WebViewFunctor::onDestroy");
+ if (mSurfaceControl) {
+ removeOverlays();
+ }
mCallbacks.onDestroyed(mFunctor, mData);
}
From 273a0eabc8faa46349c63a6836ae4004709aeb0b Mon Sep 17 00:00:00 2001
From: Ahaan Ugale
Date: Thu, 12 Aug 2021 14:08:52 -0700
Subject: [PATCH 066/671] Fix OOB crash in ContentCapture for translated views
When a view is partially visible on the screen, ContentCapture reports
only the visible portion (+ a few additional lines). The offsets
calculated for this can be out of bounds if the view's displayed text
is longer from the original text.
Fix: 196414491
Test: manual - translate app to lang with more characters and trigger
a relayout (by scrolling for an app with ListView)
Test: atest CtsContentCaptureServiceTestCases
Change-Id: Iae98133c48cc67a0b00f1b0ab8b93e5adb293423
---
core/java/android/widget/TextView.java | 9 +++++++++
1 file changed, 9 insertions(+)
diff --git a/core/java/android/widget/TextView.java b/core/java/android/widget/TextView.java
index ca6e735f86b4..f5c1bcf2de42 100644
--- a/core/java/android/widget/TextView.java
+++ b/core/java/android/widget/TextView.java
@@ -11857,6 +11857,15 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
if (text != null) {
if (expandedTopChar > 0 || expandedBottomChar < text.length()) {
+ // Cap the offsets to avoid an OOB exception. That can happen if the
+ // displayed/layout text, on which these offsets are calculated, is longer
+ // than the original text (such as when the view is translated by the
+ // platform intelligence).
+ // TODO(b/196433694): Figure out how to better handle the offset
+ // calculations for this case (so we don't unnecessarily cutoff the original
+ // text, for example).
+ expandedTopChar = Math.min(expandedTopChar, text.length());
+ expandedBottomChar = Math.min(expandedBottomChar, text.length());
text = text.subSequence(expandedTopChar, expandedBottomChar);
}
From 0da0eaff5aa17c5ec12e633a19c4ca11d3a35daa Mon Sep 17 00:00:00 2001
From: Joshua Mccloskey
Date: Wed, 11 Aug 2021 16:45:46 -0700
Subject: [PATCH 067/671] Destroy() client after onClientFinished.
Destroy() must be called from BaseClientMonitor in order for it to
properly unlink to death from the binder token.
For ex.
1. AuthenticationClient created.
2. AuthenticationClient linksToDeath on binder token.
3. client dies(settings or another application), long after the
onClientFinished() method has been called.
4. AuthenticationClient.onBinderDied() is invoked.
5. Cancel() being invoked on a stale cancellation signal.
Test: Verified that the destroy() signal is being sent after fp/face
authentication clients.
Test: atest FrameworksServicesTests
Bug: 193883067
Change-Id: I780e8c3a42359df3c57b469a40c25a3113ee6fd7
---
.../biometrics/sensors/BaseClientMonitor.java | 1 -
.../sensors/BiometricScheduler.java | 1 +
.../sensors/BiometricSchedulerTest.java | 22 +++++++++++++++++++
3 files changed, 23 insertions(+), 1 deletion(-)
diff --git a/services/core/java/com/android/server/biometrics/sensors/BaseClientMonitor.java b/services/core/java/com/android/server/biometrics/sensors/BaseClientMonitor.java
index e5e1385fa605..3eb6f4ae48a2 100644
--- a/services/core/java/com/android/server/biometrics/sensors/BaseClientMonitor.java
+++ b/services/core/java/com/android/server/biometrics/sensors/BaseClientMonitor.java
@@ -206,7 +206,6 @@ public abstract class BaseClientMonitor extends LoggableMonitor
}
mToken = null;
}
- mListener = null;
}
@Override
diff --git a/services/core/java/com/android/server/biometrics/sensors/BiometricScheduler.java b/services/core/java/com/android/server/biometrics/sensors/BiometricScheduler.java
index b20316e4c6df..feb9e2a5b03f 100644
--- a/services/core/java/com/android/server/biometrics/sensors/BiometricScheduler.java
+++ b/services/core/java/com/android/server/biometrics/sensors/BiometricScheduler.java
@@ -295,6 +295,7 @@ public class BiometricScheduler {
@Override
public void onClientFinished(@NonNull BaseClientMonitor clientMonitor, boolean success) {
mHandler.post(() -> {
+ clientMonitor.destroy();
if (mCurrentOperation == null) {
Slog.e(getTag(), "[Finishing] " + clientMonitor
+ " but current operation is null, success: " + success
diff --git a/services/tests/servicestests/src/com/android/server/biometrics/sensors/BiometricSchedulerTest.java b/services/tests/servicestests/src/com/android/server/biometrics/sensors/BiometricSchedulerTest.java
index 8592166aae15..47eed48e030a 100644
--- a/services/tests/servicestests/src/com/android/server/biometrics/sensors/BiometricSchedulerTest.java
+++ b/services/tests/servicestests/src/com/android/server/biometrics/sensors/BiometricSchedulerTest.java
@@ -348,6 +348,17 @@ public class BiometricSchedulerTest {
verify((Interruptable) interruptableMonitor, never()).cancel();
}
+ @Test
+ public void testClientDestroyed_afterFinish() {
+ final HalClientMonitor.LazyDaemon