diff --git a/cmds/statsd/src/atoms.proto b/cmds/statsd/src/atoms.proto index 55e1186d861..8416ff4d557 100644 --- a/cmds/statsd/src/atoms.proto +++ b/cmds/statsd/src/atoms.proto @@ -3612,11 +3612,11 @@ message AppStartOccurred { // Empty if not set. optional string launch_token = 13; - // The compiler filter used when when the package was optimized. - optional int32 package_optimization_compilation_filter = 14; - // The reason why the package was optimized. - optional int32 package_optimization_compilation_reason = 15; + optional int32 package_optimization_compilation_reason = 14; + + // The compiler filter used when when the package was optimized. + optional int32 package_optimization_compilation_filter = 15; } message AppStartCanceled { @@ -3662,11 +3662,11 @@ message AppStartFullyDrawn { // App startup time (until call to Activity#reportFullyDrawn()). optional int64 app_startup_time_millis = 6; - // The compiler filter used when when the package was optimized. - optional int32 package_optimization_compilation_filter = 7; - // The reason why the package was optimized. - optional int32 package_optimization_compilation_reason = 8; + optional int32 package_optimization_compilation_reason = 7; + + // The compiler filter used when when the package was optimized. + optional int32 package_optimization_compilation_filter = 8; } /** diff --git a/core/java/android/app/Activity.java b/core/java/android/app/Activity.java index e123af728b2..c976a9bfb30 100644 --- a/core/java/android/app/Activity.java +++ b/core/java/android/app/Activity.java @@ -5183,12 +5183,6 @@ protected void onApplyThemeResource(Resources.Theme theme, @StyleRes int resid, * #checkSelfPermission(String)}. *

*

- * Calling this API for permissions already granted to your app would show UI - * to the user to decide whether the app can still hold these permissions. This - * can be useful if the way your app uses data guarded by the permissions - * changes significantly. - *

- *

* You cannot request a permission if your activity sets {@link * android.R.styleable#AndroidManifestActivity_noHistory noHistory} to * true because in this case the activity would not receive diff --git a/core/java/android/app/ActivityManagerInternal.java b/core/java/android/app/ActivityManagerInternal.java index a5965bc7f85..e977bab7374 100644 --- a/core/java/android/app/ActivityManagerInternal.java +++ b/core/java/android/app/ActivityManagerInternal.java @@ -377,6 +377,21 @@ public abstract void setDebugFlagsForStartingActivity(ActivityInfo aInfo, int st */ public abstract boolean hasRunningForegroundService(int uid, int foregroundServiceType); + /** + * Returns {@code true} if the given notification channel currently has a + * notification associated with a foreground service. This is an AMS check + * because that is the source of truth for the FGS state. + */ + public abstract boolean hasForegroundServiceNotification(String pkg, @UserIdInt int userId, + String channelId); + + /** + * If the given app has any FGSs whose notifications are in the given channel, + * stop them. + */ + public abstract void stopForegroundServicesForChannel(String pkg, @UserIdInt int userId, + String channelId); + /** * Registers the specified {@code processObserver} to be notified of future changes to * process state. @@ -440,4 +455,11 @@ public abstract int broadcastIntent(Intent intent, * @return true if exists, false otherwise. */ public abstract boolean isPendingTopUid(int uid); + + public abstract void tempAllowWhileInUsePermissionInFgs(int uid, long duration); + + public abstract boolean isTempAllowlistedForFgsWhileInUse(int uid); + + public abstract boolean canAllowWhileInUsePermissionInFgs(int pid, int uid, + @NonNull String packageName); } diff --git a/core/java/android/app/ActivityThread.java b/core/java/android/app/ActivityThread.java index 07925986614..2ba11e3a4b0 100644 --- a/core/java/android/app/ActivityThread.java +++ b/core/java/android/app/ActivityThread.java @@ -4603,6 +4603,10 @@ public void handleTopResumedActivityChanged(IBinder token, boolean onTop, String } if (r.isTopResumedActivity == onTop) { + if (!Build.IS_DEBUGGABLE) { + Slog.w(TAG, "Activity top position already set to onTop=" + onTop); + return; + } throw new IllegalStateException("Activity top position already set to onTop=" + onTop); } diff --git a/core/java/android/app/AppOpsManager.java b/core/java/android/app/AppOpsManager.java index 7bfc4603f06..6baabb69e02 100644 --- a/core/java/android/app/AppOpsManager.java +++ b/core/java/android/app/AppOpsManager.java @@ -2436,9 +2436,9 @@ public static String flagsToString(@OpFlags int flags) { false, // READ_MEDIA_AUDIO false, // WRITE_MEDIA_AUDIO false, // READ_MEDIA_VIDEO - false, // WRITE_MEDIA_VIDEO + true, // WRITE_MEDIA_VIDEO false, // READ_MEDIA_IMAGES - false, // WRITE_MEDIA_IMAGES + true, // WRITE_MEDIA_IMAGES true, // LEGACY_STORAGE false, // ACCESS_ACCESSIBILITY false, // READ_DEVICE_IDENTIFIERS diff --git a/core/java/android/app/admin/DevicePolicyManagerInternal.java b/core/java/android/app/admin/DevicePolicyManagerInternal.java index 62ac84b2b1e..d24694faff9 100644 --- a/core/java/android/app/admin/DevicePolicyManagerInternal.java +++ b/core/java/android/app/admin/DevicePolicyManagerInternal.java @@ -16,6 +16,7 @@ package android.app.admin; +import android.annotation.Nullable; import android.annotation.UserIdInt; import android.content.ComponentName; import android.content.Intent; @@ -221,6 +222,7 @@ public abstract void broadcastIntentToCrossProfileManifestReceiversAsUser(Intent /** * Returns the profile owner component for the given user, or {@code null} if there is not one. */ + @Nullable public abstract ComponentName getProfileOwnerAsUser(int userHandle); /** @@ -234,4 +236,9 @@ public abstract void broadcastIntentToCrossProfileManifestReceiversAsUser(Intent * {@link #supportsResetOp(int)} is true. */ public abstract void resetOp(int op, String packageName, @UserIdInt int userId); + + /** + * Returns whether the given package is a device owner or a profile owner in the calling user. + */ + public abstract boolean isDeviceOrProfileOwnerInCallingUser(String packageName); } diff --git a/core/java/android/app/backup/BackupManager.java b/core/java/android/app/backup/BackupManager.java index 3bc043ee091..acaea5fdd60 100644 --- a/core/java/android/app/backup/BackupManager.java +++ b/core/java/android/app/backup/BackupManager.java @@ -21,10 +21,14 @@ import android.annotation.RequiresPermission; import android.annotation.SystemApi; import android.annotation.TestApi; +import android.app.compat.CompatChanges; +import android.compat.annotation.ChangeId; +import android.compat.annotation.EnabledAfter; import android.compat.annotation.UnsupportedAppUsage; import android.content.ComponentName; import android.content.Context; import android.content.Intent; +import android.os.Build; import android.os.Bundle; import android.os.Handler; import android.os.Message; @@ -391,6 +395,17 @@ public boolean isBackupEnabled() { return false; } + + /** + * If this change is enabled, the {@code BACKUP} permission needed for + * {@code isBackupServiceActive()} will be enforced on the service end + * rather than client-side in {@link BackupManager}. + * @hide + */ + @ChangeId + @EnabledAfter(targetSdkVersion = Build.VERSION_CODES.R) + public static final long IS_BACKUP_SERVICE_ACTIVE_ENFORCE_PERMISSION_IN_SERVICE = 158482162; + /** * Report whether the backup mechanism is currently active. * When it is inactive, the device will not perform any backup operations, nor will it @@ -401,8 +416,11 @@ public boolean isBackupEnabled() { @SystemApi @RequiresPermission(android.Manifest.permission.BACKUP) public boolean isBackupServiceActive(UserHandle user) { - mContext.enforceCallingOrSelfPermission(android.Manifest.permission.BACKUP, - "isBackupServiceActive"); + if (!CompatChanges.isChangeEnabled( + IS_BACKUP_SERVICE_ACTIVE_ENFORCE_PERMISSION_IN_SERVICE)) { + mContext.enforceCallingOrSelfPermission(android.Manifest.permission.BACKUP, + "isBackupServiceActive"); + } checkServiceBinder(); if (sService != null) { try { diff --git a/core/java/android/content/pm/parsing/ParsingPackageImpl.java b/core/java/android/content/pm/parsing/ParsingPackageImpl.java index f932bc250e2..2da93ca3401 100644 --- a/core/java/android/content/pm/parsing/ParsingPackageImpl.java +++ b/core/java/android/content/pm/parsing/ParsingPackageImpl.java @@ -98,6 +98,8 @@ public class ParsingPackageImpl implements ParsingPackage, Parcelable { public static ForInternedStringValueMap sForInternedStringValueMap = Parcelling.Cache.getOrCreate(ForInternedStringValueMap.class); public static ForStringSet sForStringSet = Parcelling.Cache.getOrCreate(ForStringSet.class); + public static ForInternedStringSet sForInternedStringSet = + Parcelling.Cache.getOrCreate(ForInternedStringSet.class); protected static ParsedIntentInfo.StringPairListParceler sForIntentInfoPairs = Parcelling.Cache.getOrCreate(ParsedIntentInfo.StringPairListParceler.class); @@ -1026,6 +1028,7 @@ public void writeToParcel(Parcel dest, int flags) { dest.writeBoolean(this.forceQueryable); dest.writeParcelableList(this.queriesIntents, flags); sForInternedStringList.parcel(this.queriesPackages, dest, flags); + sForInternedStringSet.parcel(this.queriesProviders, dest, flags); dest.writeString(this.appComponentFactory); dest.writeString(this.backupAgentName); dest.writeInt(this.banner); @@ -1188,6 +1191,7 @@ public ParsingPackageImpl(Parcel in) { this.forceQueryable = in.readBoolean(); this.queriesIntents = in.createTypedArrayList(Intent.CREATOR); this.queriesPackages = sForInternedStringList.unparcel(in); + this.queriesProviders = sForInternedStringSet.unparcel(in); this.appComponentFactory = in.readString(); this.backupAgentName = in.readString(); this.banner = in.readInt(); diff --git a/core/java/android/hardware/camera2/CameraManager.java b/core/java/android/hardware/camera2/CameraManager.java index 352ae9da228..6c8a8d37c70 100644 --- a/core/java/android/hardware/camera2/CameraManager.java +++ b/core/java/android/hardware/camera2/CameraManager.java @@ -1367,6 +1367,8 @@ public void onCameraClosed(String id) { // devices going offline (in real world scenarios, these permissions aren't // changeable). Future calls to getCameraIdList() will reflect the changes in // the camera id list after getCameraIdListNoLazy() is called. + // We need to remove the torch ids which may have been associated with the + // devices removed as well. This is the same situation. cameraStatuses = mCameraService.addListener(testListener); mCameraService.removeListener(testListener); for (CameraStatus c : cameraStatuses) { @@ -1385,6 +1387,7 @@ public void onCameraClosed(String id) { } for (String id : deviceIdsToRemove) { onStatusChangedLocked(ICameraServiceListener.STATUS_NOT_PRESENT, id); + mTorchStatus.remove(id); } } catch (ServiceSpecificException e) { // Unexpected failure @@ -2051,7 +2054,9 @@ public void binderDied() { // Tell listeners that the cameras and torch modes are unavailable and schedule a // reconnection to camera service. When camera service is reconnected, the camera // and torch statuses will be updated. - for (int i = 0; i < mDeviceStatus.size(); i++) { + // Iterate from the end to the beginning befcause onStatusChangedLocked removes + // entries from the ArrayMap. + for (int i = mDeviceStatus.size() - 1; i >= 0; i--) { String cameraId = mDeviceStatus.keyAt(i); onStatusChangedLocked(ICameraServiceListener.STATUS_NOT_PRESENT, cameraId); } diff --git a/core/java/android/hardware/display/DisplayManager.java b/core/java/android/hardware/display/DisplayManager.java index c1ba2094d3c..99da6697989 100644 --- a/core/java/android/hardware/display/DisplayManager.java +++ b/core/java/android/hardware/display/DisplayManager.java @@ -61,6 +61,9 @@ public final class DisplayManager { * {@link #EXTRA_WIFI_DISPLAY_STATUS} extra. *

* This broadcast is only sent to registered receivers and can only be sent by the system. + *

+ * {@link android.Manifest.permission#ACCESS_FINE_LOCATION} permission is required to + * receive this broadcast. *

* @hide */ diff --git a/core/java/android/hardware/usb/AccessoryFilter.java b/core/java/android/hardware/usb/AccessoryFilter.java index f22dad4124d..f4c73d56e43 100644 --- a/core/java/android/hardware/usb/AccessoryFilter.java +++ b/core/java/android/hardware/usb/AccessoryFilter.java @@ -101,7 +101,7 @@ public void write(XmlSerializer serializer)throws IOException { public boolean matches(UsbAccessory acc) { if (mManufacturer != null && !acc.getManufacturer().equals(mManufacturer)) return false; if (mModel != null && !acc.getModel().equals(mModel)) return false; - return !(mVersion != null && !acc.getVersion().equals(mVersion)); + return !(mVersion != null && !mVersion.equals(acc.getVersion())); } /** diff --git a/core/java/android/nfc/NfcAdapter.java b/core/java/android/nfc/NfcAdapter.java index c61f10f50c9..dc4ce039bf7 100644 --- a/core/java/android/nfc/NfcAdapter.java +++ b/core/java/android/nfc/NfcAdapter.java @@ -677,6 +677,12 @@ public static NfcAdapter getDefaultAdapter(Context context) { throw new IllegalArgumentException( "context not associated with any application (using a mock context?)"); } + + if (getServiceInterface() == null) { + // NFC is not available + return null; + } + /* use getSystemService() for consistency */ NfcManager manager = (NfcManager) context.getSystemService(Context.NFC_SERVICE); if (manager == null) { diff --git a/core/java/android/os/Process.java b/core/java/android/os/Process.java index efea9537c4c..feabd06acb8 100644 --- a/core/java/android/os/Process.java +++ b/core/java/android/os/Process.java @@ -31,8 +31,12 @@ import libcore.io.IoUtils; +import java.io.BufferedReader; import java.io.FileDescriptor; +import java.io.FileReader; +import java.io.IOException; import java.util.Map; +import java.util.StringTokenizer; import java.util.concurrent.TimeoutException; /** @@ -202,6 +206,12 @@ public class Process { */ public static final int SE_UID = 1068; + /** + * Defines the UID/GID for the iorapd. + * @hide + */ + public static final int IORAPD_UID = 1071; + /** * Defines the UID/GID for the NetworkStack app. * @hide @@ -1393,4 +1403,43 @@ public static void waitForProcessDeath(int pid, int timeout) } private static native int nativePidFdOpen(int pid, int flags) throws ErrnoException; + + /** + * Checks if a process corresponding to a specific pid owns any file locks. + * @param pid The process ID for which we want to know the existence of file locks. + * @return true If the process holds any file locks, false otherwise. + * @throws IOException if /proc/locks can't be accessed. + * + * @hide + */ + public static boolean hasFileLocks(int pid) throws Exception { + BufferedReader br = null; + + try { + br = new BufferedReader(new FileReader("/proc/locks")); + String line; + + while ((line = br.readLine()) != null) { + StringTokenizer st = new StringTokenizer(line); + + for (int i = 0; i < 5 && st.hasMoreTokens(); i++) { + String str = st.nextToken(); + try { + if (i == 4 && Integer.parseInt(str) == pid) { + return true; + } + } catch (NumberFormatException nfe) { + throw new Exception("Exception parsing /proc/locks at \" " + + line + " \", token #" + i); + } + } + } + + return false; + } finally { + if (br != null) { + br.close(); + } + } + } } diff --git a/core/java/android/view/InsetsAnimationThreadControlRunner.java b/core/java/android/view/InsetsAnimationThreadControlRunner.java index 123604489da..09e4557135b 100644 --- a/core/java/android/view/InsetsAnimationThreadControlRunner.java +++ b/core/java/android/view/InsetsAnimationThreadControlRunner.java @@ -108,6 +108,9 @@ public InsetsAnimationThreadControlRunner(SparseArray contr mControl = new InsetsAnimationControlImpl(controls, frame, state, listener, types, mCallbacks, durationMs, interpolator, animationType); InsetsAnimationThread.getHandler().post(() -> { + if (mControl.isCancelled()) { + return; + } Trace.asyncTraceBegin(Trace.TRACE_TAG_VIEW, "InsetsAsyncAnimation: " + WindowInsets.Type.toString(types), types); listener.onReady(mControl, types); diff --git a/core/java/android/view/InsetsSourceConsumer.java b/core/java/android/view/InsetsSourceConsumer.java index 700dc66fab5..ba40459692f 100644 --- a/core/java/android/view/InsetsSourceConsumer.java +++ b/core/java/android/view/InsetsSourceConsumer.java @@ -113,13 +113,20 @@ public void setControl(@Nullable InsetsSourceControl control, InsetsState.typeToString(control.getType()), mController.getHost().getRootViewTitle())); } - // We are loosing control if (mSourceControl == null) { + // We are loosing control mController.notifyControlRevoked(this); - // Restore server visibility. - mState.getSource(getType()).setVisible( - mController.getLastDispatchedState().getSource(getType()).isVisible()); + // Check if we need to restore server visibility. + final InsetsSource source = mState.getSource(mType); + final boolean serverVisibility = + mController.getLastDispatchedState().getSourceOrDefaultVisibility(mType); + if (source.isVisible() != serverVisibility) { + source.setVisible(serverVisibility); + mController.notifyVisibilityChanged(); + } + + // For updateCompatSysUiVisibility applyLocalVisibilityOverride(); } else { // We are gaining control, and need to run an animation since previous state diff --git a/core/java/android/view/WindowlessWindowManager.java b/core/java/android/view/WindowlessWindowManager.java index 1af4c3636ac..f0006d98816 100644 --- a/core/java/android/view/WindowlessWindowManager.java +++ b/core/java/android/view/WindowlessWindowManager.java @@ -156,7 +156,10 @@ public int addToDisplay(IWindow window, int seq, WindowManager.LayoutParams attr mStateForWindow.put(window.asBinder(), state); } - return WindowManagerGlobal.ADD_OKAY | WindowManagerGlobal.ADD_FLAG_APP_VISIBLE; + final int res = WindowManagerGlobal.ADD_OKAY | WindowManagerGlobal.ADD_FLAG_APP_VISIBLE; + + // Include whether the window is in touch mode. + return isInTouchMode() ? res | WindowManagerGlobal.ADD_FLAG_IN_TOUCH_MODE : res; } /** @@ -207,6 +210,15 @@ private boolean isOpaque(WindowManager.LayoutParams attrs) { return !PixelFormat.formatHasAlpha(attrs.format); } + private boolean isInTouchMode() { + try { + return WindowManagerGlobal.getWindowSession().getInTouchMode(); + } catch (RemoteException e) { + Log.e(TAG, "Unable to check if the window is in touch mode", e); + } + return false; + } + /** @hide */ protected SurfaceControl getSurfaceControl(View rootView) { final ViewRootImpl root = rootView.getViewRootImpl(); @@ -268,7 +280,8 @@ public int relayout(IWindow window, int seq, WindowManager.LayoutParams inAttrs, } } - return 0; + // Include whether the window is in touch mode. + return isInTouchMode() ? WindowManagerGlobal.RELAYOUT_RES_IN_TOUCH_MODE : 0; } @Override diff --git a/core/java/android/widget/RemoteViews.java b/core/java/android/widget/RemoteViews.java index 7016c5cf0de..a9b2c4df255 100644 --- a/core/java/android/widget/RemoteViews.java +++ b/core/java/android/widget/RemoteViews.java @@ -593,6 +593,14 @@ public Resources.Theme getTheme() { public String getPackageName() { return mContextForResources.getPackageName(); } + + @Override + public boolean isRestricted() { + // Override isRestricted and direct to resource's implementation. The isRestricted is + // used for determining the risky resources loading, e.g. fonts, thus direct to context + // for resource. + return mContextForResources.isRestricted(); + } } private class SetEmptyView extends Action { diff --git a/core/java/com/android/internal/app/NetInitiatedActivity.java b/core/java/com/android/internal/app/NetInitiatedActivity.java index 92e9fe49244..5efeb0fc928 100644 --- a/core/java/com/android/internal/app/NetInitiatedActivity.java +++ b/core/java/com/android/internal/app/NetInitiatedActivity.java @@ -17,18 +17,14 @@ package com.android.internal.app; import android.app.AlertDialog; -import android.compat.annotation.UnsupportedAppUsage; -import android.content.BroadcastReceiver; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.content.IntentFilter; import android.location.LocationManagerInternal; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.util.Log; -import android.widget.Toast; import com.android.internal.R; import com.android.internal.location.GpsNetInitiatedHandler; @@ -43,7 +39,6 @@ public class NetInitiatedActivity extends AlertActivity implements DialogInterfa private static final String TAG = "NetInitiatedActivity"; private static final boolean DEBUG = true; - private static final boolean VERBOSE = false; private static final int POSITIVE_BUTTON = AlertDialog.BUTTON_POSITIVE; private static final int NEGATIVE_BUTTON = AlertDialog.BUTTON_NEGATIVE; @@ -55,17 +50,6 @@ public class NetInitiatedActivity extends AlertActivity implements DialogInterfa private int default_response = -1; private int default_response_timeout = 6; - /** Used to detect when NI request is received */ - private BroadcastReceiver mNetInitiatedReceiver = new BroadcastReceiver() { - @Override - public void onReceive(Context context, Intent intent) { - if (DEBUG) Log.d(TAG, "NetInitiatedReceiver onReceive: " + intent.getAction()); - if (intent.getAction() == GpsNetInitiatedHandler.ACTION_NI_VERIFY) { - handleNIVerify(intent); - } - } - }; - private final Handler mHandler = new Handler() { public void handleMessage(Message msg) { switch (msg.what) { @@ -109,14 +93,12 @@ protected void onCreate(Bundle savedInstanceState) { protected void onResume() { super.onResume(); if (DEBUG) Log.d(TAG, "onResume"); - registerReceiver(mNetInitiatedReceiver, new IntentFilter(GpsNetInitiatedHandler.ACTION_NI_VERIFY)); } @Override protected void onPause() { super.onPause(); if (DEBUG) Log.d(TAG, "onPause"); - unregisterReceiver(mNetInitiatedReceiver); } /** @@ -141,17 +123,4 @@ private void sendUserResponse(int response) { LocationManagerInternal lm = LocalServices.getService(LocationManagerInternal.class); lm.sendNiResponse(notificationId, response); } - - @UnsupportedAppUsage - private void handleNIVerify(Intent intent) { - int notifId = intent.getIntExtra(GpsNetInitiatedHandler.NI_INTENT_KEY_NOTIF_ID, -1); - notificationId = notifId; - - if (DEBUG) Log.d(TAG, "handleNIVerify action: " + intent.getAction()); - } - - private void showNIError() { - Toast.makeText(this, "NI error" /* com.android.internal.R.string.usb_storage_error_message */, - Toast.LENGTH_LONG).show(); - } } diff --git a/core/java/com/android/internal/app/ProcessMap.java b/core/java/com/android/internal/app/ProcessMap.java index 81036f7ecba..4917a47eb00 100644 --- a/core/java/com/android/internal/app/ProcessMap.java +++ b/core/java/com/android/internal/app/ProcessMap.java @@ -22,7 +22,7 @@ public class ProcessMap { final ArrayMap> mMap = new ArrayMap>(); - + public E get(String name, int uid) { SparseArray uids = mMap.get(name); if (uids == null) return null; @@ -58,4 +58,6 @@ public ArrayMap> getMap() { public int size() { return mMap.size(); } + + public void putAll(ProcessMap other) { mMap.putAll(other.mMap); } } diff --git a/core/res/AndroidManifest.xml b/core/res/AndroidManifest.xml index dbbfe14b994..844dd877ced 100644 --- a/core/res/AndroidManifest.xml +++ b/core/res/AndroidManifest.xml @@ -115,6 +115,12 @@ + + + + + + @@ -485,6 +491,8 @@ + + diff --git a/core/res/res/color-car/car_borderless_button_text_color.xml b/core/res/res/color-car/car_borderless_button_text_color.xml index 1cdd6cd901a..0a86e4012e9 100644 --- a/core/res/res/color-car/car_borderless_button_text_color.xml +++ b/core/res/res/color-car/car_borderless_button_text_color.xml @@ -16,5 +16,6 @@ limitations under the License. + diff --git a/core/res/res/color-car/car_switch_track.xml b/core/res/res/color-car/car_switch_track.xml new file mode 100644 index 00000000000..8ca67dd8dda --- /dev/null +++ b/core/res/res/color-car/car_switch_track.xml @@ -0,0 +1,27 @@ + + + + + + + + + diff --git a/core/res/res/drawable-car/car_button_background.xml b/core/res/res/drawable-car/car_button_background.xml index e568aebfe81..13b0ec13f35 100644 --- a/core/res/res/drawable-car/car_button_background.xml +++ b/core/res/res/drawable-car/car_button_background.xml @@ -25,6 +25,22 @@ limitations under the License. android:color="#0059B3"/> + + + + + + + + + + + + + + @@ -47,6 +63,12 @@ limitations under the License. + + + + + + diff --git a/core/res/res/drawable-car/car_switch_track.xml b/core/res/res/drawable-car/car_switch_track.xml index cb0b9beeeab..51e9f7eb4eb 100644 --- a/core/res/res/drawable-car/car_switch_track.xml +++ b/core/res/res/drawable-car/car_switch_track.xml @@ -41,7 +41,7 @@ android:right="@dimen/car_switch_track_margin_size"> + android:tint="@color/car_switch_track"> diff --git a/core/res/res/values-as/strings.xml b/core/res/res/values-as/strings.xml index 4ff2a6a062e..2ca98b4c5f2 100644 --- a/core/res/res/values-as/strings.xml +++ b/core/res/res/values-as/strings.xml @@ -100,7 +100,7 @@ "নেটৱৰ্ক পীয়েৰে TTY ম\'ড HCOলৈ সলনি কৰিবলৈ অনুৰোধ কৰিছে" "নেটৱৰ্ক পীয়েৰে TTY ম\'ড VCO লৈ সলনি কৰিবলৈ অনুৰোধ কৰিছে" "নেটৱৰ্ক পীয়েৰে TTY ম\'ড OFFলৈ সলনি কৰিবলৈ অনুৰোধ কৰিছে" - "কণ্ঠস্বৰ" + "Voice" "ডেটা" "ফেক্স" "এছএমএছ" @@ -2000,7 +2000,7 @@ "ৰুটিন ম’ডৰ তথ্য জাননী" "চ্চাৰ্জ কৰাৰ সচৰাচৰ সময়ৰ আগতেই বেটাৰি শেষ হ’ব পাৰে" "বেটাৰিৰ খৰচ কমাবলৈ বেটাৰি সঞ্চয়কাৰী অন কৰা হৈছে" - "বেটাৰি সঞ্চয়কাৰী" + "বেটাৰী সঞ্চয়কাৰী" "বেটাৰি সঞ্চয়কাৰী অফ কৰা হ’ল" "ফ\'নটোত পর্যাপ্ত পৰিমাণে চার্জ আছে। সুবিধাবোৰ আৰু সীমাবদ্ধ কৰা নাই।" "টেবলেটটোত পর্যাপ্ত পৰিমাণে চার্জ আছে। সুবিধাবোৰ আৰু সীমাবদ্ধ কৰা নাই।" diff --git a/core/res/res/values-az/strings.xml b/core/res/res/values-az/strings.xml index 1d5d6d87b2c..36c293c491c 100644 --- a/core/res/res/values-az/strings.xml +++ b/core/res/res/values-az/strings.xml @@ -317,7 +317,7 @@ "Həyati əlamətlər haqqında sensor dataya daxil olun" "Pəncərənin məzmununu əldə edin" "Əlaqədə olduğunuz pəncərənin məzmununu nəzərdən keçirin." - "Toxunaraq Kəşf et funksiyasını yandırın" + "Toxunuşla öyrənmə funksiyasını aktiv edin" "Tıklanan hissələr səsləndiriləcək və ekran jestlərlə idarə oluna biləcək." "Yazdığınız mətni izləyin" "Kredit kartı nömrələri və parollar kimi şəxsi məlumatlar daxildir." @@ -1615,7 +1615,7 @@ "Android TV cihazını kiliddən çıxarmaq üçün %d dəfə yanlış cəhd etdiniz. Android TV cihazınız defolt fabrik dəyərlərinə sıfırlanacaq." "Siz telefonun kilidini açmaq üçün %d yanlış cəhd etmisiniz. Telefon artıq defolt zavod halına sıfırlanacaq." "Siz kilidi açmaq üçün şablonu %1$d dəfə səhv çəkdiniz. %2$d daha uğursuz cəhddən sonra planşetinizin kilidini e-poçt hesabınızla açmaq tələb olunacaq.\n\n %3$d saniyə ərzində bir daha yoxlayın." - "Kiliddən çıxarma modelini %1$d dəfə yanlış çəkdiniz. Daha %2$d yanlış cəhddən sonra Android TV cihazını e-poçt hesabınızla kiliddən çıxarmağınız tələb olunacaq.\n\n %3$d saniyə sonra yenidən cəhd edin." + "Kiliddən çıxarma modelini %1$d dəfə yanlış çəkdiniz. Daha %2$d yanlış cəhddən sonra Android TV cihazını e-poçt hesabınızla kiliddən çıxarmağınız tələb olunacaq.\n\n %3$d saniyə sonra cəhd edin." "Siz artıq modeli %1$d dəfə yanlış daxil etmisiniz.%2$d dəfə də yanlış daxil etsəniz, telefonun kilidinin açılması üçün elektron poçt ünvanınız tələb olunacaq.\n\n %3$d saniyə ərzində yenidən cəhd edin." " - " "Yığışdır" @@ -1623,10 +1623,10 @@ "Əlçatımlılıq Qısayolu istifadə edilsin?" "Qısayol aktiv olduqda, hər iki səs düyməsinə 3 saniyə basıb saxlamaqla əlçatımlılıq funksiyası başladılacaq." "Əlçatımlılıq funksiyaları aktiv edilsin?" - "Hər iki səs səviyyəsi düyməsinə bir neçə saniyə basıb saxladıqda əlçatımlılıq funksiyaları aktiv olur. Bu, cihazınızın işləmə qaydasını dəyişə bilər.\n\nCari funksiyalar:\n%1$s\nAyarlar və Əlçatımlılıq bölməsində seçilmiş funksiyaları dəyişə bilərsiniz." + "Hər iki səs səviyyəsi düyməsinə bir neçə saniyə basıb saxladıqda əlçatımlılıq funksiyaları aktiv olur. Cihazınızın işləmə qaydasını dəyişə bilər.\n\nCari funksiyalar:\n%1$s\nAyarlar və Əlçatımlılıq bölməsində seçilmiş funksiyaları dəyişə bilərsiniz." " • %1$s\n" "%1$s aktiv edilsin?" - "Hər iki səs səviyyəsi düyməsinə bir neçə saniyə basıb saxladıqda əlçatımlılıq funksiyası olan %1$s aktiv olur. Bu, cihazınızın işləmə qaydasını dəyişə bilər.\n\nAyarlar və Əlçatımlılıq bölməsində bu qısayolu başqa bir funksiyata dəyişə bilərsiniz." + "Hər iki səs səviyyəsi düyməsinə bir neçə saniyə basıb saxladıqda əlçatımlılıq funksiyası olan %1$s aktiv olur. Cihazınızın işləmə qaydasını dəyişə bilər.\n\nAyarlar və Əlçatımlılıq bölməsində bu qısayolu başqa bir funksiyaya dəyişə bilərsiniz." "Aktiv edin" "Aktiv etməyin" "AKTİV" diff --git a/core/res/res/values-be/strings.xml b/core/res/res/values-be/strings.xml index 6fbdd4626b9..220c3520a1d 100644 --- a/core/res/res/values-be/strings.xml +++ b/core/res/res/values-be/strings.xml @@ -507,9 +507,9 @@ "Дазваляе праграме атрымліваць пакеты, адпраўленыя на ўсе прылады ў сетцы Wi-Fi з дапамогай групавых адрасоў, а не толькі на вашу прыладу Android TV. Праз гэта будзе спажывацца больш энергіі, чым у рэжыме нешматадраснай перадачы." "Дазваляе прыкладанням атрымліваць пакеты, адпраўленыя на ўсе прылады з сеткi Wi-Fi з дапамогай групавых адрасоў, а не толькі на ваш тэлефон. Будзе выкарыстоўвацца больш энергіі, чым у рэжыме нешматадраснай перадачы." "атрыманне доступу да налад прылады Bluetooth" - "Дазваляе прыкладанням наладжваць лакальны планшэт Bluetooth, выяўляць і падлучаць выдаленыя прылады." + "Дазваляе праграме наладжваць лакальны планшэт Bluetooth, выяўляць і спалучаць выдаленыя прылады." "Дазваляе праграме наладжваць канфігурацыю Bluetooth на прыладзе Android TV, а таксама выяўляць аддаленыя прылады і спалучацца з імі." - "Дазваляе прыкладанням наладжваць лакальны тэлефон Bluetooth, а таксама знаходзіць выдаленыя прылады i падлучацца да ix." + "Дазваляе праграме наладжваць лакальны тэлефон Bluetooth, а таксама знаходзіць выдаленыя прылады i спалучаць ix." "падключаць да WiMAX i адключаць ад яго" "Дазваляе прыкладанню вызначаць, ці ўключаны WiMAX, і інфармацыю пра любую сетку WiMAX, якая спалучана з iншымi." "Змяніць стан WiMAX" @@ -775,7 +775,7 @@ "Гадавіна" "Іншае" "Карыстальніцкая" - "Хатні" + "Асабістая" "Працоўная" "Іншая" "Мабільны" @@ -1355,7 +1355,7 @@ "Тэставы рэжым уключаны" "Каб выключыць тэставы рэжым, скіньце налады да заводскіх значэнняў." "Паслядоўная кансоль уключана" - "Паказчык эфектыўнасці змяніўся. Каб выключыць кансоль, праверце загрузчык." + "Паказчык прадукцыйнасці змяніўся. Каб выключыць кансоль, праверце загрузчык." "Вадкасць або смецце ў порце USB" "Порт USB аўтаматычна адключаны. Каб даведацца больш, націсніце тут." "Порт USB можна выкарыстоўваць" @@ -1705,7 +1705,7 @@ "Каб пераключыцца на іншую функцыю, правядзіце ўверх трыма пальцамі і ўтрымлівайце іх на экране." "Павелічэнне" "Бягучы карыстальнік %1$s." - "Пераход да %1$s..." + "Пераход у рэжым \"%1$s\"..." "%1$s выходзіць з сістэмы…" "Уладальнік" "Памылка" diff --git a/core/res/res/values-bg/strings.xml b/core/res/res/values-bg/strings.xml index a7012a0c274..8d3a23c99e3 100644 --- a/core/res/res/values-bg/strings.xml +++ b/core/res/res/values-bg/strings.xml @@ -1661,9 +1661,9 @@ "За превключване между функциите прекарайте три пръста нагоре и задръжте." "Ниво на мащаба" "Текущ потребител %1$s." - "Превключва се към %1$s…" + "Превключва се към: %1$s…" "%1$s излиза…" - "собственик" + "Собственик" "Грешка" "Тази промяна не е разрешена от администратора ви" "Няма намерено приложение за извършване на това действие" diff --git a/core/res/res/values-bn/strings.xml b/core/res/res/values-bn/strings.xml index c1c40991e90..9462be3f2f4 100644 --- a/core/res/res/values-bn/strings.xml +++ b/core/res/res/values-bn/strings.xml @@ -1661,7 +1661,7 @@ "একটি ফিচার থেকে অন্যটিতে যেতে, তিনটি আঙ্গুল দিয়ে উপরের দিকে সোয়াইপ করে ধরে থাকুন।" "বড় করে দেখা" "বর্তমান ব্যবহারকারী %1$s৷" - "%1$s নামের ব্যবহারকারীতে যাচ্ছে…" + "ব্যবহারকারী পরিবর্তন করে %1$s করা হচ্ছে…" "%1$sকে লগ-আউট করা হচ্ছে..." "মালিক" "ত্রুটি" diff --git a/core/res/res/values-bs/strings.xml b/core/res/res/values-bs/strings.xml index 5c5f8220849..7511455fc0e 100644 --- a/core/res/res/values-bs/strings.xml +++ b/core/res/res/values-bs/strings.xml @@ -1335,7 +1335,7 @@ "Omogućen način rada okvira za testiranje" "Izvršite vraćanje na fabričke postavke da onemogućite način rada okvira za testiranje." "Serijska konzola omogućena" - "Izvedba je otežana. Da onemogućite, provjerite program za učitavanje operativnog sistema." + "Performanse su smanjene. Da onemogućite, provjerite program za učitavanje operativnog sistema." "Tečnost ili nečistoće u USB priključku" "USB priključak je automatski onemogućen. Dodirnite da saznate više." "USB priključak je sada sigurno koristiti" diff --git a/core/res/res/values-ca/strings.xml b/core/res/res/values-ca/strings.xml index f85fe5ac935..ca45c00fb8b 100644 --- a/core/res/res/values-ca/strings.xml +++ b/core/res/res/values-ca/strings.xml @@ -524,10 +524,10 @@ "Permet que l\'aplicació conegui el nivell de complexitat del bloqueig de pantalla (alt, mitjà, baix o cap), que indica la llargària i el tipus de bloqueig de pantalla possibles. L\'aplicació també pot suggerir que els usuaris actualitzin el bloqueig de pantalla a un nivell determinat, però els usuaris poden ignorar aquestes recomanacions. Tingues en compte que el bloqueig de pantalla no s\'emmagatzema com a text sense format, de manera que l\'aplicació no coneix la contrasenya exacta." "utilitza maquinari biomètric" "Permet que l\'aplicació faci servir maquinari biomètric per a l\'autenticació" - "Gestionar el maquinari d\'empremtes dactilars" + "Gestionar el maquinari d\'empremtes digitals" "Permet que l\'aplicació invoqui mètodes per afegir i suprimir plantilles d\'empremtes dactilars que es puguin fer servir." - "Utilitzar el maquinari d\'empremtes dactilars" - "Permet que l\'aplicació faci servir maquinari d\'empremtes dactilars per a l\'autenticació" + "Utilitzar el maquinari d\'empremtes digitals" + "Permet que l\'aplicació faci servir maquinari d\'empremtes digitals per a l\'autenticació" "modificar la teva col·lecció de música" "Permet que l\'aplicació modifiqui la teva col·lecció de música." "modificar la teva col·lecció de vídeos" @@ -552,7 +552,7 @@ "L\'empremta digital s\'ha autenticat" "Cara autenticada" "Cara autenticada; prem el botó per confirmar" - "El maquinari per a empremtes dactilars no està disponible." + "El maquinari d\'empremtes digitals no està disponible." "L\'empremta digital no es pot desar. Suprimeix-ne una." "S\'ha esgotat el temps d\'espera per a l\'empremta digital. Torna-ho a provar." "S\'ha cancel·lat l\'operació d\'empremta digital." @@ -956,7 +956,7 @@ "Permet que l\'aplicació modifiqui l\'historial del navegador o els marcadors de la tauleta. Això pot permetre que l\'aplicació esborri o modifiqui les dades del navegador. Nota: És possible que aquest permís no s\'apliqui a navegadors de tercers o a altres aplicacions amb capacitats de navegació web." "Permet que l\'aplicació modifiqui l\'historial o les adreces d\'interès que hagis desat al dispositiu Android TV. D\'aquesta manera, l\'aplicació pot esborrar o modificar les dades del navegador. Nota: és possible que aquest permís no s\'apliqui a navegadors de tercers ni a altres aplicacions amb funcions de navegació web." "Permet que l\'aplicació modifiqui l\'historial del navegador o els marcadors del telèfon. Això pot permetre que l\'aplicació esborri o modifiqui les dades del navegador. Nota: És possible que aquest permís no s\'apliqui a navegadors de tercers o a altres aplicacions amb capacitats de navegació web." - "configuració d\'una alarma" + "configurar una alarma" "Permet que l\'aplicació defineixi una alarma en una aplicació de despertador instal·lada. És possible que algunes aplicacions de despertador no incorporin aquesta funció." "afegeix bústia de veu" "Permet que l\'aplicació afegeixi missatges a la safata d\'entrada de la bústia de veu." @@ -996,7 +996,7 @@ Darrers %d dies Darrer dia (%d) - "El mes passat" + "Darrer mes" "Més antigues" "el %s" "a les %s" @@ -2029,7 +2029,7 @@ %s i %d fitxers més %s i %d fitxer més - "No hi ha cap recomanació de persones amb qui compartir" + "No hi ha cap suggeriment de persones amb qui compartir" "Llista d\'aplicacions" "Aquesta aplicació no té permís de gravació, però pot capturar àudio a través d\'aquest dispositiu USB." "Inici" diff --git a/core/res/res/values-cs/strings.xml b/core/res/res/values-cs/strings.xml index 0edeb0bad4b..a5f421390d4 100644 --- a/core/res/res/values-cs/strings.xml +++ b/core/res/res/values-cs/strings.xml @@ -1705,7 +1705,7 @@ "Chcete-li přepnout mezi funkcemi, přejeďte nahoru třemi prsty a podržte je." "Zvětšení" "Aktuální uživatel je %1$s." - "Přepínání na účet %1$s…" + "Přepínání na uživatele %1$s…" "Odhlašování uživatele %1$s…" "Vlastník" "Chyba" diff --git a/core/res/res/values-es-rUS/strings.xml b/core/res/res/values-es-rUS/strings.xml index 4d93d6eaf64..5b216612430 100644 --- a/core/res/res/values-es-rUS/strings.xml +++ b/core/res/res/values-es-rUS/strings.xml @@ -325,8 +325,8 @@ "Controla el posicionamiento y el nivel de zoom de la pantalla." "Usar gestos" "Permite presionar, deslizar, pellizcar y usar otros gestos." - "Gestos del sensor de huellas digitales" - "Captura los gestos que se hacen en el sensor de huellas digitales del dispositivo." + "Gestos del sensor de huellas dactilares" + "Captura los gestos que se hacen en el sensor de huellas dactilares del dispositivo." "Tomar captura de pantalla" "Puede tomar una captura de la pantalla." "desactivar o modificar la barra de estado" @@ -511,9 +511,9 @@ "Permite que la app conecte el dispositivo Android TV a redes WiMAX y que lo desconecte de ellas." "Permite que la aplicación conecte el dispositivo a una red WiMAX y que lo desconecte de ella." "vincular con dispositivos Bluetooth" - "Permite que la aplicación vea la configuración de Bluetooth de la tablet y que cree y acepte conexiones con los dispositivos sincronizados." - "Permite que la app vea la configuración de Bluetooth del dispositivo Android TV, así como que cree y acepte conexiones con los dispositivos sincronizados." - "Permite que la aplicación vea la configuración de Bluetooth del dispositivo y que cree y acepte conexiones con los dispositivos sincronizados." + "Permite que la aplicación vea la configuración de Bluetooth de la tablet y que cree y acepte conexiones con los dispositivos vinculados." + "Permite que la app vea la configuración de Bluetooth del dispositivo Android TV, así como que cree y acepte conexiones con los dispositivos vinculados." + "Permite que la aplicación vea la configuración de Bluetooth del dispositivo y que cree y acepte conexiones con los dispositivos vinculados." "Información sobre servicio de pago NFC preferido" "Permite que la app reciba información del servicio de pago NFC preferido, como el servicio de asistencia registrado y el destino de la ruta." "controlar la Transmisión de datos en proximidad" @@ -524,10 +524,10 @@ "Permite que la app conozca el nivel de complejidad del bloqueo de pantalla (alta, media, baja o ninguna), lo que indica el rango de duración posible y el tipo de bloqueo. La app también puede sugerirles a los usuarios que actualicen el bloqueo de pantalla a un determinado nivel, aunque ellos pueden ignorar esta sugerencia y seguir navegando. Ten en cuenta que el bloqueo de pantalla no se almacena como texto sin formato, por lo que la app no conoce la contraseña exacta." "usar hardware biométrico" "Permite que la app use hardware biométrico para realizar la autenticación" - "Administrar el hardware de huellas digitales" - "Permite que la aplicación emplee métodos para agregar y eliminar plantillas de huellas digitales para su uso." - "Utilizar hardware de huellas digitales" - "Permite que la aplicación utilice el hardware de huellas digitales para realizar la autenticación." + "Administrar el hardware de huellas dactilares" + "Permite que la aplicación emplee métodos para agregar y eliminar plantillas de huellas dactilares para su uso." + "Utilizar hardware de huellas dactilares" + "Permite que la aplicación utilice el hardware de huellas dactilares para realizar la autenticación." "modificar tu colección de música" "Permite que la app modifique tu colección de música." "modificar tu colección de videos" @@ -542,31 +542,31 @@ "No se reconoció" "Se canceló la autenticación" "No se estableció ningún PIN, patrón ni contraseña" - "Se detectó parcialmente la huella digital. Vuelve a intentarlo." - "No se pudo procesar la huella digital. Vuelve a intentarlo." - "El sensor de huellas digitales está sucio. Limpia el sensor y vuelve a intentarlo." + "Se detectó parcialmente la huella dactilar. Vuelve a intentarlo." + "No se pudo procesar la huella dactilar. Vuelve a intentarlo." + "El sensor de huellas dactilares está sucio. Limpia el sensor y vuelve a intentarlo." "Moviste el dedo muy rápido. Vuelve a intentarlo." "Moviste el dedo muy lento. Vuelve a intentarlo." - "Se autenticó la huella digital" + "Se autenticó la huella dactilar" "Se autenticó el rostro" "Se autenticó el rostro; presiona Confirmar" - "El hardware para detectar huellas digitales no está disponible." - "No se puede almacenar la huella digital. Elimina una de las existentes." - "Finalizó el tiempo de espera para la huella digital. Vuelve a intentarlo." - "Se canceló la operación de huella digital." - "El usuario canceló la operación de huella digital." + "El hardware para detectar huellas dactilares no está disponible." + "No se puede almacenar la huella dactilar. Elimina una de las existentes." + "Finalizó el tiempo de espera para la huella dactilar. Vuelve a intentarlo." + "Se canceló la operación de huella dactilar." + "El usuario canceló la operación de huella dactilar." "Demasiados intentos. Vuelve a intentarlo más tarde." - "Realizaste demasiados intentos. Se inhabilitó el sensor de huellas digitales." + "Realizaste demasiados intentos. Se inhabilitó el sensor de huellas dactilares." "Vuelve a intentarlo." "No se registraron huellas digitales." - "Este dispositivo no tiene sensor de huellas digitales." + "Este dispositivo no tiene sensor de huellas dactilares." "Se inhabilitó temporalmente el sensor." "Dedo %d" - "Ícono de huella digital" + "Ícono de huella dactilar" "administrar el hardware de desbloqueo facial" "Permite que la app emplee métodos para agregar y borrar plantillas de rostros para su uso." "usar el hardware de desbloqueo facial" diff --git a/core/res/res/values-eu/strings.xml b/core/res/res/values-eu/strings.xml index 5e52506c40d..99012924a3e 100644 --- a/core/res/res/values-eu/strings.xml +++ b/core/res/res/values-eu/strings.xml @@ -93,7 +93,7 @@ "Datu-konexioaren egoera" "SMS mezuak" "Erantzungailuko mezuak" - "Wi-Fi bidezko deiak" + "Wifi bidezko deiak" "SIMaren egoera" "SIM txartelaren lehentasun handiko jakinarazpenak" "Beste gailuak TTY osagarria FULL moduan erabiltzea eskatu du" @@ -122,23 +122,23 @@ "Ibiltaritzari buruzko jakinarazpena aktibatuta" "Ibiltaritzari buruzko jakinarazpena desaktibatuta" "Zerbitzu bila" - "Ezin izan dira konfiguratu Wi‑Fi bidezko deiak" + "Ezin izan dira konfiguratu wifi bidezko deiak" - "Wi-Fi bidez deiak egiteko eta mezuak bidaltzeko, eskatu operadoreari zerbitzu hori gaitzeko. Ondoren, aktibatu Wi-Fi bidezko deiak Ezarpenak atalean. (Errore-kodea: %1$s)" + "Wifi bidez deiak egiteko eta mezuak bidaltzeko, eskatu operadoreari zerbitzu hori gaitzeko. Ondoren, aktibatu Wifi bidezko deiak Ezarpenak atalean. (Errore-kodea: %1$s)" - "Arazo bat izan da Wi‑Fi bidezko deiak zure operadorearekin erregistratzean: %1$s" + "Arazo bat izan da wifi bidezko deiak zure operadorearekin erregistratzean: %1$s" - "%s Wi-Fi bidezko deiak" + "%s operadorearen wifi bidezko deiak" "%s operadorearen wifi bidezko deiak" "WLAN bidezko deia" "%s WLAN bidezko deia" "%s wifia" "Wi-Fi bidezko deiak | %s" "%s VoWifi" - "Wi-Fi bidezko deiak" + "Wifi bidezko deiak" "Wifia" "Wi-Fi bidezko deiak" "VoWifi" @@ -192,7 +192,7 @@ "Jabeak kudeatzen du gailua" "Erakundeak kudeatzen du gailua eta baliteke sareko trafikoa gainbegiratzea. Sakatu hau xehetasunak ikusteko." "Aplikazioek zure kokapena atzi dezakete" - "Informazio gehiago lortzeko, jo IKT sailaren administratzailearengana" + "Informazio gehiago lortzeko, jo IKT saileko administratzailearengana" "Herrialde-hautemailea" "Kokapen-zerbitzua" "Sentsorearen jakinarazpen-zerbitzua" @@ -244,7 +244,7 @@ "Amaitu saioa" "Pantaila-argazkia" "Akatsen txostena" - "Gailuaren uneko egoerari buruzko informazioa bilduko da, mezu elektroniko gisa bidaltzeko. Minutu batzuk igaroko dira akatsen txostena sortzen hasten denetik bidaltzeko prest egon arte. Itxaron, mesedez." + "Gailuaren oraingo egoerari buruzko informazioa bilduko da, mezu elektroniko gisa bidaltzeko. Minutu batzuk igaroko dira akatsen txostena sortzen hasten denetik bidaltzeko prest egon arte. Itxaron, mesedez." "Txosten dinamikoa" "Aukera hau erabili beharko zenuke ia beti. Txostenaren jarraipena egin ahal izango duzu eta arazoari buruzko xehetasunak eman ahal izango dituzu. Baliteke gutxitan erabili behar izaten diren atalak ez agertzea, denbora aurrezteko." "Txosten osoa" @@ -305,8 +305,8 @@ "atzitu gailuko argazkiak, multimedia-edukia eta fitxategiak" "Mikrofonoa" "grabatu audioa" - "Ariketa fisikoa" - "ariketa fisikoak atzitu" + "Jarduera fisiko" + "jarduera fisikoa atzitu" "Kamera" "atera argazkiak eta grabatu bideoak" "Deien erregistroa" @@ -348,13 +348,13 @@ "jaso testu-mezuak (MMSak)" "MMS mezuak jasotzeko eta prozesatzeko baimena ematen die aplikazioei. Horrela, aplikazioak gailura bidalitako mezuak kontrola eta ezaba ditzake zuri erakutsi gabe." "desbideratu sare mugikor bidezko igorpen-mezuak" - "Sare mugikor bidezko igorpen-modulura lotzeko baimena ematen dio aplikazioari, sare mugikor bidezko igorpen-mezuak jaso ahala desbideratu ahal izateko. Sare mugikor bidezko igorpen-alertak kokapen batzuetan entregatzen dira larrialdi-egoeren berri emateko. Sare mugikor bidezko larrialdi-igorpenak jasotzean, aplikazio gaiztoek gailuaren errendimenduari edota funtzionamenduari eragin diezaiokete." + "Sare mugikor bidezko igorpen-modulura lotzeko baimena ematen dio aplikazioari, sare mugikor bidezko igorpen-mezuak jaso ahala desbideratu ahal izateko. Sare mugikor bidezko igorpen-alertak kokapen batzuetan entregatzen dira larrialdi-egoeren berri emateko. Sare mugikor bidezko larrialdi-igorpenak jasotzean, asmo txarreko aplikazioek gailuaren errendimenduari edota funtzionamenduari eragin diezaiokete." "irakurri sare mugikor bidezko igorpen-mezuak" - "Gailuak jasotako sare mugikor bidezko igorpenen mezuak irakurtzeko baimena ematen die aplikazioei. Sare mugikor bidezko igorpen-alertak kokapen batzuetan ematen dira larrialdi-egoeren berri emateko. Aplikazio gaiztoek gailuaren errendimendua edo funtzionamendua oztopa dezakete larrialdi-igorpen horietako bat jasotzen denean." + "Gailuak jasotako sare mugikor bidezko igorpenen mezuak irakurtzeko baimena ematen die aplikazioei. Sare mugikor bidezko igorpen-alertak kokapen batzuetan ematen dira larrialdi-egoeren berri emateko. Asmo txarreko aplikazioek gailuaren errendimendua edo funtzionamendua oztopa dezakete larrialdi-igorpen horietako bat jasotzen denean." "irakurri harpidetutako jarioak" "Une horretan sinkronizatutako jarioei buruzko xehetasunak lortzeko baimena ematen die aplikazioei." "bidali eta ikusi SMS mezuak" - "SMS mezuak bidaltzeko baimena ematen die aplikazioei. Horrela, ustekabeko gastuak eragin daitezke. Aplikazio gaiztoek erabil dezakete zuk berretsi gabeko mezuak bidalita gastuak eragiteko." + "SMS mezuak bidaltzeko baimena ematen die aplikazioei. Horrela, ustekabeko gastuak eragin daitezke. Asmo txarreko aplikazioek erabil dezakete zuk berretsi gabeko mezuak bidalita gastuak eragiteko." "irakurri testu-mezuak (SMSak edo MMSak)" "Aplikazioak tabletan gordetako SMS mezu (testu-mezu) guztiak irakur ditzake." "Aplikazioek Android TV gailuan gordetako SMS (testu) mezu guztiak irakur ditzakete." @@ -386,7 +386,7 @@ "neurtu aplikazioen biltegiratzeko tokia" "Bere kodea, datuak eta cache-tamainak eskuratzeko baimena ematen die aplikazioei." "aldatu sistemaren ezarpenak" - "Sistemaren ezarpenen datuak aldatzeko baimena ematen die aplikazioei. Aplikazio gaiztoek sistemaren konfigurazioa hondatzeko erabil dezakete." + "Sistemaren ezarpenen datuak aldatzeko baimena ematen die aplikazioei. Asmo txarreko aplikazioek sistemaren konfigurazioa hondatzeko erabil dezakete." "exekutatu abiaraztean" "Sistema berrabiarazi bezain laster abiarazteko baimena ematen die aplikazioei. Horrela, agian denbora gehiago beharko du tabletak abiarazteko, eta tabletaren funtzionamendu orokorra mantso daiteke, baimen hori duten aplikazioak beti abian egongo baitira." "Sistema abiarazi bezain laster beren burua abiarazteko baimena ematen die aplikazioei. Baliteke denbora gehiago behar izatea Android TV gailua abiarazteko eta aplikazioek gailua orokorrean mantsoago ibilarazteko baimena izatea, beti abian izango baita." @@ -396,9 +396,9 @@ "Igorpen iraunkorrak egiteko baimena ematen die aplikazioei. Igorpena amaitu ondoren ere igortzen jarraitzen dute igorpen iraunkorrek. Gehiegi erabiliz gero, Android TV gailua motel edo ezegonkor ibiliko da, memoria gehiago erabiliko delako." "Igorpen iraunkorrak emateko baimena ematen die; horiek igorpena amaitu ondoren mantentzen dira. Gehiegi erabiliz gero, telefonoa motel edo ezegonkor ibiliko da, memoria gehiago erabiliko delako." "irakurri kontaktuak" - "Tabletan gordetako kontaktuei buruzko datuak irakurtzeko baimena ematen dio aplikazioari. Kontaktuak sortu dituzten tabletako kontuak ere atzitu ahalko dituzte aplikazioek. Horrek barnean hartuko ditu instalatutako aplikazioek sortutako kontuak, agian. Baimen horrekin, kontaktuen datuak gorde ditzakete aplikazioek, eta baliteke aplikazio gaiztoek zuk jakin gabe partekatzea datu horiek." - "Android TV gailuan gordetako kontaktuei buruzko datuak irakurtzeko baimena ematen dio aplikazioari. Kontaktuak sortu dituzten Android TV gailuko kontuak ere atzitu ahalko dituzte aplikazioek. Horrek barnean hartuko ditu instalatutako aplikazioek sortutako kontuak, agian. Baimen horrekin, kontaktuen datuak gorde ditzakete aplikazioek, eta baliteke aplikazio gaiztoek zuk jakin gabe partekatzea datu horiek." - "Telefonoan gordetako kontaktuei buruzko datuak irakurtzeko baimena ematen dio aplikazioari. Kontaktuak sortu dituzten telefonoko kontuak ere atzitu ahalko dituzte aplikazioek. Horrek barnean hartuko ditu instalatutako aplikazioek sortutako kontuak, agian. Baimen horrekin, kontaktuen datuak gorde ditzakete aplikazioek, eta baliteke aplikazio gaiztoek zuk jakin gabe partekatzea datu horiek." + "Tabletan gordetako kontaktuei buruzko datuak irakurtzeko baimena ematen dio aplikazioari. Kontaktuak sortu dituzten tabletako kontuak ere atzitu ahalko dituzte aplikazioek. Horrek barnean hartuko ditu instalatutako aplikazioek sortutako kontuak, agian. Baimen horrekin, kontaktuen datuak gorde ditzakete aplikazioek, eta baliteke asmo txarreko aplikazioek zuk jakin gabe partekatzea datu horiek." + "Android TV gailuan gordetako kontaktuei buruzko datuak irakurtzeko baimena ematen dio aplikazioari. Kontaktuak sortu dituzten Android TV gailuko kontuak ere atzitu ahalko dituzte aplikazioek. Horrek barnean hartuko ditu instalatutako aplikazioek sortutako kontuak, agian. Baimen horrekin, kontaktuen datuak gorde ditzakete aplikazioek, eta baliteke asmo txarreko aplikazioek zuk jakin gabe partekatzea datu horiek." + "Telefonoan gordetako kontaktuei buruzko datuak irakurtzeko baimena ematen dio aplikazioari. Kontaktuak sortu dituzten telefonoko kontuak ere atzitu ahalko dituzte aplikazioek. Horrek barnean hartuko ditu instalatutako aplikazioek sortutako kontuak, agian. Baimen horrekin, kontaktuen datuak gorde ditzakete aplikazioek, eta baliteke asmo txarreko aplikazioek zuk jakin gabe partekatzea datu horiek." "aldatu kontaktuak" "Tabletan gordetako kontaktuei buruzko datuak aldatzeko baimena ematen dio aplikazioari. Baimen horrekin, aplikazioek kontaktuen datuak ezaba ditzakete." "Android TV gailuan gordetako kontaktuei buruzko datuak aldatzeko baimena ematen dio aplikazioari. Baimen horrekin, aplikazioek kontaktuen datuak ezaba ditzakete." @@ -406,9 +406,9 @@ "irakurri deien erregistroa" "Aplikazioak deien historia irakur dezake." "idatzi deien erregistroan" - "Tabletaren deien erregistroa aldatzeko baimena ematen die aplikazioei, sarrerako eta irteerako deiei buruzko datuak barne. Aplikazio gaiztoek deien erregistroa ezabatzeko edo aldatzeko erabil dezakete." - "Android TV gailuko deien erregistroa aldatzeko baimena ematen die aplikazioei, jasotako eta egindako deiei buruzko datuak barne. Baliteke aplikazio gaiztoek deien erregistroa ezabatzea edo aldatzea." - "Telefonoaren deien erregistroa aldatzeko baimena ematen die aplikazioei, sarrerako eta irteerako deiei buruzko datuak barne. Aplikazio gaiztoek deien erregistroa ezabatzeko edo aldatzeko erabil dezakete." + "Tabletaren deien erregistroa aldatzeko baimena ematen die aplikazioei, sarrerako eta irteerako deiei buruzko datuak barne. Asmo txarreko aplikazioek deien erregistroa ezabatzeko edo aldatzeko erabil dezakete." + "Android TV gailuko deien erregistroa aldatzeko baimena ematen die aplikazioei, jasotako eta egindako deiei buruzko datuak barne. Baliteke asmo txarreko aplikazioek deien erregistroa ezabatzea edo aldatzea." + "Telefonoaren deien erregistroa aldatzeko baimena ematen die aplikazioei, sarrerako eta irteerako deiei buruzko datuak barne. Asmo txarreko aplikazioek deien erregistroa ezabatzeko edo aldatzeko erabil dezakete." "Atzitu gorputzaren sentsoreak (adibidez, bihotz-maiztasunarenak)" "Zure egoera fisikoa kontrolatzen duten sentsoreetako datuak (adibidez, bihotz-maiztasuna) atzitzeko baimena ematen die aplikazioei." "irakurri egutegiko gertaerak eta xehetasunak" @@ -433,11 +433,11 @@ "Aplikazioak edonoiz erabil dezake mikrofonoa audioa grabatzeko." "bidali aginduak SIM txartelera" "SIM txartelera aginduak bidaltzeko aukera ematen die aplikazioei. Oso arriskutsua da." - "hauteman ariketa fisikoa" - "Aplikazioak ariketa fisikoa hauteman dezake." + "hauteman jarduera fisiko" + "Aplikazioak jarduera fisiko hauteman dezake." "atera argazkiak eta grabatu bideoak" "Aplikazioak edonoiz erabil dezake kamera argazkiak ateratzeko eta bideoak grabatzeko." - "onartu aplikazio edo zerbitzu bati sistemako kamerak atzitzea argazkiak eta bideoak ateratzeko" + "eman sistemako kamerak atzitzeko baimena aplikazio edo zerbitzu bati argazkiak ateratzeko eta bideoak grabatzeko" "Pribilegioa duen edo sistemakoa den aplikazio honek edonoiz erabil dezake kamera argazkiak ateratzeko eta bideoak grabatzeko. Halaber, android.permission.CAMERA baimena izan behar du aplikazioak." "eman jakinarazpenak jasotzeko baimena aplikazioari edo zerbitzuari kamerak ireki edo ixten direnean." "Kamera ireki edo itxi dela (eta zer aplikaziorekin) dioten jakinarazpenak jaso ditzake aplikazio honek." @@ -445,7 +445,7 @@ "Bibragailua kontrolatzeko aukera ematen die aplikazioei." "Dardara-egoera atzitzeko baimena ematen dio aplikazioari." "deitu zuzenean telefono-zenbakietara" - "Telefono-zenbakietara zuk esku hartu gabe deitzeko baimena ematen die aplikazioei. Horrela, ustekabeko gastuak edo deiak eragin daitezke. Aplikazio gaiztoek erabil dezakete zuk berretsi gabeko deiak eginda gastuak eragiteko." + "Telefono-zenbakietara zuk esku hartu gabe deitzeko baimena ematen die aplikazioei. Horrela, ustekabeko gastuak edo deiak eragin daitezke. Asmo txarreko aplikazioek erabil dezakete zuk berretsi gabeko deiak eginda gastuak eragiteko." "atzitu IMS dei-zerbitzua" "Zuk ezer egin beharrik gabe deiak egiteko IMS zerbitzua erabiltzeko baimena ematen die aplikazioei." "irakurri telefonoaren egoera eta identitatea" @@ -658,7 +658,7 @@ "atzitu DRM ziurtagiriak" "DRM ziurtagiriak hornitzea eta erabiltzeko baimena ematen die aplikazioei. Aplikazio normalek ez lukete beharko." "Jaso Android Beam transferentzien egoera" - "Uneko Android Beam transferentziei buruzko informazioa jasotzeko baimena ematen die aplikazioei" + "Oraingo Android Beam transferentziei buruzko informazioa jasotzeko baimena ematen die aplikazioei" "kendu DRM ziurtagiriak" "DRM ziurtagiriak kentzea baimentzen die aplikazioei. Aplikazio normalek ez lukete beharko." "lotu operadorearen mezularitza-zerbitzuari" @@ -961,7 +961,7 @@ "gehitu erantzungailua" "Erantzungailuko sarrera-ontzian mezuak gehitzeko baimena ematen die aplikazioei." "aldatu arakatzailearen geokokapenaren baimenak" - "Arakatzailearen geokokapenaren baimenak aldatzeko baimena ematen die aplikazioei. Aplikazio gaiztoek hori erabil dezakete kokapenari buruzko informazioa haiek hautatutako webguneetara bidaltzeko." + "Arakatzailearen geokokapenaren baimenak aldatzeko baimena ematen die aplikazioei. Asmo txarreko aplikazioek hori erabil dezakete kokapenari buruzko informazioa haiek hautatutako webguneetara bidaltzeko." "Arakatzaileak pasahitza gogoratzea nahi duzu?" "Ez une honetan" "Gogoratu" @@ -1179,11 +1179,11 @@ "Eskala" "Erakutsi beti" "Gaitu hori berriro Sistemaren ezarpenak > Aplikazioak > Deskargatutakoak." - "%1$s aplikazioak ez du onartzen uneko pantailaren tamaina eta espero ez bezala joka lezake." + "%1$s aplikazioak ez du onartzen pantailaren tamaina, eta baliteke espero ez bezala jokatzea." "Erakutsi beti" "Android sistema eragilearen bertsio bateraezin baterako dago egina %1$s; beraz, espero ez bezala funtziona lezake. Baliteke aplikazioaren bertsio eguneratuago bat eskuragarri egotea." "Erakutsi beti" - "Bilatu eguneratzea" + "Bilatu eguneratzeak" "%1$s aplikazioak (%2$s prozesua) berak aplikatutako StrictMode gidalerroa urratu du." "%1$s prozesuak bere kabuz ezarritako StrictMode gidalerroak urratu ditu." "Telefonoa eguneratzen ari da…" @@ -1203,15 +1203,15 @@ "%1$s abian da" "Sakatu jokora itzultzeko" "Aukeratu joko bat" - "Funtzionamendu hobea izateko, joko hauetako bat baino ezin da egon irekita aldi berean." + "Errendimendu hobea izateko, joko hauetako bat baino ezin da egon irekita aldi berean." "Itzuli %1$s aplikaziora" "Ireki %1$s" "Gorde gabe itxiko da %1$s" "%1$s prozesuak memoria-muga gainditu du" "Prest dago %1$s memoria-iraulketaren txostena" - "Sortu da uneko memoria-iraulketaren txostena. Sakatu partekatzeko." - "Uneko memoria-iraulketaren txostena partekatu nahi duzu?" - "%1$s prozesuak memoria-muga (%2$s) gainditu du. Uneko memoria-iraulketaren txostena sortu da, garatzailearekin parteka dezazun. Kontuz: baliteke txosten horrek aplikazioak atzi dezakeen informazio pertsonala izatea." + "Sortu da memoria-iraulketaren txostena. Sakatu partekatzeko." + "Memoria-iraulketaren txostena partekatu nahi duzu?" + "%1$s prozesuak memoria-muga (%2$s) gainditu du. Memoria-iraulketaren txostena sortu da, garatzailearekin parteka dezazun. Kontuz: baliteke txosten horrek aplikazioak atzi dezakeen informazio pertsonala izatea." "%1$s prozesuak bere memoria-muga (%2$s) gainditu du. Memoria-iraulketaren txosten bat duzu erabilgarri, hura partekatu nahi baduzu ere. Kontuz: baliteke txosten horrek prozesuak atzi dezakeen kontuzko informazio pertsonala izatea eta datu horien barnean zuk idatzitakoak egotea, besteak beste." "%1$s prozesuaren memoria-iraulketaren txosten bat duzu erabilgarri, hura partekatu nahi baduzu ere. Kontuz: baliteke txosten horrek prozesuak atzi dezakeen kontuzko informazio pertsonala izatea eta datu horien barnean zuk idatzitakoak egotea, besteak beste." "Aukeratu testurako ekintza" @@ -1315,7 +1315,7 @@ "Proba-materialeko modua gaitu da" "Proba-materialaren modua desgaitzeko, berrezarri jatorrizko datuak." "Serie-kontsola gaituta" - "Funtzionamenduari eragiten dio. Desgaitzeko, joan abiarazlera." + "Errendimenduari eragiten dio. Desgaitzeko, joan abiarazlera." "Likidoa edo zikinkeriak daude USB atakan" "USB ataka automatikoki desgaitu da. Informazio gehiago lortzeko, sakatu hau." "Erabiltzeko moduan dago USB ataka" @@ -1339,7 +1339,7 @@ "Ez baduzu nahi %s zerbitzuak eginbide hori erabiltzea, sakatu hau ezarpenak ireki eta aukera desaktibatzeko." "Desaktibatu" "%s egiaztatzen…" - "Uneko edukia berrikusten" + "Edukia berrikusten" "Euskarri berria: %s" "%s ez da funtzionatzen ari" "Sakatu konfiguratzeko" @@ -1574,7 +1574,7 @@ "Pantaila integratua" "HDMI pantaila" "%1$d. gainjartzea" - "%1$s: %2$d x %3$d, %4$d dpi" + "%1$s: %2$d × %3$d, %4$d dpi" ", segurua" "Eredua ahaztu zaizu" "Eredu okerra" @@ -1623,7 +1623,7 @@ "Erabilerraztasun-lasterbidea erabili nahi duzu?" "Lasterbidea aktibatuta dagoenean, bi bolumen-botoiak hiru segundoz sakatuta abiaraziko da erabilerraztasun-eginbidea." "Erabilerraztasun-eginbideak aktibatu nahi dituzu?" - "Eduki sakatuta bolumen-botoiak segundo batzuez erabilerraztasun-eginbideak aktibatzeko. Hori eginez gero, baliteke zure mugikorraren funtzionamendua aldatzea.\n\nUneko eginbideak:\n%1$s\nHautatutako eginbideak aldatzeko, joan Ezarpenak > Erabilerraztasuna atalera." + "Eduki sakatuta bolumen-botoiak segundo batzuez erabilerraztasun-eginbideak aktibatzeko. Hori eginez gero, baliteke zure mugikorraren funtzionamendua aldatzea.\n\nEginbideak:\n%1$s\nHautatutako eginbideak aldatzeko, joan Ezarpenak > Erabilerraztasuna atalera." " • %1$s\n" "%1$s aktibatu nahi duzu?" "Eduki sakatuta bolumen-botoiak segundo batzuez %1$s izeneko erabilerraztasun-eginbidea aktibatzeko. Honen bidez, baliteke zure mugikorraren funtzionamendua aldatzea.\n\nLasterbide hau beste eginbide batengatik aldatzeko, joan Ezarpenak > Erabilerraztasuna atalera." @@ -1660,8 +1660,8 @@ "Eginbide batetik bestera aldatzeko, pasatu bi hatz pantailaren behealdetik gora eta eduki sakatuta une batez." "Eginbide batetik bestera aldatzeko, pasatu hiru hatz pantailaren behealdetik gora eta eduki sakatuta une batez." "Lupa" - "Uneko erabiltzailea: %1$s." - "%1$s erabiltzailera aldatzen…" + "Erabiltzailea: %1$s." + "\"%1$s\" erabiltzailera aldatzen…" "%1$s erabiltzailearen saioa amaitzen…" "Jabea" "Errorea" @@ -1760,7 +1760,7 @@ "Idatzi administratzailearen PIN kodea" "Idatzi PINa" "Okerra" - "Uneko PINa" + "Oraingo PINa" "PIN berria" "Berretsi PIN berria" "Konfiguratu debekuak aldatu ahal izateko idatzi beharko den PIN kodea" diff --git a/core/res/res/values-fa/strings.xml b/core/res/res/values-fa/strings.xml index 03a1456d00c..3dd8173ae4e 100644 --- a/core/res/res/values-fa/strings.xml +++ b/core/res/res/values-fa/strings.xml @@ -997,7 +997,7 @@ %d روز قبل "ماه گذشته" - "قدیمی تر" + "قدیمی‌تر" "در %s" "در %s" "در %s" @@ -1423,7 +1423,7 @@ "شنونده اعلان" "‏شنونده VR" "ارائه‌دهنده وضعیت" - "سرویس رتبه‌بندی اعلان" + "سرویس رده‌بندی اعلان" "‏VPN فعال شد" "‏VPN را %s فعال کرده است" "برای مدیریت شبکه ضربه بزنید." @@ -1625,7 +1625,7 @@ "ویژگی‌های دسترس‌پذیری روشن شود؟" "با پایین نگه داشتن هردو کلید میزان صدا به‌مدت چند ثانیه، ویژگی‌های دسترس‌پذیری روشن می‌شود. با این کار نحوه عملکرد دستگاهتان تغییر می‌کند.\n\nویژگی‌های فعلی:\n%1$s\nمی‌توانید ویژگی‌های انتخابی را در «تنظیمات > دسترس‌پذیری» تغییر دهید." " • %1$s\n" - "%1$s روشن شود؟" + "سرویس %1$s روشن شود؟" "با پایین نگه داشتن هردو کلید میزان صدا به‌مدت چند ثانیه، %1$s (یکی از ویژگی‌های دسترس‌پذیری) روشن می‌شود. با این کار نحوه عملکرد دستگاهتان تغییر می‌کند.\n\nمی‌توانید در «تنظیمات > دسترس‌پذیری»،‌این میان‌بر را به ویژگی دیگری تغییر دهید." "روشن شود" "روشن نشود" diff --git a/core/res/res/values-fr-rCA/strings.xml b/core/res/res/values-fr-rCA/strings.xml index 29fe1364f1f..8002080a100 100644 --- a/core/res/res/values-fr-rCA/strings.xml +++ b/core/res/res/values-fr-rCA/strings.xml @@ -854,7 +854,7 @@ "Appels d\'urgence uniquement" "Réseau verrouillé" "La carte SIM est verrouillée par clé PUK." - "Veuillez consulter le guide utilisateur ou contacter le service à la clientèle." + "Veuillez consulter le guide d\'utilisation ou contacter le service à la clientèle." "La carte SIM est verrouillée." "Déverrouillage de la carte SIM en cours…" "Vous avez dessiné un schéma de déverrouillage incorrect à %1$d reprises.\n\nVeuillez réessayer dans %2$d secondes." @@ -1661,7 +1661,7 @@ "Pour basculer entre les fonctionnalités, balayez l\'écran vers le haut avec trois doigts et maintenez-les-y." "Zoom" "Utilisateur actuel : %1$s" - "Changement d\'utilisateur (%1$s) en cours…" + "Passage au profil : %1$s…" "Déconnexion de %1$s en cours..." "Propriétaire" "Erreur" diff --git a/core/res/res/values-fr/strings.xml b/core/res/res/values-fr/strings.xml index a5b1626aa40..7d777542e6f 100644 --- a/core/res/res/values-fr/strings.xml +++ b/core/res/res/values-fr/strings.xml @@ -1661,7 +1661,7 @@ "Pour changer de fonctionnalité, balayez l\'écran vers le haut avec trois doigts et appuyez de manière prolongée." "Agrandissement" "Utilisateur actuel : %1$s" - "Chargement du profil de %1$s..." + "Passage au profil : %1$s..." "Déconnexion de %1$s…" "Propriétaire" "Erreur" @@ -2036,7 +2036,7 @@ "Retour" "Applications récentes" "Notifications" - "Configuration rapide" + "Réglages rapides" "Boîte de dialogue Marche/Arrêt" "Verrouiller l\'écran" "Capture d\'écran" diff --git a/core/res/res/values-gu/strings.xml b/core/res/res/values-gu/strings.xml index 55e462c8257..758b2a01463 100644 --- a/core/res/res/values-gu/strings.xml +++ b/core/res/res/values-gu/strings.xml @@ -100,7 +100,7 @@ "પીઅરે TTY મોડ HCO ની વિનંતી કરી" "પીઅરે TTY મોડ VCO ની વિનંતી કરી" "પીઅરે TTY મોડ બંધ કરવાની વિનંતી કરી" - "અવાજ" + "Voice" "ડેટા" "ફેક્સ" "SMS" @@ -350,7 +350,7 @@ "સેલ બ્રોડકાસ્ટ સંદેશા ફૉરવર્ડ કરો" "સેલ બ્રોડકાસ્ટ સંદેશા પ્રાપ્ત થાય કે તરત ફૉરવર્ડ કરવા માટે સેલ બ્રોડકાસ્ટ મૉડ્યૂલ સાથે પ્રતિબદ્ધ થવા બાબતે ઍપને મંજૂરી આપે છે. તમને કટોકટીની પરિસ્થિતિની ચેતવણી આપવા માટે સેલ બ્રોડકાસ્ટ અલર્ટ અમુક સ્થાનોમાં ડિલિવર કરવામાં આવે છે. કટોકટી અંગેનો સેલ બ્રોડકાસ્ટ પ્રાપ્ત થાય, ત્યારે દુર્ભાવનાપૂર્ણ ઍપ તમારા ડિવાઇસના કાર્યપ્રદર્શન અથવા ઑપરેશનમાં વિક્ષેપ પાડે તેમ બની શકે છે." "સેલ બ્રોડકાસ્ટ સંદેશા વાંચો" - "એપ્લિકેશનને તમારા ઉપકરણ દ્વારા પ્રાપ્ત થયેલ સેલ બ્રોડકાસ્ટ સંદેશાને વાંચવાની મંજૂરી આપે છે. સેલ બ્રોડકાસ્ટ ચેતવણીઓ તમને કટોકટીની સ્થિતિઓ અંગે ચેતવવા માટે કેટલાક સ્થાનોમાં વિતરિત થાય છે. જ્યારે કટોકટીનો સેલ બ્રોડકાસ્ટ પ્રાપ્ત થાય ત્યારે દુર્ભાવનાપૂર્ણ ઍપ્લિકેશનો તમારા ઉપકરણના પ્રદર્શન અથવા ઓપરેશનમાં હસ્તક્ષેપ કરી શકે છે." + "ઍપ તમારા ડિવાઇસ દ્વારા પ્રાપ્ત થયેલ સેલ બ્રોડકાસ્ટ સંદેશાને વાંચવાની મંજૂરી આપે છે. સેલ બ્રોડકાસ્ટ ચેતવણીઓ તમને ઇમર્જન્સીની સ્થિતિઓ અંગે ચેતવવા માટે કેટલાક સ્થાનોમાં વિતરિત થાય છે. જ્યારે ઇમર્જન્સીનો સેલ બ્રોડકાસ્ટ પ્રાપ્ત થાય ત્યારે દુર્ભાવનાપૂર્ણ ઍપ તમારા ડિવાઇસના કાર્યપ્રદર્શન અથવા ઓપરેશનમાં હસ્તક્ષેપ કરી શકે છે." "સબ્સ્ક્રાઇબ કરેલ ફીડ્સ વાંચો" "એપ્લિકેશનને હાલમાં સમન્વયિત ફીડ્સ વિશે વિગતો મેળવવાની મંજૂરી આપે છે." "SMS સંદેશા મોકલો અને જુઓ" @@ -637,7 +637,7 @@ "એપ્લિકેશનને કૉલમાં વપરાશકર્તા અનુભવ પ્રદાન કરવાની મંજૂરી આપે છે." "ઐતિહાસિક નેટવર્ક ઉપયોગ વાંચો" "એપ્લિકેશનને ચોક્કસ નેટવર્ક્સ અને ઍપ્લિકેશનો માટે ઐતિહાસિક નેટવર્ક વપરાશ વાંચવાની મંજૂરી આપે છે." - "નેટવર્ક નીતિ મેનેજ કરો" + "નેટવર્ક પૉલિસી મેનેજ કરો" "ઍપને નેટવર્ક નીતિઓ મેનેજ કરવાની અને ઍપ-વિશિષ્ટ નિયમો નિર્ધારિત કરવાની મંજૂરી આપે છે." "નેટવર્ક વપરાશ એકાઉન્ટિંગ સંશોધિત કરો" "એપ્લિકેશનને કેવી રીતે ઍપ્લિકેશનો સામે નેટવર્ક વપરાશ ગણવામાં આવે છે તે સંશોધિત કરવાની મંજૂરી આપે છે. સામાન્ય ઍપ્લિકેશનો દ્વારા ઉપયોગમાં લેવા માટે નથી." @@ -691,7 +691,7 @@ "ચેતવણી વિના આ Android TV ડિવાઇસ પર રહેલો આ વપરાશકર્તાનો ડેટા કાઢી નાખો." "ચેતવણી વિના આ ફોન પરનો આ વપરાશકર્તાનો ડેટા કાઢી નાખો." "ઉપકરણ વૈશ્વિક પ્રોક્સી સેટ કરો" - "નીતિ સક્ષમ હોય તે વખતે ઉપયોગ કરવા માટેના ઉપકરણ વૈશ્વિક પ્રોક્સીને સેટ કરો. ફક્ત ઉપકરણના માલિક વૈશ્વિક પ્રોક્સી સેટ કરી શકે છે." + "પૉલિસી સક્ષમ હોય તે વખતે ઉપયોગ કરવા માટેના ડિવાઇસ વૈશ્વિક પ્રોક્સીને સેટ કરો. ફક્ત ડિવાઇસના માલિક વૈશ્વિક પ્રોક્સી સેટ કરી શકે છે." "સ્ક્રીન લૉક પાસવર્ડ સમાપ્તિ સેટ કરો" "કેટલા સમયાંતરે સ્ક્રીન લૉક પાસવર્ડ, પિન અથવા પૅટર્ન બદલવો આવશ્યક છે, તેને બદલો." "સંગ્રહ એન્ક્રિપ્શન સેટ કરો" @@ -1306,7 +1306,7 @@ "કનેક્ટ કરેલ ઉપકરણ ચાર્જ થઈ રહ્યું છે. વધુ વિકલ્પો માટે ટૅપ કરો." "એનાલોગ ઑડિઓ ઍક્સેસરી મળી" "જોડેલ ઉપકરણ આ ફોન સાથે સુસંગત નથી. વધુ જાણવા માટે ટૅપ કરો." - "USB ડીબગિંગ કનેક્ટ થયું." + "USB ડિબગીંગ કનેક્ટ થયું." "USB ડિબગીંગ બંધ કરવા માટે ટૅપ કરો" "USB ડિબગીંગને અક્ષમ કરવા માટે પસંદ કરો." "વાયરલેસ ડિબગીંગ કનેક્ટ કરો" diff --git a/core/res/res/values-hi/strings.xml b/core/res/res/values-hi/strings.xml index 7d48ce034db..7fdbb8a6098 100644 --- a/core/res/res/values-hi/strings.xml +++ b/core/res/res/values-hi/strings.xml @@ -100,7 +100,7 @@ "पीयर ने टेलीटाइपराइटर (TTY) मोड एचसीओ (HCO) का अनुरोध किया" "पीयर ने टेलीटाइपराइटर (TTY) मोड वीसीओ (VCO) का अनुरोध किया" "पीयर ने टेलीटाइपराइटर (TTY) मोड बंद का अनुरोध किया" - "आवाज़" + "Voice" "डेटा" "फ़ैक्स" "मैसेज (एसएमएस)" @@ -295,7 +295,7 @@ "प्रोफ़ाइल बदलकर वर्क प्रोफ़ाइल पर जाएं" "संपर्क" "अपने संपर्कों को ऐक्सेस करने की" - "जगह" + "जगह की जानकारी" "इस डिवाइस की जगह तक पहुंचने दें" "कैलेंडर" "अपने कैलेंडर को ऐक्सेस करने" @@ -1153,7 +1153,7 @@ "सिस्‍टम सेटिंग और डाउनलोड किए गए ऐप में डिफ़ॉल्‍ट साफ़ करें." "कोई कार्रवाई चुनें" "USB डिवाइस के लिए कोई ऐप्स चुनें" - "कोई भी ऐप्स यह कार्यवाही नहीं कर सकता." + "कोई भी ऐप्लिकेशन यह कार्रवाई नहीं कर सकता." "%1$s रुक गया है" "%1$s रुक गई है" "%1$s रुक रहा है" @@ -1326,7 +1326,7 @@ "आपके एडमिन ने इस डिवाइस की समस्या को हल करने में सहायता के लिए एक गड़बड़ी की रिपोर्ट का अनुरोध किया है. ऐप्लिकेशन और डेटा शेयर किए जा सकते हैं." "शेयर करें" "अस्वीकार करें" - "इनपुट पद्धति चुनें" + "इनपुट का तरीका चुनें" "सामान्य कीबोर्ड के सक्रिय होने के दौरान इसे स्‍क्रीन पर बनाए रखें" "वर्चुअल कीबोर्ड दिखाएं" "सामान्य कीबोर्ड कॉन्फ़िगर करें" @@ -1618,7 +1618,7 @@ "आपने अपना लॉक खोलने का पैटर्न %1$d बार गलत तरीके से बनाया है. %2$d और गलत प्रयासों के बाद, आपसे अपने Android TV डिवाइस को अपने ईमेल खाते का इस्तेमाल करके अनलॉक करने के लिए कहा जाएगा.\n\n %3$d सेकंड बाद प्रयास करें." "आपने अपने अनलॉक आकार को %1$d बार गलत तरीके से आरेखित किया है. %2$d और असफल प्रयासों के बाद, आपसे अपने फ़ोन को किसी ईमेल खाते का उपयोग करके अनलॉक करने के लिए कहा जाएगा.\n\n %3$d सेकंड में फिर से प्रयास करें." " — " - "निकालें" + "हटाएं" "वॉल्यूम को सुझाए गए स्तर से ऊपर बढ़ाएं?\n\nअत्यधिक वॉल्यूम पर ज़्यादा समय तक सुनने से आपकी सुनने की क्षमता को नुकसान हो सकता है." "सुलभता शॉर्टकट का इस्तेमाल करना चाहते हैं?" "शॉर्टकट के चालू होने पर, दाेनाें वॉल्यूम बटन (आवाज़ कम या ज़्यादा करने वाले बटन) को तीन सेकंड तक दबाने से, सुलभता सुविधा शुरू हाे जाएगी." diff --git a/core/res/res/values-hr/strings.xml b/core/res/res/values-hr/strings.xml index d0ad16e93f9..5d4905fb568 100644 --- a/core/res/res/values-hr/strings.xml +++ b/core/res/res/values-hr/strings.xml @@ -71,7 +71,7 @@ "Trostrani poziv" "Odbijanje neželjenih i neugodnih poziva" "Isporuka pozivnog broja" - "Ne ometaj" + "Ne uznemiravaj" "Zadana postavka ID-a pozivatelja ima ograničenje. Sljedeći poziv: Ograničen" "Zadana postavka ID-a pozivatelja ima ograničenje. Sljedeći poziv: Nije ograničen" "Zadana postavka ID-a pozivatelja nema ograničenje. Sljedeći poziv: Ograničen" @@ -668,8 +668,8 @@ "Omogućuje nositelju povezivanje sa sučeljem najviše razine usluge mobilnog operatera za slanje poruka. Ne bi trebalo biti potrebno za uobičajene aplikacije." "povezivanje s uslugama mobilnog operatera" "Nositelju omogućuje povezivanje s uslugama mobilnog operatera. Ne bi trebalo biti potrebno za uobičajene aplikacije." - "pristupi opciji Ne ometaj" - "Omogućuje aplikaciji čitanje i pisanje konfiguracije opcije Ne ometaj." + "pristupi opciji Ne uznemiravaj" + "Omogućuje aplikaciji čitanje i pisanje konfiguracije opcije Ne uznemiravaj." "pokrenuti upotrebu dopuštenja za pregled" "Dopušta nositelju pokretanje upotrebe dopuštenja za aplikaciju. Ne bi smjelo biti potrebno za uobičajene aplikacije." "Postavi pravila zaporke" @@ -1327,7 +1327,7 @@ "Otkriven je analogni audiododatak" "Priključeni uređaj nije kompatibilan s ovim telefonom. Dodirnite da biste saznali više." "Priključen je alat za otklanjanje pogrešaka putem USB-a" - "Dodirnite da isključite otklanjanje pogrešaka putem USB-a" + "Dodirnite da isključite otkl. pogrešaka putem USB-a" "Odaberite da biste onemogućili rješavanje programske pogreške na USB-u." "Bežično otklanjanje pogrešaka povezano" "Dodirnite da biste isključili bežično otklanjanje pogrešaka" @@ -1863,10 +1863,10 @@ "Do %1$s" "Do %1$s (sljedeći alarm)" "Dok ne isključite" - "Dok ne isključite \"Ne ometaj\"" + "Dok ne isključite \"Ne uznemiravaj\"" "%1$s/%2$s" "Sažmi" - "Ne ometaj" + "Ne uznemiravaj" "Prekid rada" "Noć radnog dana" "Vikend" diff --git a/core/res/res/values-hu/strings.xml b/core/res/res/values-hu/strings.xml index 34e1db5ef4c..4492eec7d8b 100644 --- a/core/res/res/values-hu/strings.xml +++ b/core/res/res/values-hu/strings.xml @@ -1785,7 +1785,7 @@ "Munkahelyi %1$s" "2. munkahelyi %1$s" "3. munkahelyi %1$s" - "PIN-kód kérése a rögzítés feloldásához" + "PIN-kód kérése a kitűzés feloldásához" "Feloldási minta kérése a rögzítés feloldásához" "Jelszó kérése a rögzítés feloldásához" "A rendszergazda által telepítve" diff --git a/core/res/res/values-hy/strings.xml b/core/res/res/values-hy/strings.xml index da83ae5ef6f..2288e68d7b1 100644 --- a/core/res/res/values-hy/strings.xml +++ b/core/res/res/values-hy/strings.xml @@ -1421,7 +1421,7 @@ "Պաստառ" "Փոխել պաստառը" "Ծանուցման ունկնդիր" - "VR ունկնդրիչ" + "VR ունկնիր" "Պայմանների մատակարար" "Ծանուցումների դասակարգման ծառայություն" "VPN-ը ակտիվացված է" @@ -1661,7 +1661,7 @@ "Մի գործառույթից մյուսին անցնելու համար երեք մատը սահեցրեք վերև և պահեք։" "Խոշորացում" "Ներկայիս օգտատերը %1$s:" - "Փոխարկվում է %1$s-ին..." + "Անցում հետևյալ պրոֆիլին՝ %1$s..." "Ելք %1$s-ից…" "Սեփականատեր" "Սխալ" diff --git a/core/res/res/values-in/strings.xml b/core/res/res/values-in/strings.xml index b72ffe219a0..12d479d95e8 100644 --- a/core/res/res/values-in/strings.xml +++ b/core/res/res/values-in/strings.xml @@ -318,7 +318,7 @@ "Mengambil konten jendela" "Memeriksa konten jendela tempat Anda berinteraksi." "Mengaktifkan Jelajahi dengan Sentuhan" - "Item yang diketuk akan diucapkan dengan jelas dan layar dapat dijelajahi menggunakan isyarat." + "Item yang diketuk akan diucapkan dengan jelas dan layar dapat dijelajahi menggunakan gestur." "Mengamati teks yang Anda ketik" "Meliputi data pribadi seperti nomor kartu kredit dan sandi." "Mengontrol perbesaran layar" @@ -1900,10 +1900,10 @@ "Ketuk untuk membuka kunci profil kerja" "Terhubung ke %1$s" "Ketuk untuk melihat file" - "Pasang pin" - "Pasang pin %1$s" + "Sematkan" + "Sematkan %1$s" "Lepas pin" - "Lepas pin %1$s" + "Lepas sematan %1$s" "Info aplikasi" "−%1$s" "Memulai demo..." diff --git a/core/res/res/values-iw/strings.xml b/core/res/res/values-iw/strings.xml index 00e3d60d947..757041c4d39 100644 --- a/core/res/res/values-iw/strings.xml +++ b/core/res/res/values-iw/strings.xml @@ -34,7 +34,7 @@ "MSISDN1" "‏בעיה בחיבור או קוד MMI לא חוקי." "הפעולה מוגבלת למספרי חיוג קבועים בלבד." - "לא ניתן לשנות את הגדרות העברת השיחות מהטלפון שלך כשאתה במצב נדידה." + "לא ניתן לשנות את הגדרות העברת השיחות מהטלפון במצב נדידה." "השירות הופעל." "השירות הופעל עבור:" "השירות הושבת." @@ -45,11 +45,11 @@ "קוד הגישה הישן שהקלדת שגוי." "‏ה-PUK שהקלדת שגוי." "קודי הגישה שהקלדת לא תואמים." - "הקלד קוד גישה שאורכו 4 עד 8 ספרות." + "יש להקליד קוד אימות שאורכו 4 עד 8 ספרות." "‏הקלד PUK באורך 8 מספרים או יותר." - "‏כרטיס ה-SIM נעול באמצעות PUK. הקלד את קוד PUK כדי לבטל את נעילתו." - "‏הקלד PUK2 כדי לבטל את חסימת כרטיס ה-SIM." - "‏לא הצלחת. הפעל נעילת SIM/RUIM." + "‏כרטיס ה-SIM נעול באמצעות PUK. יש להקליד את קוד ה-PUK כדי לבטל את הנעילה." + "‏יש להקליד PUK2 כדי לבטל את חסימת כרטיס ה-SIM." + "‏לא הצלחת. יש להפעיל נעילת SIM/RUIM." ‏נותרו לך %d ניסיונות לפני נעילת כרטיס ה-SIM. ‏נותרו לך %d ניסיונות לפני נעילת כרטיס ה-SIM. @@ -70,12 +70,12 @@ "מספר מתקשר נמצא" "מספר מתקשר חסוי" "שיחה עם שלושה משתתפים" - "דחייה של שיחות מטרידות לא רצויות" - "מסירת מספר מתקשר" + "דחיית שיחות מטרידות ולא רצויות" + "שליחת מספר מתקשר" "נא לא להפריע" - "זיהוי מתקשר עובר כברירת מחדל למצב מוגבל. השיחה הבאה: מוגבלת" + "השירות \'שיחה מזוהה\' עובר כברירת מחדל למצב מוגבל. השיחה הבאה: מוגבלת" "זיהוי מתקשר עובר כברירת מחדל למצב מוגבל. השיחה הבאה: לא מוגבלת" - "זיהוי מתקשר עובר כברירת מחדל למצב לא מוגבל. השיחה הבאה: מוגבלת" + "שירות \'שיחה מזוהה\' עובר כברירת מחדל למצב לא מוגבל. השיחה הבאה: מוגבלת" "זיהוי מתקשר עובר כברירת מחדל למצב לא מוגבל. השיחה הבאה: לא מוגבלת" "השירות לא הוקצה." "אינך יכול לשנות את הגדרת זיהוי המתקשר." @@ -84,9 +84,9 @@ "אין אפשרות לבצע שיחות רגילות" "אין שירות קולי או שיחות חירום" "הושבת באופן זמני על ידי הספק" - "‏הושבת באופן זמני על ידי הספק עבור SIM %d" + "‏השירות הושבת באופן זמני על ידי הספק עבור SIM‏ %d" "לא ניתן להתחבר לרשת הסלולרית" - "יש לנסות לשנות את הרשת המועדפת. ניתן להקיש כדי לשנות." + "אפשר לנסות לשנות את הרשת המועדפת. יש להקיש כדי לשנות אותה." "שיחות חירום לא זמינות" "‏לא ניתן לבצע שיחות חירום דרך Wi-Fi" "התראות" @@ -123,10 +123,10 @@ "נדידה - פונקציונליות חלקית של שירות" "מודעת באנר נודדת מופעלת" "מודעת באנר נודדת כבויה" - "מחפש שירות" - "‏לא ניתן היה להגדיר שיחות Wi-Fi" + "המערכת מחפשת שירות" + "‏לא ניתן היה להגדיר את התכונה \'שיחות Wi-Fi\'" - "‏כדי להתקשר ולשלוח הודעות ברשת Wi-Fi, תחילה יש לבקש מהספק להגדיר את השירות. לאחר מכן, יש להפעיל שוב שיחות Wi-Fi ב\'הגדרות\'. (קוד שגיאה: %1$s)" + "‏כדי להתקשר ולשלוח הודעות ברשת Wi-Fi, תחילה יש לבקש מהספק להגדיר את השירות. לאחר מכן, צריך להפעיל שוב שיחות Wi-Fi ב\'הגדרות\'. (קוד שגיאה: %1$s)" "‏אירעה בעיה ברישום שיחות Wi-Fi אצל הספק שלך: %1$s" @@ -150,24 +150,24 @@ "‏Wi-Fi בלבד" "{0}: ללא העברה" "{0}: {1}" - "{0}: {1} כעבור {2} שניות" + "{0}:‏ {1} אחרי {2} שניות" "{0}: ללא העברה" "{0}: ללא העברה" "קוד תכונה הושלם." "בעיה בחיבור או קוד תכונה לא תקין." "אישור" "אירעה שגיאת רשת." - "לא ניתן למצוא את כתובת האתר." + "‏לא ניתן למצוא את כתובת ה-URL." "סכימת אימות האתר אינה נתמכת." "האימות נכשל." "‏האימות דרך שרת ה-Proxy נכשל." "לא ניתן להתחבר לשרת." - "לא ניתן לתקשר עם השרת. נסה שוב מאוחר יותר." + "לא ניתן לתקשר עם השרת. אפשר לנסות שוב מאוחר יותר." "חלף הזמן הקצוב של החיבור לשרת." "הדף מכיל יותר מדי כתובות אתר להפניה מחדש של השרת." "הפרוטוקול אינו נתמך." "לא ניתן ליצור חיבור מאובטח." - "אין אפשרות לפתוח את הדף מכיוון שכתובת האתר אינה חוקית." + "‏אין אפשרות לפתוח את הדף מכיוון שכתובת ה-URL אינה חוקית." "לא ניתן לגשת לקובץ." "הקובץ המבוקש לא נמצא." "בקשות רבות מדי מעובדות. נסה שוב מאוחר יותר." @@ -175,38 +175,38 @@ "סנכרון" "לא ניתן לסנכרן" "נעשה ניסיון למחוק יותר מדי %s." - "שטח האחסון של הטאבלט מלא. מחק קבצים כדי לפנות מקום." + "נפח האחסון של הטאבלט מלא. צריך למחוק קבצים כדי לפנות מקום." "שטח האחסון של השעון מלא. מחק כמה קבצים כדי לפנות שטח." - "‏האחסון של מכשיר ה-Android TV מלא. יש למחוק חלק מהקבצים כדי לפנות שטח." - "שטח האחסון של הטלפון מלא. מחק חלק מהקבצים כדי לפנות שטח." + "‏האחסון של מכשיר ה-Android TV מלא. יש למחוק חלק מהקבצים כדי לפנות מקום." + "מקום האחסון של הטלפון מלא. אפשר למחוק חלק מהקבצים כדי לפנות מקום." רשויות אישורים הותקנו רשויות אישורים הותקנו רשויות אישורים הותקנו רשות אישורים הותקנה - "על ידי צד שלישי לא מוכר" + "על ידי צד שלישי לא ידוע" "על ידי המנהל של פרופיל העבודה שלך" "על ידי %s" "פרופיל העבודה נמחק" "אפליקציית הניהול של פרופיל העבודה חסרה או פגומה. כתוצאה מכך, פרופיל העבודה שלך נמחק, כולל כל הנתונים הקשורים אליו. לקבלת עזרה, פנה למנהל המערכת." "פרופיל העבודה שלך אינו זמין עוד במכשיר הזה" "בוצעו ניסיונות רבים מדי להזנת סיסמה" - "מנהל המערכת ביטל את המכשיר לצורכי שימוש אישי" + "מנהל המערכת ביטל את האפשרות לשימוש במכשיר לצרכים אישיים" "המכשיר מנוהל" - "הארגון שלך מנהל מכשיר זה ועשוי לנטר את התנועה ברשת. הקש לקבלת פרטים." + "הארגון שלך מנהל את המכשיר הזה והוא עשוי לנטר את התנועה ברשת. יש להקיש לקבלת פרטים." "לאפליקציות יש הרשאת גישה למיקום שלך" "‏יש לפנות למנהל ה-IT כדי לקבל מידע נוסף" "גלאי מדינה" "שירות מיקום" "שירות להתראות מחיישנים" - "שירות דמדומים" + "Twilight Service" "תתבצע מחיקה של המכשיר" "לא ניתן להשתמש באפליקציה של מנהל המערכת.\n\nאם יש לך שאלות, יש ליצור קשר עם מנהל המערכת של הארגון." "ההדפסה הושבתה על ידי %s." "הפעלה של פרופיל העבודה שלך" "האפליקציות שלך לשימוש אישי יהיו חסומות עד להפעלת פרופיל העבודה" - "‏אפליקציות לשימוש אישי ייחסמו ב-%1$s בשעה %2$s. מנהל ה-IT לא מתיר השבתה של יותר מ-%3$d ימים של פרופיל העבודה." + "‏אפליקציות לשימוש אישי ייחסמו ב-%1$s בשעה %2$s. מנהל ה-IT לא מתיר השבתה של פרופיל העבודה ליותר מ-%3$d ימים." "הפעלה" "אני" "אפשרויות טאבלט" @@ -214,7 +214,7 @@ "אפשרויות טלפון" "מצב שקט" "הפעל חיבור אלחוטי" - "כבה אלחוטי" + "כיבוי אלחוטי" "נעילת מסך" "כיבוי" "צלצול כבוי" @@ -223,17 +223,17 @@ "‏עדכון מערכת Android" "מתכונן לעדכון…" "מעבד את חבילת העדכון…" - "מאתחל…" + "מתבצע אתחול…" "איפוס לנתוני היצרן" - "מאתחל…" - "מכבה..." - "הטאבלט שלך יכבה." + "מתבצע אתחול…" + "בתהליך כיבוי..." + "הטאבלט שלך ייכבה." "‏מכשיר ה-Android TV יכבה." "השעון יכבה." "הטלפון שלך יכובה." "האם ברצונך לבצע כיבוי?" - "אתחל למצב בטוח" - "האם ברצונך לאתחל ולעבור למצב בטוח? פעולה זו תשבית את כל יישומי צד שלישי שהתקנת. הם ישוחזרו לאחר הפעלה מחדש של המכשיר." + "אתחול למצב בטוח" + "האם לבצע אתחול ולעבור למצב בטוח? הפעולה הזו תשבית את כל האפליקציות של צד שלישי שהתקנת. הן ישוחזרו לאחר הפעלה מחדש של המכשיר." "נוצרו לאחרונה" "אין אפליקציות אחרונות" "אפשרויות טאבלט" @@ -248,9 +248,9 @@ "סיום הפעלה" "צילום מסך" "דיווח על באג" - "פעולה זו תאסוף מידע על מצב המכשיר הנוכחי שלך על מנת לשלוח אותו כהודעת אימייל. היא תימשך זמן קצר מרגע פתיחת דיווח הבאג ועד לשליחת ההודעה בפועל. אנא המתן בסבלנות." + "הפעולה הזו תאסוף מידע על מצב המכשיר הנוכחי שלך כדי לשלוח אותו כהודעת אימייל. היא תימשך זמן קצר מרגע פתיחת הדיווח על הבאג ועד לשליחת ההודעה בפועל. יש להמתין בסבלנות." "דוח אינטראקטיבי" - "השתמש באפשרות זו ברוב המקרים. היא מאפשרת לך לעקוב אחר התקדמות הדוח, להזין פרטים נוספים על הבעיה וליצור צילומי מסך. היא עשויה להשמיט כמה קטעים שנמצאים פחות בשימוש ואשר יצירת הדיווח עליהם נמשכת זמן רב." + "כדאי להשתמש באפשרות הזו ברוב המקרים. היא מאפשרת לך לעקוב אחר התקדמות הדוח, להזין פרטים נוספים על הבעיה ולצלם את המסך. היא עשויה להשמיט כמה קטעים שנמצאים פחות בשימוש ושיצירת הדיווח עליהם נמשכת זמן רב." "דוח מלא" "השתמש באפשרות זו כדי שההפרעה למערכת תהיה מזערית, כשהמכשיר אינו מגיב או איטי מדי, או כשאתה זקוק לכל קטעי הדוח. לא ניתן להזין פרטים נוספים או ליצור צילומי מסך נוספים." @@ -269,7 +269,7 @@ "מצב טיסה כבוי" "הגדרות" "סיוע" - "Voice Assist" + "האסיסטנט" "נעילה" "999+" "התראה חדשה" @@ -322,7 +322,7 @@ "חיישנים לבישים" "גישה אל נתוני חיישנים של הסימנים החיוניים שלך" "אחזור תוכן של חלון" - "בדוק את התוכן של חלון שאיתו אתה מבצע אינטראקציה." + "בדיקת התוכן של חלון שאיתו מתבצעת אינטראקציה." "הפעלה של \'גילוי באמצעות מגע\'" "פריטים שעליהם תקיש יוקראו בקול, ותוכל לנווט במסך באמצעות תנועות." "הצגת טקסט בזמן הקלדה" @@ -333,18 +333,18 @@ "יכול להקיש, להחליק, לעשות תנועת צביטה ולבצע תנועות אחרות." "תנועות של טביעות אצבעות" "אפשרות לזהות תנועות בזמן נגיעה בחיישן טביעות האצבע של המכשיר." - "שמירת צילום המסך" + "צילום המסך" "ניתן לצלם צילום מסך של התצוגה." - "השבת או שנה את שורת המצב" - "מאפשר לאפליקציה להשבית את שורת המצב או להוסיף ולהסיר סמלי מערכת." + "השבתה או שינוי של שורת הסטטוס" + "מאפשרת לאפליקציה להשבית את שורת הסטטוס או להוסיף ולהסיר סמלי מערכת." "להיות שורת הסטטוס" - "מאפשר לאפליקציה להופיע בשורת המצב." + "מאפשרת לאפליקציה להופיע בשורת הסטטוס." "הרחב/כווץ את שורת המצב" "מאפשר לאפליקציה להרחיב או לכווץ את שורת המצב." "התקן קיצורי דרך" - "מאפשר לאפליקציה להוסיף קיצורי דרך במסך דף הבית ללא התערבות המשתמש." - "להסרת התקנה של קיצורי דרך" - "מאפשר לאפליקציה להסיר קיצורי דרך במסך דף הבית ללא התערבות המשתמש." + "מאפשרת לאפליקציה להוסיף קיצורי דרך במסך דף הבית ללא התערבות המשתמש." + "הסרת התקנה של קיצורי דרך" + "מאפשרת לאפליקציה להסיר קיצורי דרך במסך דף הבית ללא התערבות המשתמש." "ניתוב מחדש של שיחות יוצאות" "מאפשרת לאפליקציה לראות את המספר המחויג במהלך ביצוע שיחה יוצאת, עם האפשרות להפנות את השיחה למספר אחר או לבטל את השיחה לחלוטין." "מענה לשיחות טלפון" @@ -352,75 +352,75 @@ "‏קבלת הודעות טקסט (SMS)" "‏מאפשר לאפליקציה לקבל ולעבד הודעות SMS. משמעות הדבר היא שהאפליקציה יכולה לעקוב אחר הודעות שנשלחו למכשיר או למחוק אותן מבלי להציג לך אותן." "‏קבלת הודעות טקסט (MMS)" - "‏מאפשר לאפליקציה לקבל ולעבד הודעות MMS. משמעות הדבר היא שהאפליקציה יכולה לעקוב אחר הודעות שנשלחו למכשיר או למחוק אותן מבלי להציג לך אותן." + "‏מאפשרת לאפליקציה לקבל ולעבד הודעות MMS. משמעות הדבר היא שהאפליקציה יכולה לעקוב אחר הודעות שנשלחו למכשיר או למחוק אותן מבלי להציג לך אותן." "העברת הודעות של שידור סלולרי" "מאפשרת לאפליקציה להתחייב למודול של השידור הסלולרי כדי להעביר הודעות של שידור סלולרי כשהן מתקבלות. התראות שידור סלולרי נשלחות במקומות מסוימים כדי להזהיר אותך מפני מצבי חירום. אפליקציות זדוניות עשויות להפריע לביצועים או לפעולה של המכשיר כאשר מתקבל שידור חירום סלולרי." "קריאת הודעות שידור סלולרי" "מאפשר לאפליקציה לקרוא הודעות שידור סלולרי שהתקבלו במכשיר שלך. התראות שידור סלולרי נשלחות במקומות מסוימים על מנת להזהיר אותך מפני מצבי חירום. אפליקציות זדוניות עשויות להפריע לביצועים או לפעולה של המכשיר שלך כאשר מתקבל שידור חירום סלולרי." - "קרא עדכוני מנויים" + "קריאת עדכוני מינויים" "מאפשר לאפליקציה לקבל פרטים על ההזנות הנוכחיות שמסונכרנות." "‏שליחה והצגה של הודעות SMS" "‏מאפשר לאפליקציה לשלוח הודעות SMS. הדבר עשוי לגרום לחיובים בלתי צפויים. אפליקציות זדוניות עלולות לגרום לעלויות על ידי שליחת הודעות ללא אישורך." "‏קריאת הודעות הטקסט שלך (SMS או MMS)" "‏אפליקציה זו יכולה לקרוא את כל הודעות הטקסט (SMS) המאוחסנות בטאבלט." - "‏אפליקציה זו יכולה לקרוא את כל הודעות הטקסט (SMS) המאוחסנות במכשיר ה-Android TV." + "‏האפליקציה הזו יכולה לקרוא את כל הודעות הטקסט (SMS) המאוחסנות במכשיר ה-Android TV." "‏אפליקציה זו יכולה לקרוא את כל הודעות הטקסט (SMS) המאוחסנות בטלפון." "‏קבלת הודעות טקסט (WAP)" - "‏מאפשר לאפליקציה לקבל ולעבד הודעות WAP. אישור זה כולל את היכולת לעקוב אחר הודעות שנשלחו אליך ולמחוק אותן מבלי להציג לך אותן." + "‏מאפשרת לאפליקציה לקבל ולעבד הודעות WAP. ההרשאה הזו כוללת את היכולת לעקוב אחר הודעות שנשלחו אליך ולמחוק אותן מבלי להציג לך אותן." "אחזור אפליקציות פעילות" - "מאפשר לאפליקציה לאחזר מידע לגבי משימות הפועלות כרגע ושפעלו לאחרונה. ייתכן שהדבר יתיר לאפליקציה לגלות מידע לגבי האפליקציות שבהן נעשה שימוש במכשיר." + "מאפשרת לאפליקציה לאחזר מידע לגבי משימות הפועלות כרגע וכאלו שפעלו לאחרונה. ייתכן שההרשאה הזו תתיר לאפליקציה לגלות מידע לגבי האפליקציות שבהן נעשה שימוש במכשיר." "ניהול בעלים של פרופיל ומכשיר" "מאפשרת לאפליקציות להגדיר את הבעלים של הפרופיל ואת בעל המכשיר." "סידור מחדש של אפליקציות פעילות" "מאפשר לאפליקציה להעביר משימות לחזית ולרקע. האפליקציה עשוי לעשות זאת ללא התערבותך." "הפוך מצב מכונית לפעיל" - "מאפשר לאפליקציה לאפשר את מצב מכונית." + "מאפשרת לאפליקציה להפעיל את מצב מכונית." "סגירת אפליקציות אחרות" "מאפשר לאפליקציה להפסיק תהליכים ברקע המבוצעים על ידי אפליקציות אחרות. הדבר עשוי לגרום להפסקת פעולתם של אפליקציות אחרות." "אפליקציה זו יכולה להופיע מעל אפליקציות אחרות." - "אפליקציה זו יכולה להופיע מעל אפליקציות אחרות או בחלקים אחרים של המסך. ייתכן שהדבר יפריע לך להשתמש באפליקציות וישנה את הופעתן." + "האפליקציה הזו יכולה להופיע מעל אפליקציות אחרות או בחלקים אחרים של המסך. ייתכן שהדבר יפריע לך להשתמש באפליקציות וישנה את האופן שבו הן מופיעות." "פעולה ברקע" - "האפליקציה הזו יכולה לפעול ברקע. ייתכן שהסוללה תתרוקן מהר יותר במצב זה." + "האפליקציה הזו יכולה לפעול ברקע. ייתכן שהסוללה תתרוקן מהר יותר במצב הזה." "שימוש בנתונים ברקע" - "האפליקציה הזו יכולה להשתמש בנתונים ברקע. ייתכן שצריכת הנתונים תעלה במצב זה." + "האפליקציה הזו יכולה להשתמש בנתונים ברקע. ייתכן שצריכת הנתונים תגדל במצב הזה." "הגדרת האפליקציה לפעול תמיד" "מאפשר לאפליקציה להפוך חלקים ממנו לקבועים בזיכרון. פעולה זו עשויה להגביל את הזיכרון הזמין לאפליקציות אחרים ולהאט את פעולת הטאבלט." "‏מאפשרת לאפליקציה לאחסן חלקים שלה בזיכרון באופן קבוע. פעולה זו עשויה להגביל את הזיכרון הזמין לאפליקציות אחרות ולהאט את הפעולה של מכשיר ה-Android TV." "מאפשר לאפליקציה להפוך חלקים ממנו לקבועים בזיכרון. פעולה זו עשויה להגביל את הזיכרון הזמין לאפליקציות אחרים ולהאט את פעולת הטלפון." "הרצת שירות קדמה" - "הרשאה זו מאפשרת לאפליקציה לעשות שימוש בשירותים בקדמה." + "ההרשאה הזו מאפשרת לאפליקציה להשתמש בשירותים שפועלים בחזית." "מדידת נפח האחסון של אפליקציות" "מאפשר לאפליקציה לאחזר את הקוד, הנתונים, וגודלי קובצי המטמון שלו" "שינוי הגדרות מערכת" - "מאפשר לאפליקציה לשנות את נתוני הגדרות המערכת. אפליקציות זדוניות עלולות לשבש את תצורת המערכת שלך." + "מאפשרת לאפליקציה לשנות את נתוני הגדרות המערכת. אפליקציות זדוניות עלולות לשבש את תצורת המערכת שלך." "הפעלה בעת אתחול" "מאפשר לאפליקציה להפעיל את עצמו מיד עם סיום תהליך האתחול של המערכת. משום כך הפעלת הטאבלט עשויה להתארך והאפליקציה עלולה להאט את הפעילות הכללית של הטאבלט, בשל פעילותה התמידית." - "‏מאפשרת לאפליקציה להפעיל את עצמה ברגע שהמערכת מסיימת את ההפעלה. פעולה זו עשויה להאריך את הזמן שדרוש כדי להפעיל את מכשיר ה-Android TV, והיא מאפשרת לאפליקציה להאט את המכשיר כולו כי האפליקציה רצה כל הזמן." + "‏מאפשרת לאפליקציה להפעיל את עצמה ברגע שהמערכת מסיימת את ההפעלה. הפעולה הזו עשויה להאריך את הזמן שדרוש כדי להפעיל את מכשיר ה-Android TV, והיא מאפשרת לאפליקציה להאט את המכשיר כולו כי האפליקציה פועלת כל הזמן." "מאפשר לאפליקציה להפעיל את עצמו מיד עם השלמת תהליך האתחול של המערכת. משום כך הפעלת הטלפון עשויה להתארך והאפליקציה עלולה להאט את הפעילות הכללית של הטלפון, בשל פעילותה התמידית." - "שלח שידור דביק" - "מאפשר לאפליקציה לשלוח שידורים דביקים, אשר נותרים לאחר סיום השידור. אפליקציות זדוניות עלולות להאט את פעילות הטאבלט או להפוך אותה לבלתי יציבה על ידי אילוץ המכשיר להשתמש ביותר מדי זיכרון." + "שליחת שידור במיקום קבוע" + "מאפשרת לאפליקציה לשלוח שידורים במיקום קבוע, אשר נותרים לאחר סיום השידור. אפליקציות זדוניות עלולות להאט את פעילות הטאבלט או להפוך אותה לבלתי יציבה על ידי אילוץ המכשיר להשתמש ביותר מדי זיכרון." "‏מאפשרת לאפליקציה לשלוח שידורים \"דביקים\" (sticky), שנותרים לאחר שהשידור מסתיים. בעקבות שימוש מופרז באפשרות זו, שיעור ניצול הזיכרון יהיה גבוה מדי ומכשיר ה-Android TV עלול לפעול בצורה איטית או בלתי יציבה." - "מאפשר לאפליקציה לשלוח שידורים דביקים, אשר נותרים לאחר סיום השידור. אפליקציות זדוניות עלולות להאט את פעילות הטלפון או להפוך אותה לבלתי יציבה על ידי אילוץ המכשיר להשתמש ביותר מדי זיכרון." + "מאפשרת לאפליקציה לשלוח שידורים במיקום קבוע, אשר נותרים לאחר סיום השידור. אפליקציות זדוניות עלולות להאט את פעילות הטלפון או להפוך אותה לבלתי יציבה על ידי אילוץ המכשיר להשתמש ביותר מדי זיכרון." "קריאת אנשי הקשר שלך" "מאפשרת לאפליקציה לקרוא נתונים על אנשי הקשר השמורים בטאבלט שלך. לאפליקציות תהיה גם גישה לחשבונות בטאבלט שיצרו אנשי קשר. פעולה זו עשויה לכלול חשבונות שנוצרו על ידי אפליקציות שהתקנת. הרשאה זו מאפשרת לאפליקציות לשמור נתונים של אנשי הקשר שלך, ואפליקציות זדוניות עלולות לשתף נתונים של אנשי קשר ללא ידיעתך." "‏מאפשרת לאפליקציה לקרוא נתונים על אנשי הקשר השמורים במכשיר ה-Android TV שלך. לאפליקציות תהיה גם גישה לחשבונות במכשיר ה-Android TV שיצרו אנשי קשר. פעולה זו עשויה לכלול חשבונות שנוצרו על ידי אפליקציות שהתקנת. הרשאה זו מאפשרת לאפליקציות לשמור נתונים של אנשי הקשר שלך, ואפליקציות זדוניות עלולות לשתף נתונים של אנשי קשר ללא ידיעתך." - "מאפשרת לאפליקציה לקרוא נתונים על אנשי הקשר השמורים בטלפון שלך. לאפליקציות תהיה גם גישה לחשבונות בטלפון שיצרו אנשי קשר. פעולה זו עשויה לכלול חשבונות שנוצרו על ידי אפליקציות שהתקנת. הרשאה זו מאפשרת לאפליקציות לשמור נתונים של אנשי הקשר שלך, ואפליקציות זדוניות עלולות לשתף נתונים של אנשי קשר ללא ידיעתך." + "מאפשרת לאפליקציה לקרוא נתונים על אנשי הקשר השמורים בטלפון שלך. לאפליקציות תהיה גם גישה לחשבונות בטלפון שדרכם נוצרו אנשי קשר. הפעולה הזו עשויה לכלול חשבונות שנוצרו על ידי אפליקציות שהתקנת. ההרשאה הזו מאפשרת לאפליקציות לשמור נתונים של אנשי הקשר שלך, ואפליקציות זדוניות עלולות לשתף נתונים של אנשי קשר ללא ידיעתך." "שינוי אנשי הקשר שלך" "מאפשרת לאפליקציה לשנות את הנתונים לגבי אנשי הקשר המאוחסנים בטאבלט שלך. הרשאה זו מאפשרת לאפליקציות למחוק נתונים של אנשי קשר." - "‏מאפשרת לאפליקציה לשנות את הנתונים לגבי אנשי הקשר המאוחסנים במכשיר ה-Android TV שלך. הרשאה זו מאפשרת לאפליקציות למחוק נתונים של אנשי קשר." + "‏מאפשרת לאפליקציה לשנות את הנתונים לגבי אנשי הקשר המאוחסנים במכשיר ה-Android TV שלך. ההרשאה הזו מאפשרת לאפליקציות למחוק נתונים של אנשי קשר." "מאפשרת לאפליקציה לשנות את הנתונים לגבי אנשי הקשר המאוחסנים בטלפון שלך. הרשאה זו מאפשרת לאפליקציות למחוק נתונים של אנשי קשר." "קריאת יומן שיחות" "אפליקציה זו יכולה לקרוא את היסטוריית השיחות שלך." "כתיבת יומן שיחות" - "מאפשר לאפליקציה לשנות את יומן השיחות של הטאבלט, כולל נתונים על שיחות נכנסות ויוצאות. אפליקציות זדוניות עלולות לעשות בכך שימוש כדי למחוק או לשנות את יומן השיחות שלך." + "מאפשרת לאפליקציה לשנות את יומן השיחות של הטאבלט, כולל נתונים על שיחות נכנסות ויוצאות. אפליקציות זדוניות עלולות לעשות בכך שימוש כדי למחוק או לשנות את יומן השיחות שלך." "‏מאפשרת לאפליקציה לשנות את יומן השיחות של מכשיר ה-Android TV, כולל נתונים על שיחות נכנסות ויוצאות. אפליקציות זדוניות עלולות להשתמש בכך כדי למחוק או לשנות את יומן השיחות." "מאפשר לאפליקציה לשנות את יומן השיחות של הטלפון, כולל נתונים על שיחות נכנסות ויוצאות. אפליקציות זדוניות עלולות לעשות בכך שימוש כדי למחוק או לשנות את יומן השיחות שלך." "גישה אל חיישני גוף (כמו מוניטורים לקצב לב)" - "מאפשר לאפליקציה לגשת אל נתוני חיישנים העוקבים אחר מצבך הגופני, כמו קצב הלב." - "קריאה של אירועי יומן ופרטיהם" - "אפליקציה זו יכולה לקרוא את כל אירועי היומן המאוחסנים בטאבלט, ולשתף או לשמור את נתוני היומן." + "מאפשרת לאפליקציה לגשת אל נתוני חיישנים העוקבים אחר מצבך הגופני, כמו קצב הלב." + "קריאה של אירועי יומן והפרטים שלהם" + "האפליקציה הזו יכולה לקרוא את כל אירועי היומן המאוחסנים בטאבלט, ולשתף או לשמור את נתוני היומן." "‏אפליקציה זו יכולה לקרוא את כל אירועי היומן המאוחסנים במכשיר ה-Android TV, ולשתף או לשמור את נתוני היומן." - "אפליקציה זו יכולה לקרוא את כל אירועי היומן המאוחסנים בטלפון, ולשתף או לשמור את נתוני היומן." + "האפליקציה הזו יכולה לקרוא את כל אירועי היומן המאוחסנים בטלפון, ולשתף או לשמור את נתוני היומן." "הוספה ושינוי של אירועי יומן ושליחת אימייל לאורחים ללא ידיעת הבעלים" "אפליקציה זו יכולה להוסיף, להסיר ולשנות אירועי יומן בטאבלט. האפליקציה יכולה לשנות אירועים בלי להודיע לבעליהם ולשלוח הודעות שעשויות להיראות כאילו נשלחו מבעלי יומנים." "‏אפליקציה זו יכולה להוסיף, להסיר ולשנות אירועי יומן במכשיר ה-Android TV. האפליקציה יכולה לשלוח הודעות שעשויות להיראות כאילו נשלחו מבעלי יומנים ולשנות אירועים בלי להודיע על כך לבעליהם." @@ -429,37 +429,37 @@ "‏מאפשרת לאפליקציה לגשת לפקודות נוספות של ספק המיקום. הרשאה זו עשויה לאפשר לאפליקציה לשבש את פעולת ה-GPS או מקורות מיקום אחרים." "קבלת גישה למיקום מדויק בחזית בלבד" "האפליקציה הזו יכולה לקבל את המיקום המדויק שלך משירותי המיקום כאשר היא בשימוש. האפליקציה תקבל את המיקום רק אם הפעלת את שירותי המיקום במכשיר. פעולה זו עלולה להגביר את השימוש בסוללה." - "קבלת גישה למיקום משוער תתבצע בחזית בלבד" + "קבלת גישה למיקום משוער לאפליקציות בחזית בלבד" "כאשר האפליקציה בשימוש היא יכולה לקבל משירותי המיקום את המיקום המשוער שלך. האפליקציה תקבל את המיקום רק אם הפעלת את שירותי המיקום במכשיר." "גישה למיקום ברקע" "לאפליקציה תמיד יש גישה למיקום, גם כשאינה בשימוש." "שנה את הגדרות האודיו שלך" "מאפשר לאפליקציה לשנות הגדרות אודיו גלובליות כמו עוצמת קול ובחירת הרמקול המשמש לפלט." "הקלט אודיו" - "אפליקציה זו יכולה להשתמש במיקרופון כדי להקליט אודיו בכל עת." + "האפליקציה תמיד יכולה להשתמש במיקרופון כדי להקליט אודיו." "‏שליחת פקודות אל ה-SIM" - "‏מאפשרת ליישום לשלוח פקודות ל-SIM. זוהי הרשאה מסוכנת מאוד." + "‏מאפשרת לאפליקציה לשלוח פקודות ל-SIM. זוהי הרשאה מסוכנת מאוד." "זיהוי הפעילות הגופנית" "האפליקציה מזהה את הפעילות הגופנית שלך." - "צלם תמונות וסרטונים" + "צילום תמונות וסרטונים" "אפליקציה זו יכולה להשתמש במצלמה כדי לצלם תמונות ולהקליט סרטונים בכל עת." "הרשאת גישה לאפליקציה או לשירות למצלמות המערכת כדי לצלם תמונות וסרטונים" - "‏אפליקציה זו בעלת ההרשאות, או אפליקציית המערכת הזו, יכולה לצלם תמונות ולהקליט סרטונים באמצעות מצלמת מערכת בכל זמן. בנוסף, לאפליקציה נדרשת ההרשאה android.permission.CAMERA" + "‏האפליקציה הזו בעלת ההרשאות, או אפליקציית המערכת הזו, יכולה לצלם תמונות ולהקליט סרטונים באמצעות מצלמת מערכת בכל זמן. בנוסף, לאפליקציה נדרשת ההרשאה android.permission.CAMERA" "‏אפליקציה או שירות יוכלו לקבל קריאות חוזרות (callback) כשמכשירי מצלמה ייפתחו או ייסגרו." "‏האפליקציה הזו יכולה לקבל קריאות חוזרות (callback) כשמכשיר מצלמה כלשהו נפתח (באמצעות אפליקציה) או נסגר." "שליטה ברטט" "מאפשר לאפליקציה לשלוט ברטט." "מאפשרת לאפליקציה לקבל גישה למצב רטט." - "התקשר ישירות למספרי טלפון" + "חיוג ישירות למספרי טלפון" "מאפשר לאפליקציה להתקשר למספרי טלפון ללא התערבותך. פעולה זו עשויה לגרום לשיחות או לחיובים לא צפויים. שים לב שהדבר לא מאפשר לאפליקציה להתקשר למספרי חירום. אפליקציות זדוניות עשויות לגרום לעלויות על ידי ביצוע שיחות ללא התערבותך." "‏גישה אל שירות שיחות IMS" "‏מאפשר לאפליקציה להשתמש בשירות ה-IMS לביצוע שיחות ללא התערבותך." "קריאת הסטטוס והזהות של הטלפון" - "מאפשר לאפליקציה לגשת לתכונות הטלפון של המכשיר. אישור זה מתיר לאפליקציה לגלות את מספר הטלפון ואת זיהויי המכשיר, האם שיחה פעילה ואת המספר המרוחק המחובר באמצעות שיחה." + "מאפשרת לאפליקציה לגשת לתכונות הטלפון של המכשיר. ההרשאה הזו מתירה לאפליקציה לגלות את מספר הטלפון ואת מזהי המכשיר, אם השיחה פעילה ואת המספר המרוחק המחובר באמצעות שיחה." "ניתוב שיחות דרך המערכת" "מאפשרת לאפליקציה לנתב את השיחות דרך המערכת כדי לשפר את חוויית השיחה." "ניתן להציג שיחות ולשלוט בהן באמצעות המערכת." - "מאפשר לאפליקציה להציג שיחות נוכחיות ולשלוט בהן במכשיר. זה כולל פרטים כמו מספרי שיחה של שיחות ומצב השיחה." + "מאפשרת לאפליקציה להציג שיחות נוכחיות ולשלוט בהן במכשיר – כולל פרטים כמו מספרי שיחה של שיחות ומצב השיחה." "פטור מהגבלות של הקלטת אודיו" "פוטרת את האפליקציה מהגבלות של הקלטת אודיו." "המשך שיחה מאפליקציה אחרת" @@ -467,7 +467,7 @@ "גישה למספרי הטלפון" "מתירה לאפליקציה גישה למספרי הטלפון במכשיר." "מסך המכונית יישאר דלוק" - "מנע מהטאבלט לעבור למצב שינה" + "מניעה מהטאבלט לעבור למצב שינה" "‏מונעת ממכשיר ה-Android TV להיכנס למצב שינה" "מניעת מעבר הטלפון למצב שינה" "מסך המכונית יישאר דלוק כשהאפליקציה פועלת." @@ -479,22 +479,22 @@ "‏מאפשרת לאפליקציה להשתמש במשדר האינפרה-אדום של מכשיר ה-Android TV." "מאפשרת לאפליקציה להשתמש במשדר האינפרא-אדום של הטלפון." "הגדרת טפט" - "מאפשר לאפליקציה להגדיר את טפט המערכת." + "מאפשרת לאפליקציה להגדיר את טפט המערכת." "התאמת גודל הטפט שלך" "מאפשר לאפליקציה להגדיר את סמני הגודל של טפט המערכת." - "הגדר אזור זמן" - "מאפשר לאפליקציה לשנות את אזור הזמן של הטאבלט." + "הגדרת אזור זמן" + "מאפשרת לאפליקציה לשנות את אזור הזמן של הטאבלט." "‏מאפשרת לאפליקציה לשנות את אזור הזמן של מכשיר ה-Android TV." - "מאפשר לאפליקציה לשנות את אזור הזמן של הטלפון." + "מאפשר, לאפליקציה לשנות את אזור הזמן של הטלפון." "חיפוש חשבונות במכשיר" - "מאפשר לאפליקציה לקבל רשימה של חשבונות המוכרים לטאבלט. הדבר עשוי לכלול חשבונות שנוצרו על ידי אפליקציות שהתקנת." + "מאפשרת לאפליקציה לקבל רשימה של חשבונות המוכרים לטאבלט. הדבר עשוי לכלול חשבונות שנוצרו על ידי אפליקציות שהתקנת." "‏מאפשרת לאפליקציה לקבל את רשימת החשבונות המוכרים למכשיר ה-Android TV. הפרטים עשויים לכלול חשבונות שנוצרו על ידי אפליקציות שהתקנת." "מאפשר לאפליקציה לקבל רשימה של חשבונות המוכרים לטלפון. הדבר עשוי לכלול חשבונות שנוצרו על ידי אפליקציות שהתקנת." - "הצג חיבורי רשת" - "מאפשר לאפליקציה להציג מידע לגבי חיבורי רשת, למשל, אילו רשתות קיימות ומחוברות." + "הצגת חיבורי רשת" + "מאפשרת לאפליקציה להציג מידע לגבי חיבורי רשת, למשל, אילו רשתות קיימות ומחוברות." "קבלת גישת רשת מלאה" - "‏מאפשר לאפליקציה ליצור Sockets ולהשתמש בפרוטוקולי רשת מותאמים אישית. הדפדפן, כמו אפליקציות אחרות, מספק אמצעים לשליחת נתונים לאינטרנט, כך שאישור זה אינו נחוץ לשליחת נתונים לאינטרנט." - "שנה את קישוריות הרשת" + "‏מאפשרת לאפליקציה ליצור Sockets ולהשתמש בפרוטוקולי רשת מותאמים אישית. הדפדפן, כמו אפליקציות אחרות, מספק אמצעים לשליחת נתונים לאינטרנט, כך שאישור זה אינו נחוץ לשליחת נתונים לאינטרנט." + "שינוי של קישוריות הרשת" "מאפשר לאפליקציה לשנות את מצב הקישוריות של הרשת." "שינוי של קישוריות קשורה" "מאפשר לאפליקציה לשנות את מצב הקישוריות של רשת קשורה." @@ -502,28 +502,28 @@ "‏מאפשר לאפליקציה להציג מידע על רשתות Wi-Fi, למשל, האם Wi-Fi מופעל, כמו גם שם מכשירי ה-Wi-Fi המחוברים." "‏התחברות והתנתקות מ-Wi-Fi" "‏מאפשר לאפליקציה להתחבר לנקודות גישת Wi-Fi ולהתנתק מהן, וכן לבצע שינויים בתצורת המכשיר עבור רשתות Wi-Fi." - "‏אפשר קבלת שידורים מרובים ב-Wi-Fi" + "‏מאפשרת לקבל שידורים מרובים ב-Wi-Fi" "‏מאפשר לאפליקציה לקבל חבילות שנשלחו לכל המכשירים ברשת Wi-Fi באמצעות כתובות שידור לקבוצה, ולא רק בטאבלט שלך. צריכת החשמל גבוהה יותר מאשר במצב שאינו שידור לקבוצה." "‏מאפשרת לאפליקציה לקבל חבילות שנשלחו לכל המכשירים ברשת Wi-Fi באמצעות כתובות מולטיקאסט, ולא רק למכשיר ה-Android TV. צריכת החשמל תהיה גבוהה יותר מאשר במצב שאינו מולטיקאסט." - "‏מאפשר לאפליקציה לקבל חבילות שנשלחו לכל המכשירים ברשת Wi-Fi באמצעות כתובות שידור לקבוצה, ולא רק בטלפון שלך. צריכת החשמל גבוהה יותר מאשר במצב שאינו שידור לקבוצה." + "‏מאפשרת לאפליקציה לקבל חבילות שנשלחו לכל המכשירים ברשת Wi-Fi באמצעות כתובות שידור לקבוצה, ולא רק בטלפון שלך. צריכת החשמל גבוהה יותר מאשר במצב שאינו שידור לקבוצה." "‏גישה להגדרות Bluetooth" "‏מאפשר לאפליקציה להגדיר את תצורתו של הטאבלט המקומי מסוג Bluetooth וכן לגלות מכשירים מרוחקים ולבצע התאמה איתם." - "‏מאפשרת לאפליקציה להגדיר Bluetooth במכשיר ה-Android TV, ולגלות מכשירים מרוחקים ולבצע התאמה איתם." + "‏מאפשרת לאפליקציה להגדיר Bluetooth במכשיר ה-Android TV, ולגלות מכשירים מרוחקים ולבצע איתם התאמה." "‏מאפשר לאפליקציה להגדיר את תצורתו של הטלפון המקומי מסוג Bluetooth וכן לגלות מכשירים מרוחקים ולבצע התאמה איתם." "‏התחברות והתנתקות מ-WiMAX" - "‏מאפשר לאפליקציה לדעת האם WiNMAX מופעל, כמו גם לקבל מידע האם רשתות WiNMAX כלשהן מחוברות." + "‏מאפשרת לאפליקציה לדעת האם WiNMAX מופעל, ולקבל מידע לגבי רשתות WiNMAX מחוברות." "‏שנה את מצב WiMAX" - "‏מאפשר לאפליקציה לחבר את הטאבלט לרשתות WiMAX ולהתנתק מהן." + "‏מאפשרת לאפליקציה לחבר את הטאבלט לרשתות WiMAX ולהתנתק מהן." "‏מאפשרת לאפליקציה לחבר את מכשיר ה-Android TV לרשתות WiMAX ולהתנתק מהן." "‏מאפשר לאפליקציה לחבר את הטלפון לרשתות WiMAX ולהתנתק מהן." "‏התאמה למכשירי Bluetooth" "‏מאפשר לאפליקציה להציג את תצורת ה-Bluetooth בטאבלט, וכן ליצור ולקבל חיבורים עם מכשירים מותאמים." "‏מאפשרת לאפליקציה להציג את הגדרת ה-Bluetooth במכשיר ה-Android TV, וליצור ולקבל חיבורים עם מכשירים מותאמים." - "‏מאפשר לאפליקציה להציג את תצורת ה-Bluetooth בטלפון, וכן ליצור ולקבל חיבורים עם מכשירים מותאמים." + "‏מאפשרת לאפליקציה להציג את תצורת ה-Bluetooth בטלפון, וכן ליצור ולקבל חיבורים עם מכשירים מותאמים." "‏פרטים על שירות תשלום מועדף ב-NFC" "‏מאפשרת לאפליקציה לקבל פרטים על שירות תשלום מועדף ב-NFC, כמו עזרים רשומים ויעד של נתיב." "‏שלוט ב-Near Field Communication" - "מאפשר לאפליקציה נהל תקשורת עם תגים, כרטיסים וקוראים מסוג \'תקשורת מטווח קצר\'." + "‏מאפשרת לאפליקציה נהל תקשורת עם תגים, כרטיסים וקוראים מסוג \'תקשורת מטווח קצר\' (NFC)." "ביטול נעילת המסך שלך" "מאפשר לאפליקציה להשבית את נעילת המקשים וכל אמצעי אבטחה משויך המבוסס על סיסמה. לדוגמה, הטלפון משבית את נעילת המקשים בעת קבלה של שיחת טלפון נכנסת, ולאחר מכן מפעיל מחדש את נעילת המקשים עם סיום השיחה." "בקשת מידע לגבי מידת המורכבות של נעילת המסך" @@ -532,8 +532,8 @@ "מאפשרת לאפליקציה להשתמש בחומרה ביומטרית לצורך אימות" "ניהול חומרה של טביעות אצבעות" "מאפשר לאפליקציה להפעיל שיטות להוספה ומחיקה של תבניות טביעות אצבעות שבהן ייעשה שימוש." - "חומרה של טביעות אצבעות" - "מאפשר לאפליקציה להשתמש בחומרה של טביעות אצבעות לצורך אימות" + "שימוש בחומרה של טביעות אצבעות" + "מאפשרת לאפליקציה להשתמש בחומרה של טביעות אצבעות לצורך אימות" "לשנות את אוסף המוזיקה שלך" "מאפשרת לאפליקציה לשנות את אוסף המוזיקה שלך." "לשנות את אוסף הסרטונים שלך" @@ -542,12 +542,12 @@ "מאפשרת לאפליקציה לשנות את אוסף התמונות שלך." "לקרוא מיקומים מאוסף המדיה שלך" "מאפשרת לאפליקציה לקרוא מיקומים מאוסף המדיה שלך." - "אימות זהותך" + "אימות הזהות שלך" "חומרה ביומטרית לא זמינה" "האימות בוטל" "לא זוהתה" "האימות בוטל" - "עוד לא הוגדרו קוד גישה, קו ביטול נעילה או סיסמה" + "עוד לא הוגדרו קוד אימות, קו ביטול נעילה או סיסמה" "זוהתה טביעת אצבע חלקית. אפשר לנסות שוב." "לא ניתן היה לעבד את טביעת האצבע. נסה שוב." "החיישן של טביעות האצבעות מלוכלך. צריך לנקות אותו ולנסות שוב." @@ -560,13 +560,13 @@ "זיהוי הפנים בוצע. יש ללחוץ על אישור" "החומרה בשביל טביעות אצבעות אינה זמינה." "לא ניתן לאחסן טביעת אצבע. יש להסיר טביעת אצבע קיימת." - "חלף הזמן הקצוב לטביעת אצבע. אפשר לנסות שוב." + "נגמר הזמן הקצוב לטביעת אצבע. אפשר לנסות שוב." "פעולת טביעת האצבע בוטלה." - "פעולת טביעת האצבע בוטלה בידי המשתמש." - "יותר מדי ניסיונות. נסה שוב מאוחר יותר." + "פעולת טביעת האצבע בוטלה על ידי המשתמש." + "יותר מדי ניסיונות. יש לנסות שוב מאוחר יותר." "יותר מדי ניסיונות. חיישן טביעות האצבע הושבת." "כדאי לנסות שוב." - "לא נרשמו טביעות אצבע." + "לא נסרקו טביעות אצבע." "במכשיר זה אין חיישן טביעות אצבע." "החיישן מושבת באופן זמני." "אצבע %d" @@ -577,22 +577,22 @@ "מאפשרת לאפליקציה להפעיל שיטות להוספה ומחיקה של תבניות פנים שבהן ייעשה שימוש." "שימוש בחומרה לשחרור נעילה על ידי זיהוי פנים" "מאפשרת לאפליקציה להשתמש בחומרה לשחרור נעילה על ידי זיהוי פנים לצורך אימות" - "שחרור נעילה בזיהוי פנים" - "יש לבצע רישום מחדש של הפנים שלך" + "שחרור נעילה על ידי זיהוי פנים" + "יש לבצע סריקה חוזרת של הפנים שלך" "לשיפור הזיהוי יש לבצע רישום מחדש של הפנים שלך" "לא ניתן היה לקלוט את הפנים במדויק. יש לנסות שוב." "בהיר מדי. צריך תאורה עדינה יותר." "התמונה חשוכה מדי. צריך תאורה חזקה יותר." "יש להרחיק את הטלפון." "צריך לקרב את הטלפון." - "צריך להגביה את הטלפון." + "צריך להרים את הטלפון גבוה יותר." "צריך להוריד את הטלפון." "צריך להזיז את הטלפון שמאלה." "צריך להזיז את הטלפון ימינה." "יש להביט ישירות אל המכשיר." "עליך למקם את הפנים ישירות מול הטלפון." "יותר מדי תנועה. יש להחזיק את הטלפון בצורה יציבה." - "יש לרשום מחדש את הפנים." + "יש לסרוק שוב את הפנים." "כבר לא ניתן לזהות פנים. יש לנסות שוב." "דומה מדי, יש לשנות תנוחה." "עליך ליישר קצת את הראש." @@ -604,8 +604,8 @@ "לא ניתן לאמת את הפנים. החומרה לא זמינה." "יש לנסות שוב את שחרור הנעילה על ידי זיהוי פנים." - "לא ניתן לאחסן נתוני פנים. תחילה יש למחוק פנים ישנים." - "פעולת הפנים בוטלה." + "לא ניתן לאחסן נתוני פנים חדשים. תחילה יש למחוק את הנתונים הישנים." + "הפעולה לאימות הפנים בוטלה." "שחרור הנעילה על ידי זיהוי פנים בוטל על ידי המשתמש." "יותר מדי ניסיונות. יש לנסות שוב מאוחר יותר." "יותר מדי ניסיונות. שחרור נעילה על ידי זיהוי פנים מושבת." @@ -620,39 +620,39 @@ "קרא את הגדרות הסינכרון" "מאפשר לאפליקציה לקרוא את הגדרות הסנכרון של חשבון. לדוגמה, ניתן לגלות כך האם האפליקציה \'אנשים\' מסונכרן עם חשבון כלשהו." "הפעלת וכיבוי סנכרון" - "מאפשר לאפליקציה לשנות את הגדרות הסנכרון של חשבון. לדוגמה, ניתן להשתמש בכך על מנת להפעיל סנכרון של האפליקציה \'אנשים\' עם חשבון כלשהו." - "קרא את הנתונים הסטטיסטיים של הסינכרון" - "מאפשר לאפליקציה לקרוא את סטטיסטיקת הסנכרון של חשבון, כולל היסטוריית אירועי הסנכרון וכמות הנתונים שסונכרנה." + "מאפשרת לאפליקציה לשנות את הגדרות הסנכרון של חשבונות. לדוגמה, אפשר להשתמש בהרשאה הזו כדי להפעיל סנכרון של האפליקציה \'אנשים\' עם חשבון כלשהו." + "קריאת הנתונים הסטטיסטיים של הסנכרון" + "מאפשרת לאפליקציה לקרוא את סטטיסטיקת הסנכרון של חשבון, כולל היסטוריית אירועי הסנכרון וכמות הנתונים שסונכרנה." "קריאת התוכן של האחסון המשותף שלך" "מאפשר לאפליקציה לקרוא את התוכן של האחסון המשותף." "שינוי או מחיקה של תוכן האחסון המשותף שלך" "מאפשר לאפליקציה לכתוב את התוכן של האחסון המשותף." "‏ביצוע/קבלה של שיחות SIP" "‏אפשר לאפליקציה לבצע ולקבל שיחות SIP." - "‏רשום חיבורי Telecom SIM חדשים" + "‏רישום חיבורי Telecom SIM חדשים" "‏מאפשר לאפליקציה לרשום חיבורי Telecom SIM חדשים." "‏רשום חיבורי Telecom חדשים" - "מאפשר לאפליקציה לרשום חיבורי תקשורת חדשים." + "מאפשרת לאפליקציה לרשום חיבורי תקשורת חדשים." "ניהול חיבורי תקשורת" "מאפשר לאפליקציה לנהל חיבורי תקשורת." "צור אינטראקציה עם מסך שיחה נכנסת" "מאפשר לאפליקציה לקבוע מתי ואיך המשתמש יראה את מסך השיחה הנכנסת." "צור אינטראקציה עם שירותי טלפוניה" - "מאפשר לאפליקציה ליצור אינטראקציה עם שירותי טלפוניה כדי לבצע/לקבל שיחות." - "ספק חווית משתמש של שיחה נכנסת" - "מאפשר לאפליקציה לספק חוויית משתמש של שיחה נכנסת." + "מאפשרת לאפליקציה ליצור אינטראקציה עם שירותי טלפוניה כדי לבצע ולקבל שיחות." + "סיפוק חווית שימוש של שיחה נכנסת" + "מאפשרת לאפליקציה לספק חוויית שימוש של שיחה נכנסת." "קריאת נתוני שימוש היסטוריים ברשת" "מאפשר לאפליקציה לקרוא נתוני שימוש היסטוריים ברשת עבור רשתות ואפליקציות ספציפיות." "נהל מדיניות רשת" - "מאפשר לאפליקציה לנהל מדיניות הרשת להגדיר כללים ספציפיים-לאפליקציה." - "שנה ניהול חשבונות של שימוש ברשת" - "הרשאה זו מאפשרת לאפליקציה לשנות את אופן החישוב של נתוני שימוש ברשת מול כל אפליקציה. לא מיועד לשימוש באפליקציות רגילות." + "מאפשרת לאפליקציה לנהל את מדיניות הרשת ולהגדיר כללים ספציפיים-לאפליקציה." + "שינוי ניהול החשבונות של שימוש ברשת" + "ההרשאה הזו מאפשרת לאפליקציה לשנות את אופן החישוב של נתוני שימוש ברשת מול כל אפליקציה. לא מיועדת לשימוש באפליקציות רגילות." "גישה להתראות" "מאפשר לאפליקציה לאחזר, לבדוק ולמחוק התראות, כולל כאלה שפורסמו על ידי אפליקציות אחרות." "איגוד לשירות של מאזין להתראות" - "הרשאה זו מאפשרת למשתמש לבצע איגוד לממשק הרמה העליונה של שירות מאזין להתראות. הרשאה זו אף פעם אינה נחוצה לאפליקציות רגילים." + "מאפשרת למשתמש לבצע איגוד לממשק הרמה העליונה של שירות האזנה להתראות. ההרשאה הזו אינה נחוצה לאפליקציות רגילות." "איגוד לשירות ספק תנאי" - "מאפשרת לבעלים לאגד לממשק ברמה העליונה של שירות ספק תנאי. לעולם לא אמורה להיות נחוצה עבור אפליקציות רגילות." + "מאפשרת לבעלים לאגד לממשק ברמה העליונה של שירות ספק תנאי. לא אמורה להיות נחוצה עבור אפליקציות רגילות." "איגוד לשירות ׳חלום בהקיץ׳" "מאפשרת לבעלים לבצע איגוד לממשק הרמה העליונה של שירות ׳חלום בהקיץ׳. הרשאה זו אף פעם אינה נחוצה לאפליקציות רגילות." "הפעלה של אפליקציית תצורה שסופקה על ידי ספק" @@ -670,13 +670,13 @@ "איגוד לשירות העברת הודעות של ספק" "מאפשרת לבעלים לאגד לממשק ברמה העליונה של שירות העברת הודעות של ספק. לעולם לא אמורה להיות נחוצה עבור אפליקציות רגילות." "איגוד לשירותי ספק" - "מאפשר לבעלים לאגד לשירות ספק. לעולם לא אמור להיות נחוץ לאפליקציות רגילות." + "מאפשרת לבעלים לאגד לשירות ספק. לא נחוצה לאפליקציות רגילות בדרך כלל." "גישה אל \'נא לא להפריע\'" - "מאפשר לאפליקציה לקרוא ולכתוב את התצורה של \'נא לא להפריע\'." + "מאפשרת לאפליקציה לקרוא ולכתוב את התצורה של התכונה \'נא לא להפריע\'." "התחלת צפייה בהרשאות השימוש" "מאפשרת לבעלים להפעיל את השימוש בהרשאות עבור אפליקציה מסוימת. הרשאה זו אף פעם לא נדרשת עבור אפליקציות רגילות." "הגדר כללי סיסמה" - "קביעת האורך הנדרש והתווים המותרים בסיסמאות ובקודי הגישה של מסך הנעילה." + "קביעת האורך הנדרש והתווים המותרים בסיסמאות ובקודי האימות של מסך הנעילה." "מעקב אחר ניסיונות לביטול של נעילת המסך" "ניהול מעקב אחר מספר הסיסמאות השגויות שמוקלדות בעת ביטול נעילת המסך, וביצוע נעילה של הטאבלט, או מחיקה של כל נתוני הטאבלט, אם מוקלדות יותר מדי סיסמאות שגויות." "‏מעקב אחר מספר הסיסמאות השגויות שהוזנו בעת ביטול נעילת המסך, כמו גם נעילה של מכשיר ה-Android TV או מחיקה של כל נתוני מכשיר ה-Android TV אם הוזנו יותר מדי סיסמאות שגויות." @@ -689,23 +689,23 @@ "נעילת המסך" "שליטה באופן ובתזמון של נעילת המסך." "מחיקת כל הנתונים" - "מחק את נתוני הטאבלט ללא אזהרה על ידי ביצוע איפוס נתוני יצרן." + "מחיקה של נתוני הטאבלט ללא אזהרה, באמצעות איפוס לנתוני היצרן." "‏מחיקה ללא אזהרה של נתוני מכשיר ה-Android TV באמצעות איפוס לנתוני היצרן." - "מחיקה של נתוני הטלפון, ללא אזהרה, על ידי ביצוע איפוס נתוני יצרן." + "מחיקה של נתוני הטלפון, ללא אזהרה, על ידי ביצוע איפוס לנתוני היצרן." "מחיקת נתוני משתמש" "מחיקה ללא אזהרה של נתוני המשתמש הזה בטאבלט הזה." - "‏מחיקה ללא אזהרה של נתוני המשתמש הזה במכשיר ה-Android TV הזה." + "‏מחיקה של נתוני המשתמש הזה במכשיר ה-Android TV, ללא אזהרה." "מחיקה ללא אזהרה של נתוני המשתמש הזה בטלפון הזה." "‏הגדר את שרת ה-Proxy הכללי של המכשיר" "‏הגדרה של שרת ה-proxy הגלובלי שבו ייעשה שימוש כשהמדיניות פועלת. רק הבעלים של המכשיר יכול להגדיר את שרת ה-proxy הגלובלי." "הגדרת תפוגה לסיסמת מסך הנעילה" "שינוי התדירות לדרישת השינוי של הסיסמה, קוד הגישה או קו ביטול הנעילה של מסך הנעילה." - "הגדר הצפנת אחסון" - "דרוש שנתוני אפליקציות מאוחסנות יהיו מוצפנים." - "השבת מצלמות" + "הגדרת הצפנה של אחסון" + "נדרש שנתונים של אפליקציות מאוחסנות יהיו מוצפנים." + "השבתת מצלמות" "מנע שימוש בכל המצלמות שבמכשיר." - "השבת חלק מהתכונות של נעילת המסך" - "מנע שימוש בחלק מהתכונות של נעילת המסך." + "השבתת חלק מהתכונות של נעילת המסך" + "מניעת שימוש בחלק מהתכונות של נעילת המסך." "בית" "נייד" @@ -768,9 +768,9 @@ "TTY TDD" "נייד של העבודה" "זימונית מהעבודה" - "מסייע" + "אסיסטנט" "MMS" - "מותאם אישית" + "בהתאמה אישית" "תאריך לידה" "יום השנה" "אחר" @@ -805,10 +805,10 @@ "אח" "ילד" "שותף לחיים" - "אב" + "אבא" "חבר" "מנהל" - "אם" + "אמא" "הורה" "שותף" "הופנה על ידי" @@ -820,38 +820,38 @@ "עבודה" "אחר" "לא נמצאה אפליקציה להצגת התוכן הזה." - "הקלד קוד גישה" - "‏הקלד את קוד ה-PUK וקוד הגישה החדש" + "יש להקליד קוד אימות" + "‏יש להקליד את קוד ה-PUK ואת קוד האימות החדש" "‏קוד PUK" - "קוד גישה חדש" - "הקש כדי להקליד את הסיסמה" + "קוד אימות חדש" + "יש להקיש כדי להקליד את הסיסמה" "הקלד סיסמה לביטול הנעילה" - "הקלד קוד גישה לביטול הנעילה" - "קוד גישה שגוי" + "יש להקליד קוד אימות לביטול הנעילה" + "קוד אימות שגוי" "כדי לבטל את הנעילה, לחץ על \'תפריט\' ולאחר מכן על 0." "מספר חירום" "אין שירות" "המסך נעול." - "לחץ על \'תפריט\' כדי לבטל את הנעילה או כדי לבצע שיחת חירום." - "לחץ על \'תפריט\' כדי לבטל את הנעילה." - "שרטט קו לביטול נעילת המסך" + "יש ללחוץ על \'תפריט\' כדי לבטל את הנעילה או כדי לבצע שיחת חירום." + "יש ללחוץ על \'תפריט\' כדי לבטל את הנעילה." + "יש לשרטט קו לביטול נעילת המסך" "שיחת חירום" "חזרה לשיחה" "נכון!" "כדאי לנסות שוב" "כדאי לנסות שוב" "בטל את הנעילה לכל התכונות והנתונים" - "חרגת ממספר הניסיונות המרבי של זיהוי פנים" + "חרגת ממספר הניסיונות המרבי לשחרור נעילה על ידי זיהוי פנים" "‏אין כרטיס SIM" "‏אין כרטיס SIM בטאבלט." "‏אין כרטיס SIM במכשיר ה-Android TV." "‏אין כרטיס SIM בטלפון." - "‏הכנס כרטיס SIM." - "‏כרטיס ה-SIM חסר או שלא ניתן לקרוא אותו. הכנס כרטיס SIM." - "‏לא ניתן להשתמש בכרטיס SIM זה." - "‏כרטיס ה-SIM שלך הושבת לצמיתות.\nפנה לספק השירות האלחוטי שלך לקבלת כרטיס SIM אחר." + "‏יש להכניס כרטיס SIM." + "‏כרטיס ה-SIM חסר או שלא ניתן לקרוא אותו. יש להכניס כרטיס SIM." + "‏לא ניתן להשתמש בכרטיס ה-SIM הזה." + "‏כרטיס ה-SIM שלך הושבת באופן סופי.\nיש לפנות לספק השירות האלחוטי שלך לקבלת כרטיס SIM אחר." "הרצועה הקודמת" - "הרצועה הבאה" + "הטראק הבא" "השהה" "הפעלה" "הפסק" @@ -860,15 +860,15 @@ "שיחות חירום בלבד" "רשת נעולה" "‏כרטיס SIM נעול באמצעות PUK." - "עיין במדריך למשתמש או פנה לשירות הלקוחות." + "יש לעיין במדריך למשתמש או לפנות לשירות הלקוחות." "‏כרטיס ה-SIM נעול." "‏מבטל נעילה של כרטיס 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 פעמים. לאחר %2$d ניסיונות כושלים נוספים, תתבקש לבטל את נעילת הטאבלט באמצעות פרטי הכניסה שלך ל-Google.\n\nנסה שוב בעוד %3$d שניות." + "‏שרטטת את קו ביטול הנעילה באופן שגוי %1$d פעמים. לאחר %2$d ניסיונות כושלים נוספים, יהיה צורך לבטל את נעילת הטאבלט באמצעות פרטי הכניסה שלך ל-Google.\n\nיש לנסות שוב בעוד %3$d שניות." "‏שרטטת קו ביטול נעילה שגוי %1$d פעמים. לאחר %2$d ניסיונות כושלים נוספים, תתבקש לבטל את הנעילה של מכשיר ה-Android TV באמצעות כניסה לחשבון Google שלך.\n\n נסה שוב בעוד %3$d שניות." - "‏שרטטת את קו ביטול הנעילה באופן שגוי %1$d פעמים. בעוד %2$d ניסיונות כושלים נוספים, תתבקש לבטל את נעילת הטלפון באמצעות פרטי הכניסה שלך ל-Google‏.\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 יעבור איפוס לברירת המחדל של היצרן וכל נתוני המשתמש יאבדו." "ביצעת %1$d ניסיונות שגויים לביטול נעילת הטלפון. לאחר %2$d ניסיונות כושלים נוספים, הטלפון יעבור איפוס לברירת המחדל של היצרן וכל נתוני המשתמש יאבדו." @@ -876,16 +876,16 @@ "‏ניסית לבטל בצורה שגויה את הנעילה של מכשיר ה-Android TV %d פעמים. מכשיר ה-Android TV יעבור כעת איפוס לברירת המחדל של היצרן." "ביצעת %d ניסיונות שגויים לביטול נעילת הטלפון. הטלפון יעבור כעת איפוס לברירת המחדל של היצרן." "נסה שוב בעוד %d שניות." - "שכחת את הקו?" - "ביטול נעילת חשבון" + "שכחת את קו ביטול הנעילה?" + "ביטול נעילת החשבון" "בוצעו ניסיונות רבים מדי לשרטוט קו ביטול נעילה." - "‏כדי לבטל את הנעילה, היכנס באמצעות חשבון Google שלך." + "‏כדי לבטל את הנעילה, עליך להיכנס באמצעות חשבון Google שלך." "שם משתמש (אימייל)" "סיסמה" "כניסה" "שם משתמש או סיסמה לא חוקיים." - "‏שכחת את שם המשתמש או הסיסמה?\nהיכנס לכתובת ""google.com/accounts/recovery" - "בודק..." + "‏שכחת את שם המשתמש או הסיסמה?\nאפשר להיכנס לכתובת ""google.com/accounts/recovery" + "בבדיקה..." "בטל נעילה" "קול פועל" "ללא קול" @@ -908,12 +908,12 @@ "‏סידור מחדש של Widgets התחיל." "‏סידור מחדש של Widgets הסתיים." "‏Widget ‏%1$s נמחק." - "הרחב את אזור ביטול הנעילה." + "הרחבה של אזור ביטול הנעילה." "ביטול נעילה באמצעות הסטה." "ביטול נעילה על ידי שרטוט קו." "ביטול נעילה באמצעות זיהוי פנים." "ביטול נעילה באמצעות קוד גישה." - "‏ביטול נעילה של קוד הגישה ל-SIM." + "‏ביטול הנעילה של קוד האימות ל-SIM." "‏ביטול נעילה של PUK ל-SIM." "ביטול נעילה באמצעות סיסמה." "אזור לשרטוט קו ביטול נעילה." @@ -929,12 +929,12 @@ "‏הפעולה FACTORY_TEST נתמכת רק עבור חבילות שהותקנו ב-‎/system/app." "‏לא נמצאה חבילה המספקת את הפעולה FACTORY_TEST." "אתחל מחדש" - "בדף שבכתובת \'%s\' כתוב כך:" + "בדף שבכתובת \'%s\' כתוב:" "JavaScript" "אישור ניווט" "צא מדף זה" - "הישאר בדף זה" - "%s\n\nהאם אתה בטוח שברצונך לנווט אל מחוץ לדף זה?" + "להישאר בדף הזה" + "%s\n\nבטוח שברצונך לנווט אל מחוץ לדף הזה?" "אישור" "טיפ: הקש פעמיים כדי להגדיל ולהקטין." "מילוי אוטומטי" @@ -958,19 +958,19 @@ "אמירות" "קריאת סימניות והיסטוריית האינטרנט שלך" "‏מאפשר לאפליקציה לקרוא את ההיסטוריה של כל כתובות האתרים שבהן הדפדפן ביקר, ואת כל ה-Bookmarks של הדפדפן. שים לב: דפדפני צד שלישי או אפליקציות אחרות עם יכולות לדפדוף באינטרנט אינם יכולים לאכוף אישור זה." - "כתיבת סימניות והיסטוריית אינטרנט" + "כתיבת סימניות והיסטורייה של אתרים" "‏מאפשר לאפליקציה לשנות את ההיסטוריה או ה-Bookmarks של הדפדפן המאוחסנים בטאבלט. הדבר עשוי לאפשר לאפליקציה למחוק או לשנות נתוני דפדפן. שים לב: אישור זה אינו ניתן לאכיפה על ידי דפדפני צד שלישי או אפליקציות אחרות בעלות יכולות גלישה באינטרנט." "‏מאפשרת לאפליקציה לשנות את הסימניות או את היסטוריית הדפדפן השמורות במכשיר ה-Android TV. הרשאה זו עשויה לאפשר לאפליקציה למחוק או לשנות נתוני דפדפן. הערה: ייתכן שההרשאה לא תיושם על ידי דפדפנים של צד שלישי או על ידי אפליקציות אחרות עם יכולות גלישה באינטרנט." "‏מאפשר לאפליקציה לשנות את ההיסטוריה או ה-Bookmarks של הדפדפן המאוחסנים בטלפון. הדבר עשוי לאפשר לאפליקציה למחוק או לשנות נתוני דפדפן. שים לב: אישור זה אינו ניתן לאכיפה על ידי דפדפני צד שלישי או אפליקציות אחרות בעלות יכולות גלישה באינטרנט." "הגדרת התראה" - "מאפשר לאפליקציה להגדיר התראה באפליקציה מותקנת של שעון מעורר. אפליקציות מסוימות של שעון מעורר אינן מיישמות תכונה זו." - "הוסף דואר קולי" - "מאפשר לאפליקציה להוסיף הודעות לתיבת הדואר הקולי." + "מאפשרת לאפליקציה להגדיר התראה באפליקציה מותקנת של שעון מעורר. אפליקציות מסוימות של שעון מעורר אינן מיישמות את התכונה הזו." + "הוספה של דואר קולי" + "מאפשרת לאפליקציה להוסיף הודעות לתיבת הדואר הקולי." "שינוי הרשאות המיקום הגיאוגרפי של הדפדפן" "מאפשר לאפליקציה לשנות את הרשאות המיקום הגיאוגרפי של הדפדפן. אפליקציות זדוניות עלולות להשתמש בכך כדי לאפשר משלוח של פרטי מיקום לאתרים זדוניים אחרים." "האם ברצונך שהדפדפן יזכור סיסמה זו?" - "לא כעת" - "זכור" + "לא עכשיו" + "כן, לשמור" "אף פעם" "אין לך הרשאה לפתוח דף זה." "הטקסט הועתק ללוח." @@ -990,11 +990,11 @@ "חיפוש…" "חיפוש" "שאילתת חיפוש" - "נקה שאילתה" - "שלח שאילתה" + "ניקוי שאילתה" + "שליחת שאילתה" "חיפוש קולי" - "האם להפעיל את התכונה \'חקור על ידי מגע\'?" - "%1$s רוצה להפעיל את התכונה \'חקור על ידי מגע\'. כאשר התכונה \'חקור על ידי מגע\' מופעלת, אתה יכול לשמוע או לראות תיאורים של הפריטים שעליהם אצבעך מונחת או לקיים אינטראקציה עם הטאבלט באמצעות תנועות אצבע." + "האם להפעיל את התכונה \'גילוי באמצעות מגע\'?" + "%1$s רוצה להפעיל את התכונה \'גילוי באמצעות מגע\'. כאשר התכונה הזו מופעלת, אפשר לשמוע או לראות תיאורים של הפריטים שעליהם הנחת את האצבע או לקיים אינטראקציה עם הטאבלט באמצעות תנועות." "%1$s רוצה להפעיל את התכונה \'חקור על ידי מגע\'. כאשר התכונה \'חקור על ידי מגע\' מופעלת, אתה יכול לשמוע או לראות תיאורים של הפריטים שעליהם אצבעך מונחת או לקיים אינטראקציה עם הטלפון באמצעות תנועות אצבע." "לפני חודש אחד" "לפני חודש אחד" @@ -1002,7 +1002,7 @@ %d הימים האחרונים %d הימים האחרונים %d הימים האחרונים - יום %d אחרון + היום האחרון (%d) "בחודש שעבר" "ישן יותר" @@ -1044,7 +1044,7 @@ %d שנים %d שנים %d שנים - שנה %d + שנה אחת (%d‏) בעוד %d דקות @@ -1098,7 +1098,7 @@ בעוד %d דקות בעוד %d דקות בעוד %d דקות - בעוד %d דקה + בעוד דקה אחת (%d) בעוד %d שעות @@ -1119,8 +1119,8 @@ בעוד שנה %d "בעיה בווידאו" - "סרטון זה אינו חוקי להעברה כמדיה זורמת למכשיר זה." - "לא ניתן להפעיל סרטון זה." + "לא ניתן להעביר את הסרטון הזה בסטרימינג למכשיר." + "לא ניתן להפעיל את הסרטון הזה." "אישור" "%1$s, %2$s" "צהריים" @@ -1129,15 +1129,15 @@ "חצות" "%1$02d:%2$02d" "%1$d:%2$02d:%3$02d" - "בחר הכל" - "חתוך" - "העתק" + "בחירת הכול" + "חיתוך" + "העתקה" "ההעתקה אל הלוח נכשלה" "הדבק" - "הדבק כטקסט פשוט" - "החלף..." + "הדבקה כטקסט פשוט" + "החלפה..." "מחיקה" - "העתק כתובת אתר" + "‏העתקת כתובת URL" "בחר טקסט" "ביטול" "בצע מחדש" @@ -1147,17 +1147,17 @@ "מחיקה" "שיטת קלט" "פעולות טקסט" - "שטח האחסון אוזל" + "מקום האחסון עומד להיגמר" "ייתכן שפונקציות מערכת מסוימות לא יפעלו" - "‏אין מספיק שטח אחסון עבור המערכת. ודא שיש לך שטח פנוי בגודל 250MB התחל שוב." - "%1$s פועל" + "‏אין מספיק מקום אחסון עבור המערכת. עליך לוודא שיש לך מקום פנוי בנפח של 250MB ולהתחיל שוב." + "אפליקציית %1$s פועלת" "הקש לקבלת מידע נוסף או כדי לעצור את האפליקציה." "אישור" "ביטול" "אישור" "ביטול" "זהירות" - "טוען..." + "בטעינה..." "מופעל" "כבוי" "מסומן" @@ -1165,44 +1165,44 @@ "השלמת פעולה באמצעות" "‏להשלמת הפעולה באמצעות %1$s" "השלם פעולה" - "פתח באמצעות" + "פתיחה באמצעות" "‏פתח באמצעות %1$s" - "פתח" + "פתיחה" "פתיחת קישורים של %1$s באמצעות" "פתיחת קישורים באמצעות" "פתיחת קישורים באמצעות %1$s" "פתיחת קישורים של %1$s באמצעות %2$s" "הענקת גישה" - "ערוך באמצעות" - "‏ערוך באמצעות %1$s" + "עריכה באמצעות" + "‏עריכה באמצעות %1$s" "עריכה" "שיתוף" - "‏שתף באמצעות %1$s" + "‏שיתוף באמצעות %1$s" "שתף" "שליחה באמצעות" "‏שליחה באמצעות %1$s" - "שלח" + "שליחה" "בחר אפליקציה שתשמש כדף הבית" "‏השתמש ב-%1$s כדף הבית" "צלם תמונה" "צלם תמונה באמצעות" "‏צילום תמונה באמצעות %1$s" "צלם תמונה" - "השתמש כברירת מחדל עבור פעולה זו." + "שימוש כברירת מחדל עבור הפעולה הזו." "השתמש באפליקציה אחרת" "‏נקה את הגדרת המחדל ב\'הגדרות מערכת\' <‏ Google Apps‏ < \'הורדות\'." "בחירת פעולה" - "‏בחר אפליקציה עבור התקן ה-USB" - "אין אפליקציות שיכולות לבצע פעולה זו." + "‏בחירת אפליקציה עבור התקן ה-USB" + "אין אפליקציות שיכולות לבצע את הפעולה הזו." "האפליקציה %1$s הפסיקה" "התהליך %1$s הפסיק" "האפליקציה %1$s נעצרת שוב ושוב" "האפליקציה %1$s נעצרת שוב ושוב" - "פתח שוב את האפליקציה" + "פתיחת האפליקציה מחדש" "שליחת משוב" "סגירה" "השתק עד הפעלה מחדש של המכשיר" - "המתן" + "להמתין" "סגור את האפליקציה" "האפליקציה %2$s אינה מגיבה" @@ -1215,10 +1215,10 @@ "הדף אינו מגיב.\n\nהאם אתה רוצה לסגור אותו?" "הפנייה מחדש של אפליקציה" "%1$s פועל כעת." - "%1$s הופעל במקור." + "אפליקציית %1$s הופעלה במקור." "שינוי קנה-מידה" - "הצג תמיד" - "‏אפשר תכונה זו מחדש ב\'הגדרות מערכת\' <‏ Google Apps‏ < \'הורדות\'." + "להציג תמיד" + "‏אפשר להפעיל מחדש את התכונה הזו ב\'הגדרות מערכת\' <‏ Google Apps‏ < \'הורדות\'." "%1$s אינו תומך בהגדרת הגודל הנוכחית של התצוגה, והתנהגותו עשויה להיות בלתי צפויה." "הצג תמיד" "‏%1$s נבנתה לגרסה לא תואמת של מערכת ההפעלה של Android ועלולה להתנהג באופן לא צפוי. ייתכן שקיימת גרסה מעודכנת של האפליקציה." @@ -1231,23 +1231,23 @@ "הפעלת המכשיר מתחילה…" "הפעלת הטלפון מתחילה…" "‏הפעלת Android מתחילה…" - "הפעלת הטאבלט מתחילה…" + "הטאבלט בתהליך הפעלה…" "הפעלת המכשיר מתחילה…" "מתבצעת אופטימיזציה של האחסון." "עדכון המערכת לקראת סיום…" "%1$s מבצעת שדרוג…" - "מבצע אופטימיזציה של אפליקציה %1$d מתוך %2$d." - "מכין את %1$s." + "מתבצעת אופטימיזציה של אפליקציה %1$d מתוך %2$d." + "המערכת מכינה את %1$s." "מפעיל אפליקציות." - "מסיים אתחול." + "תהליך האתחול בשלבי סיום." "%1$s פועל" "יש להקיש כדי לחזור למשחק" "בחירת משחק" "לקבלת ביצועים טובים יותר, רק אחד מבין המשחקים האלה יכול להיות פתוח בכל פעם." "חזרה אל %1$s" "פתיחת %1$s" - "%1$s האפליקציה תיסגר ללא שמירה" - "%1$s חורג מהגבלת הזיכרון" + "אפליקציית %1$s תיסגר ללא שמירה" + "%1$s חורג ממגבלת הזיכרון" "‏Dump של ערימה בשביל %1$s מוכן" "‏Dump של ערימה נאסף. יש להקיש כדי לשתף." "‏האם לשתף את נתוני ה-Dump של הערימה?" @@ -1264,7 +1264,7 @@ "עוצמת קול של התראה" "עוצמת הקול של ההתראות" "עוצמת קול" - "‏עוצמת קול של Bluetooth" + "‏עוצמת הקול של Bluetooth" "עוצמת קול של רינגטון" "עוצמת קול של שיחות" "עוצמת קול של מדיה" @@ -1276,20 +1276,20 @@ "צלילי התראה" "צלילי התראה" "לא ידוע" - "‏היכנס לרשת Wi-Fi" - "היכנס לרשת" + "‏כניסה לרשת Wi-Fi" + "כניסה לרשת" "ל-%1$s אין גישה לאינטרנט" - "הקש לקבלת אפשרויות" + "יש להקיש לצפייה באפשרויות" "לרשת הסלולרית אין גישה לאינטרנט" "לרשת אין גישה לאינטרנט" "‏לא ניתן לגשת לשרת DNS הפרטי" "הקישוריות של %1$s מוגבלת" - "כדי להתחבר למרות זאת יש להקיש" + "יש להקיש כדי להתחבר בכל זאת" "מעבר אל %1$s" "המכשיר משתמש ברשת %1$s כשלרשת %2$s אין גישה לאינטרנט. עשויים לחול חיובים." - "עבר מרשת %1$s לרשת %2$s" + "בוצע מעבר מרשת %1$s לרשת %2$s" "חבילת גלישה" "Wi-Fi" @@ -1298,14 +1298,14 @@ "VPN" "סוג רשת לא מזוהה" - "קבל" + "אישור" "דחה" "הוסף תו" - "‏שולח הודעות 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>." "הדבר ""עלול לגרום לחיובים"" בחשבון המכשיר הנייד שלך." "הדבר יגרום לחיובים בחשבון המכשיר הנייד שלך." "שלח" @@ -1315,7 +1315,7 @@ "אפשר תמיד" "לעולם אל תאפשר" "‏כרטיס ה-SIM הוסר" - "‏הרשת הסלולרית לא תהיה זמינה עד שתפעיל מחדש לאחר הכנסת כרטיס SIM חוקי." + "‏הרשת הסלולרית לא תהיה זמינה עד שתבוצע הפעלה מחדש לאחר הכנסת כרטיס SIM חוקי." "סיום" "‏כרטיס ה-SIM נוסף" "הפעל מחדש את המכשיר כדי לגשת אל הרשת הסלולרית." @@ -1323,21 +1323,21 @@ "הפעלה של השירות הסלולרי" "‏הורדה של אפליקציית הספק כדי להפעיל את כרטיס ה-SIM החדש" "‏ניתן להוריד את האפליקציה %1$s כדי להפעיל את כרטיס ה-SIM החדש" - "הורדת אפליקציה" + "להורדת האפליקציה" "‏ה-SIM החדש הוכנס" - "הקש כדי להגדיר" + "יש להקיש כדי להגדיר" "הגדרת שעה" "הגדרת תאריך" "הגדרה" - "בוצע" + "סיום" "חדש: " - "מטעם %1$s." - "לא דרושים אישורים" + "מאת %1$s." + "לא נדרשות הרשאות" "פעולה זו עשויה לחייב אותך בכסף:" "אישור" "‏טעינת המכשיר הזה באמצעות USB" "‏טעינת המכשיר המחובר באמצעות USB" - "‏העברת קבצים ב-USB מופעלת" + "‏האפשרות להעברת קבצים ב-USB מופעלת" "‏PTP באמצעות USB מופעל" "‏שיתוף אינטרנט בין מכשירים באמצעות USB מופעל" "‏MIDI באמצעות USB מופעל" @@ -1353,7 +1353,7 @@ "יש להקיש כדי להשבית ניפוי באגים אלחוטי" "יש לבחור כדי להשבית ניפוי באגים אלחוטי." "מצב מסגרת בדיקה הופעל" - "כדי להשבית את מצב מסגרת בדיקה צריך לאפס להגדרות היצרן." + "כדי להשבית את מצב \'מסגרת בדיקה\' צריך לאפס להגדרות היצרן." "קונסולה סדרתית מופעלת" "קיימת השפעה על הביצועים. כדי להשבית, יש לבדוק את תוכנת האתחול." "‏יש נוזלים או חלקיקים ביציאת ה-USB" @@ -1363,12 +1363,12 @@ "עיבוד דוח על באג..." "האם לשתף דוח על באג?" "שיתוף דוח על באג…" - "מנהל המערכת ביקש דוח על באג כדי לסייע בפתרון בעיות במכשיר זה. ייתכן שאפליקציות ונתונים ישותפו." + "מנהל המערכת ביקש דוח על באג כדי לסייע בפתרון בעיות במכשיר הזה. ייתכן שאפליקציות ונתונים ישותפו." "שתף" "עדיף שלא" "בחר שיטת הזנה" "להשאיר במסך בזמן שהמקלדת הפיזית פעילה" - "הצג מקלדת וירטואלית" + "הצגת מקלדת וירטואלית" "הגדרת מקלדת פיזית" "הקש כדי לבחור שפה ופריסה" " ABCDEFGHIJKLMNOPQRSTUVWXYZ" @@ -1392,7 +1392,7 @@ "ייתכן שיהיה צורך לפרמט מחדש את המכשיר. יש להקיש כדי להוציא את המדיה." "%s לא נתמך" "המדיה %s לא פועלת" - "מכשיר זה אינו תומך ב-%s זה. הקש כדי להגדיר בפורמט נתמך." + "אין תמיכה ב-%s במכשיר הזה. יש להקיש כדי לבצע הגדרה בפורמט נתמך." "%s לא נתמך במכשיר הזה. בחר כדי להגדיר בפורמט שנתמך." "ייתכן שיהיה צורך לפרמט מחדש את המכשיר" "%s הוסר באופן בלתי צפוי" @@ -1402,52 +1402,52 @@ "הוצאה של %s" "אין להסיר" "הגדרה" - "הוצא" - "גלה" + "הוצאה" + "עיון במדיה" "החלפת פלט" - "%s חסר" + "חסר: %s" "יש להכניס שוב את ההתקן" "מעביר את %s" - "מעביר נתונים" + "מתבצעת העברה של נתונים" "העברת התוכן הסתיימה" "התוכן הועבר אל %s" "לא ניתן היה להעביר תוכן" "יש לנסות שוב להעביר את התוכן" "הוסר" - "הוצא" + "בוצעה הוצאה" "בודק…" "מוכן" "לקריאה בלבד" "הוסר בצורה לא בטוחה" "פגום" "לא נתמך" - "מוציא…" + "מתבצעת הוצאה…" "מפרמט…" "לא הוכנס" "לא נמצאו פעילויות תואמות." "ניתוב פלט מדיה" "מאפשר לאפליקציה לנתב פלט מדיה למכשירים חיצוניים אחרים." "קריאת פעילות התקנה" - "מאפשר לאפליקציה לקרוא הפעלות התקנה. הרשאה זו מאפשרת לה לראות פרטים על התקנות פעילות של חבילות." + "מאפשרת לאפליקציה לקרוא פעילויות התקנה. ההרשאה הזו מאפשרת לה לראות פרטים על התקנות פעילות של חבילות." "בקשה להתקנת חבילות" "מתיר לאפליקציה לבקש התקנה של חבילות." "בקשה למחוק חבילות" "מתיר לאפליקציה לבקש מחיקה של חבילות." "בקשה להתעלם מאופטימיזציות של הסוללה" - "מאפשר לאפליקציה לבקש רשות להתעלם מאופטימיזציות של הסוללה לאפליקציה הזו." + "מאפשרת לאפליקציה לבקש רשות להתעלם מאופטימיזציות של הסוללה לאפליקציה הזו." "הקש פעמיים לבקרת מרחק מתצוגה" "‏לא ניתן להוסיף widget." "התחל" "חיפוש" - "שלח" + "שליחה" "הבא" "סיום" "הקודם" "בצע" - "חייג למספר\nבאמצעות %s" + "חיוג למספר\nבאמצעות %s" "צור איש קשר\nבאמצעות %s" - "האפליקציות הבאות מבקשות אישור לגשת לחשבונך, כעת ובעתיד." - "האם ברצונך לאפשר בקשה זו?" + "האפליקציות הבאות מבקשות אישור לגשת לחשבון שלך, עכשיו ובעתיד." + "לאפשר את הבקשה הזו?" "בקשת גישה" "כן, זה בסדר" "עדיף שלא" @@ -1459,7 +1459,7 @@ "סנכרון" "נגישות" "טפט" - "שנה טפט" + "שינוי טפט" "מאזין להתראות" "‏VR ליסנר" "ספק תנאי" @@ -1467,7 +1467,7 @@ "‏VPN מופעל" "‏VPN מופעל על ידי %s" "הקש כדי לנהל את הרשת." - "מחובר אל %s. הקש כדי לנהל את הרשת." + "בוצע חיבור אל %s. יש להקיש כדי לנהל את הרשת." "‏ה-VPN שמופעל תמיד, מתחבר..." "‏ה-VPN שפועל תמיד, מחובר" "‏אין חיבור ל-VPN שפועל כל הזמן" @@ -1495,11 +1495,11 @@ "שתף" "מצא" "חיפוש באינטרנט" - "חפש את הבא" - "חפש את הקודם" + "מציאת ההתאמה הבאה" + "חיפוש של הקודם" "בקשת מיקום מאת %s" "בקשת מיקום" - "מבוקש על ידי %1$s (%2$s)" + "הבקשה נשלחה על ידי %1$s‏ (%2$s)" "כן" "לא" "בוצעה גישה למיקום בזמן מקרה חירום" @@ -1509,22 +1509,22 @@ "יש %1$d פריטים שנמחקו עבור %2$s , בחשבון %3$s. איזו פעולה ברצונך לבצע?" "מחק את הפריטים" "בטל את פעולות המחיקה" - "אל תעשה דבר כרגע" + "לא לבצע שום פעולה כרגע" "בחירת חשבון" "הוספת חשבון" "הוספת חשבון" "הוסף" "הפחת" "%s לחיצה ארוכה." - "הסט למעלה כדי להוסיף ולמטה כדי להפחית." + "צריך להסיט למעלה כדי להוסיף ולמטה כדי להפחית." "הוספת דקה" - "הפחת דקה" - "הוסף שעה" - "הפחת שעה" - "‏הגדר PM" - "‏הגדר AM" + "הפחתת דקה" + "הוספת שעה" + "הפחתת שעה" + "‏הגדרת PM" + "‏הגדרת AM" "הוסף חודש" - "הפחת חודש" + "הפחתת חודש" "הוסף יום" "הפחת יום" "הוסף שנה" @@ -1541,15 +1541,15 @@ "בחר אפליקציה" "לא ניתן היה להפעיל את %s" "שתף עם" - "שתף עם %s" - "ידית להחלקה. לחיצה ארוכה." + "שיתוף עם %s" + "נקודת אחיזה להחלקה. לחיצה ארוכה." "החלק לביטול נעילה." "נווט לדף הבית" - "נווט למעלה" + "ניווט למעלה" "אפשרויות נוספות" "‏%1$s‏, %2$s" "‏%1$s‏, %2$s‏, %3$s" - "אחסון שיתוף פנימי" + "אחסון פנימי משותף" "‏כרטיס SD" "‏כרטיס SD של %s" "‏כונן USB" @@ -1561,7 +1561,7 @@ "הגעת למגבלה של חבילת הגלישה" "‏הגעת למגבלת נתוני Wi-Fi" "הנתונים הושהו להמשך המחזור" - "חריגה מהמגבלה של חבילת הגלישה" + "חרגת מהמגבלה של חבילת הגלישה" "‏חריגה ממגבלת נתוני ה-Wi-Fi" "חרגת ב-%s מעבר למגבלה המוגדרת" "נתוני הרקע מוגבלים" @@ -1584,7 +1584,7 @@ "‏טביעת אצבע SHA-256:" "‏טביעת אצבע SHA-1:" "הצג הכל" - "בחר פעילות" + "בחירת פעילות" "שתף עם" "שולח…" "להפעיל את הדפדפן?" @@ -1602,14 +1602,14 @@ "מערכת" "‏אודיו Bluetooth" "צג אלחוטי" - "העבר" + "‏העברה (cast)" "התחברות למכשיר" "העברת מסך אל מכשיר" - "מחפש מכשירים…" + "המערכת מחפשת מכשירים…" "הגדרות" "נתק" "סורק..." - "מתחבר..." + "מתבצע חיבור..." "זמין" "לא זמין" "בשימוש" @@ -1635,42 +1635,42 @@ "‏כרטיס ה-SIM מושבת כעת. הזן קוד PUK כדי להמשיך. פנה אל הספק לפרטים." "הזן את קוד הגישה הרצוי" "אשר את קוד הגישה הרצוי" - "‏מבטל נעילה של כרטיס SIM…" + "‏מתבצע ביטול נעילה של כרטיס SIM…" "קוד גישה שגוי." "הקלד קוד גישה שאורכו 4 עד 8 ספרות." "‏קוד PUK צריך להיות בן 8 ספרות." - "‏הזן מחדש את קוד PUK הנכון. ניסיונות חוזרים ישביתו לצמיתות את כרטיס ה-SIM." + "‏יש להזין שוב את קוד ה-PUK הנכון. ניסיונות חוזרים ישביתו את כרטיס ה-SIM באופן סופי." "קודי הגישה אינם תואמים" "ניסיונות רבים מדי לשרטוט קו ביטול נעילה." - "‏כדי לבטל את הנעילה, היכנס באמצעות חשבון Google שלך." + "‏כדי לבטל את הנעילה, עליך להיכנס באמצעות חשבון Google שלך." "שם משתמש (אימייל)" "סיסמה" "כניסה" "שם משתמש או סיסמה לא חוקיים." "‏שכחת את שם המשתמש או הסיסמה?\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 ניסיונות שגויים לביטול נעילת הטלפון. לאחר %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 יעבור כעת איפוס לברירת המחדל של היצרן." "ביצעת %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 שניות." + "‏שרטטת קו ביטול נעילה שגוי %1$d פעמים. לאחר %2$d ניסיונות כושלים נוספים, יהיה צורך לבטל את הנעילה של מכשיר ה-Android TV באמצעות חשבון אימייל.\n\n יש לנסות שוב בעוד %3$d שניות." "שרטטת את קו ביטול הנעילה באופן שגוי %1$d פעמים. לאחר %2$d ניסיונות כושלים נוספים, תתבקש לבטל את נעילת הטלפון באמצעות חשבון אימייל‏.\n\nנסה שוב בעוד %3$d שניות." " — " - "הסר" + "הסרה" "האם להעלות את עוצמת הקול מעל לרמה המומלצת?\n\nהאזנה בעוצמת קול גבוהה למשכי זמן ממושכים עלולה לפגוע בשמיעה." "להשתמש בקיצור הדרך לתכונת הנגישות?" "כשקיצור הדרך מופעל, לחיצה על שני לחצני עוצמת הקול למשך שלוש שניות מפעילה את תכונת הנגישות." "להפעיל את תכונות הנגישות?" - "‏לחיצה ארוכה על שני לחצני עוצמת הקול למשך מספר שניות מפעילה את תכונות הנגישות. בעקבות זאת, ייתכן שאופן הפעולה של המכשיר ישתנה.\n\nהתכונות הנוכחיות:\n%1$s\nניתן לשנות תכונות נבחרות ב\'הגדרות\' > \'נגישות\'." + "לחיצה ארוכה על שני לחצני עוצמת הקול למשך מספר שניות מפעילה את תכונות הנגישות. בעקבות זאת, ייתכן שאופן הפעולה של המכשיר ישתנה.\n\nהתכונות הנוכחיות:\n%1$s\nניתן לשנות את התכונות שנבחרו ב\'הגדרות\' > \'נגישות\'." " • %1$s\n" "להפעיל את %1$s?" - "‏ניתן ללחוץ על שני מקשי עוצמת הקול למשך מספר שניות כדי להפעיל את %1$s, תכונת נגישות. בעקבות זאת, ייתכן שאופן הפעולה של המכשיר ישתנה.\n\nאפשר לשנות את מקשי הקיצור האלה לתכונה נוספת ב\'הגדרות\' > \'נגישות\'." + "לחיצה על שני מקשי עוצמת הקול למשך מספר שניות מפעילה את תכונת הנגישות %1$s. ייתכן שאופן הפעולה של המכשיר ישתנה בעקבות זאת.\n\nאפשר לשנות את מקשי הקיצור האלה לתכונה אחרת ב\'הגדרות\' > \'נגישות\'." "אני רוצה להפעיל" "לא להפעיל" "מופעל" @@ -1691,10 +1691,10 @@ "עריכת קיצורי הדרך" "סיום" "כבה את קיצור הדרך" - "השתמש בקיצור הדרך" + "שימוש בקיצור הדרך" "היפוך צבעים" "תיקון צבעים" - "לחצני עוצמת הקול נלחצו בלחיצה ארוכה. %1$s הופעל." + "לחצני עוצמת הקול נלחצו בלחיצה ארוכה. שירות %1$s הופעל." "לחצני עוצמת הקול נלחצו בלחיצה ארוכה. %1$s הושבת." "יש ללחוץ לחיצה ארוכה על שני לחצני עוצמת הקול למשך שלוש שניות כדי להשתמש בשירות %1$s" "יש לבחור תכונה שתופעל בעת לחיצה על לחצן הנגישות:" @@ -1705,12 +1705,12 @@ "כדי לעבור בין תכונות, יש להחליק כלפי מעלה בעזרת שלוש אצבעות ולהחזיק." "הגדלה" "המשתמש הנוכחי %1$s." - "עובר אל %1$s…" + "מעבר אל %1$s…" "מתבצע ניתוק של %1$s…" "בעלים" "שגיאה" "מנהל המערכת שלך אינו מתיר שינוי זה" - "לא נמצאה אפליקציה שתומכת בפעולה זו" + "לא נמצאה אפליקציה שתומכת בפעולה הזו" "ביטול" "ISO A0" "ISO A1" @@ -1800,46 +1800,46 @@ "לא ידוע" "שירות ההדפסה לא הופעל" "שירות %s מותקן" - "הקש כדי להפעיל" - "הזן את קוד הגישה של מנהל המכשיר" + "יש להקיש כדי להפעיל את השירות" + "יש להזין את קוד האימות של מנהל המכשיר" "הזן קוד גישה" "שגוי" "קוד גישה נוכחי" - "קוד גישה חדש" + "קוד אימות חדש" "אשר את קוד הגישה החדש" "צור קוד גישה לשינוי הגבלות" - "קודי הגישה לא תואמים. נסה שוב." + "קודי האימות לא תואמים. יש לנסות שוב." "קוד הגישה קצר מדי. חייב להיות באורך 4 ספרות לפחות." - נסה שוב בעוד %d שניות - נסה שוב בעוד %d שניות - נסה שוב בעוד %d שניות - נסה שוב בעוד שנייה אחת + יש לנסות שוב בעוד %d שניות + יש לנסות שוב בעוד %d שניות + יש לנסות שוב בעוד %d שניות + יש לנסות שוב בעוד שנייה אחת - "נסה שוב מאוחר יותר" + "יש לנסות שוב מאוחר יותר" "צפייה במסך מלא" "כדי לצאת, פשוט מחליקים אצבע מלמעלה למטה." "הבנתי" - "בוצע" + "סיום" "מחוון שעות מעגלי" "מחוון דקות מעגלי" "בחר שעות" - "בחר דקות" + "בחירת דקות" "בחר חודש ויום" - "בחר שנה" + "בחירת שנה" "%1$s נמחק" "עבודה %1$s" "%1$s שני בעבודה" "%1$s שלישי בעבודה" "בקש קוד גישה לפני ביטול הצמדה" - "בקש קו ביטול נעילה לפני ביטול הצמדה" + "צריך לבקש קו ביטול נעילה לפני ביטול הצמדה" "בקש סיסמה לפני ביטול הצמדה" "הותקנה על ידי מנהל המערכת" "עודכנה על ידי מנהל המערכת" "נמחקה על ידי מנהל המערכת" "אישור" "‏כדי להאריך את חיי הסוללה, התכונה \'חיסכון בסוללה\':\n\n• מפעילה עיצוב כהה\n• מכבה או מגבילה פעילות ברקע, חלק מהאפקטים החזותיים ותכונות אחרות כמו Ok Google\n\n""למידע נוסף" - "‏כדי להאריך את חיי הסוללה, התכונה \'חיסכון בסוללה\':\n\n• מפעילה עיצוב כהה\n• מכבה או מגבילה פעילות ברקע, חלק מהאפקטים החזותיים ותכונות אחרות כמו Ok Google" + "‏כדי להאריך את חיי הסוללה, התכונה \'חיסכון בסוללה\':\n\n• מפעילה עיצוב כהה\n• משביתה או מגבילה פעילות ברקע, חלק מהאפקטים החזותיים ותכונות אחרות כמו Hey Google" "‏כדי לסייע בהפחתת השימוש בנתונים, חוסך הנתונים (Data Saver) מונע מאפליקציות מסוימות שליחה או קבלה של נתונים ברקע. אפליקציה שבה נעשה שימוש כרגע יכולה לגשת לנתונים, אבל בתדירות נמוכה יותר. המשמעות היא, למשל, שתמונות יוצגו רק לאחר שמקישים עליהן." "להפעיל את חוסך הנתונים?" "הפעלה" @@ -1904,7 +1904,7 @@ "אירוע" "שינה" "%1$s משתיק חלק מהצלילים" - "קיימת בעיה פנימית במכשיר שלך, וייתכן שהתפקוד שלו לא יהיה יציב עד שתבצע איפוס לנתוני היצרן." + "קיימת בעיה פנימית במכשיר שלך, וייתכן שהוא לא יתפקד כראוי עד שיבוצע איפוס לנתוני היצרן." "קיימת בעיה פנימית במכשיר שלך. לקבלת פרטים, צור קשר עם היצרן." "‏בקשת USSD שונתה לשיחה רגילה" "‏בקשת USSD שונתה לבקשת SS" @@ -1924,7 +1924,7 @@ "‏יציאת USB בציוד היקפי" "אפשרויות נוספות" "סגור את האפשרויות הנוספות" - "הגדל" + "הגדלה" "סגירה" "%1$s: %2$s" @@ -1937,7 +1937,7 @@ "עליך להגדיר את החשיבות של ההתראות האלה." "ההודעה חשובה בשל האנשים המעורבים." "התראות אפליקציה בהתאמה אישית" - "האם לאפשר לאפליקציה %1$s ליצור משתמש חדש באמצעות %2$s (כבר קיים משתמש לחשבון הזה) ?" + "האם לאפשר לאפליקציה %1$s ליצור משתמש חדש באמצעות %2$s (כבר קיים משתמש לחשבון הזה)?" "האם לאפשר לאפליקציה %1$s ליצור משתמש חדש באמצעות %2$s ?" "הוספת שפה" "העדפת אזור" @@ -1946,7 +1946,7 @@ "כל השפות" "כל האזורים" "חיפוש" - "האפליקציה אינה זמינה" + "האפליקציה לא זמינה" "האפליקציה %1$s לא זמינה כרגע. את הזמינות שלה אפשר לנהל באפליקציה %2$s." "מידע נוסף" "ביטול ההשהיה של האפליקציה" @@ -1958,13 +1958,13 @@ "‏האפליקציה הזו עוצבה לגרסה ישנה יותר של Android וייתכן שלא תפעל כראוי. ניתן לבדוק אם יש עדכונים או ליצור קשר עם המפתח." "האם יש עדכון חדש?" "יש לך הודעות חדשות" - "‏פתח את אפליקציית ה-SMS כדי להציג" + "‏יש לפתוח את אפליקציית ה-SMS כדי להציג" "ייתכן שחלק מהפונקציונליות תהיה מוגבלת" "פרופיל העבודה נעול" "הקש לביטול נעילת פרופיל העבודה" - "מחובר אל %1$s" + "התבצע חיבור אל %1$s" "הקש כדי להציג קבצים" - "הצמד" + "הצמדה" "הצמדה של‏ %1$s" "בטל הצמדה" "ביטול ההצמדה של %1$s" @@ -1983,15 +1983,15 @@ "חדשות וכתבי עת" "מפות וניווט" "פרודוקטיביות" - "שטח האחסון במכשיר" + "נפח האחסון במכשיר" "‏ניקוי באגים ב-USB" "שעה" "דקה" "הגדרת שעה" - "הזן שעה חוקית" + "יש להזין שעה חוקית" "מהי השעה הנכונה" "העבר למצב קלט טקסט לצורך הזנת השעה" - "העבר למצב שעון לצורך הזנת השעה" + "מעבר למצב שעון לצורך הזנת השעה" "אפשרויות מילוי אוטומטי" "שמירה לצורך מילוי אוטומטי" "לא ניתן למלא את התוכן באופן אוטומטי" @@ -2024,11 +2024,11 @@ "כרטיס" "שם משתמש" "כתובת אימייל" - "הישאר רגוע וחפש מחסה בקרבת מקום." + "חשוב להישאר רגועים ולחפש מחסה בקרבת מקום." "יש להתפנות מיידית מאזורים הסמוכים לחופים ולנהרות למקום בטוח יותר, כגון שטח גבוה יותר." "הישאר רגוע וחפש מחסה בקרבת מקום." "בדיקה של הודעות חירום" - "השב" + "תשובה" "‏כרטיס ה-SIM לא מורשה לזיהוי קולי" "‏ניהול התצורה של כרטיס ה-SIM לא מתאים לזיהוי קולי" @@ -2036,7 +2036,7 @@ "הטלפון לא מורשה לזיהוי קולי" "‏SIM %d אינו מאושר לשימוש ברשת" "‏אין ניהול תצורה עבור SIM %d" - "‏SIM %d אינו מאושר לשימוש ברשת" + "‏SIM‏ %d אינו מאושר לשימוש ברשת" "‏SIM %d אינו מאושר לשימוש ברשת" "חלון קופץ" "+ %1$d" @@ -2046,7 +2046,7 @@ "לא ניתן היה לשחזר את קיצור הדרך" "מקש הקיצור מושבת" "הסרת התקנה" - "רוצה לפתוח בכל זאת" + "לפתוח בכל זאת" "אותרה אפליקציה מזיקה" "%1$s רוצה להציג חלקים מ-%2$s" "עריכה" @@ -2055,7 +2055,7 @@ "שינויי מערכת" "נא לא להפריע" "חדש: מצב \'נא לא להפריע\' מסתיר התראות" - "ניתן להקיש כדי לקבל מידע נוסף ולשנות." + "אפשר להקיש כדי לקבל מידע נוסף ולבצע שינויים." "ההגדרה \'נא לא להפריע\' השתנתה" "יש להקיש כדי לבדוק מה חסום." "מערכת" @@ -2082,7 +2082,7 @@ "תמונה" "תמונה בפורמט %1$s" "ארכיון" - "קובץ ארכיון %1$s" + "קובץ ארכיון מסוג %1$s" "מסמך" "מסמך %1$s" "גיליון אלקטרוני" @@ -2190,8 +2190,8 @@ "‏נשלחת בקשה לביטול נעילה של PUK…" "‏נשלחת בקשה לביטול נעילה של PUK…" "‏נשלחת בקשה לביטול נעילה של PUK…" - "‏נכשלה הבקשה לביטול הנעילה של רשת SIM." - "‏נכשלה הבקשה לביטול הנעילה של תת-קבוצה ברשת SIM." + "‏לא ניתן היה לבטל את הנעילה של רשת SIM." + "‏לא ניתן היה לבטל את הנעילה של תת-קבוצה ברשת SIM." "‏נכשלה הבקשה לביטול הנעילה של ספק שירות SIM." "‏נכשלה הבקשה לביטול הנעילה של כרטיס SIM עסקי." "‏נכשלה הבקשה לביטול נעילת SIM." @@ -2199,27 +2199,27 @@ "‏נכשלה הבקשה לביטול הנעילה של RUIM network2." "‏נכשלה הבקשה לביטול נעילה של RUIM hrpd." "‏נכשלה הבקשה לביטול הנעילה של כרטיס RUIM עסקי." - "‏נכשלה הבקשה לביטול הנעילה של ספק שירות RUIM." - "‏נכשלה הבקשה לביטול הנעילה של כרטיס RUIM." + "‏לא ניתן היה לבטל את הנעילה של ספק שירות RUIM." + "‏לא ניתן היה לבטל את הנעילה של כרטיס RUIM." "‏נכשל ביטול נעילה של PUK." "‏נכשל ביטול נעילה של PUK." - "‏נכשל ביטול נעילה של PUK." + "‏לא ניתן היה לבטל את הנעילה של PUK." "‏נכשל ביטול נעילה של PUK." - "‏נכשל ביטול נעילה של PUK." - "‏נכשל ביטול נעילה של PUK." - "‏נכשל ביטול נעילה של PUK." - "‏נכשל ביטול נעילה של PUK." - "‏נכשל ביטול נעילה של PUK." - "‏נכשל ביטול נעילה של PUK." + "‏לא ניתן היה לבטל את הנעילה של PUK." + "‏לא ניתן היה לבטל נעילה של PUK." + "‏לא ניתן היה לבטל נעילה של PUK." + "‏לא ניתן היה לבטל את הנעילה של PUK." + "‏לא ניתן היה לבטל את הנעילה של PUK." + "‏לא ניתן היה לבטל נעילה של PUK." "‏נכשל ביטול נעילה של PUK." - "‏נכשלה הבקשה לביטול נעילת SPN." - "‏נכשלה הבקשה לביטול הנעילה של PLMN לבית כשווה-ערך ל-SP." + "‏לא ניתן היה לבטל את נעילת SPN." + "‏לא ניתן היה לבטל את הנעילה של PLMN לבית כשווה-ערך ל-SP." "‏נכשלה הבקשה לביטול נעילה של ICCID." - "‏נכשלה הבקשה לביטול נעילה של IMPI." - "נכשלה הבקשה לביטול הנעילה של ספק שירות של תת-קבוצה ברשת." + "‏לא ניתן היה לבטל נעילה של IMPI." + "לא ניתן היה לבטל הנעילה של ספק שירות של תת-קבוצה ברשת." "‏ביטול הנעילה של רשת SIM בוצע בהצלחה." "‏ביטול הנעילה של תת-קבוצה ברשת SIM בוצע בהצלחה." - "‏ביטול הנעילה של ספק שירות SIM בוצע בהצלחה ." + "‏ביטול הנעילה של ספק שירות ה-SIM בוצע." "‏ביטול הנעילה של כרטיס SIM עסקי בוצע בהצלחה." "‏ביטול נעילת SIM בוצע בהצלחה." "‏ביטול הנעילה של RUIM network1 בוצע בהצלחה." @@ -2237,7 +2237,7 @@ "‏ביטול נעילה של PUK בוצע בהצלחה." "‏ביטול נעילה של PUK בוצע בהצלחה." "‏ביטול נעילה של PUK בוצע בהצלחה." - "‏ביטול נעילה של PUK בוצע בהצלחה." + "‏הנעילה של PUK בוטלה." "‏ביטול נעילה של PUK בוצע בהצלחה." "‏ביטול נעילת SPN בוצע בהצלחה." "‏בוצע בהצלחה ביטול הנעילה של PLMN לבית כשווה-ערך ל-SP." diff --git a/core/res/res/values-ja/strings.xml b/core/res/res/values-ja/strings.xml index 44c901cebac..4a8179142c5 100644 --- a/core/res/res/values-ja/strings.xml +++ b/core/res/res/values-ja/strings.xml @@ -524,10 +524,10 @@ "このアプリに画面ロックの複雑さレベル(高、中、低、なし)を認識することを許可します。複雑さレベルは、画面ロックの文字数の範囲やタイプを示すものです。アプリから一定レベルまで画面ロックを更新するよう推奨されることもありますが、ユーザーは無視したり別の操作を行ったりできます。画面ロックは平文で保存されないため、アプリが正確なパスワードを知ることはありません。" "生体認証ハードウェアの使用" "生体認証ハードウェアを認証に使用することをアプリに許可します" - "指紋ハードウェアの管理" + "指紋認証ハードウェアの管理" "使用する指紋テンプレートの追加や削除を行う方法の呼び出しをアプリに許可します。" - "指紋ハードウェアの使用" - "指紋ハードウェアを認証に使用することをアプリに許可します" + "指紋認証ハードウェアの使用" + "指紋認証ハードウェアを認証に使用することをアプリに許可します" "音楽コレクションの変更" "音楽コレクションの変更をアプリに許可します。" "動画コレクションの変更" @@ -552,7 +552,7 @@ "指紋認証を完了しました" "顔を認証しました" "顔を認証しました。[確認] を押してください" - "指紋ハードウェアは使用できません。" + "指紋認証ハードウェアは使用できません。" "指紋を保存できません。既存の指紋を削除してください。" "指紋の読み取りがタイムアウトになりました。もう一度お試しください。" "指紋の操作をキャンセルしました。" @@ -2040,9 +2040,9 @@ "電源ダイアログ" "ロック画面" "スクリーンショット" - "画面上のユーザー補助のショートカット" - "画面上のユーザー補助のショートカットの選択メニュー" - "ユーザー補助のショートカット" + "画面上のユーザー補助機能のショートカット" + "画面上のユーザー補助機能のショートカットの選択メニュー" + "ユーザー補助機能のショートカット" "%1$s のキャプション バーです。" "%1$s は RESTRICTED バケットに移動しました。" "%1$s:" diff --git a/core/res/res/values-kk/strings.xml b/core/res/res/values-kk/strings.xml index 04020fb643a..18476482fa4 100644 --- a/core/res/res/values-kk/strings.xml +++ b/core/res/res/values-kk/strings.xml @@ -665,7 +665,7 @@ "Иесіне оператордың хабар алмасу қызметінің жоғарғы деңгейлі интерфейсіне байластыруға рұқсат етеді. Қалыпты қолданбалар үшін ешқашан қажет болмайды." "оператор қызметтеріне қосылу" "Иесіне оператор қызметтеріне қосылуға мүмкіндік береді. Қалыпты қолданбалар үшін қажет болмайды." - "\"Мазаламау\" режиміне кіру" + "Мазаламау режиміне кіру" "Қолданбаға «Мазаламау» конфигурациясын оқу және жазу мүмкіндігін береді." "рұқсаттарды пайдалану туралы деректерді көру" "Пайдаланушы қолданбаға берілетін рұқсаттарды басқара алады. Ондай рұқсаттар әдеттегі қолданбаларға керек емес." @@ -1618,7 +1618,7 @@ "Құлыпты ашу өрнегін %1$d рет дұрыс сызбадыңыз. Енді тағы %2$d рет қателессеңіз, Android TV құрылғыңыздың құлпын ашу үшін есептік жазбаңызға кіру керек болады.\n\n %3$d секундтан кейін қайталап көріңіз." "Бекітпені ашу кескінін %1$d рет қате сыздыңыз. %2$d сәтсіз әрекеттен кейін телефоныңызды есептік жазба арқылы ашу өтінішін аласыз. \n\n %3$d секундтан кейін қайта әрекеттеніңіз." " — " - "Алып тастау" + "Жою" "Дыбыс деңгейін ұсынылған деңгейден көтеру керек пе?\n\nЖоғары дыбыс деңгейінде ұзақ кезеңдер бойы тыңдау есту қабілетіңізге зиян тигізуі мүмкін." "Арнайы мүмкіндік төте жолын пайдалану керек пе?" "Түймелер тіркесімі қосулы кезде, екі дыбыс түймесін 3 секунд басып тұрсаңыз, \"Арнайы мүмкіндіктер\" функциясы іске қосылады." @@ -1661,7 +1661,7 @@ "Бір функциядан екінші функцияға ауысу үшін үш саусақпен жоғары қарай сырғытып, ұстап тұрыңыз." "Ұлғайту" "Ағымдағы пайдаланушы %1$s." - "%1$s ауысу орындалуда…" + "%1$s профиліне ауысу…" "%1$s ішінен шығу…" "Құрылғы иесі" "Қателік" @@ -1793,9 +1793,9 @@ "Әкімші жойған" "Жарайды" "Батарея жұмысының ұзақтығын арттыру үшін Батареяны үнемдеу режимі:\n\n•қараңғы тақырыпты іске қосады;\n•фондық әрекеттерді, кейбір көрнекі әсерлерді және \"Ok Google\" сияқты басқа да функцияларды өшіреді не шектейді.\n\n""Толығырақ" - "Батарея ұзағырақ жұмыс істеуі үшін, Battery Saver:\n\n• қараңғы тақырыпты қосады;\n•фондық жұмысты, кейбір визуалды әсерлерді және \"Ok Google\" сияқты басқа функцияларды өшіреді не шектейді." - "Дерек шығынын азайту үшін Data Saver функциясы кейбір қолданбаларға деректерді фондық режимде жіберуге және алуға жол бермейді. Ашық тұрған қолданба деректерді пайдаланады, бірақ шектеулі шамада (мысалы, кескіндер оларды түрткенге дейін көрсетілмейді)." - "Data Saver функциясын қосу керек пе?" + "Батарея ұзағырақ жұмыс істеуі үшін, Батареяны үнемдеу режимі:\n\n• қараңғы тақырыпты қосады;\n•фондық жұмысты, кейбір визуалды әсерлерді және \"Ok Google\" сияқты басқа функцияларды өшіреді не шектейді." + "Дерек шығынын азайту үшін Трафикті үнемдеу функциясы кейбір қолданбаларға деректерді фондық режимде жіберуге және алуға жол бермейді. Ашық тұрған қолданба деректерді пайдаланады, бірақ шектеулі шамада (мысалы, кескіндер оларды түрткенге дейін көрсетілмейді)." + "Трафикті үнемдеу функциясын қосу керек пе?" "Қосу" %1$d минут бойы (%2$s дейін) @@ -1832,7 +1832,7 @@ "%1$s дейін" "%1$s дейін (келесі дабыл)" "Өшірілгенге дейін" - "\"Мазаламау\" режимін өшіргенше" + "Мазаламау режимін өшіргенше" "%1$s/%2$s" "Тасалау" "Мазаламау" @@ -1987,10 +1987,10 @@ "Қоңыраулар мен хабарландырулардың вибрациясы болады" "Қоңыраулар мен хабарландырулардың дыбыстық сигналы өшіріледі" "Жүйе өзгерістері" - "\"Мазаламау\" режимі" - "Жаңа: \"Мазаламау\" режимі хабарландыруларды жасыруда" + "Мазаламау режимі" + "Жаңа: Мазаламау режимі хабарландыруларды жасыруда" "Толығырақ ақпарат алу және өзгерту үшін түртіңіз." - "\"Мазаламау\" режимі өзгерді" + "Мазаламау режимі өзгерді" "Түймені түртіп, неге тыйым салынатынын көріңіз." "Жүйе" "Параметрлер" @@ -1999,9 +1999,9 @@ "экранда басқа қолданбалардың үстінен көрсету" "Режим туралы хабарландыру" "Батарея заряды азаюы мүмкін" - "Батарея ұзаққа жетуі үшін, Battery Saver іске қосылды" + "Батарея ұзаққа жетуі үшін, Батареяны үнемдеу режимі іске қосылды" "Батареяны үнемдеу режимі" - "Battery Saver өшірілді" + "Батареяны үнемдеу режимі өшірілді" "Телефонның заряды жеткілікті. Функцияларға енді шектеу қойылмайды." "Планшеттің заряды жеткілікті. Функцияларға енді шектеу қойылмайды." "Құрылғының заряды жеткілікті. Функцияларға енді шектеу қойылмайды." diff --git a/core/res/res/values-km/strings.xml b/core/res/res/values-km/strings.xml index 43f0a1ce43b..95b253f25d7 100644 --- a/core/res/res/values-km/strings.xml +++ b/core/res/res/values-km/strings.xml @@ -1093,7 +1093,7 @@ "កាត់" "ចម្លង" "មិនអាច​ចម្លងទៅ​អង្គចងចាំទេ" - "បិទ​ភ្ជាប់" + "ដាក់ចូល" "បិទភ្ជាប់ជាអត្ថបទធម្មតា" "ជំនួស..." "លុប" diff --git a/core/res/res/values-kn/strings.xml b/core/res/res/values-kn/strings.xml index 9b226889bd4..37d20495cbd 100644 --- a/core/res/res/values-kn/strings.xml +++ b/core/res/res/values-kn/strings.xml @@ -100,7 +100,7 @@ "ಪೀರ್ ವಿನಂತಿಸಿಕೊಂಡ TTY ಮೋಡ್ HCO" "ಪೀರ್ ವಿನಂತಿಸಿಕೊಂಡ TTY ಮೋಡ್ VCO" "ಪೀರ್ ವಿನಂತಿಸಿಕೊಂಡ TTY ಮೋಡ್ ಆಫ್ ಆಗಿದೆ" - "ಧ್ವನಿ" + "Voice" "ಡೇಟಾ" "ಫ್ಯಾಕ್ಸ್" "SMS" @@ -1661,7 +1661,7 @@ "ವೈಶಿಷ್ಟ್ಯಗಳ ನಡುವೆ ಬದಲಿಸಲು, ಮೂರು ಬೆರಳುಗಳನ್ನು ಬಳಸಿ ಮೇಲಕ್ಕೆ ಸ್ವೈಪ್ ಮಾಡಿ ಮತ್ತು ಒತ್ತಿ ಹಿಡಿಯಿರಿ." "ಹಿಗ್ಗಿಸುವಿಕೆ" "ಪ್ರಸ್ತುತ ಬಳಕೆದಾರರು %1$s." - "%1$s ಗೆ ಬದಲಾಯಿಸಲಾಗುತ್ತಿದೆ…" + "%1$sಗೆ ಬದಲಾಯಿಸಲಾಗುತ್ತಿದೆ…" "%1$s ಅವರನ್ನು ಲಾಗ್‌ ಔಟ್‌ ಮಾಡಲಾಗುತ್ತಿದೆ…" "ಮಾಲೀಕರು" "ದೋಷ" diff --git a/core/res/res/values-ko/strings.xml b/core/res/res/values-ko/strings.xml index 636de4e19f7..7dcbaa00c47 100644 --- a/core/res/res/values-ko/strings.xml +++ b/core/res/res/values-ko/strings.xml @@ -1661,7 +1661,7 @@ "기능 간에 전환하려면 세 손가락을 사용하여 위로 스와이프한 다음 잠시 기다립니다." "확대" "현재 사용자는 %1$s님입니다." - "%1$s(으)로 전환하는 중…" + "%1$s로 전환하는 중…" "%1$s님을 로그아웃하는 중…" "소유자" "오류" @@ -1999,7 +1999,7 @@ "화면에서 다른 앱 위에 표시" "루틴 모드 정보 알림" "평소에 충전하는 시간 전에 배터리가 소진될 수 있습니다." - "배터리 수명을 연장하기 위해 배터리 세이버가 활성화되었습니다." + "배터리 수명을 연장하기 위해 절전 모드가 활성화되었습니다." "절전 모드" "절전 모드가 사용 중지되었습니다" "휴대전화의 배터리가 충분하므로 기능이 더 이상 제한되지 않습니다" diff --git a/core/res/res/values-ky/strings.xml b/core/res/res/values-ky/strings.xml index d9ea68602cf..6420e45fe02 100644 --- a/core/res/res/values-ky/strings.xml +++ b/core/res/res/values-ky/strings.xml @@ -290,7 +290,7 @@ "Батареянын кубаты жана трафиктин көлөмү жөнүндө билүү үчүн таптап коюңуз" "%1$s, %2$s" "Коопсуз режим" - "Android тутуму" + "Android системасы" "Жеке профилге которулуу" "Жумуш профилине которулуу" "Байланыштар" @@ -306,7 +306,7 @@ "Микрофон" "аудио жаздыруу" "Кыймыл-аракет" - "кыймыл-аракетиңизге мүмкүнчүлүк алат" + "кыймыл-аракеттериңизге көз салып турганга мүмкүнчүлүк алат" "Камера" "сүрөт жана видео тартууга" "Чалуулар тизмеси" @@ -324,7 +324,7 @@ "Көрүнүштү чоңойтуп кичирейтет" "Экрандагы сүрөттү тууралап жайгаштырып, өлчөмүн өзгөртөт." "Жаңсоолорду аткаруу" - "Таптап, серпип, чымчып жана башка жаңсоолорду аткара алат." + "Таптап, сүрүп, чымчып жана башка жаңсоолорду аткара алат." "Манжа изинин жаңсоолору" "Түзмөктөгү манжа изинин сенсорунда жасалган жаңсоолорду жаздырып алат." "Скриншот тартып алуу" @@ -871,7 +871,7 @@ "Сиз телефонду бөгөттөн чыгарууга %d жолу туура эмес аракет кылдыңыз. Телефон баштапкы абалына келтирилет." "%d секунддан кийин кайталаңыз." "Сүрөт үлгүсүн унутуп калдыңызбы?" - "Каттоо эсеби менен кулпусун ачуу" + "Аккаунт менен кулпусун ачуу" "Өтө көп үлгү киргизүү аракети болду" "Бөгөттөн чыгарыш үчүн, Google эсебиңиз менен кириңиз." "Колдонуучунун аты (электрондук почта)" @@ -996,7 +996,7 @@ Акыркы %d күн Акыркы %d күн - "Өткөн ай" + "Акыркы ай" "Эскирээк" "%s күнү" "саат %s" @@ -1177,16 +1177,16 @@ "%1$s азыр иштеп жатат." "Башында %1$s жүргүзүлгөн." "Шкала" - "Ар дайым көрсөтүлсүн" + "Ар дайым көрүнсүн" "Муну тутум жөндөөлөрүнөн кайра иштетүү > Колдонмолор > Жүктөлүп алынган." "%1$s колдонмосу көрүнүштүн тандалган өлчөмүн экранда көрсөтө албайт жана туура эмес иштеши мүмкүн." - "Ар дайым көрсөтүлсүн" + "Ар дайым көрүнсүн" "%1$s Android OS тутуму менен иштеген түзмөктүн шайкеш келбеген версиясы үчүн орнотулган колдонмо жана туура эмес иштеши мүмкүн. Колдонмонун жаңыртылган версиясы жеткиликтүү болушу мүмкүн." - "Ар дайым көрсөтүлсүн" + "Ар дайым көрүнсүн" "Жаңыртууну издөө" "%1$s колдонмосу (%2$s процесси) өз алдынча иштеткен StrictMode саясатын бузду." "%1$s процесси өзүнүн мажбурланган StrictMode саясатын бузуп койду." - "Телефон жаңыртылууда…" + "Телефон жаңырууда…" "Планшет жаңыртылууда…" "Түзмөк жаңыртылууда…" "Телефон күйгүзүлүүдө…" @@ -1196,7 +1196,7 @@ "Сактагыч ыңгайлаштырылууда." "Тутумду жаңыртуу аяктоодо…" "%1$s жаңыртылууда..." - "%2$d ичинен %1$d колдонмо ыңгайлаштырылууда." + "%2$d ичинен %1$d колдонмо оптималдаштырылууда." "%1$s даярдалууда." "Колдонмолорду иштетип баштоо" "Жүктөлүүдө" @@ -1654,8 +1654,8 @@ "Үндү катуулатуу/акырындатуу баскычтары басылып, %1$s өчүрүлдү." "%1$s кызматын колдонуу үчүн үнүн чоңойтуп/кичирейтүү баскычтарын үч секунд коё бербей басып туруңуз" "Атайын мүмкүнчүлүктөр баскычын таптаганыңызда иштей турган функцияны тандаңыз:" - "Атайын мүмкүнчүлүктөр жаңсоосу үчүн функцияны тандаңыз (эки манжаңыз менен экрандын ылдый жагынан өйдө карай сүрүңүз):" - "Атайын мүмкүнчүлүктөр жаңсоосу аркылуу иштетиле турган функцияны тандаңыз (үч манжаңыз менен экрандын ылдый жагынан өйдө карай сүрүңүз):" + "Атайын мүмкүнчүлүктөр жаңсоосу үчүн функцияны тандаңыз (эки манжаңыз менен экранды ылдыйдан өйдө сүрүңүз):" + "Атайын мүмкүнчүлүктөр жаңсоосу аркылуу иштетиле турган функцияны тандаңыз (үч манжаңыз менен экранды ылдыйдан өйдө сүрүңүз):" "Функцияларды которуштуруу үчүн, Атайын мүмкүнчүлүктөр баскычын басып, кармап туруңуз." "Функцияларды которуштуруу үчүн, эки манжаңыз менен өйдө сүрүп, кармап туруңуз." "Башка функцияга которулуу үчүн үч манжаңыз менен экранды өйдө сүрүп, кармап туруңуз." diff --git a/core/res/res/values-lo/strings.xml b/core/res/res/values-lo/strings.xml index 2197aee867f..47bd5a8da60 100644 --- a/core/res/res/values-lo/strings.xml +++ b/core/res/res/values-lo/strings.xml @@ -1661,7 +1661,7 @@ "ເພື່ອສະຫຼັບລະຫວ່າງຄຸນສົມບັດຕ່າງໆ, ໃຫ້ປັດຂຶ້ນດ້ວຍສາມນິ້ວຄ້າງໄວ້." "ການຂະຫຍາຍ" "ຜູ່ໃຊ້ປັດຈຸບັນ %1$s ." - "ກຳ​ລັງ​ສະ​ລັບ​​ໄປ​ຫາ %1$s…" + "ກຳລັງສະຫຼັບໄປຫາ%1$s…" "ກຳລັງອອກຈາກລະບົບ %1$s…" "ເຈົ້າຂອງ" "ຜິດພາດ" diff --git a/core/res/res/values-mk/strings.xml b/core/res/res/values-mk/strings.xml index d61a278029b..92d8e36fbe6 100644 --- a/core/res/res/values-mk/strings.xml +++ b/core/res/res/values-mk/strings.xml @@ -20,7 +20,7 @@ - "Б" + "B" "KB" "MB" "GB" @@ -1900,8 +1900,8 @@ "Допрете за да го отклучите" "Поврзан на %1$s" "Допрете за да ги погледнете датотеките" - "Прикачете" - "Прикачи %1$s" + "Закачи" + "Закачи %1$s" "Откачете" "Откачи %1$s" "Информации за апликација" diff --git a/core/res/res/values-ml/strings.xml b/core/res/res/values-ml/strings.xml index d30861f22b7..4a62f7286e6 100644 --- a/core/res/res/values-ml/strings.xml +++ b/core/res/res/values-ml/strings.xml @@ -100,7 +100,7 @@ "പിയർ അഭ്യർത്ഥിച്ച TTY മോഡ് HCO" "പിയർ അഭ്യർത്ഥിച്ച TTY മോഡ് VCO" "പിയർ അഭ്യർത്ഥിച്ച TTY മോഡ് \'ഓഫ്\'" - "ശബ്‌ദം" + "Voice" "ഡാറ്റ" "ഫാക്സ്" "SMS" @@ -1211,9 +1211,9 @@ "%1$s ഹീപ്പ് ഡംപ് തയ്യാറാണ്" "ഹീപ്പ് ഡംപ് ശേഖരിച്ചു. പങ്കിടാൻ ടാപ്പ് ചെയ്യുക" "ഹീപ്പ് ഡംപ് പങ്കിടണോ?" - "%1$s പ്രോസസിന്, മെമ്മറി പരിധിയായ %2$s കവിഞ്ഞു. അതിന്റെ ഡവലപ്പറുമായി പങ്കിടാൻ ഒരു ഹീപ്പ് ഡംപ് നിങ്ങൾക്ക് ലഭ്യമാണ്. ശ്രദ്ധിക്കുക: ഈ ഹീപ്പ് ഡംപിൽ ആപ്പിന് ആക്‌സസുള്ള ഏതെങ്കിലും വ്യക്തിഗത വിവരം അടങ്ങിയിരിക്കാം." - "%1$s പ്രോസസ് അതിൻ്റെ മെമ്മറി പരിധിയായ %2$s കവിഞ്ഞു. നിങ്ങൾക്ക് പങ്കിടാൻ ഒരു ഹീപ്പ് ഡംപ് ലഭ്യമാണ്. ശ്രദ്ധിക്കുക: പ്രോസസിന് ആക്‌സസ് ചെയ്യാനാകുന്ന, സൂക്ഷ്‌മമായി കൈകാര്യം ചെയ്യേണ്ട ഏതെങ്കിലും വ്യക്തിഗത വിവരം ഈ ഹീപ്പ് ഡംപിൽ അടങ്ങിയിരിക്കാം, നിങ്ങൾ ടൈപ്പ് ചെയ്‌തിട്ടുള്ള കാര്യങ്ങൾ ഇതിൽ ഉൾപ്പെട്ടിരിക്കാം." - "നിങ്ങൾക്ക് പങ്കിടാൻ %1$s എന്നതിൻ്റെ പ്രോസസിൻ്റെ ഒരു ഹീപ്പ് ഡംപ് ലഭ്യമാണ്. ശ്രദ്ധിക്കുക: പ്രോസസിന് ആക്‌സസ് ചെയ്യാനാകുന്ന, സൂക്ഷ്‌മമായി കൈകാര്യം ചെയ്യേണ്ട ഏതെങ്കിലും വ്യക്തിഗത വിവരം ഈ ഹീപ്പ് ഡംപിൽ അടങ്ങിയിരിക്കാം, നിങ്ങൾ ടൈപ്പ് ചെയ്‌തിട്ടുള്ള കാര്യങ്ങൾ ഇതിൽ ഉൾപ്പെട്ടിരിക്കാം." + "%1$s പ്രോസസിന്, മെമ്മറി പരിധിയായ %2$s കവിഞ്ഞു. അതിന്റെ ഡവലപ്പറുമായി പങ്കിടാൻ ഒരു ഹീപ്പ് ഡംപ് നിങ്ങൾക്ക് ലഭ്യമാണ്. ശ്രദ്ധിക്കുക: ഈ ഹീപ്പ് ഡംപിൽ ആപ്പിന് ആക്‌സസുള്ള ഏതെങ്കിലും വ്യക്തിപരമായ വിവരങ്ങൾ അടങ്ങിയിരിക്കാം." + "%1$s പ്രോസസ് അതിൻ്റെ മെമ്മറി പരിധിയായ %2$s കവിഞ്ഞു. നിങ്ങൾക്ക് പങ്കിടാൻ ഒരു ഹീപ്പ് ഡംപ് ലഭ്യമാണ്. ശ്രദ്ധിക്കുക: പ്രോസസിന് ആക്‌സസ് ചെയ്യാനാകുന്ന, സൂക്ഷ്‌മമായി കൈകാര്യം ചെയ്യേണ്ട ഏതെങ്കിലും വ്യക്തിപരമായ വിവരങ്ങൾ ഈ ഹീപ്പ് ഡംപിൽ അടങ്ങിയിരിക്കാം, നിങ്ങൾ ടൈപ്പ് ചെയ്‌തിട്ടുള്ള കാര്യങ്ങൾ ഇതിൽ ഉൾപ്പെട്ടിരിക്കാം." + "നിങ്ങൾക്ക് പങ്കിടാൻ %1$s എന്നതിൻ്റെ പ്രോസസിൻ്റെ ഒരു ഹീപ്പ് ഡംപ് ലഭ്യമാണ്. ശ്രദ്ധിക്കുക: പ്രോസസിന് ആക്‌സസ് ചെയ്യാനാകുന്ന, സൂക്ഷ്‌മമായി കൈകാര്യം ചെയ്യേണ്ട ഏതെങ്കിലും വ്യക്തിപരമായ വിവരങ്ങൾ ഈ ഹീപ്പ് ഡംപിൽ അടങ്ങിയിരിക്കാം, നിങ്ങൾ ടൈപ്പ് ചെയ്‌തിട്ടുള്ള കാര്യങ്ങൾ ഇതിൽ ഉൾപ്പെട്ടിരിക്കാം." "വാചകസന്ദേശത്തിനായി ഒരു പ്രവർത്തനം തിരഞ്ഞെടുക്കുക" "റിംഗർ വോളിയം" "മീഡിയ വോളിയം" diff --git a/core/res/res/values-mn/strings.xml b/core/res/res/values-mn/strings.xml index 657f680fb8d..ed77e86a2ad 100644 --- a/core/res/res/values-mn/strings.xml +++ b/core/res/res/values-mn/strings.xml @@ -49,10 +49,10 @@ "8-с цөөнгүй тооноос бүтэх PUK-г бичнэ үү." "SIM картны PUK-түгжигдсэн. Тайлах бол PUK кодыг бичнэ үү." "SIM картыг блокоос гаргах бол PUK2-г бичнэ үү." - "Амжилтгүй боллоо, СИМ/РҮИМ түгжээг идэвхжүүлнэ үү." + "Амжилтгүй боллоо, SIM/РҮИМ түгжээг идэвхжүүлнэ үү." - Таны СИМ түгжигдэхээс өмнө танд %d оролдлого хийх боломж үлдлээ. - Таны СИМ түгжигдэхээс өмнө танд %d оролдлого хийх боломж үлдлээ. + Таны SIM түгжигдэхээс өмнө танд %d оролдлого хийх боломж үлдлээ. + Таны SIM түгжигдэхээс өмнө танд %d оролдлого хийх боломж үлдлээ. "IMEI" "MEID" @@ -317,7 +317,7 @@ "таны биеийн байдлын талаарх мэдрэгч бүхий өгөгдөлд нэвтрэх" "Цонхны агуулгыг авах" "Таны харилцан үйлчлэх цонхны контентоос шалгах." - "Хүрч танихыг асаах" + "Хүрэлтээр сонсохыг асаах" "Товшсон зүйлсийг чангаар хэлэх ба дэлгэцийг дохио ашиглан таних боломжтой." "Бичсэн текстээ ажиглах" "Кредит картын дугаар болон нууц үг зэрэг хувийн датаг агуулж байна." @@ -798,7 +798,7 @@ "Туслагч" "Ах" "Хүүхэд" - "Дотоод Түнш" + "Хамтран амьдрагч" "Эцэг" "Найз" "Менежер" @@ -987,9 +987,9 @@ "Асуулгыг цэвэрлэх" "Асуулгыг илгээх" "Дуут хайлт" - "Хүрч хайх функцийг идэвхтэй болгох уу?" - "%1$s нь Хүрч танихыг идэвхжүүлэхийг шаардаж байна. Хүрч таних идэвхжсэн үед та хуруун доороо юу байгааг сонсох, тайлбарыг харах боломжтой ба таблеттайгаа дохиогоор харилцах боломжтой." - "%1$s нь Хүрч танихыг идэвхжүүлэхийг шаардаж байна. Хүрч таних идэвхжсэн тохиолдолд та хуруун доороо юу байгааг сонсох, тайлбарыг харах боломжтой ба утастайгаа дохиогоор харилцах боломжтой." + "Хүрэлтээр сонсохыг идэвхжүүлэх үү?" + "%1$s нь Хүрэлтээр сонсохыг идэвхжүүлэхийг шаардаж байна. Хүрэлтээр сонсох идэвхжсэн үед та хуруун доороо юу байгааг сонсох, тайлбарыг харах боломжтой ба таблеттайгаа дохиогоор харилцах боломжтой." + "%1$s нь Хүрэлтээр сонсохыг идэвхжүүлэхийг шаардаж байна. Хүрэлтээр сонсох идэвхжсэн тохиолдолд та хуруун доороо юу байгааг сонсох, тайлбарыг харах боломжтой ба утастайгаа дохиогоор харилцах боломжтой." "1 сарын өмнө" "1 сарын өмнө" @@ -1856,7 +1856,7 @@ "Мэдэгдсэн" "Дэлгэх" "Буулгах" - "унтраах/асаах өргөтгөл" + "асаах/унтраах өргөтгөл" "Андройд USB Peripheral Port" "Android" "USB Peripheral Port" diff --git a/core/res/res/values-mr/strings.xml b/core/res/res/values-mr/strings.xml index a1c4b63b804..46057eea940 100644 --- a/core/res/res/values-mr/strings.xml +++ b/core/res/res/values-mr/strings.xml @@ -100,7 +100,7 @@ "समवयस्क व्यक्तीने TTY मोड HCO ची विनंती केली" "समवयस्क व्यक्तीने TTY मोड VCO ची विनंती केली" "समवयस्क व्यक्तीने TTY मोड बंद ची विनंती केली" - "व्हॉइस" + "Voice" "डेटा" "फॅक्स" "SMS" @@ -146,11 +146,11 @@ "वाय-फायवरून कॉल करा" "मोबाइल नेटवर्कवरून कॉल करा" "केवळ वाय-फाय" - "{0}: अग्रेषित केला नाही" + "{0}: फॉरवर्ड केला नाही" "{0}: {1}" "{0}: {2} सेकंदांनंतर {1}" - "{0}: अग्रेषित केला नाही" - "{0}: अग्रेषित केला नाही" + "{0}: फॉरवर्ड केला नाही" + "{0}: फॉरवर्ड केला नाही" "वैशिष्ट्य कोड पूर्ण." "कनेक्शन समस्या किंवा अवैध फीचर कोड." "ठीक" @@ -388,9 +388,9 @@ "सिस्टम सेटिंग्ज सुधारित करा" "सिस्टीमचा सेटिंग्ज डेटा सुधारित करण्यासाठी अ‍ॅप ला अनुमती देते. दुर्भावनापूर्ण अ‍ॅप्स आपल्या सिस्टीमचे कॉंफिगरेशन दूषित करू शकतात." "सुरूवातीस चालवा" - "जसे सिस्टम बूट करणे समाप्त करते तसे अ‍ॅप ला स्वतः प्रारंभ करण्यास अनुमती देते. यामुळे टॅबलेट प्रारंभ करण्यास वेळ लागू शकतो आणि नेहमी सुरू राहून एकंदर टॅबलेटला धीमे करण्यास अ‍ॅप ला अनुमती देते." + "जसे सिस्टम बूट करणे समाप्त करते तसे अ‍ॅप ला स्वतः सुरू करण्यास अनुमती देते. यामुळे टॅबलेट सुरू करण्यास वेळ लागू शकतो आणि नेहमी सुरू राहून एकंदर टॅबलेटला धीमे करण्यास अ‍ॅप ला अनुमती देते." "सिस्टम बूट होणे संपल्यावर ॲपला स्वतः सुरू होण्याची अनुमती देते. यामुळे तुमच्या Android TV डिव्हाइसला सुरू होण्यास वेळ लागू शकतो आणि नेहमी सुरू राहून एकंदर डिव्हाइसलाच धीमे करण्याची अनुमती ॲपला देते." - "जसे सिस्टम बूट करणे समाप्त करते तसे अ‍ॅप ला स्वतः प्रारंभ करण्यास अनुमती देते. यामुळे फोन प्रारंभ करण्यास वेळ लागू शकतो आणि नेहमी सुरू राहून एकंदर फोनला धीमे करण्यास अ‍ॅप ला अनुमती देते." + "जसे सिस्टम बूट करणे समाप्त करते तसे अ‍ॅप ला स्वतः सुरू करण्यास अनुमती देते. यामुळे फोन सुरू करण्यास वेळ लागू शकतो आणि नेहमी सुरू राहून एकंदर फोनला धीमे करण्यास अ‍ॅप ला अनुमती देते." "रोचक प्रसारण पाठवा" "रोचक प्रसारणे पाठविण्यासाठी अ‍ॅप ला अनुमती देते, जे प्रसारण समाप्त झाल्यानंतर देखील तसेच राहते. अत्याधिक वापरामुळे बरीच मेमरी वापरली जाऊन तो टॅब्लेटला धीमा किंवा अस्थिर करू शकतो." "चिकट प्रसारणे पाठविण्यासाठी ॲपला अनुमती देते, जे प्रसारण समाप्त झाल्यानंतर देखील तसेच राहते. अत्याधिक वापरामुळे बरीच मेमरी वापरली जाऊन तो तुमच्या Android TV डिव्हाइसला धीमा किंवा अस्थिर करू शकतो." @@ -899,7 +899,7 @@ "स्थिती" "कॅमेरा" "मीडिया नियंत्रणे" - "विजेट पुनर्क्रमित करणे प्रारंभ झाले." + "विजेट पुनर्क्रमित करणे सुरू झाले." "विजेट पुनर्क्रमित करणे समाप्त झाले." "विजेट %1$s हटविले." "अनलॉक क्षेत्र विस्तृत करा." @@ -1190,7 +1190,7 @@ "टॅबलेट अपडेट होत आहे…" "डिव्‍हाइस अपडेट होत आहे…" "फोन सुरू होत आहे…" - "Android प्रारंभ करत आहे…" + "Android सुरू करत आहे…" "टॅबलेट सुरू होत आहे…" "डिव्‍हाइस सुरू होत आहे…" "संचयन ऑप्टिमाइझ करत आहे." @@ -1198,7 +1198,7 @@ "%1$s श्रेणीसुधारित करत आहे…" "%2$d पैकी %1$d अ‍ॅप ऑप्टिमाइझ करत आहे." "%1$s तयार करत आहे." - "अ‍ॅप्स प्रारंभ करत आहे." + "अ‍ॅप्स सुरू करत आहे." "बूट समाप्त होत आहे." "रन होणारे %1$s" "गेमवर परत जाण्यासाठी टॅप करा" @@ -1275,7 +1275,7 @@ "नेहमी अनुमती द्या" "कधीही अनुमती देऊ नका" "सिम कार्ड काढले" - "तुम्ही एक वैध सिम कार्ड घालून प्रारंभ करेपर्यंत मोबाइल नेटवर्क अनुपलब्ध असेल." + "तुम्ही एक वैध सिम कार्ड घालून सुरू करेपर्यंत मोबाइल नेटवर्क अनुपलब्ध असेल." "पूर्ण झाले" "सिम कार्ड जोडले" "मोबाइल नेटवर्कवर अ‍ॅक्सेस करण्यासाठी तुमचे डिव्हाइस रीस्टार्ट करा." @@ -1906,7 +1906,7 @@ "%1$s ला अनपिन करा" "अ‍ॅप माहिती" "−%1$s" - "डेमो प्रारंभ करत आहे..." + "डेमो सुरू करत आहे..." "डिव्हाइस रीसेट करत आहे..." "%1$s अक्षम केले" "कॉंफरन्स कॉल" diff --git a/core/res/res/values-ms/strings.xml b/core/res/res/values-ms/strings.xml index f715dc60459..f8efcfd5216 100644 --- a/core/res/res/values-ms/strings.xml +++ b/core/res/res/values-ms/strings.xml @@ -317,7 +317,7 @@ "akses data penderia tentang tanda vital anda" "Dapatkan kembali kandungan tetingkap" "Periksa kandungan tetingkap yang berinteraksi dengan anda." - "Hidupkan Jelajah melalui Sentuhan" + "Hidupkan Teroka melalui Sentuhan" "Item yang diketik akan dituturkan dengan lantang dan skrin boleh dijelajah menggunakan gerak isyarat." "Perhatikan teks yang anda taip" "Termasuk data peribadi seperti nombor kad kredit dan kata laluan." @@ -987,9 +987,9 @@ "Pertanyaan jelas" "Serah pertanyaan" "Carian suara" - "Dayakan Jelajah melalui Sentuhan?" - "%1$s ingin mendayakan Jelajah melalui Sentuhan. Apabila Jelajah melalui Sentuhan didayakan, anda boleh mendengar atau melihat penerangan tentang apa di bawah jari anda atau melakukan gerak isyarat untuk berinteraksi dengan tablet." - "%1$s ingin mendayakan Jelajah melalui Sentuhan. Apabila Jelajah melalui Sentuhan didayakan, anda boleh mendengar atau melihat penerangan tentang apa di bawah jari anda atau melakukan gerak isyarat untuk berinteraksi dengan telefon." + "Dayakan Teroka melalui Sentuhan?" + "%1$s ingin mendayakan Teroka melalui Sentuhan. Apabila Teroka melalui Sentuhan didayakan, anda boleh mendengar atau melihat penerangan tentang apa-apa di bawah jari anda atau melakukan gerak isyarat untuk berinteraksi dengan tablet." + "%1$s ingin mendayakan Teroka melalui Sentuhan. Apabila Teroka melalui Sentuhan didayakan, anda boleh mendengar atau melihat penerangan tentang apa-apa di bawah jari anda atau melakukan gerak isyarat untuk berinteraksi dengan telefon." "1 bulan yang lalu" "Sebelum 1 bulan yang lalu" diff --git a/core/res/res/values-my/strings.xml b/core/res/res/values-my/strings.xml index 9ba7fef6377..c0e3fb9a30f 100644 --- a/core/res/res/values-my/strings.xml +++ b/core/res/res/values-my/strings.xml @@ -633,8 +633,8 @@ "အက်ပ်အား အသုံးပြုသူက ခေါ်ဆိုမှုအဝင် မျက်နှာပြင် ဘယ်အချိန်မှာ ဘယ်လို မြင်ရမှာကို ထိန်းချုပ်ခွင့်ပေးရန်" "တယ်လီဖုန်း ဝန်ဆောင်မှုများနှင့် အပြန်အလှန် တုံ့ပြန်မှု" "အက်ပ်အား ခေါ်ဆိုမှုများ လုပ်ခြင်း/လက်ခံခြင်း ပြုလုပ်နိုင်ရန် တယ်လီဖုန်း ဝန်ဆောင်မှုများနှင့် အပြန်အလှန် တုံ့ပြန်မှုကို ခွင့်ပြုသည်။" - "အသုံးပြုသူ အတွက် ခေါ်ဆိုမှုအဝင် လုပ်ကိုင်ပုံကို စီစဉ်ပေးခြင်း" - "အက်ပ်အား အသုံးပြုသူ အတွက် ခေါ်ဆိုမှုအဝင် လုပ်ကိုင်ပုံကို စီစဉ်ခွင့် ပြုသည်။" + "အဝင်ခေါ်ဆိုမှုအတွက် အသုံးပြုသူ၏ နှစ်သက်မှုကို ခွင့်ပြုခြင်း" + "အဝင်ခေါ်ဆိုမှုအတွက် အသုံးပြုသူ၏ နှစ်သက်မှုကို ပံ့ပိုးပေးရန် အက်ပ်အား ခွင့်ပြုသည်။" "ရာဇဝင်အလိုက် ကွန်ယက်သုံစွဲမှုအား ဖတ်ခြင်း" "အက်ပ်အား အထူး ကွန်ရက်များ နှင့် အက်ပ်များ အတွက် ကွန်ရက် အသုံးပြုမှု မှတ်တမ်းကို ဖတ်ကြားခွင့် ပြုသည်။" "ကွန်ယက်မူဝါဒအား စီမံခြင်း" diff --git a/core/res/res/values-ne/strings.xml b/core/res/res/values-ne/strings.xml index e2cf7f96035..343d0b22e4d 100644 --- a/core/res/res/values-ne/strings.xml +++ b/core/res/res/values-ne/strings.xml @@ -1091,7 +1091,7 @@ "%1$d:%2$02d:%3$02d" "सबैलाई चयन गर्नुहोस्" "काट्नुहोस्" - "प्रतिलिपि बनाउनुहोस्" + "कपी गर्नुहोस्" "क्लिपबोर्डमा प्रतिलिपि गर्न सकिएन" "टाँस्नुहोस्" "सामान्य पाठको रूपमा टाँस्नुहोस्" @@ -1661,7 +1661,7 @@ "एउटा सुविधाबाट अर्को सुविधामा जान तीनवटा औँलाले माथितिर स्वाइप गरी स्क्रिनमा टच एण्ड होल्ड गर्नुहोस्।" "म्याग्निफिकेसन" "अहिलेको प्रयोगकर्ता %1$s।" - "%1$s मा स्विच गर्दै..." + "स्विच गरेर %1$s बनाइँदै..." "लग आउट गर्दै %1$s…" "मालिक" "त्रुटि" diff --git a/core/res/res/values-nl/strings.xml b/core/res/res/values-nl/strings.xml index 594ea618e2a..1a8ce28e356 100644 --- a/core/res/res/values-nl/strings.xml +++ b/core/res/res/values-nl/strings.xml @@ -35,8 +35,8 @@ "Verbindingsprobleem of ongeldige MMI-code." "Bewerking is beperkt tot vaste nummers." "Kan instellingen voor doorschakelen van gesprekken niet wijzigen vanaf je telefoon tijdens roaming." - "Service is ingeschakeld." - "Service is ingeschakeld voor:" + "Service staat aan." + "Service staat aan voor:" "Service is uitgeschakeld." "De registratie is voltooid." "Wissen uitgevoerd." @@ -203,16 +203,16 @@ "Schakel je werkprofiel in" "Je persoonlijke apps zijn geblokkeerd totdat je je werkprofiel inschakelt" "Apps die worden gebruikt voor persoonlijke doeleinden, worden geblokkeerd op %1$s om %2$s. Je IT-beheerder staat niet toe dat je werkprofiel langer dan %3$d dagen is uitgeschakeld." - "Inschakelen" + "Aanzetten" "Ik" "Tabletopties" "Opties voor Android TV" "Telefoonopties" "Stille modus" - "Draadloos inschakelen" - "Draadloos uitschakelen" + "Draadloos aanzetten" + "Draadloos uitzetten" "Schermvergrendeling" - "Uitschakelen" + "Uitzetten" "Belsoftware uit" "Belsoftware op trillen" "Belsoftware aan" @@ -222,7 +222,7 @@ "Opnieuw opstarten…" "Terugzetten op fabrieksinstellingen" "Opnieuw opstarten…" - "Uitschakelen..." + "Uitzetten…" "Je tablet wordt uitgeschakeld." "Je Android TV-apparaat wordt uitgeschakeld." "Je horloge wordt uitgeschakeld." @@ -236,7 +236,7 @@ "Opties voor Android TV" "Telefoonopties" "Schermvergrendeling" - "Uitschakelen" + "Uitzetten" "Aan/uit" "Opnieuw opstarten" "Noodgeval" @@ -317,7 +317,7 @@ "toegang krijgen tot sensorgegevens over je vitale functies" "Content van vensters ophalen" "De content inspecteren van een venster waarmee je interactie hebt." - "\'Verkennen via aanraking\' inschakelen" + "Verkennen via aanraking aanzetten" "Aangetikte items worden hardop benoemd en het scherm kan worden verkend via gebaren." "Tekst observeren die je typt" "Omvat persoonsgegevens zoals creditcardnummers en wachtwoorden." @@ -329,8 +329,8 @@ "Kan gebaren registreren die op de vingerafdruksensor van het apparaat worden getekend." "Screenshot maken" "Kan een screenshot van het scherm maken." - "statusbalk uitschakelen of wijzigen" - "Hiermee kan de app de statusbalk uitschakelen of systeempictogrammen toevoegen en verwijderen." + "statusbalk uitzetten of wijzigen" + "Hiermee kan de app de statusbalk uitzetten of systeemiconen toevoegen en verwijderen." "de statusbalk zijn" "Hiermee kan de app de statusbalk zijn." "statusbalk uitvouwen/samenvouwen" @@ -344,9 +344,9 @@ "telefoonoproepen beantwoorden" "Hiermee kan de app een inkomende telefoonoproep beantwoorden." "tekstberichten (SMS) ontvangen" - "Hiermee kan de app sms-berichten ontvangen en verwerken. Dit betekent dat de app berichten die naar je apparaat zijn verzonden, kan bijhouden of verwijderen zonder deze aan u weer te geven." + "Hiermee kan de app sms-berichten ontvangen en verwerken. Dit betekent dat de app berichten die naar je apparaat zijn verstuurd, kan bijhouden of verwijderen zonder deze te tonen." "tekstberichten (MMS) ontvangen" - "Hiermee kan de app MMS-berichten ontvangen en verwerken. Dit betekent dat de app berichten die naar je apparaat zijn verzonden, kan bijhouden of verwijderen zonder deze aan u weer te geven." + "Hiermee kan de app mms-berichten ontvangen en verwerken. Dit betekent dat de app berichten die naar je apparaat zijn verstuurd, kan bijhouden of verwijderen zonder deze te tonen." "Cell broadcast-berichten doorsturen" "Hiermee kan de app de module voor cell broadcasts binden om cell broadcast-berichten door te sturen als die worden ontvangen. Cell broadcast-waarschuwingen worden op bepaalde locaties verzonden om je te waarschuwen voor noodsituaties. Schadelijke apps kunnen de prestaties of verwerking van je apparaat verstoren als een bericht met een noodmelding wordt ontvangen." "infodienstberichten lezen" @@ -360,15 +360,15 @@ "Deze app kan alle sms-berichten lezen die zijn opgeslagen op je Android TV-apparaat." "Deze app kan alle sms-berichten lezen die zijn opgeslagen op je telefoon." "tekstberichten (WAP) ontvangen" - "Hiermee kan de app WAP-berichten ontvangen en verwerken. Dit betekent dat de app berichten die naar je apparaat zijn verzonden, kan bijhouden of verwijderen zonder deze aan u weer te geven." + "Hiermee kan de app WAP-berichten ontvangen en verwerken. Dit betekent dat de app berichten die naar je apparaat zijn verstuurd, kan bijhouden of verwijderen zonder deze te tonen." "actieve apps ophalen" "Hiermee kan de app informatie ophalen over actieve en recent uitgevoerde taken. Zo kan de app informatie vinden over welke apps op het apparaat worden gebruikt." "profiel- en apparaateigenaren beheren" "Apps toestaan de profieleigenaren en apparaateigenaar in te stellen." "actieve apps opnieuw rangschikken" "Hiermee kan de app taken naar de voor- en achtergrond verplaatsen. De app kan dit doen zonder om je bevestiging te vragen." - "automodus inschakelen" - "Hiermee kan de app de automodus inschakelen." + "automodus aanzetten" + "Hiermee kan de app de automodus aanzetten." "andere apps sluiten" "Hiermee kan de app achtergrondprocessen van andere apps beëindigen. Hierdoor kunnen andere apps worden gestopt." "Deze app kan op de voorgrond vóór andere apps worden weergegeven" @@ -484,7 +484,7 @@ "Hiermee krijgt de app toegang tot de lijst met accounts die op de tablet bekend zijn. Dit kunnen ook accounts zijn die zijn gemaakt door apps die je hebt geïnstalleerd." "Hiermee kan de app de lijst met accounts ophalen die op het Android TV-apparaat bekend zijn. Dit kunnen ook accounts zijn die zijn gemaakt door apps die je hebt geïnstalleerd." "Hiermee krijgt de app toegang tot de lijst met accounts die op de telefoon bekend zijn. Dit kunnen ook accounts zijn die zijn gemaakt door apps die je hebt geïnstalleerd." - "netwerkverbindingen weergeven" + "netwerkverbindingen bekijken" "Hiermee kan de app informatie bekijken over netwerkverbindingen, zoals welke netwerken er zijn en welke verbonden zijn." "volledige netwerktoegang" "Hiermee kan de app netwerksockets maken en aangepaste netwerkprotocollen gebruiken. De browser en andere apps bieden mogelijkheden om gegevens via internet te verzenden, dus deze rechten zijn niet vereist om gegevens via internet te verzenden." @@ -492,8 +492,8 @@ "Hiermee kan de app de status van de netwerkverbinding wijzigen." "getetherde verbinding wijzigen" "Hiermee kan de app de status van de getetherde netwerkverbinding wijzigen." - "wifi-verbindingen weergeven" - "Hiermee kan de app informatie over wifi-netwerken bekijken, zoals of wifi is ingeschakeld en de naam van apparaten waarmee via wifi verbinding is gemaakt." + "wifi-verbindingen bekijken" + "Hiermee kan de app informatie over wifi-netwerken bekijken, zoals of wifi is aangezet en de naam van apparaten waarmee via wifi verbinding is gemaakt." "Wifi-verbinding maken en verbreken" "Hiermee kan de app zich koppelen aan en ontkoppelen van wifi-toegangspunten en wijzigingen aanbrengen in de apparaatconfiguratie voor wifi-netwerken." "Wifi Multicast-ontvangst toestaan" @@ -501,11 +501,11 @@ "Hiermee kan de app pakketten ontvangen die via multicastadressen naar alle apparaten in een wifi-netwerk worden verzonden, niet alleen naar je Android TV-apparaat. Het stroomgebruik ligt hierbij hoger dan in de niet-multicastmodus." "Hiermee kan de app pakketten ontvangen die via multicastadressen naar alle apparaten in een wifi-netwerk worden verzonden, niet alleen naar je telefoon. Het stroomgebruik ligt hierbij hoger dan in de niet-multicastmodus." "Bluetooth-instellingen openen" - "Hiermee kan de app de lokale bluetooth-tablet configureren en externe apparaten zoeken en koppelen." - "Hiermee kan de app Bluetooth op je Android TV-apparaat configureren en externe apparaten zoeken en koppelen." - "Hiermee kan de app de lokale bluetooth-telefoon configureren en externe apparaten zoeken en koppelen." + "Hiermee kan de app de lokale bluetooth-tablet instellen en externe apparaten zoeken en koppelen." + "Hiermee kan de app Bluetooth op je Android TV-apparaat isntellen en externe apparaten zoeken en koppelen." + "Hiermee kan de app de lokale bluetooth-telefoon instellen en externe apparaten zoeken en koppelen." "WiMAX-verbinding maken en verbreken" - "Hiermee kan de app bepalen of WiMAX is ingeschakeld en informatie bekijken over alle WiMAX-netwerken waarmee verbinding is gemaakt." + "Hiermee kan de app bepalen of WiMAX aanstaat en informatie bekijken over alle WiMAX-netwerken waarmee verbinding is gemaakt." "WiMAX-status wijzigen" "Hiermee kan de app de tablet verbinden met WiMAX-netwerken en de verbinding daarmee verbreken." "Hiermee kan de app verbinding maken met je Android TV-apparaat en je Android TV-apparaat loskoppelen van WiMAX-netwerken." @@ -518,8 +518,8 @@ "Hiermee kun je zorgen dat de app informatie krijgt over de voorkeursservice voor NFC-betaling, zoals geregistreerde hulpmiddelen en routebestemmingen." "Near Field Communication regelen" "Hiermee kan de app communiceren met NFC-tags (Near Field Communication), kaarten en lezers." - "je schermvergrendeling uitschakelen" - "Hiermee kan de app de toetsenblokkering en bijbehorende wachtwoordbeveiliging uitschakelen. Zo kan de telefoon de toetsenblokkering uitschakelen wanneer je wordt gebeld en de toetsenblokkering weer inschakelen als het gesprek is beëindigd." + "je schermvergrendeling uitzetten" + "Hiermee kan de app de toetsenblokkering en bijbehorende wachtwoordbeveiliging uitzetten. Zo kan de telefoon de toetsenblokkering uitzetten als je wordt gebeld en de toetsenblokkering weer aanzetten als het gesprek is beëindigd." "complexiteit van schermvergrendeling opvragen" "Hiermee krijgt de app toestemming om het complexiteitsniveau van de schermvergrendeling te achterhalen (hoog, midden, laag of geen). Dat geeft een indicatie van het mogelijke lengtebereik en type van de schermvergrendeling. De app kan gebruikers ook voorstellen de schermvergrendeling naar een bepaald niveau te updaten, maar gebruikers kunnen dit altijd negeren en de app verlaten. De schermvergrendeling wordt niet opgeslagen als platte tekst, zodat de app het precieze wachtwoord niet weet." "biometrische hardware gebruiken" @@ -613,7 +613,7 @@ "Gezichtspictogram" "synchronisatie-instellingen lezen" "Hiermee kan de app de synchronisatie-instellingen voor een account lezen. Dit kan bijvoorbeeld bepalen of de app Personen wordt gesynchroniseerd met een account." - "synchronisatie in- en uitschakelen" + "synchronisatie aan- of uitzetten" "Hiermee kan een app de synchronisatie-instellingen aanpassen voor een account. Deze toestemming kan bijvoorbeeld worden gebruikt om synchronisatie van de app Personen in te schakelen voor een account." "synchronisatiestatistieken lezen" "Hiermee kan een app de synchronisatiestatistieken voor een account lezen, inclusief de geschiedenis van synchronisatie-activiteiten en hoeveel gegevens zijn gesynchroniseerd." @@ -696,9 +696,9 @@ "Wijzigen hoe vaak het wachtwoord, de pincode of het patroon voor schermvergrendeling moet worden gewijzigd." "Codering voor opslag instellen" "Vereisen dat opgeslagen appgegevens kunnen worden gecodeerd." - "Camera\'s uitschakelen" + "Camera\'s uitzetten" "Het gebruik van alle apparaatcamera\'s voorkomen." - "Bepaalde functies voor schermvergrendeling uitschakelen" + "Bepaalde functies voor schermvergrendeling uitzetten" "Gebruik van bepaalde functies voor schermvergrendeling voorkomen." "Thuis" @@ -988,8 +988,8 @@ "Zoekopdracht verzenden" "Gesproken zoekopdrachten" "\'Verkennen via aanraking\' aan?" - "%1$s wil \'Verkennen via aanraking\' inschakelen. Wanneer \'Verkennen via aanraking\' is ingeschakeld, kunt u beschrijvingen beluisteren of bekijken van wat er onder je vinger staat of aanraakbewerkingen uitvoeren op de tablet." - "%1$s wil \'Verkennen via aanraking\' inschakelen. Wanneer \'Verkennen via aanraking\' is ingeschakeld, kunt u beschrijvingen beluisteren of bekijken van wat er onder je vinger staat of aanraakbewerkingen uitvoeren op de telefoon." + "%1$s wil Verkennen via aanraking aanzetten. Als Verkennen via aanraking aanstaat, kun je beschrijvingen beluisteren of bekijken van wat er onder je vinger staat of aanraakbewerkingen uitvoeren op de tablet." + "%1$s wil Verkennen via aanraking aanzetten. Als Verkennen via aanraking aanstaat, kun je beschrijvingen beluisteren of bekijken van wat er onder je vinger staat of aanraakbewerkingen uitvoeren op de telefoon." "1 maand geleden" "Meer dan 1 maand geleden" @@ -1177,12 +1177,12 @@ "%1$s is nu actief." "%1$s was het eerst gestart." "Schaal" - "Altijd weergeven" - "U kunt dit opnieuw inschakelen via Systeeminstellingen > Apps > Gedownload." + "Altijd tonen" + "Je kunt dit opnieuw aanzetten via Systeeminstellingen > Apps > Gedownload." "%1$s biedt geen ondersteuning voor de huidige instelling voor weergavegrootte en kan onverwacht gedrag vertonen." - "Altijd weergeven" + "Altijd tonen" "%1$s is gemaakt voor een niet-geschikte versie van het Android-besturingssysteem en kan onverwacht gedrag vertonen. Mogelijk is er een geüpdatete versie van de app beschikbaar." - "Altijd weergeven" + "Altijd tonen" "Controleren op update" "De app %1$s (proces %2$s) heeft het zelf afgedwongen StrictMode-beleid geschonden." "Het proces %1$s heeft het zelf afgedwongen StrictMode-beleid geschonden." @@ -1297,10 +1297,10 @@ "OK" "Dit apparaat wordt opgeladen via USB" "Verbonden apparaat wordt opgeladen via USB" - "USB-bestandsoverdracht ingeschakeld" - "PTP via USB ingeschakeld" - "USB-tethering ingeschakeld" - "MIDI via USB ingeschakeld" + "USB-bestandsoverdracht staat aan" + "PTP via USB staat aan" + "USB-tethering staat aan" + "MIDI via USB staat aan" "USB-accessoire verbonden" "Tik voor meer opties." "Verbonden apparaat wordt opgeladen. Tik voor meer opties." @@ -1312,9 +1312,9 @@ "Draadloze foutopsporing verbonden" "Tik om draadloze foutopsporing uit te schakelen" "Selecteer deze optie om draadloze foutopsporing uit te schakelen." - "Test harness-modus is ingeschakeld" + "Test harness-modus staat aan" "Reset de fabrieksinstellingen om de test harness-modus uit te schakelen." - "Seriële console ingeschakeld" + "Seriële console staat aan" "Dit is van invloed op de prestaties. Controleer de bootloader om dit uit te schakelen." "Vloeistof of vuil in USB-poort" "USB-poort is automatisch uitgeschakeld. Tik voor meer informatie." @@ -1327,17 +1327,17 @@ "DELEN" "WEIGEREN" "Invoermethode selecteren" - "Dit op het scherm weergeven terwijl het fysieke toetsenbord actief is" + "Op het scherm tonen terwijl het fysieke toetsenbord actief is" "Virtueel toetsenbord tonen" - "Fysiek toetsenbord configureren" + "Fysiek toetsenbord instellen" "Tik om een taal en indeling te selecteren" " ABCDEFGHIJKLMNOPQRSTUVWXYZ" " 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ" "Weergeven vóór andere apps" "%s wordt weergegeven over andere apps" - "%s wordt weergegeven over apps" + "%s wordt weergegeven vóór andere apps" "Als je niet wilt dat %s deze functie gebruikt, tik je om de instellingen te openen en schakel je de functie uit." - "Uitschakelen" + "Uitzetten" "%s controleren…" "Huidige content controleren" "Nieuwe %s" @@ -1352,7 +1352,7 @@ "Je moet het apparaat misschien opnieuw formatteren. Tik om het uit te werpen." "%s niet ondersteund" "%s werkt niet" - "Dit apparaat biedt geen ondersteuning voor deze %s. Tik om te configureren in een ondersteunde indeling." + "Dit apparaat biedt geen ondersteuning voor deze %s. Tik om in te stellen in een ondersteunde indeling." "Dit apparaat biedt geen ondersteuning voor deze %s. Selecteer om in te stellen in een ondersteunde indeling." "Je moet het apparaat misschien opnieuw formatteren" "%s is onverwacht verwijderd" @@ -1541,7 +1541,7 @@ "Vingerafdrukken:" "SHA-256-vingerafdruk" "SHA-1-vingerafdruk:" - "Alles weergeven" + "Alles tonen" "Een activiteit kiezen" "Delen met" "Verzenden..." @@ -1621,14 +1621,14 @@ "Verwijderen" "Volume verhogen tot boven het aanbevolen niveau?\n\nAls je langere tijd op hoog volume naar muziek luistert, raakt je gehoor mogelijk beschadigd." "Snelkoppeling toegankelijkheid gebruiken?" - "Als de snelkoppeling is ingeschakeld, kun je drie seconden op beide volumeknoppen drukken om een toegankelijkheidsfunctie te starten." - "Toegankelijkheidsfuncties inschakelen?" + "Als de snelkoppeling aanstaat, houd je beide volumeknoppen 3 seconden ingedrukt om een toegankelijkheidsfunctie te starten." + "Toegankelijkheidsfuncties aanzetten?" "Als je beide volumetoetsen een paar seconden ingedrukt houdt, schakel je de toegankelijkheidsfuncties in. Hierdoor kan de manier veranderen waarop je apparaat werkt.\n\nHuidige functies:\n%1$s\nJe kunt de geselecteerde functies wijzigen via Instellingen > Toegankelijkheid." " • %1$s\n" - "%1$s inschakelen?" + "%1$s aanzetten?" "Als je beide volumetoetsen een paar seconden ingedrukt houdt, wordt de toegankelijkheidsfunctie %1$s ingeschakeld. Hierdoor kan de manier veranderen waarop je apparaat werkt.\n\nJe kunt deze sneltoets op een andere functie instellen via Instellingen > Toegankelijkheid." - "Inschakelen" - "Niet inschakelen" + "Aanzetten" + "Niet aanzetten" "AAN" "UIT" "Toestaan dat %1$s volledige controle over je apparaat heeft?" @@ -1646,11 +1646,11 @@ "%s is uitgeschakeld" "Snelkoppelingen bewerken" "Klaar" - "Sneltoets uitschakelen" + "Sneltoets uitzetten" "Sneltoets gebruiken" "Kleurinversie" "Kleurcorrectie" - "Volumetoetsen ingedrukt gehouden. %1$s is ingeschakeld." + "Volumetoetsen ingedrukt gehouden. %1$s staat aan." "Volumetoetsen ingedrukt gehouden. %1$s uitgeschakeld." "Houd beide volumetoetsen drie seconden ingedrukt om %1$s te gebruiken" "Kies een functie om te gebruiken als je op de knop Toegankelijkheid tikt:" @@ -1771,7 +1771,7 @@ Probeer het over 1 seconde opnieuw "Probeer het later opnieuw" - "Volledig scherm wordt weergegeven" + "Volledig scherm wordt getoond" "Swipe omlaag vanaf de bovenkant van het scherm om af te sluiten." "Ik snap het" "Klaar" @@ -1792,11 +1792,11 @@ "Geüpdatet door je beheerder" "Verwijderd door je beheerder" "OK" - "Batterijbesparing doet het volgende om de batterijduur te verlengen:\n\n• Het donkere thema inschakelen\n• Achtergrondactiviteit, bepaalde visuele effecten en andere functies (zoals \'Hey Google\') uitschakelen of beperken\n\n""Meer informatie" - "Batterijbesparing doet het volgende om de batterijduur te verlengen:\n\n• Het donkere thema inschakelen.\n• Achtergrondactiviteit, bepaalde visuele effecten en andere functies (zoals \'Hey Google\') uitschakelen of beperken." - "Databesparing beperkt het datagebruik door te voorkomen dat sommige apps gegevens verzenden of ontvangen op de achtergrond. De apps die je open hebt, kunnen nog steeds data verbruiken, maar doen dit minder vaak. Afbeeldingen worden dan bijvoorbeeld niet weergegeven totdat je erop tikt." + "Batterijbesparing doet het volgende om de batterijduur te verlengen:\n\n• Donkere thema aanzetten\n• Achtergrondactiviteit, bepaalde visuele effecten en andere functies (zoals \'Hey Google\') uitzetten of beperken\n\n""Meer informatie" + "Batterijbesparing doet het volgende om de batterijduur te verlengen:\n\n• Donker thema aanzetten.\n• Achtergrondactiviteit, bepaalde visuele effecten en andere functies (zoals \'Hey Google\') uitzetten of beperken." + "Databesparing beperkt het datagebruik door te voorkomen dat sommige apps gegevens sturen of ontvangen op de achtergrond. De apps die je open hebt, kunnen nog steeds data verbruiken, maar doen dit minder vaak. Afbeeldingen worden dan bijvoorbeeld niet weergegeven totdat je erop tikt." "Databesparing aanzetten?" - "Inschakelen" + "Aanzetten" %1$d minuten (tot %2$s) Eén minuut (tot %2$s) @@ -1841,7 +1841,7 @@ "Weekend" "Afspraken" "Slapen" - "%1$s dempt sommige geluiden" + "%1$s zet sommige geluiden uit" "Er is een intern probleem met je apparaat. Het apparaat kan instabiel zijn totdat u het apparaat terugzet naar de fabrieksinstellingen." "Er is een intern probleem met je apparaat. Neem contact op met de fabrikant voor meer informatie." "USSD-verzoek gewijzigd in normaal gesprek" @@ -1856,7 +1856,7 @@ "Gemeld" "Uitvouwen" "Samenvouwen" - "uitvouwen in-/uitschakelen" + "uitvouwen aan- of uitzetten" "Poort voor Android-USB-randapparatuur" "Android" "Poort voor USB-randapparatuur" @@ -1886,9 +1886,9 @@ "%1$s is nu niet beschikbaar. Dit wordt beheerd door %2$s." "Meer info" "App niet meer onderbreken" - "Werkprofiel inschakelen?" + "Werkprofiel aanzetten?" "Je werk-apps, meldingen, gegevens en andere functies van je werkprofiel worden uitgeschakeld" - "Inschakelen" + "Aanzetten" "App is niet beschikbaar" "%1$s is momenteel niet beschikbaar." "Deze app is ontwikkeld voor een oudere versie van Android en werkt mogelijk niet op de juiste manier. Controleer op updates of neem contact op met de ontwikkelaar." @@ -1909,7 +1909,7 @@ "Demo starten…" "Apparaat resetten…" "%1$s uitgeschakeld" - "Conferencecall" + "Telefonische vergadering" "Knopinfo" "Games" "Muziek en audio" @@ -1982,10 +1982,10 @@ "VERWIJDEREN" "TOCH OPENEN" "Schadelijke app gevonden" - "%1$s wil segmenten van %2$s weergeven" + "%1$s wil segmenten van %2$s tonen" "Bewerken" "Trillen bij gesprekken en meldingen" - "Gesprekken en meldingen zijn gedempt" + "Telefoon- en meldingsgeluid wordt uitgezet" "Systeemwijzigingen" "Niet storen" "Nieuw: \'Niet storen\' verbergt meldingen" @@ -2063,7 +2063,7 @@ "Kan deze content niet openen met persoonlijke apps" "Je IT-beheerder staat niet toe dat je deze content opent met apps in je persoonlijke profiel" "Werkprofiel is onderbroken" - "Inschakelen" + "Aanzetten" "Er zijn geen werk-apps die deze content kunnen ondersteunen" "Er zijn geen werk-apps die deze content kunnen openen" "Er zijn geen persoonlijke apps die deze content kunnen ondersteunen" diff --git a/core/res/res/values-or/strings.xml b/core/res/res/values-or/strings.xml index 72fbc1d3178..386d9e05124 100644 --- a/core/res/res/values-or/strings.xml +++ b/core/res/res/values-or/strings.xml @@ -100,7 +100,7 @@ "ପୀଅର୍‌ ଅନୁରୋଧ କରିଥିବା TTY ମୋଡ୍‍ HCO ଅଟେ" "ପୀଅର୍‌ ଅନୁରୋଧ କରିଥିବା TTY ମୋଡ୍‍ VCO ଅଟେ" "ପୀଅର୍‌ ଅନୁରୋଧ କରିଥିବା TTY ମୋଡ୍‍ OFF ଅଛି" - "ଭଏସ୍" + "Voice" "ଡାଟା" "ଫାକ୍ସ" "SMS" @@ -1113,9 +1113,9 @@ "%1$s ଚାଲୁଛି" "ଅଧିକ ସୂଚନା ପାଇଁ କିମ୍ବା ଆପ୍‍ ବନ୍ଦ କରିବାକୁ ଟାପ୍‍ କରନ୍ତୁ।" "ଠିକ୍‍ ଅଛି" - "କ୍ୟାନ୍ସଲ୍‍ କରନ୍ତୁ" + "ବାତିଲ୍‍ କରନ୍ତୁ" "ଠିକ୍‍ ଅଛି" - "କ୍ୟାନ୍ସଲ୍‍ କରନ୍ତୁ" + "ବାତିଲ୍‍ କରନ୍ତୁ" "ଧ୍ୟାନଦିଅନ୍ତୁ" "ଲୋଡ୍ କରାଯାଉଛି…" "ଚାଲୁ" @@ -1269,7 +1269,7 @@ "ଏହା ଦ୍ୱାରା "" ଆପଣଙ୍କ ମୋବାଇଲ୍ ଆକାଉଣ୍ଟରୁ ପଇସା କଟିପାରେ। " " ଆପଣଙ୍କ ମୋବାଇଲ୍ ଆକାଉଣ୍ଟରୁ ପଇସା କଟିପାରେ। " "ପଠାନ୍ତୁ" - "କ୍ୟାନ୍ସଲ୍‍ କରନ୍ତୁ" + "ବାତିଲ୍‍ କରନ୍ତୁ" "ମୋ ପସନ୍ଦ ମନେରଖନ୍ତୁ" "ଏହାକୁ ଆପଣ ସେଟିଙ୍ଗ ଓ ଆପ୍‍ରେ ପରବର୍ତ୍ତୀ ସମୟରେ ବଦଳାଇପାରିବେ" "ସର୍ବଦା ଅନୁମତି ଦିଅନ୍ତୁ" @@ -1490,7 +1490,7 @@ "ପୂର୍ବ ମାସ" "ପରବର୍ତ୍ତୀ ମାସ" "ALT" - "କ୍ୟାନ୍ସଲ୍‍ କରନ୍ତୁ" + "ବାତିଲ୍‍ କରନ୍ତୁ" "ଡିଲିଟ୍‍ କରନ୍ତୁ" "ହୋଇଗଲା" "ମୋଡ୍‍ ପରିବର୍ତ୍ତନ" @@ -1661,7 +1661,7 @@ "ଫିଚରଗୁଡ଼ିକ ମଧ୍ୟରେ ସ୍ୱିଚ୍ କରିବାକୁ, ତିନୋଟି ଆଙ୍ଗୁଠିରେ ଉପରକୁ ସ୍ୱାଇପ୍ କରି ଧରି ରଖନ୍ତୁ।" "ମ୍ୟାଗ୍ନିଫିକେସନ୍‍" "ବର୍ତ୍ତମାନର ୟୁଜର୍‌ ହେଉଛନ୍ତି %1$s।" - "%1$s ରେ ସୁଇଚ୍ କରନ୍ତୁ…" + "%1$sରେ ସ୍ୱିଚ୍ କରନ୍ତୁ…" "%1$sଙ୍କୁ ଲଗଆଉଟ୍‍ କରାଯାଉଛି…" "ମାଲିକ" "ତ୍ରୁଟି" @@ -1751,7 +1751,7 @@ "You4" "ଅଜଣା ପୋର୍ଟ୍ରେଟ୍‍" "ଅଜଣା ଲ୍ୟାଣ୍ଡସ୍କେପ୍‌" - "କ୍ୟାନ୍ସଲ୍‍ କରାଗଲା" + "ବାତିଲ୍‍ କରାଗଲା" "କଣ୍ଟେଣ୍ଟ ଲେଖିବାବେଳେ ତ୍ରୁଟି" "ଅଜଣା" "ପ୍ରିଣ୍ଟ ସେବାକୁ ସକ୍ଷମ କରାଯାଇନାହିଁ" diff --git a/core/res/res/values-pa/strings.xml b/core/res/res/values-pa/strings.xml index 45d32f2aa0e..77aceb7264f 100644 --- a/core/res/res/values-pa/strings.xml +++ b/core/res/res/values-pa/strings.xml @@ -1306,7 +1306,7 @@ "ਕਨੈਕਟ ਕੀਤਾ ਡੀਵਾਈਸ ਚਾਰਜ ਹੋ ਰਿਹਾ ਹੈ। ਹੋਰ ਵਿਕਲਪਾਂ ਲਈ ਟੈਪ ਕਰੋ।" "ਐਨਾਲੌਗ ਆਡੀਓ ਉਪਸਾਧਨ ਦਾ ਪਤਾ ਲੱਗਿਆ" "ਨੱਥੀ ਕੀਤਾ ਡੀਵਾਈਸ ਇਸ ਫ਼ੋਨ ਦੇ ਅਨੁਰੂਪ ਨਹੀਂ ਹੈ। ਹੋਰ ਜਾਣਨ ਲਈ ਟੈਪ ਕਰੋ।" - "USB ਡੀਬਗਿੰਗ ਕਨੈਕਟ ਕੀਤੀ" + "USB ਡੀਬੱਗਿੰਗ ਕਨੈਕਟ ਕੀਤੀ" "USB ਡੀਬੱਗਿੰਗ ਬੰਦ ਕਰਨ ਲਈ ਟੈਪ ਕਰੋ" "USB ਡੀਬੱਗਿੰਗ ਅਯੋਗ ਬਣਾਉਣ ਲਈ ਚੁਣੋ।" "ਵਾਇਰਲੈੱਸ ਡੀਬੱਗਿੰਗ ਨੂੰ ਕਨੈਕਟ ਕੀਤਾ ਗਿਆ" @@ -1661,7 +1661,7 @@ "ਵਿਸ਼ੇਸ਼ਤਾਵਾਂ ਵਿਚਾਲੇ ਅਦਲਾ-ਬਦਲੀ ਕਰਨ ਲਈ, ਤਿੰਨ ਉਂਗਲਾਂ ਨਾਲ ਉੱਪਰ ਵੱਲ ਸਵਾਈਪ ਕਰਕੇ ਦਬਾਈ ਰੱਖੋ।" "ਵੱਡਦਰਸ਼ੀਕਰਨ" "ਮੌਜੂਦਾ ਉਪਭੋਗਤਾ %1$s।" - "%1$s ਤੇ ਸਵਿਚ ਕਰ ਰਿਹਾ ਹੈ…" + "%1$s \'ਤੇ ਸਵਿਚ ਕਰ ਰਿਹਾ ਹੈ…" "%1$s ਨੂੰ ਲਾਗ-ਆਉਟ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ …" "ਮਾਲਕ" "ਅਸ਼ੁੱਧੀ" diff --git a/core/res/res/values-pl/strings.xml b/core/res/res/values-pl/strings.xml index c206b12b851..9b6edd21b6a 100644 --- a/core/res/res/values-pl/strings.xml +++ b/core/res/res/values-pl/strings.xml @@ -542,7 +542,7 @@ "Zezwala aplikacji na modyfikowanie kolekcji zdjęć." "odczytywanie lokalizacji z kolekcji multimediów" "Zezwala aplikacji na odczytywanie lokalizacji z kolekcji multimediów." - "Potwierdź swoją tożsamość" + "Potwierdź, że to Ty" "Sprzęt biometryczny niedostępny" "Anulowano uwierzytelnianie" "Nie rozpoznano" diff --git a/core/res/res/values-pt-rBR/strings.xml b/core/res/res/values-pt-rBR/strings.xml index fa5be924bf8..ec34e4e6f8c 100644 --- a/core/res/res/values-pt-rBR/strings.xml +++ b/core/res/res/values-pt-rBR/strings.xml @@ -849,7 +849,7 @@ "Pausar" "Reproduzir" "Parar" - "Retroceder" + "Voltar" "Avançar" "Só chamadas de emergência" "Rede bloqueada" diff --git a/core/res/res/values-pt-rPT/strings.xml b/core/res/res/values-pt-rPT/strings.xml index 1beb966c442..6de3cdffefa 100644 --- a/core/res/res/values-pt-rPT/strings.xml +++ b/core/res/res/values-pt-rPT/strings.xml @@ -254,7 +254,7 @@ A tirar uma captura de ecrã do relatório de erro dentro de %d segundo… "Captura de ecrã tirada com o relatório de erro." - "Falha ao tirar captura de ecrã com o relatório de erro." + "Falha ao fazer captura de ecrã com o relatório de erro." "Modo silencioso" "Som desativado" "O som está ativado" @@ -327,7 +327,7 @@ "É possível tocar, deslizar rapidamente, juntar os dedos e realizar outros gestos" "Gestos de impressão digital" "Pode capturar gestos realizados no sensor de impressões digitais do dispositivo." - "Tirar captura de ecrã" + "Fazer captura de ecrã" "É possível tirar uma captura de ecrã." "desativar ou modificar barra de estado" "Permite à app desativar a barra de estado ou adicionar e remover ícones do sistema." @@ -2048,7 +2048,7 @@ "%1$s:" "enviou uma imagem" "Conversa" - "Conversa de grupo" + "Conversa em grupo" "> %1$d" "Pessoal" "Trabalho" diff --git a/core/res/res/values-pt/strings.xml b/core/res/res/values-pt/strings.xml index fa5be924bf8..ec34e4e6f8c 100644 --- a/core/res/res/values-pt/strings.xml +++ b/core/res/res/values-pt/strings.xml @@ -849,7 +849,7 @@ "Pausar" "Reproduzir" "Parar" - "Retroceder" + "Voltar" "Avançar" "Só chamadas de emergência" "Rede bloqueada" diff --git a/core/res/res/values-ru/strings.xml b/core/res/res/values-ru/strings.xml index f7f80f2b73c..20407b13190 100644 --- a/core/res/res/values-ru/strings.xml +++ b/core/res/res/values-ru/strings.xml @@ -224,7 +224,7 @@ "Подготовка обновлений…" "Обработка обновлений…" "Перезагрузка…" - "Сбросить к заводским настройкам" + "Сбросить настройки" "Перезагрузка…" "Выключение..." "Планшетный ПК будет отключен." @@ -1168,10 +1168,10 @@ "Открыть с помощью приложения:" "Открыть с помощью приложения \"%1$s\"" "Открыть" - "Открывать ссылки вида %1$s с помощью:" + "Открывать ссылки %1$s с помощью:" "Открывать ссылки с помощью:" "Открывать ссылки в браузере %1$s" - "Открывать ссылки вида %1$s в браузере %2$s" + "Открывать ссылки %1$s в браузере %2$s" "Открыть доступ" "Редактировать с помощью приложения:" "Редактировать с помощью приложения \"%1$s\"" @@ -1705,7 +1705,7 @@ "Для переключения между функциями проведите по экрану снизу вверх тремя пальцами и задержите их." "Увеличение" "Выбран аккаунт пользователя %1$s." - "Смена профиля на %1$s…" + "Смена профиля на \"%1$s\"…" "Выход из аккаунта %1$s…" "Владелец" "Ошибка" diff --git a/core/res/res/values-sq/strings.xml b/core/res/res/values-sq/strings.xml index 8742a670270..0c2b143bc80 100644 --- a/core/res/res/values-sq/strings.xml +++ b/core/res/res/values-sq/strings.xml @@ -1661,7 +1661,7 @@ "Për të kaluar mes veçorive, rrëshqit shpejt lart me tre gishta dhe mbaje prekur." "Zmadhimi" "Emri i përdoruesit aktual: %1$s" - "Po kalon në %1$s…" + "Po kalon në \"%1$s\"…" "%1$s po del…" "Zotëruesi" "Gabim" diff --git a/core/res/res/values-sv/strings.xml b/core/res/res/values-sv/strings.xml index 279c619c65f..66bf9c2d803 100644 --- a/core/res/res/values-sv/strings.xml +++ b/core/res/res/values-sv/strings.xml @@ -242,19 +242,19 @@ "Nödsituation" "Felrapport" "Avsluta session" - "Skärmdump" + "Skärmbild" "Felrapport" "Nu hämtas information om aktuell status för enheten, som sedan skickas i ett e-postmeddelade. Det tar en liten stund innan felrapporten är färdig och kan skickas, så vi ber dig ha tålamod." "Interaktiv rapport" - "Bör användas i de flesta fall. Då kan du spåra rapportförloppet, ange mer information om problemet och ta skärmdumpar. En del mindre använda avsnitt, som det tar lång tid att rapportera om, kan uteslutas." + "Bör användas i de flesta fall. Då kan du spåra rapportförloppet, ange mer information om problemet och ta skärmbilder. En del mindre använda avsnitt, som det tar lång tid att rapportera om, kan uteslutas." "Fullständig rapport" - "Alternativet innebär minsta möjliga störning när enheten inte svarar eller är långsam, eller när alla avsnitt ska ingå i rapporten. Du kan inte ange mer information eller ta ytterligare skärmdumpar." + "Alternativet innebär minsta möjliga störning när enheten inte svarar eller är långsam, eller när alla avsnitt ska ingå i rapporten. Du kan inte ange mer information eller ta ytterligare skärmbilder." - Tar en skärmdump till felrapporten om %d sekunder. - Tar en skärmdump till felrapporten om %d sekund. + Tar en skärmbild till felrapporten om %d sekunder. + Tar en skärmbild till felrapporten om %d sekund. - "Skärmdump med felrapport har tagits" - "Det gick inte att ta en skärmdump med felrapport" + "Skärmbild med felrapport har tagits" + "Det gick inte att ta en skärmbild med felrapport" "Tyst läge" "Ljudet är AV" "Ljudet är PÅ" @@ -327,8 +327,8 @@ "Kan trycka, svepa, nypa och göra andra rörelser." "Fingeravtrycksrörelser" "Kan registrera rörelser som utförs med hjälp av enhetens fingeravtryckssensor." - "Ta skärmdump" - "Du kan ta en skärmdump av skärmen." + "Ta skärmbild" + "Du kan ta en skärmbild av skärmen." "inaktivera eller ändra statusfält" "Tillåter att appen inaktiverar statusfältet eller lägger till och tar bort systemikoner." "visas i statusfältet" @@ -2039,7 +2039,7 @@ "Snabbinställningar" "Dialogruta för ström" "Låsskärm" - "Skärmdump" + "Skärmbild" "Tillgänglighetsgenväg på skärmen" "Valfunktion för tillgänglighetsgenväg på skärmen" "Aktivera tillgänglighet snabbt" diff --git a/core/res/res/values-sw/strings.xml b/core/res/res/values-sw/strings.xml index 7066c0054eb..8aca7d259c3 100644 --- a/core/res/res/values-sw/strings.xml +++ b/core/res/res/values-sw/strings.xml @@ -968,7 +968,7 @@ "Katu" "Hauna idhini ya kufungua ukurasa huu." "Maandishi yamenakiliwa kwenye ubao wa kunakili." - "Imenakiliwa" + "Umenakili" "Zaidi" "Menyu+" "Meta+" @@ -1661,7 +1661,7 @@ "Ili ubadilishe kati ya vipengele, telezesha vidole vitatu juu na ushikilie." "Ukuzaji" "Mtumiaji wa sasa %1$s." - "Inabadili kwenda %1$s…" + "Inaenda kwa %1$s…" "Inamwondoa %1$s…" "Mmiliki" "Hitilafu" diff --git a/core/res/res/values-ta/strings.xml b/core/res/res/values-ta/strings.xml index 0c5f964ee65..2eb628c7afb 100644 --- a/core/res/res/values-ta/strings.xml +++ b/core/res/res/values-ta/strings.xml @@ -100,7 +100,7 @@ "TTY Mode HCOஐ இணைச் செயல்பாடு கோரியது" "TTY Mode VCOஐ இணைச் செயல்பாடு கோரியது" "TTY Mode OFFஐ இணைச் செயல்பாடு கோரியது" - "குரல்" + "Voice" "தரவு" "தொலைநகல்" "SMS" @@ -268,7 +268,7 @@ "999+" "புதிய அறிவிப்பு" "விர்ச்சுவல் கீபோர்டு" - "கைமுறை விசைப்பலகை" + "கைமுறை கீபோர்டு" "பாதுகாப்பு" "கார் பயன்முறை" "கணக்கின் நிலை" @@ -1327,9 +1327,9 @@ "பகிர்" "வேண்டாம்" "உள்ளீட்டு முறையைத் தேர்வுசெய்க" - "கைமுறை விசைப்பலகை இயக்கத்தில் இருக்கும் போது IMEஐ திரையில் வைத்திரு" + "கைமுறை கீபோர்டு இயக்கத்தில் இருக்கும் போது IMEஐ திரையில் வைத்திரு" "விர்ச்சுவல் கீபோர்டை காட்டு" - "கைமுறை விசைப்பலகையை உள்ளமைக்கவும்" + "கைமுறை கீபோர்டை உள்ளமைக்கவும்" "மொழியையும் தளவமைப்பையும் தேர்ந்தெடுக்க, தட்டவும்" " ABCDEFGHIJKLMNOPQRSTUVWXYZ" " 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ" @@ -2000,7 +2000,7 @@ "வழக்கமான பேட்டரி சேமிப்பானுக்கான விவர அறிவிப்பு" "வழக்கமாகச் சார்ஜ் செய்வதற்கு முன்பே பேட்டரி தீர்ந்துபோகக்கூடும்" "பேட்டரி நிலையை நீட்டிக்க பேட்டரி சேமிப்பான் இயக்கப்பட்டுள்ளது" - "பேட்டரி சேமிப்பான்" + "பேட்டரி சேமிப்பு" "பேட்டரி சேமிப்பான் ஆஃப் செய்யப்பட்டுள்ளது" "மொபைலில் போதுமான சார்ஜ் உள்ளது. அம்சங்கள் இனி தடையின்றி இயங்கும்." "டேப்லெட்டில் போதுமான சார்ஜ் உள்ளது. அம்சங்கள் இனி தடையின்றி இயங்கும்." diff --git a/core/res/res/values-te/strings.xml b/core/res/res/values-te/strings.xml index 726fd6c6180..f379214734c 100644 --- a/core/res/res/values-te/strings.xml +++ b/core/res/res/values-te/strings.xml @@ -100,7 +100,7 @@ "అవతలి వారు HCO TTY మోడ్‌ని అభ్యర్థించారు" "అవతలి వారు VCO TTY మోడ్‌ని అభ్యర్థించారు" "అవతలి వారు OFF TTY మోడ్‌ని అభ్యర్థించారు" - "వాయిస్" + "Voice" "డేటా" "ఫ్యాక్స్" "SMS" @@ -229,9 +229,9 @@ "మీ ఫోన్ షట్‌డౌన్ చేయబడుతుంది." "మీరు షట్ డౌన్ చేయాలనుకుంటున్నారా?" "సురక్షిత మోడ్‌కు రీబూట్ చేయండి" - "మీరు సురక్షిత మోడ్‌లోకి రీబూట్ చేయాలనుకుంటున్నారా? దీని వలన మీరు ఇన్‌స్టాల్ చేసిన అన్ని మూడవ పక్షం అనువర్తనాలు నిలిపివేయబడతాయి. ఇవి మీరు మళ్లీ రీబూట్ చేసినప్పుడు పునరుద్ధరించబడతాయి." + "మీరు సురక్షిత మోడ్‌లోకి రీబూట్ చేయాలనుకుంటున్నారా? దీని వలన మీరు ఇన్‌స్టాల్ చేసిన అన్ని మూడవ పక్షం యాప్‌లు నిలిపివేయబడతాయి. ఇవి మీరు మళ్లీ రీబూట్ చేసినప్పుడు పునరుద్ధరించబడతాయి." "ఇటీవలివి" - "ఇటీవలి అనువర్తనాలు ఏవీ లేవు." + "ఇటీవలి యాప్‌లు ఏవీ లేవు." "టాబ్లెట్ ఎంపికలు" "Android TV ఎంపికలు" "ఫోన్ ఎంపికలు" @@ -336,13 +336,13 @@ "స్థితి పట్టీని విస్తరింపజేయడం/కుదించడం" "స్థితి బార్‌ను విస్తరింపజేయడానికి లేదా కుదించడానికి యాప్‌ను అనుమతిస్తుంది." "షార్ట్‌కట్‌లను ఇన్‌స్టాల్ చేయడం" - "వినియోగదారు ప్రమేయం లేకుండానే హోమ్‌స్క్రీన్ సత్వరమార్గాలను జోడించడానికి అనువర్తనాన్ని అనుమతిస్తుంది." + "వినియోగదారు ప్రమేయం లేకుండానే హోమ్‌స్క్రీన్ సత్వరమార్గాలను జోడించడానికి యాప్‌ను అనుమతిస్తుంది." "సత్వరమార్గాలను అన్ఇన్‌స్టాల్ చేయడం" - "వినియోగదారు ప్రమేయం లేకుండానే హోమ్‌స్క్రీన్ సత్వరమార్గాలను తీసివేయడానికి అనువర్తనాన్ని అనుమతిస్తుంది." + "వినియోగదారు ప్రమేయం లేకుండానే హోమ్‌స్క్రీన్ సత్వరమార్గాలను తీసివేయడానికి యాప్‌ను అనుమతిస్తుంది." "అవుట్‌గోయింగ్ కాల్‌లను దారి మళ్లించడం" - "కాల్‌ను వేరే నంబర్‌కు దారి మళ్లించే లేదా మొత్తంగా కాల్‌ను ఆపివేసే ఎంపిక సహాయంతో అవుట్‌గోయింగ్ కాల్ సమయంలో డయల్ చేయబడుతున్న నంబర్‌ను చూడటానికి అనువర్తనాన్ని అనుమతిస్తుంది." + "కాల్‌ను వేరే నంబర్‌కు దారి మళ్లించే లేదా మొత్తంగా కాల్‌ను ఆపివేసే ఎంపిక సహాయంతో అవుట్‌గోయింగ్ కాల్ సమయంలో డయల్ చేయబడుతున్న నంబర్‌ను చూడటానికి యాప్‌ను అనుమతిస్తుంది." "ఫోన్ కాల్‌లకు సమాధానమివ్వు" - "ఇన్‌కమింగ్ ఫోన్ కాల్‌లకు సమాధానమివ్వడానికి అనువర్తనాన్ని అనుమతిస్తుంది." + "ఇన్‌కమింగ్ ఫోన్ కాల్‌లకు సమాధానమివ్వడానికి యాప్‌ను అనుమతిస్తుంది." "వచన సందేశాలను (SMS) స్వీకరించడం" "SMS సందేశాలను స్వీకరించడానికి మరియు ప్రాసెస్ చేయడానికి యాప్‌ను అనుమతిస్తుంది. యాప్ మీ డివైజ్‌కు పంపబడిన సందేశాలను మీకు చూపకుండానే పర్యవేక్షించగలదని లేదా తొలగించగలదని దీని అర్థం." "వచన సందేశాలను (MMS) స్వీకరించడం" @@ -386,7 +386,7 @@ "యాప్ నిల్వ స్థలాన్ని అంచనా వేయడం" "యాప్‌ కోడ్, డేటా మరియు కాష్ పరిమాణాలను తిరిగి పొందడానికి దాన్ని అనుమతిస్తుంది" "సిస్టమ్ సెట్టింగ్‌లను మార్చడం" - "సిస్టమ్ యొక్క సెట్టింగ్‌ల డేటాను సవరించడానికి అనువర్తనాన్ని అనుమతిస్తుంది. హానికరమైన యాప్‌లు మీ సిస్టమ్ యొక్క కాన్ఫిగరేషన్‌ను నాశనం చేయవచ్చు." + "సిస్టమ్ యొక్క సెట్టింగ్‌ల డేటాను సవరించడానికి యాప్‌ను అనుమతిస్తుంది. హానికరమైన యాప్‌లు మీ సిస్టమ్ యొక్క కాన్ఫిగరేషన్‌ను నాశనం చేయవచ్చు." "ప్రారంభంలో అమలు చేయడం" "సిస్టమ్ బూటింగ్‌ను పూర్తి చేసిన వెంటనే దానికదే ప్రారంభించబడటానికి యాప్‌ను అనుమతిస్తుంది. ఇది టాబ్లెట్‌ను ప్రారంభించడానికి ఎక్కువ సమయం పట్టేలా చేయవచ్చు మరియు ఎల్లప్పుడూ అమలు చేయడం ద్వారా మొత్తం టాబ్లెట్‌ను నెమ్మదిగా పని చేయడానికి యాప్‌ను అనుమతించేలా చేయవచ్చు." "సిస్టమ్ బూటింగ్‌ను పూర్తి చేసిన వెంటనే యాప్ దానికదే ప్రారంభం కావడానికి అనుమతిస్తుంది. ఇది మీ Android TV పరికరం ప్రారంభం కావడానికి ఎక్కువ సమయం పట్టేలా చేయవచ్చు మరియు ఎల్లప్పుడూ అమలు కావడం ద్వారా మొత్తం పరికరం పనితీరును నెమ్మది చేయడానికి యాప్‌ను అనుమతించవచ్చు." @@ -432,7 +432,7 @@ "ఆడియోను రికార్డ్ చేయడం" "ఈ యాప్ మైక్రోఫోన్‌ని ఉపయోగించి ఎప్పుడైనా ఆడియోను రికార్డ్ చేయగలదు." "SIMకి ఆదేశాలను పంపడం" - "సిమ్‌కు ఆదేశాలను పంపడానికి అనువర్తనాన్ని అనుమతిస్తుంది. ఇది చాలా ప్రమాదకరం." + "సిమ్‌కు ఆదేశాలను పంపడానికి యాప్‌ను అనుమతిస్తుంది. ఇది చాలా ప్రమాదకరం." "భౌతిక కార్యాకలాపాన్ని గుర్తించండి" "ఈ యాప్ మీ భౌతిక కార్యాకలాపాన్ని గుర్తించగలదు." "చిత్రాలు మరియు వీడియోలు తీయడం" @@ -447,11 +447,11 @@ "నేరుగా కాల్ చేసే ఫోన్ నంబర్‌లు" "మీ ప్రమేయం లేకుండా ఫోన్ నంబర్‌లకు కాల్ చేయడానికి యాప్‌ను అనుమతిస్తుంది. దీని వలన అనుకోని ఛార్జీలు విధించబడవచ్చు లేదా కాల్‌లు రావచ్చు. ఇది అత్యవసర నంబర్‌లకు కాల్ చేయడానికి యాప్‌ను అనుమతించదని గుర్తుంచుకోండి. హానికరమైన యాప్‌లు మీ నిర్ధారణ లేకుండానే కాల్‌లు చేయడం ద్వారా మీకు డబ్బు ఖర్చయ్యేలా చేయవచ్చు." "IMS కాల్ సేవ యాక్సెస్ అనుమతి" - "మీ ప్రమేయం లేకుండా కాల్‌లు చేయడం కోసం IMS సేవను ఉపయోగించడానికి అనువర్తనాన్ని అనుమతిస్తుంది." + "మీ ప్రమేయం లేకుండా కాల్‌లు చేయడం కోసం IMS సేవను ఉపయోగించడానికి యాప్‌ను అనుమతిస్తుంది." "ఫోన్ స్థితి మరియు గుర్తింపుని చదవడం" "పరికరం యొక్క ఫోన్ ఫీచర్‌లను యాక్సెస్ చేయడానికి యాప్‌ను అనుమతిస్తుంది. ఈ అనుమతి ఫోన్ నంబర్ మరియు పరికరం IDలను, కాల్ సక్రియంగా ఉందా లేదా అనే విషయాన్ని మరియు కాల్ ద్వారా కనెక్ట్ చేయబడిన రిమోట్ నంబర్‌ను కనుగొనడానికి యాప్‌ను అనుమతిస్తుంది." "కాల్‌లను సిస్టమ్ ద్వారా వెళ్లేలా చేయి" - "కాలింగ్ అనుభవాన్ని మెరుగుపరచడం కోసం తన కాల్‌లను సిస్టమ్ ద్వారా వెళ్లేలా చేయడానికి అనువర్తనాన్ని అనుమతిస్తుంది." + "కాలింగ్ అనుభవాన్ని మెరుగుపరచడం కోసం తన కాల్‌లను సిస్టమ్ ద్వారా వెళ్లేలా చేయడానికి యాప్‌ను అనుమతిస్తుంది." "సిస్టమ్ ద్వారా కాల్‌లను చూసి, నియంత్రించండి." "పరికరంలో కొనసాగుతున్న కాల్‌లను చూడడానికి మరియు నియంత్రించడానికి యాప్‌ను అనుమతిస్తుంది. ఇందులో కాల్ కోసం కాల్‌ల నంబర్‌లు మరియు రాష్ట్ర కాల్ వంటి సమాచారం ఉంటుంది." "ఆడియో రికార్డ్ పరిమితుల నుండి మినహాయింపు" @@ -469,9 +469,9 @@ "మీ Android TV పరికరం స్లీప్ మోడ్‌లోకి వెళ్లకుండా నివారించడానికి యాప్‌ని అనుమతిస్తుంది." "నిద్రావస్థకి వెళ్లకుండా ఫోన్‌ను నిరోధించడానికి యాప్‌ను అనుమతిస్తుంది." "ఇన్‌ఫ్రారెడ్ ప్రసరణ" - "టాబ్లెట్ యొక్క ఇన్‌ఫ్రారెడ్ ట్రాన్స్‌మిటర్‌ను ఉపయోగించడానికి అనువర్తనాన్ని అనుమతిస్తుంది." + "టాబ్లెట్ యొక్క ఇన్‌ఫ్రారెడ్ ట్రాన్స్‌మిటర్‌ను ఉపయోగించడానికి యాప్‌ను అనుమతిస్తుంది." "మీ Android TV పరికరం యొక్క ఇన్‌ఫ్రారెడ్ ట్రాన్స్‌మిటర్‌ని ఉపయోగించడానికి యాప్‌ని అనుమతిస్తుంది." - "ఫోన్ యొక్క ఇన్‌ఫ్రారెడ్ ట్రాన్స్‌మిటర్‌ను ఉపయోగించడానికి అనువర్తనాన్ని అనుమతిస్తుంది." + "ఫోన్ యొక్క ఇన్‌ఫ్రారెడ్ ట్రాన్స్‌మిటర్‌ను ఉపయోగించడానికి యాప్‌ను అనుమతిస్తుంది." "వాల్‌పేపర్‌ను సెట్ చేయడం" "సిస్టమ్ వాల్‌పేపర్‌ను సెట్ చేయడానికి యాప్‌ను అనుమతిస్తుంది." "మీ వాల్‌పేపర్ పరిమాణాన్ని సర్దుబాటు చేయడం" @@ -493,13 +493,13 @@ "టీథర్ చేయబడిన కనెక్టివిటీని మార్చడం" "టీథర్ చేసిన నెట్‌వర్క్ కనెక్టివిటీ యొక్క స్థితిని మార్చడానికి యాప్‌ను అనుమతిస్తుంది." "Wi-Fi కనెక్షన్‌లను వీక్షించడం" - "Wi-Fi ప్రారంభించబడిందా, లేదా మరియు కనెక్ట్ చేయబడిన Wi-Fi పరికరాల పేరు వంటి Wi-Fi నెట్‌వర్కింగ్ గురించి సమాచారాన్ని వీక్షించడానికి అనువర్తనాన్ని అనుమతిస్తుంది." + "Wi-Fi ప్రారంభించబడిందా, లేదా మరియు కనెక్ట్ చేయబడిన Wi-Fi పరికరాల పేరు వంటి Wi-Fi నెట్‌వర్కింగ్ గురించి సమాచారాన్ని వీక్షించడానికి యాప్‌ను అనుమతిస్తుంది." "Wi-Fiకి కనెక్ట్ చేయడం మరియు దాని నుండి డిస్‌కనెక్ట్ చేయడం" "Wi-Fi యాక్సెస్ స్థానాలకు కనెక్ట్ చేయడానికి మరియు వాటి నుండి డిస్‌కనెక్ట్ చేయడానికి మరియు Wi-Fi నెట్‌వర్క్‌ల కోసం పరికర కాన్ఫిగరేషన్‌కు మార్పులు చేయడానికి యాప్‌ను అనుమతిస్తుంది." "Wi-Fi Multicast స్వీకరణను అనుమతించడం" "మల్టీక్యాస్ట్ చిరునామాలను ఉపయోగించి మీ టాబ్లెట్‌కు మాత్రమే కాకుండా Wi-Fi నెట్‌వర్క్‌లోని అన్ని పరికరాలకు పంపబడిన ప్యాకెట్‌లను స్వీకరించడానికి యాప్‌ను అనుమతిస్తుంది. మల్టీక్యాస్ట్ యేతర మోడ్ కంటే ఇది ఎక్కువ పవర్ ఉపయోగిస్తుంది." "మల్టీక్యాస్ట్ చిరునామాలను ఉపయోగించి మీ Android TV పరికరానికి మాత్రమే కాకుండా Wi-Fi నెట్‌వర్క్‌లోని అన్ని పరికరాలకు పంపిన ప్యాకెట్‌లను స్వీకరించడానికి యాప్‌ని అనుమతిస్తుంది. ఇది మల్టీక్యాస్ట్ యేతర మోడ్ కంటే ఎక్కువ పవర్‌ను ఉపయోగిస్తుంది." - "మల్టీక్యాస్ట్ చిరునామాలను ఉపయోగించి మీ ఫోన్‌కు మాత్రమే కాకుండా Wi-Fi నెట్‌వర్క్‌లోని అన్ని పరికరాలకు పంపబడిన ప్యాకెట్‌లను స్వీకరించడానికి అనువర్తనాన్ని అనుమతిస్తుంది. మల్టీక్యాస్ట్ యేతర మోడ్ కంటే ఇది ఎక్కువ పవర్ ఉపయోగిస్తుంది." + "మల్టీక్యాస్ట్ చిరునామాలను ఉపయోగించి మీ ఫోన్‌కు మాత్రమే కాకుండా Wi-Fi నెట్‌వర్క్‌లోని అన్ని పరికరాలకు పంపబడిన ప్యాకెట్‌లను స్వీకరించడానికి యాప్‌ను అనుమతిస్తుంది. మల్టీక్యాస్ట్ యేతర మోడ్ కంటే ఇది ఎక్కువ పవర్ ఉపయోగిస్తుంది." "బ్లూటూత్ సెట్టింగ్‌లను యాక్సెస్ చేయడం" "స్థానిక బ్లూటూత్ టాబ్లెట్‌ను కాన్ఫిగర్ చేయడానికి మరియు రిమోట్ పరికరాలతో దాన్ని కనుగొనడానికి మరియు జత చేయడానికి యాప్‌ను అనుమతిస్తుంది." "మీ Android TV పరికరంలో బ్లూటూత్‌ను కాన్ఫిగర్ చేయడానికి మరియు రిమోట్ పరికరాలతో దాన్ని కనుగొని, జత చేయడానికి యాప్‌ను అనుమతిస్తుంది." @@ -507,7 +507,7 @@ "WiMAXకు కనెక్ట్ చేయడం మరియు దాని నుండి డిస్‌కనెక్ట్ చేయడం" "Wi-Fi ప్రారంభించబడిందా, లేదా మరియు కనెక్ట్ చేయబడిన WiMAX నెట్‌వర్క్‌ల గురించి సమాచారాన్ని కనుగొనడానికి యాప్‌ను అనుమతిస్తుంది." "WiMAX స్థితిని మార్చడం" - "WiMAX నెట్‌వర్క్‌లకు టాబ్లెట్‌ను కనెక్ట్ చేయడానికి మరియు వాటి నుండి టాబ్లెట్‌ను డిస్‌కనెక్ట్ చేయడానికి అనువర్తనాన్ని అనుమతిస్తుంది." + "WiMAX నెట్‌వర్క్‌లకు టాబ్లెట్‌ను కనెక్ట్ చేయడానికి మరియు వాటి నుండి టాబ్లెట్‌ను డిస్‌కనెక్ట్ చేయడానికి యాప్‌ను అనుమతిస్తుంది." "మీ Android TV పరికరాన్ని WiMAX నెట్‌వర్క్‌లకు కనెక్ట్ చేయడానికి లేదా డిస్‌కనెక్ట్ చేయడానికి యాప్‌ని అనుమతిస్తుంది." "WiMAX నెట్‌వర్క్‌లకు ఫోన్‌ను కనెక్ట్ చేయడానికి మరియు వాటి నుండి ఫోన్‌ను డిస్‌కనెక్ట్ చేయడానికి యాప్‌ను అనుమతిస్తుంది." "బ్లూటూత్ పరికరాలతో జత చేయడం" @@ -622,19 +622,19 @@ "మీ షేర్ చేసిన నిల్వ యొక్క కంటెంట్‌లను సవరించండి లేదా తొలగించండి" "మీ షేర్ చేసిన నిల్వ యొక్క కంటెంట్‌లను రాయడానికి యాప్‌ను అనుమతిస్తుంది." "SIP కాల్‌లను చేయడానికి/స్వీకరించడానికి" - "SIP కాల్‌లను చేయడానికి మరియు స్వీకరించడానికి అనువర్తనాన్ని అనుమతిస్తుంది." + "SIP కాల్‌లను చేయడానికి మరియు స్వీకరించడానికి యాప్‌ను అనుమతిస్తుంది." "కొత్త టెలికామ్ SIM కనెక్షన్‌లను నమోదు చేయడం" - "కొత్త టెలికామ్ SIM కనెక్షన్‌లను నమోదు చేయడానికి అనువర్తనాన్ని అనుమతిస్తుంది." + "కొత్త టెలికామ్ SIM కనెక్షన్‌లను నమోదు చేయడానికి యాప్‌ను అనుమతిస్తుంది." "కొత్త టెలికామ్ కనెక్షన్‌లను నమోదు చేయడం" - "కొత్త టెలికామ్ కనెక్షన్‌లను నమోదు చేయడానికి అనువర్తనాన్ని అనుమతిస్తుంది." + "కొత్త టెలికామ్ కనెక్షన్‌లను నమోదు చేయడానికి యాప్‌ను అనుమతిస్తుంది." "టెలికామ్ కనెక్షన్‌లను నిర్వహించడం" - "టెలికామ్ కనెక్షన్‌లను నిర్వహించడానికి అనువర్తనాన్ని అనుమతిస్తుంది." + "టెలికామ్ కనెక్షన్‌లను నిర్వహించడానికి యాప్‌ను అనుమతిస్తుంది." "ఇన్-కాల్ స్క్రీన్‌తో పరస్పర చర్య చేయడం" - "వినియోగదారునికి ఇన్-కాల్ స్క్రీన్ ఎప్పుడు, ఎలా కనిపించాలనే దాన్ని నియంత్రించడానికి అనువర్తనాన్ని అనుమతిస్తుంది." + "వినియోగదారునికి ఇన్-కాల్ స్క్రీన్ ఎప్పుడు, ఎలా కనిపించాలనే దాన్ని నియంత్రించడానికి యాప్‌ను అనుమతిస్తుంది." "టెలిఫోన్ సేవలతో పరస్పర చర్య చేయడం" - "కాల్‌లు చేయడం/స్వీకరించడం కోసం టెలిఫోన్ సేవలతో పరస్పర చర్య చేయడానికి అనువర్తనాన్ని అనుమతిస్తుంది." + "కాల్‌లు చేయడం/స్వీకరించడం కోసం టెలిఫోన్ సేవలతో పరస్పర చర్య చేయడానికి యాప్‌ను అనుమతిస్తుంది." "ఇన్-కాల్ వినియోగదారు అనుభవాన్ని అందించడం" - "ఇన్-కాల్ వినియోగదారుని అనుభవాన్ని అందించడానికి అనువర్తనాన్ని అనుమతిస్తుంది." + "ఇన్-కాల్ వినియోగదారుని అనుభవాన్ని అందించడానికి యాప్‌ను అనుమతిస్తుంది." "చారిత్రక నెట్‌వర్క్ వినియోగాన్ని చదవడం" "నిర్దిష్ట నెట్‌వర్క్‌లు మరియు యాప్‌ల కోసం చారిత్రాత్మక నెట్‌వర్క్ వినియోగాన్ని చదవడానికి యాప్‌ను అనుమతిస్తుంది." "నెట్‌వర్క్ విధానాన్ని నిర్వహించడం" @@ -642,31 +642,31 @@ "నెట్‌వర్క్ వినియోగ అకౌంటింగ్‌ను సవరించడం" "యాప్‌లలో నెట్‌వర్క్ వినియోగం ఎలా గణించాలనే దాన్ని సవరించడానికి యాప్‌ను అనుమతిస్తుంది. సాధారణ యాప్‌ల ద్వారా ఉపయోగించడానికి ఉద్దేశించినది కాదు." "నోటిఫికేషన్‌లను యాక్సెస్ చేయడం" - "నోటిఫికేషన్‌లను, ఇతర అనువర్తనాల ద్వారా పోస్ట్ చేయబడిన వాటిని తిరిగి పొందడానికి, పరిశీలించడానికి మరియు క్లియర్ చేయడానికి అనువర్తనాన్ని అనుమతిస్తుంది." + "నోటిఫికేషన్‌లను, ఇతర అనువర్తనాల ద్వారా పోస్ట్ చేయబడిన వాటిని తిరిగి పొందడానికి, పరిశీలించడానికి మరియు క్లియర్ చేయడానికి యాప్‌ను అనుమతిస్తుంది." "నోటిఫికేషన్ పరిశీలన సేవకు అనుబంధించడం" "నోటిఫికేషన్ పరిశీలన సేవ యొక్క అగ్ర-స్థాయి ఇంటర్‌ఫేస్‌కు అనుబంధించడానికి హోల్డర్‌ను అనుమతిస్తుంది. సాధారణ అనువర్తనాల కోసం ఎప్పటికీ అవసరం ఉండకూడదు." "షరతు ప్రదాత సేవకు అనుబంధించడం" "షరతు ప్రదాత సేవ యొక్క అగ్ర-స్థాయి ఇంటర్‌ఫేస్‌కు అనుబంధించడానికి హోల్డర్‌ను అనుమతిస్తుంది. సాధారణ అనువర్తనాలకు ఎప్పటికీ అవసరం ఉండదు." "డ్రీమ్ సేవ‌కి అనుబంధించడం" "డ్రీమ్ సేవ యొక్క అగ్ర-స్థాయి ఇంటర్‌ఫేస్‌కు అనుబంధించడానికి హోల్డర్‌ను అనుమతిస్తుంది. సాధారణ అనువర్తనాలకు ఎప్పటికీ అవసరం ఉండదు." - "క్యారియర్ అందించిన కాన్ఫిగరేషన్ అనువర్తనాన్ని అభ్యర్థించడం" - "క్యారియర్ అందించిన కాన్ఫిగరేషన్ అనువర్తనాన్ని అభ్యర్థించడానికి హోల్డర్‌ను అనుమతిస్తుంది. సాధారణ అనువర్తనాల కోసం ఎప్పటికీ అవసరం ఉండకూడదు." + "క్యారియర్ అందించిన కాన్ఫిగరేషన్ యాప్‌ను అభ్యర్థించడం" + "క్యారియర్ అందించిన కాన్ఫిగరేషన్ యాప్‌ను అభ్యర్థించడానికి హోల్డర్‌ను అనుమతిస్తుంది. సాధారణ అనువర్తనాల కోసం ఎప్పటికీ అవసరం ఉండకూడదు." "నెట్‌వర్క్ పరిస్థితులపై పరిశీలనల గురించి తెలుసుకోవడం" - "నెట్‌వర్క్ పరిస్థితులపై పరిశీలనల గురించి తెలుసుకోవడానికి అనువర్తనాన్ని అనుమతిస్తుంది. సాధారణ అనువర్తనాలకు ఎప్పటికీ అవసరం ఉండకూడదు." + "నెట్‌వర్క్ పరిస్థితులపై పరిశీలనల గురించి తెలుసుకోవడానికి యాప్‌ను అనుమతిస్తుంది. సాధారణ అనువర్తనాలకు ఎప్పటికీ అవసరం ఉండకూడదు." "ఇన్‌పుట్ పరికరం క్రమాంకనాన్ని మార్చండి" - "టచ్ స్క్రీన్ యొక్క క్రమాంకన పరామితులను సవరించడానికి అనువర్తనాన్ని అనుమతిస్తుంది. సాధారణ అనువర్తనాలకు ఎప్పటికీ అవసరం ఉండదు." + "టచ్ స్క్రీన్ యొక్క క్రమాంకన పరామితులను సవరించడానికి యాప్‌ను అనుమతిస్తుంది. సాధారణ అనువర్తనాలకు ఎప్పటికీ అవసరం ఉండదు." "DRM ప్రమాణపత్రాలను యాక్సెస్ చేయడం" - "DRM ప్రమాణపత్రాలను కేటాయించడానికి మరియు ఉపయోగించడానికి అనువర్తనాన్ని అనుమతిస్తుంది. సాధారణ అనువర్తనాలకు ఎప్పటికీ అవసరం ఉండదు." + "DRM ప్రమాణపత్రాలను కేటాయించడానికి మరియు ఉపయోగించడానికి యాప్‌ను అనుమతిస్తుంది. సాధారణ అనువర్తనాలకు ఎప్పటికీ అవసరం ఉండదు." "Android Beam బదిలీ స్థితిని స్వీకరించడం" - "ప్రస్తుత Android Beam బదిలీలకు సంబంధించిన సమాచారాన్ని స్వీకరించడానికి ఈ అనువర్తనాన్ని అనుమతిస్తుంది" + "ప్రస్తుత Android Beam బదిలీలకు సంబంధించిన సమాచారాన్ని స్వీకరించడానికి ఈ యాప్‌ను అనుమతిస్తుంది" "DRM ప్రమాణపత్రాలను తీసివేయడం" - "DRM ప్రమాణపత్రాలను తీసివేయడానికి అనువర్తనాన్ని అనుమతిస్తుంది. సాధారణ అనువర్తనాలకు ఎప్పటికీ అవసరం ఉండదు." + "DRM ప్రమాణపత్రాలను తీసివేయడానికి యాప్‌ను అనుమతిస్తుంది. సాధారణ అనువర్తనాలకు ఎప్పటికీ అవసరం ఉండదు." "క్యారియర్ సందేశ సేవకు అనుబంధించడం" "క్యారియర్ సందేశ సేవ యొక్క అగ్ర-స్థాయి ఇంటర్‌ఫేస్‌కు అనుబంధించడానికి హోల్డర్‌ను అనుమతిస్తుంది. సాధారణ అనువర్తనాలకు ఎప్పటికీ అవసరం ఉండదు." "క్యారియర్ సేవలకు అనుబంధించడం" "క్యారియర్ సేవలకు అనుబంధించడానికి హోల్డర్‌ను అనుమతిస్తుంది. సాధారణ అనువర్తనాలకు ఎప్పటికీ అవసరం ఉండదు." "అంతరాయం కలిగించవద్దును యాక్సెస్ చేయడం" - "అంతరాయం కలిగించవద్దు ఎంపిక కాన్ఫిగరేషన్ చదవడానికి మరియు వ్రాయడానికి అనువర్తనాన్ని అనుమతిస్తుంది." + "అంతరాయం కలిగించవద్దు ఎంపిక కాన్ఫిగరేషన్ చదవడానికి మరియు వ్రాయడానికి యాప్‌ను అనుమతిస్తుంది." "వీక్షణ అనుమతి వినియోగాన్ని ప్రారంభించండి" "యాప్‌నకు అనుమతి వినియోగాన్ని ప్రారంభించడానికి హోల్డర్‌‌ను అనుమతిస్తుంది. సాధారణ యాప్‌లకు ఎప్పటికీ ఇటువంటి అనుమతి అవసరం ఉండదు." "పాస్‌వర్డ్ నియమాలను సెట్ చేయండి" @@ -1111,7 +1111,7 @@ "కొన్ని సిస్టమ్ కార్యాచరణలు పని చేయకపోవచ్చు" "సిస్టమ్ కోసం తగినంత నిల్వ లేదు. మీకు 250MB ఖాళీ స్థలం ఉందని నిర్ధారించుకుని, పునఃప్రారంభించండి." "%1$s అమలులో ఉంది" - "మరింత సమాచారం కోసం లేదా అనువర్తనాన్ని ఆపివేయడం కోసం నొక్కండి." + "మరింత సమాచారం కోసం లేదా యాప్‌ను ఆపివేయడం కోసం నొక్కండి." "సరే" "రద్దు చేయి" "సరే" @@ -1142,28 +1142,28 @@ "దీన్ని ఉపయోగించి పంపండి" "%1$sని ఉపయోగించి పంపండి" "పంపు" - "హోమ్ అనువర్తనాన్ని ఎంచుకోండి" + "హోమ్ యాప్‌ను ఎంచుకోండి" "%1$sని హోమ్‌గా ఉపయోగించండి" "చిత్రాన్ని క్యాప్చర్ చేయి" "దీనితో చిత్రాన్ని క్యాప్చర్ చేయి" "%1$sతో చిత్రాన్ని క్యాప్చర్ చేయండి" "చిత్రాన్ని క్యాప్చర్ చేయి" "ఈ చర్యకు డిఫాల్ట్‌గా ఉపయోగించండి." - "వేరొక అనువర్తనాన్ని ఉపయోగించండి" - "సిస్టమ్ సెట్టింగ్‌లు > అనువర్తనాలు > డౌన్‌లోడ్ చేయబడినవిలో డిఫాల్ట్‌ను క్లియర్ చేయి." + "వేరొక యాప్‌ను ఉపయోగించండి" + "సిస్టమ్ సెట్టింగ్‌లు > యాప్‌లు > డౌన్‌లోడ్ చేయబడినవిలో డిఫాల్ట్‌ను క్లియర్ చేయి." "చర్యను ఎంచుకోండి" "USB పరికరం కోసం యాప్‌ను ఎంచుకోండి" - "ఈ చర్యను అమలు చేయగల అనువర్తనాలు ఏవీ లేవు." + "ఈ చర్యను అమలు చేయగల యాప్‌లు ఏవీ లేవు." "%1$s ఆపివేయబడింది" "%1$s ఆపివేయబడింది" "%1$s పునరావృతంగా ఆపివేయబడుతోంది" "%1$s పునరావృతంగా ఆపివేయబడుతోంది" - "అనువర్తనాన్ని మళ్లీ తెరువు" + "యాప్‌ను మళ్లీ తెరువు" "ఫీడ్‌బ్యాక్‌ను పంపు" "మూసివేయి" "పరికరం పునఃప్రారంభమయ్యే వరకు మ్యూట్ చేయి" "వేచి ఉండండి" - "అనువర్తనాన్ని మూసివేయి" + "యాప్‌ను మూసివేయి" "%2$s ప్రతిస్పందించడం లేదు" "%1$s ప్రతిస్పందించడం లేదు" @@ -1178,7 +1178,7 @@ "%1$s వాస్తవంగా ప్రారంభించబడింది." "ప్రమాణం" "ఎల్లప్పుడూ చూపు" - "సిస్టమ్ సెట్టింగ్‌లు > అనువర్తనాలు > డౌన్‌లోడ్ చేసినవిలో దీన్ని పునఃప్రారంభించండి." + "సిస్టమ్ సెట్టింగ్‌లు > యాప్‌లు > డౌన్‌లోడ్ చేసినవిలో దీన్ని పునఃప్రారంభించండి." "%1$s ప్రస్తుత ప్రదర్శన పరిమాణ సెట్టింగ్‌కు మద్దతు ఇవ్వదు, దీని వలన ఊహించని సమస్యలు తలెత్తవచ్చు." "ఎల్లప్పుడూ చూపు" "Android OS యొక్క అననుకూల వెర్షన్ కోసం %1$s రూపొందించబడింది మరియు ఊహించని సమస్యలు తలెత్తవచ్చు. యాప్ యొక్క అప్‌డేట్ చేసిన వెర్షన్ అందుబాటులో ఉండవచ్చు." @@ -1323,7 +1323,7 @@ "బగ్ నివేదికను తీస్తోంది…" "బగ్ నివేదికను భాగస్వామ్యం చేయాలా?" "బగ్ నివేదికను భాగస్వామ్యం చేస్తోంది..." - "మీ నిర్వాహకులు ఈ పరికరం సమస్యకు పరిష్కారాన్ని కనుగొనడంలో సహాయం కోసం బగ్ నివేదికను అభ్యర్థించారు. అనువర్తనాలు మరియు డేటా భాగస్వామ్యం చేయబడవచ్చు." + "మీ నిర్వాహకులు ఈ పరికరం సమస్యకు పరిష్కారాన్ని కనుగొనడంలో సహాయం కోసం బగ్ నివేదికను అభ్యర్థించారు. యాప్‌లు మరియు డేటా భాగస్వామ్యం చేయబడవచ్చు." "షేర్ చేయి" "తిరస్కరిస్తున్నాను" "ఇన్‌పుట్ పద్ధతిని ఎంచుకోండి" @@ -1386,13 +1386,13 @@ "చొప్పించబడలేదు" "సరిపోలే కార్యాచరణలు కనుగొనబడలేదు." "మీడియా అవుట్‌పుట్‌ను మళ్లించడం" - "మీడియా అవుట్‌పుట్‌ను ఇతర బాహ్య పరికరాలకు మళ్లించడానికి అనువర్తనాన్ని అనుమతిస్తుంది." + "మీడియా అవుట్‌పుట్‌ను ఇతర బాహ్య పరికరాలకు మళ్లించడానికి యాప్‌ను అనుమతిస్తుంది." "ఇన్‌స్టాల్ సెషన్‌లను చదవడం" - "ఇన్‌స్టాల్ సెషన్‌లను చదవడానికి అనువర్తనాన్ని అనుమతిస్తుంది. ఇది సక్రియ ప్యాకేజీ ఇన్‌స్టాలేషన్‌ల గురించి వివరాలను చూడటానికి అనువర్తనాన్ని అనుమతిస్తుంది." + "ఇన్‌స్టాల్ సెషన్‌లను చదవడానికి యాప్‌ను అనుమతిస్తుంది. ఇది సక్రియ ప్యాకేజీ ఇన్‌స్టాలేషన్‌ల గురించి వివరాలను చూడటానికి యాప్‌ను అనుమతిస్తుంది." "ఇన్‌స్టాల్ ప్యాకేజీలను అభ్యర్థించడం" - "ప్యాకేజీల ఇన్‌స్టాలేషన్ అభ్యర్థించడానికి అనువర్తనాన్ని అనుమతిస్తుంది." + "ప్యాకేజీల ఇన్‌స్టాలేషన్ అభ్యర్థించడానికి యాప్‌ను అనుమతిస్తుంది." "ప్యాకేజీలను తొలగించడానికి అభ్యర్థించు" - "ప్యాకేజీల తొలగింపును అభ్యర్థించడానికి అనువర్తనాన్ని అనుమతిస్తుంది." + "ప్యాకేజీల తొలగింపును అభ్యర్థించడానికి యాప్‌ను అనుమతిస్తుంది." "బ్యాటరీ అనుకూలీకరణలను విస్మరించడానికి అడగాలి" "ఆ యాప్ కోసం బ్యాటరీ అనుకూలీకరణలు విస్మరించేలా అనుమతి కోరడానికి యాప్‌ను అనుమతిస్తుంది." "జూమ్ నియంత్రణ కోసం రెండుసార్లు నొక్కండి" @@ -1413,8 +1413,8 @@ "తిరస్కరించండి" "అనుమతి అభ్యర్థించబడింది" "ఖాతా %s కోసం\nఅనుమతి అభ్యర్థించబడింది." - "మీరు మీ కార్యాలయ ప్రొఫైల్‌కు వెలుపల ఈ అనువర్తనాన్ని ఉపయోగిస్తున్నారు" - "మీరు మీ కార్యాలయ ప్రొఫైల్‌లో ఈ అనువర్తనాన్ని ఉపయోగిస్తున్నారు" + "మీరు మీ కార్యాలయ ప్రొఫైల్‌కు వెలుపల ఈ యాప్‌ను ఉపయోగిస్తున్నారు" + "మీరు మీ కార్యాలయ ప్రొఫైల్‌లో ఈ యాప్‌ను ఉపయోగిస్తున్నారు" "ఇన్‌పుట్ పద్ధతి" "సమకాలీకరణ" "యాక్సెస్ సామర్థ్యం" @@ -1661,9 +1661,9 @@ "ఫీచర్ల మధ్య మారడానికి, మూడు చేతి వేళ్ళతో పైకి స్వైప్ చేసి పట్టుకోండి." "మాగ్నిఫికేషన్" "ప్రస్తుత వినియోగదారు %1$s." - "%1$sకి మారుస్తోంది…" + "%1$s యూజర్‌కు స్విచ్ అవుతోంది…" "%1$sని లాగ్ అవుట్ చేస్తోంది…" - "యజమాని" + "ఓనర్" "ఎర్రర్" "ఈ మార్పును మీ నిర్వాహకులు అనుమతించలేదు" "ఈ చర్యను నిర్వహించడానికి యాప్ ఏదీ కనుగొనబడలేదు" @@ -1894,7 +1894,7 @@ "ఈ యాప్ పాత వెర్షన్ Android కోసం రూపొందించబడింది మరియు అది సరిగ్గా పని చేయకపోవచ్చు. అప్‌డేట్‌ల కోసం తనిఖీ చేయడానికి ప్రయత్నించండి లేదా డెవలపర్‌ని సంప్రదించండి." "అప్‌డేట్ కోసం తనిఖీ చేయండి" "మీకు కొత్త సందేశాలు ఉన్నాయి" - "వీక్షించడానికి SMS అనువర్తనాన్ని తెరవండి" + "వీక్షించడానికి SMS యాప్‌ను తెరవండి" "కొంత ఫంక్షనాలిటీ పరిమితం కావచ్చు" "కార్యాలయ ప్రొఫైల్ లాక్ అయింది" "కార్యాలయ ప్రొఫైల్ అన్‌లాక్ చేయుటకు నొక్కండి" diff --git a/core/res/res/values-tl/strings.xml b/core/res/res/values-tl/strings.xml index f68ed31dabe..0bd750f1aa3 100644 --- a/core/res/res/values-tl/strings.xml +++ b/core/res/res/values-tl/strings.xml @@ -220,7 +220,7 @@ "Naghahandang i-update…" "Pinoproseso ang package ng update…" "Nagre-restart…" - "I-reset ang data ng factory" + "Pag-reset sa factory data" "Nagre-restart…" "Nagsa-shut down…" "Mag-shut down ang iyong tablet." diff --git a/core/res/res/values-tr/strings.xml b/core/res/res/values-tr/strings.xml index c0266d6b339..87d97599a9b 100644 --- a/core/res/res/values-tr/strings.xml +++ b/core/res/res/values-tr/strings.xml @@ -1663,7 +1663,7 @@ "Geçerli kullanıcı: %1$s." "%1$s adlı kullanıcıya geçiliyor…" "%1$s hesabından çıkış yapılıyor…" - "Sahibi" + "Sahip" "Hata" "Yöneticiniz bu değişikliğe izin vermiyor" "Bu eylemi gerçekleştirecek bir uygulama bulunamadı" diff --git a/core/res/res/values-uk/strings.xml b/core/res/res/values-uk/strings.xml index d69ac5499a3..067045aa086 100644 --- a/core/res/res/values-uk/strings.xml +++ b/core/res/res/values-uk/strings.xml @@ -1705,7 +1705,7 @@ "Щоб переключитися між функціями, проведіть по екрану знизу вгору трьома пальцями й утримуйте їх." "Збільшення" "Поточний користувач: %1$s." - "Перехід в обліковий запис \"%1$s\"…" + "Перехід у режим \"%1$s\"…" "Вихід з облікового запису користувача %1$s…" "Власник" "Помилка" diff --git a/core/res/res/values-uz/strings.xml b/core/res/res/values-uz/strings.xml index 2b83c8214bc..e3ed7829f1e 100644 --- a/core/res/res/values-uz/strings.xml +++ b/core/res/res/values-uz/strings.xml @@ -1265,15 +1265,15 @@ "<b>%1$s</b> katta miqdordagi SMS xabarlarini jo‘natmoqda. Ushbu ilovaga xabarlar jo‘natishni davom ettirishga ruxsat berasizmi?" "Ruxsat berish" "Rad etish" - "<b>%1$s</b> <b>%2$s</b>ga xabar jo‘natishni xohlaydi." - "Bunda, mobil hisobingizdan ""to‘lov olinishi mumkin""." - "Bunda, mobil hisobingizdan to‘lov olinishi mumkin." + "<b>%1$s</b> ilovasi <b>%2$s</b> raqamiga xabar yubormoqchi." + "Mobil aloqa hisobingizdan ""pul olinishi mumkin""." + "Mobil aloqa hisobingizdan pul olinishi mumkin." "Yuborish" "Bekor qilish" "Tanlovim eslab qolinsin" - "Siz buni keyinroq sozlamalar > ilovalar menusidan o‘zgartirishingiz mumkin" - "Doimo ruxsat berilsin" - "Hech qachon ruxsat berilmasin" + "Buni keyinroq Sozlamalar > Ilovalar menyusidan o‘zgartirishingiz mumkin" + "Doim ruxsat" + "Ruxsat berilmasin" "SIM karta olib tashlandi" "Ishlaydigan SIM kartani qo‘yib, qurilmangizni qaytadan ishga tushirmasangiz, mobayl tarmoq mavjud bo‘lmaydi." "Tayyor" @@ -1397,7 +1397,7 @@ "Ilovaga batareya quvvatidan xohlagancha foydalanish uchun ruxsat so‘rashga imkon beradi." "Ko‘lamini o‘zgartirish uchun ikki marta bosing" "Vidjet qo‘shilmadi." - "O‘tish" + "Tanlash" "Qidirish" "Yuborish" "Keyingisi" @@ -1661,7 +1661,7 @@ "Funksiyalarni almashtirish uchun uchta barmoq bilan tepaga suring va ushlab turing." "Kattalashtirish" "Joriy foydalanuvchi %1$s." - "Quyidagi foydalanuvchiga o‘tilmoqda: %1$s…" + "Bunga almashilmoqda: %1$s" "%1$s hisobidan chiqilmoqda…" "Egasi" "Xato" diff --git a/core/res/res/values-vi/strings.xml b/core/res/res/values-vi/strings.xml index bf7fbca6458..8e0cc2ead61 100644 --- a/core/res/res/values-vi/strings.xml +++ b/core/res/res/values-vi/strings.xml @@ -967,7 +967,7 @@ "Nhớ" "Chưa bao giờ" "Bạn không được phép mở trang này." - "Đã sao chép văn bản vào khay nhớ tạm thời." + "Đã sao chép văn bản vào bảng nhớ tạm thời." "Đã sao chép" "Thêm" "Trình đơn+" @@ -1092,7 +1092,7 @@ "Chọn tất cả" "Cắt" "Sao chép" - "Không sao chép được vào khay nhớ tạm" + "Không sao chép được vào bảng nhớ tạm" "Dán" "Dán dưới dạng văn bản thuần túy" "Thay thế..." @@ -2029,7 +2029,7 @@ %s + %d tệp %s + %d tệp - "Không có gợi ý về người để chia sẻ" + "Không có gợi ý nào về người mà bạn có thể chia sẻ" "Danh sách ứng dụng" "Ứng dụng này chưa được cấp quyền ghi âm nhưng vẫn có thể ghi âm thông qua thiết bị USB này." "Màn hình chính" diff --git a/core/res/res/values-zh-rHK/strings.xml b/core/res/res/values-zh-rHK/strings.xml index cb61121b64e..9eef703670e 100644 --- a/core/res/res/values-zh-rHK/strings.xml +++ b/core/res/res/values-zh-rHK/strings.xml @@ -423,8 +423,8 @@ "允許應用程式存取額外的位置提供者指令。這項設定可能會使應用程式干擾 GPS 或其他位置來源的運作。" "只在前景存取精確位置" "使用此應用程式時,應用程式可透過定位服務獲取您的精確位置。您的裝置必須開啟定位服務,才能讓應用程式獲取位置。這可能會增加電池用量。" - "只在前景存取大概位置" - "使用此應用程式時,應用程式可透過定位服務獲取您的大概位置。您的裝置必須開啟定位服務,才能讓應用程式獲取位置。" + "只在前景存取概略位置" + "使用此應用程式時,應用程式可透過定位服務獲取您的概略位置。您的裝置必須開啟定位服務,才能讓應用程式獲取位置。" "在背景存取位置資訊" "即使您不使用此應用程式,它仍可隨時存取位置。" "更改音效設定" @@ -1901,7 +1901,7 @@ "已連線至 %1$s" "輕按即可查看檔案" "固定" - "將%1$s置頂" + "固定「%1$s」" "取消固定" "取消將%1$s置頂" "應用程式資料" diff --git a/core/res/res/values-zh-rTW/strings.xml b/core/res/res/values-zh-rTW/strings.xml index 4d2d86ad985..c4f5dc8d366 100644 --- a/core/res/res/values-zh-rTW/strings.xml +++ b/core/res/res/values-zh-rTW/strings.xml @@ -2000,7 +2000,7 @@ "日常安排模式資訊通知" "電池電力可能會在你平常的充電時間前耗盡" "已啟用省電模式以延長電池續航力" - "省電模式" + "節約耗電量" "省電模式已關閉" "手機電力充足,各項功能不再受到限制。" "平板電腦電力充足,各項功能不再受到限制。" diff --git a/core/res/res/values/attrs_car.xml b/core/res/res/values/attrs_car.xml new file mode 100644 index 00000000000..6bfea9728b6 --- /dev/null +++ b/core/res/res/values/attrs_car.xml @@ -0,0 +1,24 @@ + + + + + + + + diff --git a/data/etc/car/Android.bp b/data/etc/car/Android.bp index 3c990abaec8..dc892080417 100644 --- a/data/etc/car/Android.bp +++ b/data/etc/car/Android.bp @@ -128,13 +128,6 @@ prebuilt_etc { filename_from_src: true, } -prebuilt_etc { - name: "privapp_whitelist_com.android.car.companiondevicesupport", - sub_dir: "permissions", - src: "com.android.car.companiondevicesupport.xml", - filename_from_src: true, -} - prebuilt_etc { name: "privapp_whitelist_com.google.android.car.kitchensink", sub_dir: "permissions", @@ -151,22 +144,29 @@ prebuilt_etc { } prebuilt_etc { - name: "privapp_whitelist_com.android.car.floatingcardslauncher", + name: "privapp_whitelist_com.android.car.ui.paintbooth", sub_dir: "permissions", - src: "com.android.car.floatingcardslauncher.xml", + src: "com.android.car.ui.paintbooth.xml", filename_from_src: true, } prebuilt_etc { - name: "privapp_whitelist_com.android.car.ui.paintbooth", + name: "allowed_privapp_com.android.carshell", sub_dir: "permissions", - src: "com.android.car.ui.paintbooth.xml", + src: "com.android.car.shell.xml", filename_from_src: true, } prebuilt_etc { - name: "allowed_privapp_com.android.carshell", + name: "allowed_privapp_com.android.car.activityresolver", sub_dir: "permissions", - src: "com.android.car.shell.xml", + src: "com.android.car.activityresolver.xml", + filename_from_src: true, +} + +prebuilt_etc { + name: "allowed_privapp_com.android.car.rotary", + sub_dir: "permissions", + src: "com.android.car.rotary.xml", filename_from_src: true, } diff --git a/data/etc/car/com.android.car.floatingcardslauncher.xml b/data/etc/car/com.android.car.activityresolver.xml similarity index 59% rename from data/etc/car/com.android.car.floatingcardslauncher.xml rename to data/etc/car/com.android.car.activityresolver.xml index 2755fee4eb5..63f83b4afb6 100644 --- a/data/etc/car/com.android.car.floatingcardslauncher.xml +++ b/data/etc/car/com.android.car.activityresolver.xml @@ -1,6 +1,6 @@ - - - + - - - + diff --git a/data/etc/car/com.android.car.companiondevicesupport.xml b/data/etc/car/com.android.car.rotary.xml similarity index 59% rename from data/etc/car/com.android.car.companiondevicesupport.xml rename to data/etc/car/com.android.car.rotary.xml index 2067bab20d3..575275507ea 100644 --- a/data/etc/car/com.android.car.companiondevicesupport.xml +++ b/data/etc/car/com.android.car.rotary.xml @@ -1,6 +1,6 @@ - - - - - + + + diff --git a/data/etc/car/com.android.car.shell.xml b/data/etc/car/com.android.car.shell.xml index 32666c8d9f6..6132d53b465 100644 --- a/data/etc/car/com.android.car.shell.xml +++ b/data/etc/car/com.android.car.shell.xml @@ -15,7 +15,9 @@ ~ limitations under the License --> - + + diff --git a/libs/hwui/pipeline/skia/SkiaRecordingCanvas.cpp b/libs/hwui/pipeline/skia/SkiaRecordingCanvas.cpp index d67cf8c9c73..5ff8fbc05e9 100644 --- a/libs/hwui/pipeline/skia/SkiaRecordingCanvas.cpp +++ b/libs/hwui/pipeline/skia/SkiaRecordingCanvas.cpp @@ -301,7 +301,8 @@ void SkiaRecordingCanvas::drawNinePatch(Bitmap& bitmap, const Res_png_9patch& ch } sk_sp image = bitmap.makeImage(); - applyLooper(get_looper(paint), *filterBitmap(paint), [&](SkScalar x, SkScalar y, const SkPaint& p) { + applyLooper(get_looper(paint), *filterBitmap(*filteredPaint), [&](SkScalar x, SkScalar y, + const SkPaint& p) { mRecorder.drawImageLattice(image, lattice, dst.makeOffset(x, y), &p, bitmap.palette()); }); diff --git a/location/java/com/android/internal/location/GpsNetInitiatedHandler.java b/location/java/com/android/internal/location/GpsNetInitiatedHandler.java index 67a040dba3e..a3765151a6f 100644 --- a/location/java/com/android/internal/location/GpsNetInitiatedHandler.java +++ b/location/java/com/android/internal/location/GpsNetInitiatedHandler.java @@ -51,9 +51,6 @@ public class GpsNetInitiatedHandler { private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG); - // NI verify activity for bringing up UI (not used yet) - public static final String ACTION_NI_VERIFY = "android.intent.action.NETWORK_INITIATED_VERIFY"; - // string constants for defining data fields in NI Intent public static final String NI_INTENT_KEY_NOTIF_ID = "notif_id"; public static final String NI_INTENT_KEY_TITLE = "title"; diff --git a/media/java/android/media/MediaRouter.java b/media/java/android/media/MediaRouter.java index 6fa37872424..cd68a1d8eb1 100644 --- a/media/java/android/media/MediaRouter.java +++ b/media/java/android/media/MediaRouter.java @@ -361,7 +361,12 @@ public void setRouterGroupId(String groupId) { } public Display[] getAllPresentationDisplays() { - return mDisplayService.getDisplays(DisplayManager.DISPLAY_CATEGORY_PRESENTATION); + try { + return mDisplayService.getDisplays(DisplayManager.DISPLAY_CATEGORY_PRESENTATION); + } catch (RuntimeException ex) { + Log.e(TAG, "Unable to get displays.", ex); + return null; + } } private void updatePresentationDisplays(int changedDisplayId) { @@ -2075,6 +2080,9 @@ boolean updatePresentationDisplay() { private Display choosePresentationDisplay() { if ((mSupportedTypes & ROUTE_TYPE_LIVE_VIDEO) != 0) { Display[] displays = sStatic.getAllPresentationDisplays(); + if (displays == null || displays.length == 0) { + return null; + } // Ensure that the specified display is valid for presentations. // This check will normally disallow the default display unless it was diff --git a/media/java/android/mtp/MtpDatabase.java b/media/java/android/mtp/MtpDatabase.java index fcd2b9aa191..60e7d0f91de 100755 --- a/media/java/android/mtp/MtpDatabase.java +++ b/media/java/android/mtp/MtpDatabase.java @@ -19,8 +19,7 @@ import android.annotation.NonNull; import android.content.BroadcastReceiver; import android.content.ContentProviderClient; -import android.content.ContentUris; -import android.content.ContentValues; +import android.content.ContentResolver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; @@ -32,7 +31,6 @@ import android.media.ThumbnailUtils; import android.net.Uri; import android.os.BatteryManager; -import android.os.RemoteException; import android.os.SystemProperties; import android.os.storage.StorageVolume; import android.provider.MediaStore; @@ -103,8 +101,6 @@ public class MtpDatabase implements AutoCloseable { private MtpStorageManager mManager; private static final String PATH_WHERE = Files.FileColumns.DATA + "=?"; - private static final String[] ID_PROJECTION = new String[] {Files.FileColumns._ID}; - private static final String[] PATH_PROJECTION = new String[] {Files.FileColumns.DATA}; private static final String NO_MEDIA = ".nomedia"; static { @@ -433,7 +429,7 @@ private void endSendObject(int handle, boolean succeeded) { } // Add the new file to MediaProvider if (succeeded) { - MediaStore.scanFile(mContext.getContentResolver(), obj.getPath().toFile()); + updateMediaStore(mContext, obj.getPath().toFile()); } } @@ -582,32 +578,8 @@ private int renameFile(int handle, String newName) { return MtpConstants.RESPONSE_GENERAL_ERROR; } - // finally update MediaProvider - ContentValues values = new ContentValues(); - values.put(Files.FileColumns.DATA, newPath.toString()); - String[] whereArgs = new String[]{oldPath.toString()}; - try { - // note - we are relying on a special case in MediaProvider.update() to update - // the paths for all children in the case where this is a directory. - final Uri objectsUri = MediaStore.Files.getContentUri(obj.getVolumeName()); - mMediaProvider.update(objectsUri, values, PATH_WHERE, whereArgs); - } catch (RemoteException e) { - Log.e(TAG, "RemoteException in mMediaProvider.update", e); - } - - // check if nomedia status changed - if (obj.isDir()) { - // for directories, check if renamed from something hidden to something non-hidden - if (oldPath.getFileName().startsWith(".") && !newPath.startsWith(".")) { - MediaStore.scanFile(mContext.getContentResolver(), newPath.toFile()); - } - } else { - // for files, check if renamed from .nomedia to something else - if (oldPath.getFileName().toString().toLowerCase(Locale.US).equals(NO_MEDIA) - && !newPath.getFileName().toString().toLowerCase(Locale.US).equals(NO_MEDIA)) { - MediaStore.scanFile(mContext.getContentResolver(), newPath.getParent().toFile()); - } - } + updateMediaStore(mContext, oldPath.toFile()); + updateMediaStore(mContext, newPath.toFile()); return MtpConstants.RESPONSE_OK; } @@ -637,48 +609,15 @@ private void endMoveObject(int oldParent, int newParent, int oldStorage, int new Log.e(TAG, "Failed to end move object"); return; } - obj = mManager.getObject(objId); if (!success || obj == null) return; - // Get parent info from MediaProvider, since the id is different from MTP's - ContentValues values = new ContentValues(); + Path path = newParentObj.getPath().resolve(name); Path oldPath = oldParentObj.getPath().resolve(name); - values.put(Files.FileColumns.DATA, path.toString()); - if (obj.getParent().isRoot()) { - values.put(Files.FileColumns.PARENT, 0); - } else { - int parentId = findInMedia(newParentObj, path.getParent()); - if (parentId != -1) { - values.put(Files.FileColumns.PARENT, parentId); - } else { - // The new parent isn't in MediaProvider, so delete the object instead - deleteFromMedia(obj, oldPath, obj.isDir()); - return; - } - } - // update MediaProvider - Cursor c = null; - String[] whereArgs = new String[]{oldPath.toString()}; - try { - int parentId = -1; - if (!oldParentObj.isRoot()) { - parentId = findInMedia(oldParentObj, oldPath.getParent()); - } - if (oldParentObj.isRoot() || parentId != -1) { - // Old parent exists in MediaProvider - perform a move - // note - we are relying on a special case in MediaProvider.update() to update - // the paths for all children in the case where this is a directory. - final Uri objectsUri = MediaStore.Files.getContentUri(obj.getVolumeName()); - mMediaProvider.update(objectsUri, values, PATH_WHERE, whereArgs); - } else { - // Old parent doesn't exist - add the object - MediaStore.scanFile(mContext.getContentResolver(), path.toFile()); - } - } catch (RemoteException e) { - Log.e(TAG, "RemoteException in mMediaProvider.update", e); - } + + updateMediaStore(mContext, oldPath.toFile()); + updateMediaStore(mContext, path.toFile()); } @VisibleForNative @@ -701,7 +640,19 @@ private void endCopyObject(int handle, boolean success) { if (!success) { return; } - MediaStore.scanFile(mContext.getContentResolver(), obj.getPath().toFile()); + + updateMediaStore(mContext, obj.getPath().toFile()); + } + + private static void updateMediaStore(@NonNull Context context, @NonNull File file) { + final ContentResolver resolver = context.getContentResolver(); + // For file, check whether the file name is .nomedia or not. + // If yes, scan the parent directory to update all files in the directory. + if (!file.isDirectory() && file.getName().toLowerCase(Locale.ROOT).endsWith(NO_MEDIA)) { + MediaStore.scanFile(resolver, file.getParentFile()); + } else { + MediaStore.scanFile(resolver, file); + } } @VisibleForNative @@ -930,26 +881,6 @@ private void endDeleteObject(int handle, boolean success) { deleteFromMedia(obj, obj.getPath(), obj.isDir()); } - private int findInMedia(MtpStorageManager.MtpObject obj, Path path) { - final Uri objectsUri = MediaStore.Files.getContentUri(obj.getVolumeName()); - - int ret = -1; - Cursor c = null; - try { - c = mMediaProvider.query(objectsUri, ID_PROJECTION, PATH_WHERE, - new String[]{path.toString()}, null, null); - if (c != null && c.moveToNext()) { - ret = c.getInt(0); - } - } catch (RemoteException e) { - Log.e(TAG, "Error finding " + path + " in MediaProvider"); - } finally { - if (c != null) - c.close(); - } - return ret; - } - private void deleteFromMedia(MtpStorageManager.MtpObject obj, Path path, boolean isDir) { final Uri objectsUri = MediaStore.Files.getContentUri(obj.getVolumeName()); try { @@ -965,13 +896,10 @@ private void deleteFromMedia(MtpStorageManager.MtpObject obj, Path path, boolean } String[] whereArgs = new String[]{path.toString()}; - if (mMediaProvider.delete(objectsUri, PATH_WHERE, whereArgs) > 0) { - if (!isDir && path.toString().toLowerCase(Locale.US).endsWith(NO_MEDIA)) { - MediaStore.scanFile(mContext.getContentResolver(), path.getParent().toFile()); - } - } else { - Log.i(TAG, "Mediaprovider didn't delete " + path); + if (mMediaProvider.delete(objectsUri, PATH_WHERE, whereArgs) == 0) { + Log.i(TAG, "MediaProvider didn't delete " + path); } + updateMediaStore(mContext, path.toFile()); } catch (Exception e) { Log.d(TAG, "Failed to delete " + path + " from MediaProvider"); } diff --git a/packages/CarSystemUI/res-keyguard/layout-land/keyguard_pin_view.xml b/packages/CarSystemUI/res-keyguard/layout-land/keyguard_pin_view.xml index 5746102f5f2..f82551b45ab 100644 --- a/packages/CarSystemUI/res-keyguard/layout-land/keyguard_pin_view.xml +++ b/packages/CarSystemUI/res-keyguard/layout-land/keyguard_pin_view.xml @@ -60,6 +60,7 @@ android:layout_width="@dimen/keyguard_security_width" android:layout_height="@dimen/pin_entry_height" android:gravity="center" + android:focusedByDefault="true" app:scaledTextSize="@integer/password_text_view_scale" android:contentDescription="@string/keyguard_accessibility_pin_area" /> diff --git a/packages/CarSystemUI/res-keyguard/layout/keyguard_container.xml b/packages/CarSystemUI/res-keyguard/layout/keyguard_container.xml index 3e35df9d9b0..f617ec06ae5 100644 --- a/packages/CarSystemUI/res-keyguard/layout/keyguard_container.xml +++ b/packages/CarSystemUI/res-keyguard/layout/keyguard_container.xml @@ -14,10 +14,7 @@ ~ limitations under the License. --> - - diff --git a/packages/CarSystemUI/res-keyguard/layout/num_pad_keys.xml b/packages/CarSystemUI/res-keyguard/layout/num_pad_keys.xml index 8306cb4a708..c5974e3c716 100644 --- a/packages/CarSystemUI/res-keyguard/layout/num_pad_keys.xml +++ b/packages/CarSystemUI/res-keyguard/layout/num_pad_keys.xml @@ -66,7 +66,6 @@ android:src="@drawable/ic_backspace" android:clickable="true" android:tint="@android:color/white" - android:background="@drawable/ripple_drawable" android:contentDescription="@string/keyboardview_keycode_delete" /> diff --git a/packages/CarSystemUI/res-keyguard/values/dimens.xml b/packages/CarSystemUI/res-keyguard/values/dimens.xml index 8dfe1716ef5..3c139586c2c 100644 --- a/packages/CarSystemUI/res-keyguard/values/dimens.xml +++ b/packages/CarSystemUI/res-keyguard/values/dimens.xml @@ -17,10 +17,8 @@ 112dp 144dp - 80dp + 120dp 80dp - @*android:dimen/car_padding_5 - @*android:dimen/car_padding_5 @dimen/num_pad_key_height 1dp 128dp diff --git a/packages/CarSystemUI/res-keyguard/values/styles.xml b/packages/CarSystemUI/res-keyguard/values/styles.xml index ecea30a13ce..ca37428a9fd 100644 --- a/packages/CarSystemUI/res-keyguard/values/styles.xml +++ b/packages/CarSystemUI/res-keyguard/values/styles.xml @@ -23,12 +23,11 @@ @dimen/num_pad_key_width @dimen/num_pad_key_height @dimen/num_pad_key_margin_bottom + ?android:attr/selectableItemBackground @id/pinEntry diff --git a/packages/CarSystemUI/res/layout/car_fullscreen_user_switcher.xml b/packages/CarSystemUI/res/layout/car_fullscreen_user_switcher.xml index 534c51e0feb..f987b5a650b 100644 --- a/packages/CarSystemUI/res/layout/car_fullscreen_user_switcher.xml +++ b/packages/CarSystemUI/res/layout/car_fullscreen_user_switcher.xml @@ -14,18 +14,18 @@ See the License for the specific language governing permissions and limitations under the License. --> - - - + - - + + diff --git a/packages/CarSystemUI/res/layout/car_top_navigation_bar.xml b/packages/CarSystemUI/res/layout/car_top_navigation_bar.xml index cdc29eec21c..cb1aadaf7fe 100644 --- a/packages/CarSystemUI/res/layout/car_top_navigation_bar.xml +++ b/packages/CarSystemUI/res/layout/car_top_navigation_bar.xml @@ -77,8 +77,8 @@ android:layout_width="match_parent" android:layout_height="match_parent" android:background="@null" - systemui:intent="intent:#Intent;component=com.android.car.settings/.common.CarSettingActivities$QuickSettingActivity;launchFlags=0x24000000;end" - /> + android:focusedByDefault="true" + systemui:intent="intent:#Intent;component=com.android.car.settings/.common.CarSettingActivities$QuickSettingActivity;launchFlags=0x24000000;end"/> + android:background="@null" + android:focusedByDefault="true"/> + app:layout_constraintTop_toTopOf="parent" + app:shouldRestoreFocus="false"/> - - - - - + app:layout_constraintTop_toTopOf="parent"/> diff --git a/packages/CarSystemUI/res/layout/notification_panel_container.xml b/packages/CarSystemUI/res/layout/notification_panel_container.xml index 3b53c6aaeac..de69769b2bb 100644 --- a/packages/CarSystemUI/res/layout/notification_panel_container.xml +++ b/packages/CarSystemUI/res/layout/notification_panel_container.xml @@ -14,7 +14,7 @@ ~ See the License for the specific language governing permissions and ~ limitations under the License. --> - + + + android:layout_width="match_parent" + android:layout_height="match_parent" + android:layout="@layout/notification_panel_container" + android:layout_marginBottom="@dimen/car_bottom_navigation_bar_height"/> + android:layout_width="match_parent" + android:layout_height="match_parent" + android:layout="@layout/keyguard_container" /> + android:layout_width="match_parent" + android:layout_height="match_parent" + android:layout="@layout/car_fullscreen_user_switcher"/> + android:layout_width="match_parent" + android:layout_height="match_parent" + android:layout="@layout/car_user_switching_dialog"/> \ No newline at end of file diff --git a/packages/CarSystemUI/src/com/android/systemui/car/keyguard/CarKeyguardViewController.java b/packages/CarSystemUI/src/com/android/systemui/car/keyguard/CarKeyguardViewController.java index ec018f9bb62..8fe59d07f9d 100644 --- a/packages/CarSystemUI/src/com/android/systemui/car/keyguard/CarKeyguardViewController.java +++ b/packages/CarSystemUI/src/com/android/systemui/car/keyguard/CarKeyguardViewController.java @@ -147,6 +147,11 @@ public CarKeyguardViewController( registerUserSwitchedListener(); } + @Override + protected int getFocusAreaViewId() { + return R.id.keyguard_container; + } + @Override protected boolean shouldShowNavigationBarInsets() { return true; @@ -233,9 +238,6 @@ public void onFinishedGoingToSleep() { public void setOccluded(boolean occluded, boolean animate) { mIsOccluded = occluded; getOverlayViewGlobalStateController().setOccluded(occluded); - if (!occluded) { - reset(/* hideBouncerWhenShowing= */ false); - } } @Override diff --git a/packages/CarSystemUI/src/com/android/systemui/car/notification/NotificationPanelViewController.java b/packages/CarSystemUI/src/com/android/systemui/car/notification/NotificationPanelViewController.java index fd804c71c9d..3d79b06ca32 100644 --- a/packages/CarSystemUI/src/com/android/systemui/car/notification/NotificationPanelViewController.java +++ b/packages/CarSystemUI/src/com/android/systemui/car/notification/NotificationPanelViewController.java @@ -28,6 +28,7 @@ import android.os.RemoteException; import android.util.Log; import android.view.GestureDetector; +import android.view.KeyEvent; import android.view.LayoutInflater; import android.view.MotionEvent; import android.view.View; @@ -165,6 +166,10 @@ public NotificationPanelViewController( mEnableHeadsUpNotificationWhenNotificationShadeOpen = mResources.getBoolean( com.android.car.notification.R.bool .config_enableHeadsUpNotificationWhenNotificationShadeOpen); + + // Inflate view on instantiation to properly initialize listeners even if panel has + // not been opened. + getOverlayViewGlobalStateController().inflateView(this); } // CommandQueue.Callbacks @@ -217,6 +222,11 @@ protected void hideInternal() { mNotificationVisibilityLogger.stop(); } + @Override + protected int getFocusAreaViewId() { + return R.id.notification_container; + } + @Override protected boolean shouldShowNavigationBarInsets() { return true; @@ -239,12 +249,26 @@ protected boolean shouldShowHUN() { /** Reinflates the view. */ public void reinflate() { + // Do not reinflate the view if it has not been inflated at all. + if (!isInflated()) return; + ViewGroup container = (ViewGroup) getLayout(); container.removeView(mNotificationView); mNotificationView = (CarNotificationView) LayoutInflater.from(mContext).inflate( R.layout.notification_center_activity, container, /* attachToRoot= */ false); + mNotificationView.setKeyEventHandler( + event -> { + if (event.getKeyCode() != KeyEvent.KEYCODE_BACK) { + return false; + } + + if (event.getAction() == KeyEvent.ACTION_UP && isPanelExpanded()) { + toggle(); + } + return true; + }); container.addView(mNotificationView); onNotificationViewInflated(); diff --git a/packages/CarSystemUI/src/com/android/systemui/car/userswitcher/FullScreenUserSwitcherViewController.java b/packages/CarSystemUI/src/com/android/systemui/car/userswitcher/FullScreenUserSwitcherViewController.java index aac4cfbf83c..dd59efa7b0b 100644 --- a/packages/CarSystemUI/src/com/android/systemui/car/userswitcher/FullScreenUserSwitcherViewController.java +++ b/packages/CarSystemUI/src/com/android/systemui/car/userswitcher/FullScreenUserSwitcherViewController.java @@ -22,6 +22,7 @@ import android.car.user.CarUserManager; import android.content.Context; import android.content.res.Resources; +import android.view.KeyEvent; import android.view.View; import androidx.recyclerview.widget.GridLayoutManager; @@ -67,6 +68,19 @@ public FullScreenUserSwitcherViewController( @Override protected void onFinishInflate() { + // Intercept back button. + UserSwitcherContainer container = getLayout().findViewById(R.id.container); + container.setKeyEventHandler(event -> { + if (event.getKeyCode() != KeyEvent.KEYCODE_BACK) { + return false; + } + + if (event.getAction() == KeyEvent.ACTION_UP && getLayout().isVisibleToUser()) { + stop(); + } + return true; + }); + // Initialize user grid. mUserGridView = getLayout().findViewById(R.id.user_grid); GridLayoutManager layoutManager = new GridLayoutManager(mContext, @@ -77,9 +91,14 @@ protected void onFinishInflate() { registerCarUserManagerIfPossible(); } + @Override + protected int getFocusAreaViewId() { + return R.id.user_switcher_container; + } + @Override protected boolean shouldFocusWindow() { - return false; + return true; } @Override diff --git a/packages/CarSystemUI/src/com/android/systemui/car/userswitcher/UserSwitcherContainer.java b/packages/CarSystemUI/src/com/android/systemui/car/userswitcher/UserSwitcherContainer.java new file mode 100644 index 00000000000..5b627110738 --- /dev/null +++ b/packages/CarSystemUI/src/com/android/systemui/car/userswitcher/UserSwitcherContainer.java @@ -0,0 +1,73 @@ +/* + * 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.car.userswitcher; + +import android.content.Context; +import android.util.AttributeSet; +import android.view.KeyEvent; +import android.widget.LinearLayout; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; + +/** Container for the user switcher which intercepts the key events. */ +public class UserSwitcherContainer extends LinearLayout { + + private KeyEventHandler mKeyEventHandler; + + public UserSwitcherContainer(@NonNull Context context) { + super(context); + } + + public UserSwitcherContainer(@NonNull Context context, @Nullable AttributeSet attrs) { + super(context, attrs); + } + + public UserSwitcherContainer(@NonNull Context context, @Nullable AttributeSet attrs, + int defStyleAttr) { + super(context, attrs, defStyleAttr); + } + + public UserSwitcherContainer(@NonNull Context context, @Nullable AttributeSet attrs, + int defStyleAttr, int defStyleRes) { + super(context, attrs, defStyleAttr, defStyleRes); + } + + @Override + public boolean dispatchKeyEvent(KeyEvent event) { + if (super.dispatchKeyEvent(event)) { + return true; + } + + if (mKeyEventHandler != null) { + return mKeyEventHandler.dispatchKeyEvent(event); + } + + return false; + } + + /** Sets a {@link KeyEventHandler} to help interact with the notification panel. */ + public void setKeyEventHandler(KeyEventHandler keyEventHandler) { + mKeyEventHandler = keyEventHandler; + } + + /** An interface to help interact with the notification panel. */ + public interface KeyEventHandler { + /** Allows handling of a {@link KeyEvent} if it wasn't already handled by the superclass. */ + boolean dispatchKeyEvent(KeyEvent event); + } +} diff --git a/packages/CarSystemUI/src/com/android/systemui/car/window/OverlayViewController.java b/packages/CarSystemUI/src/com/android/systemui/car/window/OverlayViewController.java index 8adc1adcc41..7bc17765d9f 100644 --- a/packages/CarSystemUI/src/com/android/systemui/car/window/OverlayViewController.java +++ b/packages/CarSystemUI/src/com/android/systemui/car/window/OverlayViewController.java @@ -17,12 +17,17 @@ package com.android.systemui.car.window; import static android.view.WindowInsets.Type.statusBars; +import static android.view.accessibility.AccessibilityNodeInfo.ACTION_FOCUS; import android.view.View; import android.view.ViewGroup; import android.view.ViewStub; import android.view.WindowInsets; +import androidx.annotation.IdRes; + +import com.android.car.ui.FocusArea; + /** * Owns a {@link View} that is present in SystemUIOverlayWindow. */ @@ -128,6 +133,66 @@ protected final OverlayViewGlobalStateController getOverlayViewGlobalStateContro return mOverlayViewGlobalStateController; } + /** Returns whether the view controlled by this controller is visible. */ + public final boolean isVisible() { + return mLayout.getVisibility() == View.VISIBLE; + } + + /** + * Returns the ID of the focus area that should receive focus when this view is the + * topmost view or {@link View#NO_ID} if there is no focus area. + */ + @IdRes + protected int getFocusAreaViewId() { + return View.NO_ID; + } + + /** Returns whether the view controlled by this controller has rotary focus. */ + protected final boolean hasRotaryFocus() { + return !mLayout.isInTouchMode() && mLayout.hasFocus(); + } + + /** + * Sets whether this view allows rotary focus. This should be set to {@code true} for the + * topmost layer in the overlay window and {@code false} for the others. + */ + public void setAllowRotaryFocus(boolean allowRotaryFocus) { + if (!isInflated()) { + return; + } + + if (!(mLayout instanceof ViewGroup)) { + return; + } + + ViewGroup viewGroup = (ViewGroup) mLayout; + viewGroup.setDescendantFocusability(allowRotaryFocus + ? ViewGroup.FOCUS_BEFORE_DESCENDANTS + : ViewGroup.FOCUS_BLOCK_DESCENDANTS); + } + + /** + * Refreshes the rotary focus in this view if we are in rotary mode. If the view already has + * rotary focus, it leaves the focus alone. Returns {@code true} if a new view was focused. + */ + public boolean refreshRotaryFocusIfNeeded() { + if (mLayout.isInTouchMode()) { + return false; + } + + if (hasRotaryFocus()) { + return false; + } + + View view = mLayout.findViewById(getFocusAreaViewId()); + if (view == null || !(view instanceof FocusArea)) { + return mLayout.requestFocus(); + } + + FocusArea focusArea = (FocusArea) view; + return focusArea.performAccessibilityAction(ACTION_FOCUS, /* arguments= */ null); + } + /** * Returns {@code true} if heads up notifications should be displayed over this view. */ diff --git a/packages/CarSystemUI/src/com/android/systemui/car/window/OverlayViewGlobalStateController.java b/packages/CarSystemUI/src/com/android/systemui/car/window/OverlayViewGlobalStateController.java index 55f0975aecc..204dde7e87b 100644 --- a/packages/CarSystemUI/src/com/android/systemui/car/window/OverlayViewGlobalStateController.java +++ b/packages/CarSystemUI/src/com/android/systemui/car/window/OverlayViewGlobalStateController.java @@ -29,6 +29,7 @@ import java.util.HashMap; import java.util.HashSet; import java.util.Map; +import java.util.Objects; import java.util.Set; import java.util.SortedMap; import java.util.TreeMap; @@ -120,6 +121,7 @@ public void showView(OverlayViewController viewController, @Nullable Runnable sh refreshWindowFocus(); refreshNavigationBarVisibility(); refreshStatusBarVisibility(); + refreshRotaryFocusIfNeeded(); Log.d(TAG, "Content shown: " + viewController.getClass().getName()); debugLog(); @@ -193,6 +195,7 @@ public void hideView(OverlayViewController viewController, @Nullable Runnable hi refreshWindowFocus(); refreshNavigationBarVisibility(); refreshStatusBarVisibility(); + refreshRotaryFocusIfNeeded(); if (mZOrderVisibleSortedMap.isEmpty()) { setWindowVisible(false); @@ -254,6 +257,17 @@ private void refreshInsetTypesToFit() { } } + private void refreshRotaryFocusIfNeeded() { + for (OverlayViewController controller : mZOrderVisibleSortedMap.values()) { + boolean isTop = Objects.equals(controller, mHighestZOrder); + controller.setAllowRotaryFocus(isTop); + } + + if (!mZOrderVisibleSortedMap.isEmpty()) { + mHighestZOrder.refreshRotaryFocusIfNeeded(); + } + } + /** Returns {@code true} is the window is visible. */ public boolean isWindowVisible() { return mSystemUIOverlayWindowController.isWindowVisible(); diff --git a/packages/CarSystemUI/src/com/android/systemui/wm/DisplaySystemBarsController.java b/packages/CarSystemUI/src/com/android/systemui/wm/DisplaySystemBarsController.java index c9ec34fd5f0..c0b5c50b288 100644 --- a/packages/CarSystemUI/src/com/android/systemui/wm/DisplaySystemBarsController.java +++ b/packages/CarSystemUI/src/com/android/systemui/wm/DisplaySystemBarsController.java @@ -16,14 +16,15 @@ package com.android.systemui.wm; +import android.content.Context; import android.os.Handler; import android.os.RemoteException; import android.util.ArraySet; import android.util.Slog; import android.util.SparseArray; import android.view.IDisplayWindowInsetsController; +import android.view.IWindowManager; import android.view.InsetsController; -import android.view.InsetsSourceControl; import android.view.InsetsState; import android.view.WindowInsets; @@ -48,30 +49,32 @@ public class DisplaySystemBarsController extends DisplayImeController { private static final String TAG = "DisplaySystemBarsController"; + private final Context mContext; + private final Handler mHandler; + private SparseArray mPerDisplaySparseArray; @Inject public DisplaySystemBarsController( - SystemWindows syswin, + Context context, + IWindowManager wmService, DisplayController displayController, @Main Handler mainHandler, TransactionPool transactionPool) { - super(syswin, displayController, mainHandler, transactionPool); + super(wmService, displayController, mainHandler::post, transactionPool); + mContext = context; + mHandler = mainHandler; } @Override public void onDisplayAdded(int displayId) { PerDisplay pd = new PerDisplay(displayId); - try { - mSystemWindows.mWmService.setDisplayWindowInsetsController(displayId, pd); - } catch (RemoteException e) { - Slog.w(TAG, "Unable to set insets controller on display " + displayId); - } + pd.register(); // Lazy loading policy control filters instead of during boot. if (mPerDisplaySparseArray == null) { mPerDisplaySparseArray = new SparseArray<>(); - BarControlPolicy.reloadFromSetting(mSystemWindows.mContext); - BarControlPolicy.registerContentObserver(mSystemWindows.mContext, mHandler, () -> { + BarControlPolicy.reloadFromSetting(mContext); + BarControlPolicy.registerContentObserver(mContext, mHandler, () -> { int size = mPerDisplaySparseArray.size(); for (int i = 0; i < size; i++) { mPerDisplaySparseArray.valueAt(i).modifyDisplayWindowInsets(); @@ -84,7 +87,7 @@ public void onDisplayAdded(int displayId) { @Override public void onDisplayRemoved(int displayId) { try { - mSystemWindows.mWmService.setDisplayWindowInsetsController(displayId, null); + mWmService.setDisplayWindowInsetsController(displayId, null); } catch (RemoteException e) { Slog.w(TAG, "Unable to remove insets controller on display " + displayId); } @@ -100,11 +103,10 @@ class PerDisplay extends DisplayImeController.PerDisplay { String mPackageName; PerDisplay(int displayId) { - super(displayId, - mSystemWindows.mDisplayController.getDisplayLayout(displayId).rotation()); + super(displayId, mDisplayController.getDisplayLayout(displayId).rotation()); mDisplayId = displayId; mInsetsController = new InsetsController( - new DisplaySystemBarsInsetsControllerHost(mHandler, this)); + new DisplaySystemBarsInsetsControllerHost(mHandler, mInsetsControllerImpl)); } @Override @@ -120,13 +122,6 @@ public void insetsChanged(InsetsState insetsState) { } } - @Override - public void insetsControlChanged(InsetsState insetsState, - InsetsSourceControl[] activeControls) { - super.insetsControlChanged(insetsState, activeControls); - mInsetsController.onControlsChanged(activeControls); - } - @Override public void hideInsets(@WindowInsets.Type.InsetsType int types, boolean fromIme) { if ((types & WindowInsets.Type.ime()) == 0) { @@ -166,7 +161,7 @@ private void modifyDisplayWindowInsets() { showInsets(barVisibilities[0], /* fromIme= */ false); hideInsets(barVisibilities[1], /* fromIme= */ false); try { - mSystemWindows.mWmService.modifyDisplayWindowInsets(mDisplayId, mInsetsState); + mWmService.modifyDisplayWindowInsets(mDisplayId, mInsetsState); } catch (RemoteException e) { Slog.w(TAG, "Unable to update window manager service."); } diff --git a/packages/CarSystemUI/tests/src/com/android/systemui/car/window/OverlayViewGlobalStateControllerTest.java b/packages/CarSystemUI/tests/src/com/android/systemui/car/window/OverlayViewGlobalStateControllerTest.java index 294aa0d3cf9..d97b2329350 100644 --- a/packages/CarSystemUI/tests/src/com/android/systemui/car/window/OverlayViewGlobalStateControllerTest.java +++ b/packages/CarSystemUI/tests/src/com/android/systemui/car/window/OverlayViewGlobalStateControllerTest.java @@ -214,6 +214,16 @@ public void showView_nothingAlreadyShown_windowIsSetVisible() { verify(mSystemUIOverlayWindowController).setWindowVisible(true); } + @Test + public void showView_nothingAlreadyShown_newHighestZOrder_isVisible() { + setupOverlayViewController1(); + + mOverlayViewGlobalStateController.showView(mOverlayViewController1, mRunnable); + + assertThat(mOverlayViewGlobalStateController.mZOrderVisibleSortedMap.containsKey( + OVERLAY_VIEW_CONTROLLER_1_Z_ORDER)).isTrue(); + } + @Test public void showView_nothingAlreadyShown_newHighestZOrder() { setupOverlayViewController1(); @@ -225,13 +235,12 @@ public void showView_nothingAlreadyShown_newHighestZOrder() { } @Test - public void showView_nothingAlreadyShown_newHighestZOrder_isVisible() { + public void showView_nothingAlreadyShown_descendantsFocusable() { setupOverlayViewController1(); mOverlayViewGlobalStateController.showView(mOverlayViewController1, mRunnable); - assertThat(mOverlayViewGlobalStateController.mZOrderVisibleSortedMap.containsKey( - OVERLAY_VIEW_CONTROLLER_1_Z_ORDER)).isTrue(); + verify(mOverlayViewController1).setAllowRotaryFocus(true); } @Test @@ -331,6 +340,30 @@ public void showView_newHighestZOrder_correctViewsShown() { OVERLAY_VIEW_CONTROLLER_2_Z_ORDER).toArray()); } + @Test + public void showView_newHighestZOrder_topDescendantsFocusable() { + setupOverlayViewController1(); + setOverlayViewControllerAsShowing(mOverlayViewController1); + setupOverlayViewController2(); + + mOverlayViewGlobalStateController.showView(mOverlayViewController2, mRunnable); + + verify(mOverlayViewController1).setAllowRotaryFocus(false); + verify(mOverlayViewController2).setAllowRotaryFocus(true); + } + + @Test + public void showView_newHighestZOrder_refreshTopFocus() { + setupOverlayViewController1(); + setOverlayViewControllerAsShowing(mOverlayViewController1); + setupOverlayViewController2(); + + mOverlayViewGlobalStateController.showView(mOverlayViewController2, mRunnable); + + verify(mOverlayViewController1, never()).refreshRotaryFocusIfNeeded(); + verify(mOverlayViewController2).refreshRotaryFocusIfNeeded(); + } + @Test public void showView_oldHighestZOrder() { setupOverlayViewController2(); @@ -345,9 +378,9 @@ public void showView_oldHighestZOrder() { @Test public void showView_oldHighestZOrder_shouldShowNavBarFalse_navigationBarsHidden() { setupOverlayViewController2(); + setOverlayViewControllerAsShowing(mOverlayViewController2); when(mOverlayViewController1.shouldFocusWindow()).thenReturn(true); when(mOverlayViewController2.shouldFocusWindow()).thenReturn(true); - setOverlayViewControllerAsShowing(mOverlayViewController2); when(mOverlayViewController1.shouldShowNavigationBarInsets()).thenReturn(true); when(mOverlayViewController2.shouldShowNavigationBarInsets()).thenReturn(false); reset(mWindowInsetsController); @@ -360,11 +393,12 @@ public void showView_oldHighestZOrder_shouldShowNavBarFalse_navigationBarsHidden @Test public void showView_oldHighestZOrder_shouldShowNavBarTrue_navigationBarsShown() { setupOverlayViewController2(); + setOverlayViewControllerAsShowing(mOverlayViewController2); when(mOverlayViewController1.shouldFocusWindow()).thenReturn(true); when(mOverlayViewController2.shouldFocusWindow()).thenReturn(true); - setOverlayViewControllerAsShowing(mOverlayViewController2); when(mOverlayViewController1.shouldShowNavigationBarInsets()).thenReturn(false); when(mOverlayViewController2.shouldShowNavigationBarInsets()).thenReturn(true); + reset(mWindowInsetsController); mOverlayViewGlobalStateController.showView(mOverlayViewController1, mRunnable); @@ -374,9 +408,9 @@ public void showView_oldHighestZOrder_shouldShowNavBarTrue_navigationBarsShown() @Test public void showView_oldHighestZOrder_shouldShowStatusBarFalse_statusBarsHidden() { setupOverlayViewController2(); + setOverlayViewControllerAsShowing(mOverlayViewController2); when(mOverlayViewController1.shouldFocusWindow()).thenReturn(true); when(mOverlayViewController2.shouldFocusWindow()).thenReturn(true); - setOverlayViewControllerAsShowing(mOverlayViewController2); when(mOverlayViewController1.shouldShowStatusBarInsets()).thenReturn(true); when(mOverlayViewController2.shouldShowStatusBarInsets()).thenReturn(false); reset(mWindowInsetsController); @@ -389,11 +423,12 @@ public void showView_oldHighestZOrder_shouldShowStatusBarFalse_statusBarsHidden( @Test public void showView_oldHighestZOrder_shouldShowStatusBarTrue_statusBarsShown() { setupOverlayViewController2(); + setOverlayViewControllerAsShowing(mOverlayViewController2); when(mOverlayViewController1.shouldFocusWindow()).thenReturn(true); when(mOverlayViewController2.shouldFocusWindow()).thenReturn(true); - setOverlayViewControllerAsShowing(mOverlayViewController2); when(mOverlayViewController1.shouldShowStatusBarInsets()).thenReturn(false); when(mOverlayViewController2.shouldShowStatusBarInsets()).thenReturn(true); + reset(mWindowInsetsController); mOverlayViewGlobalStateController.showView(mOverlayViewController1, mRunnable); @@ -425,6 +460,30 @@ public void showView_oldHighestZOrder_correctViewsShown() { OVERLAY_VIEW_CONTROLLER_2_Z_ORDER).toArray()); } + @Test + public void showView_oldHighestZOrder_topDescendantsFocusable() { + setupOverlayViewController1(); + setupOverlayViewController2(); + setOverlayViewControllerAsShowing(mOverlayViewController2); + + mOverlayViewGlobalStateController.showView(mOverlayViewController1, mRunnable); + + verify(mOverlayViewController1).setAllowRotaryFocus(false); + verify(mOverlayViewController2).setAllowRotaryFocus(true); + } + + @Test + public void showView_oldHighestZOrder_refreshTopFocus() { + setupOverlayViewController1(); + setupOverlayViewController2(); + setOverlayViewControllerAsShowing(mOverlayViewController2); + + mOverlayViewGlobalStateController.showView(mOverlayViewController1, mRunnable); + + verify(mOverlayViewController1, never()).refreshRotaryFocusIfNeeded(); + verify(mOverlayViewController2).refreshRotaryFocusIfNeeded(); + } + @Test public void showView_somethingAlreadyShown_windowVisibleNotCalled() { setupOverlayViewController1(); @@ -577,10 +636,10 @@ public void hideView_newHighestZOrder_threeViewsShown() { public void hideView_newHighestZOrder_shouldShowNavBarFalse_navigationBarHidden() { setupOverlayViewController1(); setupOverlayViewController2(); - when(mOverlayViewController1.shouldFocusWindow()).thenReturn(true); - when(mOverlayViewController2.shouldFocusWindow()).thenReturn(true); setOverlayViewControllerAsShowing(mOverlayViewController1); setOverlayViewControllerAsShowing(mOverlayViewController2); + when(mOverlayViewController1.shouldFocusWindow()).thenReturn(true); + when(mOverlayViewController2.shouldFocusWindow()).thenReturn(true); when(mOverlayViewController1.shouldShowNavigationBarInsets()).thenReturn(false); reset(mWindowInsetsController); @@ -593,10 +652,10 @@ public void hideView_newHighestZOrder_shouldShowNavBarFalse_navigationBarHidden( public void hideView_newHighestZOrder_shouldShowNavBarTrue_navigationBarShown() { setupOverlayViewController1(); setupOverlayViewController2(); - when(mOverlayViewController1.shouldFocusWindow()).thenReturn(true); - when(mOverlayViewController2.shouldFocusWindow()).thenReturn(true); setOverlayViewControllerAsShowing(mOverlayViewController1); setOverlayViewControllerAsShowing(mOverlayViewController2); + when(mOverlayViewController1.shouldFocusWindow()).thenReturn(true); + when(mOverlayViewController2.shouldFocusWindow()).thenReturn(true); when(mOverlayViewController1.shouldShowNavigationBarInsets()).thenReturn(true); reset(mWindowInsetsController); @@ -609,10 +668,10 @@ public void hideView_newHighestZOrder_shouldShowNavBarTrue_navigationBarShown() public void hideView_newHighestZOrder_shouldShowStatusBarFalse_statusBarHidden() { setupOverlayViewController1(); setupOverlayViewController2(); - when(mOverlayViewController1.shouldFocusWindow()).thenReturn(true); - when(mOverlayViewController2.shouldFocusWindow()).thenReturn(true); setOverlayViewControllerAsShowing(mOverlayViewController1); setOverlayViewControllerAsShowing(mOverlayViewController2); + when(mOverlayViewController1.shouldFocusWindow()).thenReturn(true); + when(mOverlayViewController2.shouldFocusWindow()).thenReturn(true); when(mOverlayViewController1.shouldShowStatusBarInsets()).thenReturn(false); reset(mWindowInsetsController); @@ -625,10 +684,10 @@ public void hideView_newHighestZOrder_shouldShowStatusBarFalse_statusBarHidden() public void hideView_newHighestZOrder_shouldShowStatusBarTrue_statusBarShown() { setupOverlayViewController1(); setupOverlayViewController2(); - when(mOverlayViewController1.shouldFocusWindow()).thenReturn(true); - when(mOverlayViewController2.shouldFocusWindow()).thenReturn(true); setOverlayViewControllerAsShowing(mOverlayViewController1); setOverlayViewControllerAsShowing(mOverlayViewController2); + when(mOverlayViewController1.shouldFocusWindow()).thenReturn(true); + when(mOverlayViewController2.shouldFocusWindow()).thenReturn(true); when(mOverlayViewController1.shouldShowStatusBarInsets()).thenReturn(true); reset(mWindowInsetsController); @@ -668,10 +727,10 @@ public void hideView_oldHighestZOrder() { public void hideView_oldHighestZOrder_shouldShowNavBarFalse_navigationBarHidden() { setupOverlayViewController1(); setupOverlayViewController2(); - when(mOverlayViewController1.shouldFocusWindow()).thenReturn(true); - when(mOverlayViewController2.shouldFocusWindow()).thenReturn(true); setOverlayViewControllerAsShowing(mOverlayViewController1); setOverlayViewControllerAsShowing(mOverlayViewController2); + when(mOverlayViewController1.shouldFocusWindow()).thenReturn(true); + when(mOverlayViewController2.shouldFocusWindow()).thenReturn(true); when(mOverlayViewController2.shouldShowNavigationBarInsets()).thenReturn(false); reset(mWindowInsetsController); @@ -684,11 +743,12 @@ public void hideView_oldHighestZOrder_shouldShowNavBarFalse_navigationBarHidden( public void hideView_oldHighestZOrder_shouldShowNavBarTrue_navigationBarShown() { setupOverlayViewController1(); setupOverlayViewController2(); - when(mOverlayViewController1.shouldFocusWindow()).thenReturn(true); - when(mOverlayViewController2.shouldFocusWindow()).thenReturn(true); setOverlayViewControllerAsShowing(mOverlayViewController1); setOverlayViewControllerAsShowing(mOverlayViewController2); + when(mOverlayViewController1.shouldFocusWindow()).thenReturn(true); + when(mOverlayViewController2.shouldFocusWindow()).thenReturn(true); when(mOverlayViewController2.shouldShowNavigationBarInsets()).thenReturn(true); + reset(mWindowInsetsController); mOverlayViewGlobalStateController.hideView(mOverlayViewController1, mRunnable); @@ -699,10 +759,10 @@ public void hideView_oldHighestZOrder_shouldShowNavBarTrue_navigationBarShown() public void hideView_oldHighestZOrder_shouldShowStatusBarFalse_statusBarHidden() { setupOverlayViewController1(); setupOverlayViewController2(); - when(mOverlayViewController1.shouldFocusWindow()).thenReturn(true); - when(mOverlayViewController2.shouldFocusWindow()).thenReturn(true); setOverlayViewControllerAsShowing(mOverlayViewController1); setOverlayViewControllerAsShowing(mOverlayViewController2); + when(mOverlayViewController1.shouldFocusWindow()).thenReturn(true); + when(mOverlayViewController2.shouldFocusWindow()).thenReturn(true); when(mOverlayViewController2.shouldShowStatusBarInsets()).thenReturn(false); reset(mWindowInsetsController); @@ -715,11 +775,12 @@ public void hideView_oldHighestZOrder_shouldShowStatusBarFalse_statusBarHidden() public void hideView_oldHighestZOrder_shouldShowStatusBarTrue_statusBarShown() { setupOverlayViewController1(); setupOverlayViewController2(); - when(mOverlayViewController1.shouldFocusWindow()).thenReturn(true); - when(mOverlayViewController2.shouldFocusWindow()).thenReturn(true); setOverlayViewControllerAsShowing(mOverlayViewController1); setOverlayViewControllerAsShowing(mOverlayViewController2); + when(mOverlayViewController1.shouldFocusWindow()).thenReturn(true); + when(mOverlayViewController2.shouldFocusWindow()).thenReturn(true); when(mOverlayViewController2.shouldShowStatusBarInsets()).thenReturn(true); + reset(mWindowInsetsController); mOverlayViewGlobalStateController.hideView(mOverlayViewController1, mRunnable); @@ -917,7 +978,11 @@ private void setupOverlayViewController(OverlayViewController overlayViewControl private void setOverlayViewControllerAsShowing(OverlayViewController overlayViewController) { mOverlayViewGlobalStateController.showView(overlayViewController, /* show= */ null); + View layout = overlayViewController.getLayout(); reset(mSystemUIOverlayWindowController); + reset(overlayViewController); when(mSystemUIOverlayWindowController.getBaseLayout()).thenReturn(mBaseLayout); + when(overlayViewController.getLayout()).thenReturn(layout); + when(overlayViewController.isInflated()).thenReturn(true); } } diff --git a/packages/CarSystemUI/tests/src/com/android/systemui/wm/DisplaySystemBarsControllerTest.java b/packages/CarSystemUI/tests/src/com/android/systemui/wm/DisplaySystemBarsControllerTest.java index 29cc8eec4bc..765a4e7900b 100644 --- a/packages/CarSystemUI/tests/src/com/android/systemui/wm/DisplaySystemBarsControllerTest.java +++ b/packages/CarSystemUI/tests/src/com/android/systemui/wm/DisplaySystemBarsControllerTest.java @@ -21,6 +21,7 @@ import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.eq; import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; import android.car.settings.CarSettings; import android.os.Handler; @@ -29,6 +30,7 @@ import android.testing.AndroidTestingRunner; import android.testing.TestableLooper; import android.view.IWindowManager; +import android.view.Surface; import androidx.test.filters.SmallTest; @@ -60,15 +62,20 @@ public class DisplaySystemBarsControllerTest extends SysuiTestCase { private Handler mHandler; @Mock private TransactionPool mTransactionPool; + @Mock + private DisplayLayout mDisplayLayout; @Before public void setUp() { MockitoAnnotations.initMocks(this); mSystemWindows.mContext = mContext; mSystemWindows.mWmService = mIWindowManager; + when(mDisplayLayout.rotation()).thenReturn(Surface.ROTATION_0); + when(mDisplayController.getDisplayLayout(DISPLAY_ID)).thenReturn(mDisplayLayout); mController = new DisplaySystemBarsController( - mSystemWindows, + mContext, + mIWindowManager, mDisplayController, mHandler, mTransactionPool @@ -81,7 +88,8 @@ public void onDisplayAdded_setsDisplayWindowInsetsControllerOnWMService() mController.onDisplayAdded(DISPLAY_ID); verify(mIWindowManager).setDisplayWindowInsetsController( - eq(DISPLAY_ID), any(DisplaySystemBarsController.PerDisplay.class)); + eq(DISPLAY_ID), + any(DisplayImeController.PerDisplay.DisplayWindowInsetsControllerImpl.class)); } @Test diff --git a/packages/CarrierDefaultApp/res/values-en-rXC/strings.xml b/packages/CarrierDefaultApp/res/values-en-rXC/strings.xml deleted file mode 100644 index d7ae1cee29f..00000000000 --- a/packages/CarrierDefaultApp/res/values-en-rXC/strings.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‎‎‎‏‏‎‏‎‏‎‎‎‎‏‎‏‏‏‏‎‎‏‎‏‏‎‏‏‏‎‏‏‏‎‎‏‏‏‏‏‎‏‎‎‏‎‎‏‎‎‏‏‎‎‎‎‎‏‎‎CarrierDefaultApp‎‏‎‎‏‎" - "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‏‏‎‏‏‎‏‎‎‏‏‏‎‏‏‏‏‏‏‏‏‏‏‏‎‎‎‏‏‏‏‎‏‎‏‏‎‏‏‎‏‎‏‏‏‏‎‏‏‎‎‎‏‏‎‏‎‎‏‎Mobile Carrier‎‏‎‎‏‎" - "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‏‏‏‏‎‎‎‏‎‏‎‎‏‏‏‎‎‎‏‏‎‎‎‏‎‏‎‎‏‎‏‎‏‏‎‏‏‏‏‎‎‎‏‏‏‏‏‏‏‏‎‎‎‎‎‎‎‎‏‎Mobile data has run out‎‏‎‎‏‎" - "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‎‎‏‎‏‎‎‎‏‏‎‏‎‏‎‎‎‏‎‏‏‏‎‏‏‎‎‏‎‎‏‏‎‏‎‏‏‎‎‏‎‎‏‎‏‏‎‎‏‏‏‏‏‏‏‎‎‎‏‎Your mobile data has been deactivated‎‏‎‎‏‎" - "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‏‏‏‏‏‎‏‏‏‎‎‎‎‎‏‎‎‎‏‏‎‏‏‎‏‏‎‏‎‎‏‎‏‎‎‎‏‏‏‎‏‏‏‎‎‎‎‏‏‏‎‏‎‎‏‎‎‎‏‎Tap to visit the %s website‎‏‎‎‏‎" - "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‎‏‏‎‎‏‏‎‎‎‎‎‏‏‏‏‏‎‏‏‎‎‎‎‎‏‎‏‏‏‏‎‎‎‏‎‎‎‏‎‏‏‎‎‏‏‏‏‎‎‎‎‎‏‎‏‎‎‏‎Please contact your service provider %s‎‏‎‎‏‎" - "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‏‏‏‎‏‏‎‎‎‏‎‎‎‎‎‏‎‎‎‎‎‏‏‏‎‎‎‏‎‎‎‎‎‎‏‏‏‏‏‏‏‎‎‎‎‏‎‏‏‏‏‏‎‎‎‎‎‏‎‎No mobile data connection‎‏‎‎‏‎" - "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‏‏‏‏‏‎‎‏‎‎‎‎‎‎‏‎‏‎‎‎‏‏‎‏‏‎‎‎‎‏‏‏‏‏‎‎‏‏‎‏‎‏‎‎‎‎‎‎‎‏‏‎‎‏‎‎‎‎‏‎‎Add data or roaming plan through %s‎‏‎‎‏‎" - "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‎‏‏‏‎‎‏‎‎‏‎‏‏‏‏‎‏‏‎‎‏‎‎‏‏‎‎‏‎‏‎‏‎‎‎‎‏‏‏‎‏‏‏‎‏‎‏‏‏‏‎‎‏‏‎‏‏‎‎‎Mobile data status‎‏‎‎‏‎" - "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‎‏‏‏‎‎‎‏‎‏‎‎‏‎‏‏‏‏‎‏‏‏‏‎‎‏‎‎‏‏‎‏‏‎‏‎‏‏‎‎‏‏‎‏‏‏‎‏‏‎‎‏‏‎‏‏‎‎‏‎Sign in to mobile network‎‏‎‎‏‎" - "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‎‏‏‎‏‏‎‏‎‎‎‏‎‏‎‏‎‎‎‎‏‏‏‎‎‎‎‎‎‎‎‏‎‎‎‎‏‎‏‎‎‏‎‏‏‎‎‎‎‎‏‎‏‏‎‎‏‎‎‎The network you’re trying to join has security issues.‎‏‎‎‏‎" - "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‏‎‏‏‏‏‎‎‎‏‎‏‎‏‏‏‎‎‎‏‎‏‎‎‎‎‏‏‏‎‏‎‏‏‎‎‎‏‎‏‏‎‏‏‏‎‏‏‏‏‏‎‏‎‎‏‏‎‎‎For example, the login page may not belong to the organization shown.‎‏‎‎‏‎" - "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‏‏‏‏‏‎‎‏‏‎‎‏‏‏‎‏‏‏‏‏‏‎‎‏‎‏‏‏‎‏‏‎‎‏‏‏‏‏‎‏‏‏‏‎‏‎‎‎‏‏‏‏‏‏‎‎‎‎‎‎Continue anyway via browser‎‏‎‎‏‎" - diff --git a/packages/CarrierDefaultApp/res/values-fa/strings.xml b/packages/CarrierDefaultApp/res/values-fa/strings.xml index 37a3de87ba0..5328a03d964 100644 --- a/packages/CarrierDefaultApp/res/values-fa/strings.xml +++ b/packages/CarrierDefaultApp/res/values-fa/strings.xml @@ -6,9 +6,7 @@ "داده تلفن همراه تمام شده است" "داده شبکه تلفن همراه شما غیرفعال شده است" "‏برای رفتن به وب‌سایت %s، ضربه بزنید" - - - + "‏لطفاً با ارائه‌دهنده خدمات %s خود تماس بگیرید" "بدون اتصال داده دستگاه همراه" "‏افزودن طرح داده یا فراگردی ازطریق %s" "وضعیت داده تلفن همراه" diff --git a/packages/CarrierDefaultApp/res/values-hu/strings.xml b/packages/CarrierDefaultApp/res/values-hu/strings.xml index 4ae6ea67bb0..a492e47242a 100644 --- a/packages/CarrierDefaultApp/res/values-hu/strings.xml +++ b/packages/CarrierDefaultApp/res/values-hu/strings.xml @@ -8,7 +8,7 @@ "Koppintson a(z) %s webhely meglátogatásához" "Vegye fel a kapcsolatot szolgáltatójával (%s)" "Nincs mobiladat-kapcsolat" - "Adjon hozzá előfizetést vagy barangolási csomagot a következőn keresztül: %s" + "Adjon hozzá előfizetést vagy roamingcsomagot a következőn keresztül: %s" "Mobiladat-állapot" "Bejelentkezés a mobilhálózatra" "Biztonsági problémák vannak azzal a hálózattal, amelyhez csatlakozni szeretne." diff --git a/packages/CarrierDefaultApp/res/values-ky/strings.xml b/packages/CarrierDefaultApp/res/values-ky/strings.xml index 199476f47be..bf4c8c32382 100644 --- a/packages/CarrierDefaultApp/res/values-ky/strings.xml +++ b/packages/CarrierDefaultApp/res/values-ky/strings.xml @@ -8,7 +8,7 @@ "%s сайтына баш багуу үчүн басыңыз" "%s Интернет провайдери менен байланышыңыз" "Мобилдик Интернет жок" - "%s аркылуу дайындарды же роуминг планын кошуу" + "%s аркылуу дайын-даректерди же роуминг планын кошуу" "Мобилдик Интернеттин абалы" "Мобилдик тармакка кирүү" "Кошулайын деген тармагыңызда коопсуздук көйгөйлөрү бар." diff --git a/packages/CarrierDefaultApp/res/values-mn/strings.xml b/packages/CarrierDefaultApp/res/values-mn/strings.xml index 1a9b72ec3b9..4aa9fb55ff3 100644 --- a/packages/CarrierDefaultApp/res/values-mn/strings.xml +++ b/packages/CarrierDefaultApp/res/values-mn/strings.xml @@ -5,7 +5,7 @@ "Мобайл оператор компани" "Мобайл дата дууссан" "Таны мобайл датаг идэвхгүй болгосон" - "%s вэб хуудсанд зочлохын тулд товших" + "%s веб хуудсанд зочлохын тулд товших" "%s үйлчилгээ үзүүлэгчтэйгээ холбогдоно уу" "Мобайл дата холболт алга" "Дата эсвэл роуминг төлөвлөгөөг %s-р нэмнэ үү" diff --git a/packages/CarrierDefaultApp/res/values-ur/strings.xml b/packages/CarrierDefaultApp/res/values-ur/strings.xml index fc286b8a53d..65bd6ceba94 100644 --- a/packages/CarrierDefaultApp/res/values-ur/strings.xml +++ b/packages/CarrierDefaultApp/res/values-ur/strings.xml @@ -6,7 +6,7 @@ "موبائل ڈیٹا ختم ہو چکا ہے" "آپ کا موبائل ڈیٹا غیر فعال کر دیا گیا ہے" "‏‎%s ویب سائٹ ملاحظہ کرنے کیلئے تھپتھپائیں" - "‏براہ کرم اپنے خدمت کے فراہم کنندہ %s سے رابطہ کریں" + "‏براہ کرم اپنے سروس فراہم کنندہ %s سے رابطہ کریں" "کوئی موبائل ڈیٹا کنکشن نہیں ہے" "‏%s کے ذریعے ڈیٹا یا رومنگ پلان شامل کریں" "موبائل ڈیٹا کی صورت حال" diff --git a/packages/DynamicSystemInstallationService/res/values-eu/strings.xml b/packages/DynamicSystemInstallationService/res/values-eu/strings.xml index 7c4a67d4e6c..9fa88beeb02 100644 --- a/packages/DynamicSystemInstallationService/res/values-eu/strings.xml +++ b/packages/DynamicSystemInstallationService/res/values-eu/strings.xml @@ -5,7 +5,7 @@ "Prest dago sistema dinamikoa. Erabiltzen hasteko, berrabiarazi gailua." "Instalatzen" "Ezin izan da instalatu" - "Ezin izan da balidatu irudia. Utzi bertan behera instalazioa." + "Ezin izan da baliozkotu irudia. Utzi bertan behera instalazioa." "Sistema dinamiko bat abian da. Berrabiarazi Android-en jatorrizko bertsioa erabiltzeko." "Utzi" "Baztertu" diff --git a/packages/InputDevices/res/values-eu/strings.xml b/packages/InputDevices/res/values-eu/strings.xml index 30a193f25f5..fe4110aa261 100644 --- a/packages/InputDevices/res/values-eu/strings.xml +++ b/packages/InputDevices/res/values-eu/strings.xml @@ -38,10 +38,10 @@ "Arabiarra" "Greziarra" "Hebrearra" - "Lituaniera" - "Espainiera (Latinoamerika)" - "Letoniera" - "Pertsiera" + "Lituaniarra" + "Espainiarra (Latinoamerika)" + "Letoniarra" + "Persiarra" "Azerbaijandarra" "Poloniarra" diff --git a/packages/InputDevices/res/values-ta/strings.xml b/packages/InputDevices/res/values-ta/strings.xml index b614a509922..53ac7b0720f 100644 --- a/packages/InputDevices/res/values-ta/strings.xml +++ b/packages/InputDevices/res/values-ta/strings.xml @@ -2,7 +2,7 @@ "உள்ளீட்டுச் சாதனங்கள்" - "Android விசைப்பலகை" + "Android கீபோர்டு" "ஆங்கிலம் (யூகே)" "ஆங்கிலம் (யூஎஸ்)" "ஆங்கிலம் (யூஎஸ்), சர்வதேச நடை" diff --git a/packages/PackageInstaller/res/values-ca/strings.xml b/packages/PackageInstaller/res/values-ca/strings.xml index 1833329a9e3..b25b37bec79 100644 --- a/packages/PackageInstaller/res/values-ca/strings.xml +++ b/packages/PackageInstaller/res/values-ca/strings.xml @@ -80,9 +80,9 @@ "Les accions d\'instal·lar o de desinstal·lar no s\'admeten a Wear." "S\'està preparant la instal·lació de l\'aplicació…" "Desconeguda" - "Per seguretat, la tauleta no pot instal·lar aplicacions desconegudes d\'aquesta font." - "Per seguretat, el televisor no pot instal·lar aplicacions desconegudes d\'aquesta font." - "Per seguretat, el telèfon no pot instal·lar aplicacions desconegudes d\'aquesta font." + "Per la teva seguretat, la tauleta no pot instal·lar aplicacions desconegudes d\'aquesta font." + "Per la teva seguretat, el televisor no pot instal·lar aplicacions desconegudes d\'aquesta font." + "Per la teva seguretat, el telèfon no pot instal·lar aplicacions desconegudes d\'aquesta font." "El telèfon i les dades personals són més vulnerables als atacs d\'aplicacions desconegudes. En instal·lar aquesta aplicació, acceptes que ets responsable de qualsevol dany que es produeixi al telèfon o de la pèrdua de dades que pugui resultar del seu ús." "La tauleta i les dades personals són més vulnerables als atacs d\'aplicacions desconegudes. En instal·lar aquesta aplicació, acceptes que ets responsable de qualsevol dany que es produeixi a la tauleta o de la pèrdua de dades que pugui resultar del seu ús." "El televisor i les dades personals són més vulnerables als atacs d\'aplicacions desconegudes. En instal·lar aquesta aplicació, acceptes que ets responsable de qualsevol dany que es produeixi al televisor o de la pèrdua de dades que pugui resultar del seu ús." diff --git a/packages/PackageInstaller/res/values-iw/strings.xml b/packages/PackageInstaller/res/values-iw/strings.xml index 7cabdd532ff..e5e219559c6 100644 --- a/packages/PackageInstaller/res/values-iw/strings.xml +++ b/packages/PackageInstaller/res/values-iw/strings.xml @@ -21,29 +21,29 @@ "סיום" "ביטול" "מתקין…" - "מתקין את %1$s…" + "מתבצעת התקנה של %1$s…" "האפליקציה הותקנה." - "האם ברצונך להתקין אפליקציה זו?" - "האם ברצונך להתקין עדכון עבור אפליקציה קיימת זו? הנתונים הקיימים שלך לא יאבדו." + "להתקין את האפליקציה הזו?" + "להתקין עדכון עבור האפליקציה הזו? הנתונים הקיימים שלך לא יאבדו." "האם ברצונך להתקין עדכון עבור אפליקציה מובנית זו? הנתונים הקיימים שלך לא יאבדו." "האפליקציה לא הותקנה." "החבילה נחסמה להתקנה." "האפליקציה לא הותקנה כי החבילה מתנגשת עם חבילה קיימת." "האפליקציה לא הותקנה כי האפליקציה אינה תואמת לטאבלט." "האפליקציה הזו אינה תואמת לטלוויזיה שלך." - "האפליקציה לא הותקנה כי האפליקציה אינה תואמת לטלפון." + "האפליקציה לא הותקנה כי היא לא תואמת לטלפון." "האפליקציה לא הותקנה כי נראה שהחבילה לא תקפה." "לא ניתן להתקין את %1$s בטאבלט שלך." "לא ניתן להתקין את %1$s בטלוויזיה שלך." "לא ניתן להתקין את %1$s בטלפון שלך." "פתיחה" "מנהל המערכת שלך לא מתיר התקנה של אפליקציות ממקורות לא ידועים" - "למשתמש זה אין הרשאה להתקין אפליקציות שאינן מוכרות" + "למשתמש הזה אין הרשאה להתקין אפליקציות שאינן מוכרות" "למשתמש הזה אין הרשאה להתקין אפליקציות" "אישור" "ניהול אפליקציות" "אין מספיק שטח" - "לא ניתן להתקין את %1$s. יש לפנות שטח ולנסות שוב." + "לא ניתן להתקין את %1$s. יש לפנות מקום אחסון ולנסות שוב." "האפליקציה לא נמצאה" "האפליקציה לא נמצאת ברשימת האפליקציות המותקנות." "לא מורשה" @@ -52,21 +52,21 @@ "לא ניתן היה להסיר את התקנת האפליקציה." "הסרת התקנה של האפליקציה" "הסרת התקנה של עדכון" - "%1$s הוא חלק מהאפליקציה הבאה:" + "הפעילות %1$s היא חלק מהאפליקציה הבאה:" "האם ברצונך להסיר את ההתקנה של אפליקציה זו?" - "האם אתה רוצה להסיר את האפליקציה הזו עבור ""כל"" המשתמשים? האפליקציה והנתונים שלה יוסרו מ""כל"" המשתמשים במכשיר." - "האם ברצונך להסיר את התקנתה של אפליקציה זו עבור המשתמש %1$s?" + "להסיר את האפליקציה הזו עבור ""כל"" המשתמשים? האפליקציה והנתונים שלה יוסרו עבור ""כל"" המשתמשים במכשיר." + "להסיר את ההתקנה של האפליקציה הזו עבור %1$s?" "האם להחליף את האפליקציה הזאת בגרסת היצרן? כל הנתונים יוסרו." "האם להחליף את האפליקציה הזאת בגרסת היצרן? כל הנתונים יוסרו. הפעולה תשפיע על כל משתמשי המכשיר, כולל משתמשים בעלי פרופיל עבודה." "שמירת %1$s מנתוני האפליקציה." "התקנות בתהליכי הסרה" "הסרות התקנה שנכשלו" - "מסיר התקנה..." - "מסיר את ההתקנה של %1$s…" + "בתהליך הסרת התקנה..." + "המערכת מסירה את ההתקנה של %1$s…" "הסרת ההתקנה הסתיימה." "ההתקנה של %1$s הוסרה" - "הסרת ההתקנה נכשלה." - "נכשלה הסרת ההתקנה של %1$s." + "לא ניתן היה להסיר את ההתקנה." + "לא ניתן היה להסיר את ההתקנה של %1$s." "לא ניתן להסיר את ההתקנה של אפליקציה פעילה של מנהל המכשיר" "לא ניתן להסיר את ההתקנה של אפליקציה פעילה של מנהל המכשיר של %1$s" "אפליקציה זו נדרשת לחלק מהמשתמשים או מהפרופילים והתקנתה הוסרה למשתמשים אחרים" @@ -83,7 +83,7 @@ "לצורכי אבטחה, הטאבלט שלך חסום להתקנת אפליקציות בלתי מוכרות המגיעות ממקור זה." "לצורכי אבטחה, מכשיר הטלוויזיה שלך חסום להתקנת אפליקציות בלתי מוכרות המגיעות ממקור זה." "לצורכי אבטחה, הטלפון שלך חסום להתקנת אפליקציות בלתי מוכרות המגיעות ממקור זה." - "נתוני הטלפון והנתונים האישיים שלך חשופים יותר בפני התקפות על ידי אפליקציות ממקורות לא ידועים. אם תתקין אפליקציה זו, אתה מסכים לכך שאתה האחראי הבלעדי במקרה של אובדן נתונים או אם ייגרם נזק לטלפון שלך בעקבות השימוש באפליקציה." + "נתוני הטלפון והנתונים האישיים שלך חשופים יותר בפני התקפות על ידי אפליקציות ממקורות לא ידועים. התקנת האפליקציה הזו מהווה את הסכמתך לכך שהאחריות הבלעדית היא שלך במקרה של אובדן נתונים או גרימת נזק לטלפון שלך בעקבות השימוש באפליקציה." "נתוני הטאבלט והנתונים האישיים שלך חשופים יותר בפני התקפות על ידי אפליקציות ממקורות לא ידועים. אם תתקין אפליקציה זו, אתה מסכים לכך שאתה האחראי הבלעדי במקרה של אובדן נתונים או אם ייגרם נזק לטאבלט שלך בעקבות השימוש באפליקציה." "נתוני הטלוויזיה והנתונים האישיים שלך חשופים יותר בפני התקפות על ידי אפליקציות ממקורות לא ידועים. אם תתקין אפליקציה זו, אתה מסכים לכך שאתה האחראי הבלעדי במקרה של אובדן נתונים או אם ייגרם נזק לטלוויזיה שלך בעקבות השימוש באפליקציה." "המשך" diff --git a/packages/PackageInstaller/res/values-sv/strings.xml b/packages/PackageInstaller/res/values-sv/strings.xml index d0902c34ccc..28ad6aafd77 100644 --- a/packages/PackageInstaller/res/values-sv/strings.xml +++ b/packages/PackageInstaller/res/values-sv/strings.xml @@ -24,8 +24,8 @@ "%1$s installeras …" "Appen har installerats." "Vill du installera det här programmet?" - "Vill du installera en uppdatering till den här befintliga appen? Dina befintliga data försvinner inte." - "Vill du installera en uppdatering av den inbyggda appen? Dina befintliga data försvinner inte." + "Vill du installera en uppdatering till den här befintliga appen? Din befintliga data försvinner inte." + "Vill du installera en uppdatering av den inbyggda appen? Din befintliga data försvinner inte." "Appen har inte installerats." "Paketet har blockerats för installation." "Appen har inte installerats på grund av en konflikt mellan detta paket och ett befintligt paket." diff --git a/packages/PackageInstaller/src/com/android/packageinstaller/InstallSuccess.java b/packages/PackageInstaller/src/com/android/packageinstaller/InstallSuccess.java index 705d3f4bdf8..38c06dd48b8 100644 --- a/packages/PackageInstaller/src/com/android/packageinstaller/InstallSuccess.java +++ b/packages/PackageInstaller/src/com/android/packageinstaller/InstallSuccess.java @@ -41,6 +41,15 @@ public class InstallSuccess extends AlertActivity { private static final String LOG_TAG = InstallSuccess.class.getSimpleName(); + @Nullable + private PackageUtil.AppSnippet mAppSnippet; + + @Nullable + private String mAppPackageName; + + @Nullable + private Intent mLaunchIntent; + @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -55,59 +64,73 @@ protected void onCreate(@Nullable Bundle savedInstanceState) { Intent intent = getIntent(); ApplicationInfo appInfo = intent.getParcelableExtra(PackageUtil.INTENT_ATTR_APPLICATION_INFO); + mAppPackageName = appInfo.packageName; Uri packageURI = intent.getData(); // Set header icon and title - PackageUtil.AppSnippet as; PackageManager pm = getPackageManager(); if ("package".equals(packageURI.getScheme())) { - as = new PackageUtil.AppSnippet(pm.getApplicationLabel(appInfo), + mAppSnippet = new PackageUtil.AppSnippet(pm.getApplicationLabel(appInfo), pm.getApplicationIcon(appInfo)); } else { File sourceFile = new File(packageURI.getPath()); - as = PackageUtil.getAppSnippet(this, appInfo, sourceFile); + mAppSnippet = PackageUtil.getAppSnippet(this, appInfo, sourceFile); } - mAlert.setIcon(as.icon); - mAlert.setTitle(as.label); - mAlert.setView(R.layout.install_content_view); - mAlert.setButton(DialogInterface.BUTTON_POSITIVE, getString(R.string.launch), null, - null); - mAlert.setButton(DialogInterface.BUTTON_NEGATIVE, getString(R.string.done), - (ignored, ignored2) -> { - if (appInfo.packageName != null) { - Log.i(LOG_TAG, "Finished installing " + appInfo.packageName); - } - finish(); - }, null); - setupAlert(); - requireViewById(R.id.install_success).setVisibility(View.VISIBLE); - // Enable or disable "launch" button - Intent launchIntent = getPackageManager().getLaunchIntentForPackage( - appInfo.packageName); - boolean enabled = false; - if (launchIntent != null) { - List list = getPackageManager().queryIntentActivities(launchIntent, - 0); - if (list != null && list.size() > 0) { - enabled = true; - } - } + mLaunchIntent = getPackageManager().getLaunchIntentForPackage(mAppPackageName); + + bindUi(); + } + } + + @Override + protected void onResume() { + super.onResume(); + bindUi(); + } - Button launchButton = mAlert.getButton(DialogInterface.BUTTON_POSITIVE); - if (enabled) { - launchButton.setOnClickListener(view -> { - try { - startActivity(launchIntent); - } catch (ActivityNotFoundException | SecurityException e) { - Log.e(LOG_TAG, "Could not start activity", e); + private void bindUi() { + if (mAppSnippet == null) { + return; + } + + mAlert.setIcon(mAppSnippet.icon); + mAlert.setTitle(mAppSnippet.label); + mAlert.setView(R.layout.install_content_view); + mAlert.setButton(DialogInterface.BUTTON_POSITIVE, getString(R.string.launch), null, + null); + mAlert.setButton(DialogInterface.BUTTON_NEGATIVE, getString(R.string.done), + (ignored, ignored2) -> { + if (mAppPackageName != null) { + Log.i(LOG_TAG, "Finished installing " + mAppPackageName); } finish(); - }); - } else { - launchButton.setEnabled(false); + }, null); + setupAlert(); + requireViewById(R.id.install_success).setVisibility(View.VISIBLE); + // Enable or disable "launch" button + boolean enabled = false; + if (mLaunchIntent != null) { + List list = getPackageManager().queryIntentActivities(mLaunchIntent, + 0); + if (list != null && list.size() > 0) { + enabled = true; } } + + Button launchButton = mAlert.getButton(DialogInterface.BUTTON_POSITIVE); + if (enabled) { + launchButton.setOnClickListener(view -> { + try { + startActivity(mLaunchIntent); + } catch (ActivityNotFoundException | SecurityException e) { + Log.e(LOG_TAG, "Could not start activity", e); + } + finish(); + }); + } else { + launchButton.setEnabled(false); + } } } diff --git a/packages/PackageInstaller/src/com/android/packageinstaller/PackageInstallerActivity.java b/packages/PackageInstaller/src/com/android/packageinstaller/PackageInstallerActivity.java index 5675c9986ac..665d262d806 100644 --- a/packages/PackageInstaller/src/com/android/packageinstaller/PackageInstallerActivity.java +++ b/packages/PackageInstaller/src/com/android/packageinstaller/PackageInstallerActivity.java @@ -343,17 +343,19 @@ protected void onCreate(Bundle icicle) { if (!wasSetUp) { return; } - - // load dummy layout with OK button disabled until we override this layout in - // startInstallConfirm - bindUi(); - checkIfAllowedAndInitiateInstall(); } @Override protected void onResume() { super.onResume(); + if (mAppSnippet != null) { + // load dummy layout with OK button disabled until we override this layout in + // startInstallConfirm + bindUi(); + checkIfAllowedAndInitiateInstall(); + } + if (mOk != null) { mOk.setEnabled(mEnableOk); } diff --git a/packages/PrintSpooler/res/values-fa/strings.xml b/packages/PrintSpooler/res/values-fa/strings.xml index 719fc921945..e69ca7664b5 100644 --- a/packages/PrintSpooler/res/values-fa/strings.xml +++ b/packages/PrintSpooler/res/values-fa/strings.xml @@ -50,8 +50,8 @@ "جستجو" "همه چاپگرها" "افزودن سرویس" - "کادر جستجو نمایان شد" - "کادر جستجو پنهان شد" + "چارگوش جستجو نمایان شد" + "چارگوش جستجو پنهان شد" "افزودن چاپگر" "انتخاب چاپگر" "فراموش کردن چاپگر" diff --git a/packages/PrintSpooler/res/values-iw/strings.xml b/packages/PrintSpooler/res/values-iw/strings.xml index 64db711def1..18502334610 100644 --- a/packages/PrintSpooler/res/values-iw/strings.xml +++ b/packages/PrintSpooler/res/values-iw/strings.xml @@ -27,24 +27,24 @@ "דו-צדדי" "כיוון" "עמודים" - "בחר מדפסת" + "בחירת מדפסת" "הכל %1$s" "טווח של %1$s" "למשל 1–5‏,8,‏11–13" "תצוגה מקדימה של הדפסה" - "‏התקן מציג PDF ליצירת תצוגה מקדימה" + "‏התקנה של PDF viewer‏ ליצירת תצוגה מקדימה" "אפליקציית ההדפסה קרסה" "יוצר עבודת הדפסה" - "‏שמור כ-PDF" + "‏שמירה כ-PDF" "כל המדפסות…" "תיבת דו שיח של מדפסת" "%1$d/%2$d" "עמוד %1$d מתוך %2$d" "סיכום, עותקים %1$s, גודל נייר %2$s" - "ידית הרחבה" + "נקודת אחיזה להרחבה" "ידית כיווץ" "הדפס" - "‏שמור כ-PDF" + "‏שמירה כ-PDF" "אפשרויות ההדפסה הורחבו" "אפשרויות ההדפסה כווצו" "חיפוש" @@ -72,7 +72,7 @@ "לא נמצאו מדפסות" "לא ניתן להוסיף מדפסות" "בחר כדי להוסיף מדפסת" - "בחר כדי להפעיל" + "צריך לבחור כדי להפעיל" "שירותים מופעלים" "שירותים מומלצים" "שירותים מושבתים" @@ -84,14 +84,14 @@ התקן כדי לגלות מדפסת %1$s "מדפיס את %1$s" - "מבטל את %1$s" + "המערכת מבטלת את %1$s" "שגיאת מדפסת ב-%1$s" "המדפסת חסמה את %1$s" "ביטול" "הפעלה מחדש" "אין חיבור למדפסת" "לא ידוע" - "האם להשתמש ב-%1$s?" + "האם להשתמש בשירות %1$s?" "ייתכן שהמסמך שלך יעבור בשרת אחד או יותר בדרכו למדפסת." "שחור ולבן" @@ -107,9 +107,9 @@ "לרוחב" "לא ניתן היה לכתוב לקובץ" - "מצטערים, אך זה לא עבד. נסה שוב." + "מצטערים, הפעולה לא בוצעה. אפשר לנסות שוב." "כדאי לנסות שוב" "המדפסת הזו אינה זמינה כעת." "לא ניתן להציג תצוגה מקדימה" - "מכין תצוגה מקדימה…" + "בתהליך יצירת תצוגה מקדימה…" diff --git a/packages/PrintSpooler/res/values-nl/strings.xml b/packages/PrintSpooler/res/values-nl/strings.xml index 6448acc3690..79cb1ae3d3d 100644 --- a/packages/PrintSpooler/res/values-nl/strings.xml +++ b/packages/PrintSpooler/res/values-nl/strings.xml @@ -50,7 +50,7 @@ "Zoeken" "Alle printers" "Service toevoegen" - "Zoekvak weergegeven" + "Zoekvak wordt getoond" "Zoekvak verborgen" "Printer toevoegen" "Printer selecteren" @@ -64,9 +64,9 @@ "Actieve afdruktaken" "Mislukte afdruktaken" "Kan bestand niet maken" - "Sommige afdrukservices zijn uitgeschakeld" + "Sommige afdrukservices zijn uitgezet" "Printers zoeken" - "Geen afdrukservices ingeschakeld" + "Geen afdrukservices aangezet" "Geen printers gevonden" "Kan geen printers toevoegen" "Selecteer om printer toe te voegen" diff --git a/packages/PrintSpooler/res/values-or/strings.xml b/packages/PrintSpooler/res/values-or/strings.xml index 7000b95b35d..15cecd6f46c 100644 --- a/packages/PrintSpooler/res/values-or/strings.xml +++ b/packages/PrintSpooler/res/values-or/strings.xml @@ -80,10 +80,10 @@ %1$sଟି ପ୍ରିଣ୍ଟର୍‍ ଖୋଜିବା ପାଇଁ ଇନଷ୍ଟଲ୍‍ କରନ୍ତୁ "%1$s ପ୍ରିଣ୍ଟ କରାଯାଉଛି" - "%1$s କ୍ୟାନ୍ସଲ୍‍ କରାଯାଉଛି" + "%1$s ବାତିଲ୍‍ କରାଯାଉଛି" "%1$s ପ୍ରିଣ୍ଟର୍‍ ତ୍ରୁଟି" "ପ୍ରିଣ୍ଟର୍‍ ଦ୍ୱାରା ରୋକାଯାଇଥିବା %1$s" - "କ୍ୟାନ୍ସଲ୍‍" + "ବାତିଲ୍‍" "ରିଷ୍ଟାର୍ଟ କରନ୍ତୁ" "ପ୍ରିଣ୍ଟର୍‍କୁ କୌଣସି ସଂଯୋଗ ନାହିଁ" "ଅଜଣା" diff --git a/packages/PrintSpooler/res/values-uk/strings.xml b/packages/PrintSpooler/res/values-uk/strings.xml index b5d426e56e6..fc02fa13035 100644 --- a/packages/PrintSpooler/res/values-uk/strings.xml +++ b/packages/PrintSpooler/res/values-uk/strings.xml @@ -31,7 +31,7 @@ "Усі %1$s" "Діапазон %1$s" "напр.,1–5, 8, 11–13" - "Версія для друку" + "Попередній перегляд друку" "Установити засіб перегляду PDF" "Програма друку аварійно завершила роботу" "Створюється завдання друку" diff --git a/packages/SettingsLib/RestrictedLockUtils/res/values-nl/strings.xml b/packages/SettingsLib/RestrictedLockUtils/res/values-nl/strings.xml index ee1000f4fab..a73deafbc70 100644 --- a/packages/SettingsLib/RestrictedLockUtils/res/values-nl/strings.xml +++ b/packages/SettingsLib/RestrictedLockUtils/res/values-nl/strings.xml @@ -17,6 +17,6 @@ - "Ingeschakeld door beheerder" - "Uitgeschakeld door beheerder" + "Aangezet door beheerder" + "Uitgezet door beheerder" diff --git a/packages/SettingsLib/res/values-am/strings.xml b/packages/SettingsLib/res/values-am/strings.xml index 4887428246f..8ee8fe953f9 100644 --- a/packages/SettingsLib/res/values-am/strings.xml +++ b/packages/SettingsLib/res/values-am/strings.xml @@ -210,7 +210,7 @@ "Wi-Fi ሲገናኝ የማረም ሁነታ" "ስህተት" "ገመድ-አልባ debugging" - "የሚገኙ መሣሪያዎችን ለመመልከትና ለመጠቀም ገመድ-አልባ debuggingን ያብሩ" + "የሚገኙ መሣሪያዎችን ለመመልከትና ለመጠቀም ገመድ-አልባ ማረምን ያብሩ" "የQR ኮድን በመጠቀም መሣሪያን ያጣምሩ" "የQR ኮድ መቃኛን በመጠቀም አዲስ መሣሪያዎችን ያጣምሩ" "የማጣመሪያ ኮድን በመጠቀም መሣሪያን ያጣምሩ" @@ -302,7 +302,7 @@ "የUSB ማረሚያ ይፈቀድ?" "የUSB አድስ ለግንባታ አላማ ብቻ የታሰበ ነው። ከኮምፒዩተርህ ወደ መሳሪያህ ውሂብ ለመገልበጥ፣ መሣሪያህ ላይ ያለ ማሳወቂያ መተግበሪያዎችን መጫን፣ እና ማስታወሻ ውሂብ ማንበብ ለመጠቀም ይቻላል።" "ገመድ-አልባ debugging ይፈቀድ?" - "ገመድ-አልባ debugging ለግንባታ አላማዎች ብቻ የታሰበ ነው። ውሂብን ከኮምፒዩተርዎ ወደ መሳሪያዎ ለመቅዳት፣ መሣሪያዎ ላይ ያለማሳወቂያ መተግበሪያዎችን ለመጫን እና የምዝግብ ማስታወሻ ውሂብን ለማንበብ ይጠቀሙበት።" + "ገመድ-አልባ ማረም ለግንባታ አላማዎች ብቻ የታሰበ ነው። ውሂብን ከኮምፒዩተርዎ ወደ መሳሪያዎ ለመቅዳት፣ መሣሪያዎ ላይ ያለማሳወቂያ መተግበሪያዎችን ለመጫን እና የምዝግብ ማስታወሻ ውሂብን ለማንበብ ይጠቀሙበት።" "የዩ ኤስ ቢ ማረም መዳረሻ ከዚህ ቀደም ፍቃድ ከሰጧቸው ኮምፒውተሮች ላይ ይሻሩ?" "የግንባታ ቅንብሮችን ፍቀድ?" "እነዚህ ቅንብሮች የታሰቡት ለግንባታ አጠቃቀም ብቻ ናቸው። መሳሪያህን እና በሱ ላይ ያሉትን መተግበሪያዎች እንዲበለሹ ወይም በትክክል እንዳይሰሩ ሊያደርጉ ይችላሉ።" diff --git a/packages/SettingsLib/res/values-ar/strings.xml b/packages/SettingsLib/res/values-ar/strings.xml index d1c60113656..ce0654a39e8 100644 --- a/packages/SettingsLib/res/values-ar/strings.xml +++ b/packages/SettingsLib/res/values-ar/strings.xml @@ -446,7 +446,7 @@ "%1$s - %2$s" "%1$s إلى أن يتم شحن الجهاز بالكامل" "%1$s - %2$s إلى أن يتم شحن الجهاز بالكامل" - "%1$s - التحسين لسلامة البطارية" + "%1$s - التحسين للحفاظ على سلامة البطارية" "غير معروف" "جارٍ الشحن" "جارٍ الشحن سريعًا" diff --git a/packages/SettingsLib/res/values-az/strings.xml b/packages/SettingsLib/res/values-az/strings.xml index 4f82eea6e66..44a27ad6721 100644 --- a/packages/SettingsLib/res/values-az/strings.xml +++ b/packages/SettingsLib/res/values-az/strings.xml @@ -311,7 +311,7 @@ "Adsız Bluetooth cihazları (yalnız MAC ünvanları) göstəriləcək" "Uzaqdan idarə olunan cihazlarda dözülməz yüksək səs həcmi və ya nəzarət çatışmazlığı kimi səs problemləri olduqda Bluetooth mütləq səs həcmi xüsusiyyətini deaktiv edir." "Bluetooth Gabeldorsche funksiyasını aktiv edir." - "Təkmilləşdirilmiş Bağlantı funksiyasını aktiv edir." + "Qabaqcıl məlumat mübadiləsini aktiv edir." "Yerli terminal" "Yerli örtük girişini təklif edən terminal tətbiqi aktiv edin" "HDCP yoxlanılır" diff --git a/packages/SettingsLib/res/values-b+sr+Latn/strings.xml b/packages/SettingsLib/res/values-b+sr+Latn/strings.xml index f3106d5e58c..a410b63481a 100644 --- a/packages/SettingsLib/res/values-b+sr+Latn/strings.xml +++ b/packages/SettingsLib/res/values-b+sr+Latn/strings.xml @@ -446,7 +446,7 @@ "%1$s%2$s" "Napuniće se za %1$s" "%1$s – napuniće se za %2$s" - "%1$s – Optimizuje se radi stanja baterije" + "%1$s – Optimizuje se radi boljeg stanja baterije" "Nepoznato" "Puni se" "Brzo se puni" diff --git a/packages/SettingsLib/res/values-bg/strings.xml b/packages/SettingsLib/res/values-bg/strings.xml index 4b7e9a88da4..70ec30e70de 100644 --- a/packages/SettingsLib/res/values-bg/strings.xml +++ b/packages/SettingsLib/res/values-bg/strings.xml @@ -446,7 +446,7 @@ "%1$s%2$s" "Оставащо време до пълно зареждане: %1$s" "%1$s%2$s до пълно зареждане" - "%1$s – Оптимизиране за състоян. на батерията" + "%1$s – Оптимизиране с цел състоянието на батерията" "Неизвестно" "Зарежда се" "Зарежда се бързо" diff --git a/packages/SettingsLib/res/values-bs/strings.xml b/packages/SettingsLib/res/values-bs/strings.xml index f1148dafca6..d2856e236a2 100644 --- a/packages/SettingsLib/res/values-bs/strings.xml +++ b/packages/SettingsLib/res/values-bs/strings.xml @@ -369,7 +369,7 @@ "Obustavlja se svaka aktivnost čim je korisnik napusti" "Ograničenje procesa u pozadini" "Prikaži ANR-e u pozadini" - "Prikaz dijaloga \"Aplikacija ne reagira\" za aplikacije pokrenute u pozadini" + "Prikaz dijaloškog okvira \"Aplikacija ne reagira\" za aplikacije pokrenute u pozadini" "Prikaži upozorenja kanala obavještenja" "Prikaz upozorenja na ekranu kada aplikacija pošalje obavještenje bez važećeg kanala" "Nametni aplikacije na vanjskoj pohrani" diff --git a/packages/SettingsLib/res/values-ca/arrays.xml b/packages/SettingsLib/res/values-ca/arrays.xml index 059f0449ade..4b608623d09 100644 --- a/packages/SettingsLib/res/values-ca/arrays.xml +++ b/packages/SettingsLib/res/values-ca/arrays.xml @@ -238,7 +238,7 @@ "Cap" "Logcat" "Systrace (gràfics)" - "Pila de trucades a glGetError" + "Pila de crides a glGetError" "Desactivat" diff --git a/packages/SettingsLib/res/values-ca/strings.xml b/packages/SettingsLib/res/values-ca/strings.xml index f8fc174883f..3ad8b9da9a9 100644 --- a/packages/SettingsLib/res/values-ca/strings.xml +++ b/packages/SettingsLib/res/values-ca/strings.xml @@ -446,7 +446,7 @@ "%1$s: %2$s" "%1$s per completar la càrrega" "%1$s: %2$s per completar la càrrega" - "%1$s: optimitzant per a l\'estat de la bateria" + "%1$s: s\'està optimitzant per preservar l\'estat de la bateria" "Desconegut" "S\'està carregant" "Carregant ràpidament" diff --git a/packages/SettingsLib/res/values-da/strings.xml b/packages/SettingsLib/res/values-da/strings.xml index b1530a22e99..5372cedd282 100644 --- a/packages/SettingsLib/res/values-da/strings.xml +++ b/packages/SettingsLib/res/values-da/strings.xml @@ -532,7 +532,7 @@ "Begrænset profil" "Vil du tilføje en ny bruger?" "Du kan dele denne enhed med andre ved at oprette ekstra brugere. Hver bruger har sit personlige område, som kan tilpasses med apps, baggrund osv. Brugerne kan også justere enhedsindstillinger, som for eksempel Wi-Fi, som påvirker alle.\n\nNår du tilføjer en ny bruger, skal vedkommende konfigurere sit område.\n\nAlle brugere kan opdatere apps for alle andre brugere. Indstillinger og tjenester for hjælpefunktioner overføres muligvis ikke til den nye bruger." - "Når du tilføjer en ny bruger, skal personen konfigurere sit rum.\n\nEnhver bruger kan opdatere apps for alle andre brugere." + "Når du tilføjer en ny bruger, skal personen konfigurere sit rum.\n\nAlle brugere kan opdatere apps for alle de andre brugere." "Vil du konfigurere brugeren nu?" "Sørg for, at brugeren har mulighed for at tage enheden og konfigurere sit eget rum" "Vil du oprette en profil nu?" @@ -546,7 +546,7 @@ "Før du kan oprette en begrænset profil, skal du oprette en skærmlås for at beskytte dine apps og personlige data." "Konfigurer låseskærmen" "Skift til %s" - "Tilføj gæsten" + "Tilføj gæst" "Fjern gæsten" "Gæst" "Enhedens standardindstilling" diff --git a/packages/SettingsLib/res/values-de/strings.xml b/packages/SettingsLib/res/values-de/strings.xml index b7be0493e81..e7c4e3e0cda 100644 --- a/packages/SettingsLib/res/values-de/strings.xml +++ b/packages/SettingsLib/res/values-de/strings.xml @@ -285,7 +285,7 @@ "Verringert den Akkuverbrauch und verbessert die Netzwerkleistung" "Wenn dieser Modus aktiviert ist, kann sich die MAC-Adresse dieses Geräts bei jeder Verbindung mit einem Netzwerk ändern, bei dem die MAC-Adressen randomisiert werden." "Kostenpflichtig" - "Kostenlos" + "Ohne Datenlimit" "Logger-Puffergrößen" "Größe pro Protokollpuffer wählen" "Speicher der dauerhaften Protokollierung löschen?" diff --git a/packages/SettingsLib/res/values-el/strings.xml b/packages/SettingsLib/res/values-el/strings.xml index 10b8c77b561..c53f38a0c78 100644 --- a/packages/SettingsLib/res/values-el/strings.xml +++ b/packages/SettingsLib/res/values-el/strings.xml @@ -446,7 +446,7 @@ "%1$s - %2$s" "Απομένουν %1$s για ολοκλήρωση της φόρτισης" "%1$s - %2$s για την ολοκλήρωση της φόρτισης" - "%1$s - Βελτιστοποίηση κατάστασης μπαταρίας" + "%1$s - Βελτιστοποίηση για τη διατήρηση της καλής κατάστασης της μπαταρίας" "Άγνωστο" "Φόρτιση" "Ταχεία φόρτιση" diff --git a/packages/SettingsLib/res/values-es-rUS/strings.xml b/packages/SettingsLib/res/values-es-rUS/strings.xml index 56efd5c8edc..fd74d3267fc 100644 --- a/packages/SettingsLib/res/values-es-rUS/strings.xml +++ b/packages/SettingsLib/res/values-es-rUS/strings.xml @@ -116,8 +116,8 @@ "SINCRONIZAR" "Cancelar" "La sincronización te permite acceder a los contactos y al historial de llamadas cuando el dispositivo está conectado." - "No se pudo sincronizar con %1$s." - "No se pudo sincronizar con %1$s debido a que el PIN o la clave de acceso son incorrectos." + "No se pudo vincular con %1$s." + "No se pudo vincular con %1$s debido a que el PIN o la clave de acceso son incorrectos." "No se puede establecer la comunicación con %1$s." "Vínculo rechazado por %1$s" "Computadora" @@ -219,7 +219,7 @@ "Conectado actualmente" "Detalles del dispositivo" "Olvidar" - "Huellas digitales del dispositivo: %1$s" + "Huellas dactilares del dispositivo: %1$s" "Error de conexión" "Asegúrate de que %1$s esté conectado a la red correcta." "Vincular con dispositivo" diff --git a/packages/SettingsLib/res/values-eu/strings.xml b/packages/SettingsLib/res/values-eu/strings.xml index af869d6cec9..3584975737f 100644 --- a/packages/SettingsLib/res/values-eu/strings.xml +++ b/packages/SettingsLib/res/values-eu/strings.xml @@ -446,7 +446,7 @@ "%1$s - %2$s" "%1$s guztiz kargatu arte" "%1$s - %2$s guztiz kargatu arte" - "%1$s - Optimizatzen bateria egoera onean mantentzeko" + "%1$s - Optimizatzen, bateria egoera onean mantentzeko" "Ezezaguna" "Kargatzen" "Bizkor kargatzen" diff --git a/packages/SettingsLib/res/values-fa/strings.xml b/packages/SettingsLib/res/values-fa/strings.xml index 08932756ae9..323aa65113f 100644 --- a/packages/SettingsLib/res/values-fa/strings.xml +++ b/packages/SettingsLib/res/values-fa/strings.xml @@ -37,7 +37,7 @@ "دسترسی به اینترنت ندارد" "ذخیره‌شده توسط %1$s" "‏اتصال خودکار ازطریق %1$s" - "اتصال خودکار ازطریق ارائه‌دهنده رتبه‌بندی شبکه" + "اتصال خودکار ازطریق ارائه‌دهنده رده‌بندی شبکه" "‏متصل از طریق %1$s" "متصل شده ازطریق %1$s" "‏در دسترس از طریق %1$s" @@ -263,8 +263,8 @@ "‏انتخاب نسخه MAP بلوتوث" "کدک بلوتوث صوتی" "راه‌اندازی کدک صوتی بلوتوثی\nانتخاب" - "سرعت نمونه بلوتوث صوتی" - "راه‌اندازی کدک صوتی بلوتوثی\nانتخاب: سرعت نمونه" + "بسامد نمونه صوتی بلوتوث" + "راه‌اندازی کدک صوتی بلوتوثی\nانتخاب: بسامد نمونه" "«خاکستری» به این معناست که تلفن یا هدست از آن پشتیبانی نمی‌کند" "بیت‌های بلوتوث صوتی در هر نمونه" "راه‌اندازی کدک صوتی بلوتوثی\nانتخاب: تعداد بیت در نمونه" @@ -465,7 +465,7 @@ "۵۰٪" "۱۰۰٪" - "%1$s قبل" + "‫%1$s پیش" "%1$s باقی مانده است" "کوچک" "پیش‌فرض" diff --git a/packages/SettingsLib/res/values-fr-rCA/strings.xml b/packages/SettingsLib/res/values-fr-rCA/strings.xml index c42bcdefeb6..58db5a60b50 100644 --- a/packages/SettingsLib/res/values-fr-rCA/strings.xml +++ b/packages/SettingsLib/res/values-fr-rCA/strings.xml @@ -225,8 +225,8 @@ "Associer avec l\'appareil" "Code d\'association Wi-Fi" "Échec de l\'association" - "Vérifier que l\'appareil est connecté au même réseau." - "Associer un appareil par Wi-Fi en numérisant un code QR" + "Vérifiez que l\'appareil est connecté au même réseau." + "Associez l\'appareil par Wi-Fi en numérisant un code QR" "Association de l\'appareil en cours…" "Échec de l\'association de l\'appareil Soit le code QR est incorrect, soit l\'appareil n\'est pas connecté au même réseau." "Adresse IP et port" diff --git a/packages/SettingsLib/res/values-gl/strings.xml b/packages/SettingsLib/res/values-gl/strings.xml index d9450ba1d54..8f143e4d583 100644 --- a/packages/SettingsLib/res/values-gl/strings.xml +++ b/packages/SettingsLib/res/values-gl/strings.xml @@ -446,7 +446,7 @@ "%1$s - %2$s" "%1$s para completar a carga" "%1$s: %2$s para completar a carga" - "%1$s: optimizando para manter a batería en bo estado" + "%1$s: optimizando a preservación da batería" "Descoñecido" "Cargando" "Cargando rapidamente" diff --git a/packages/SettingsLib/res/values-gu/arrays.xml b/packages/SettingsLib/res/values-gu/arrays.xml index b613cd971ae..5c675783eae 100644 --- a/packages/SettingsLib/res/values-gu/arrays.xml +++ b/packages/SettingsLib/res/values-gu/arrays.xml @@ -256,7 +256,7 @@ "Deuteranomaly માટેના ક્ષેત્રો બતાવો" - "માનક સીમા" + "સ્ટૅન્ડર્ડ સીમા" "કોઈ બૅકગ્રાઉન્ડ પ્રક્રિયાઓ નથી" "સૌથી વધુ 1 પ્રક્રિયા" "સૌથી વધુ 2 પ્રક્રિયા" diff --git a/packages/SettingsLib/res/values-gu/strings.xml b/packages/SettingsLib/res/values-gu/strings.xml index 86e39d202b4..4f1e864f6c5 100644 --- a/packages/SettingsLib/res/values-gu/strings.xml +++ b/packages/SettingsLib/res/values-gu/strings.xml @@ -282,7 +282,7 @@ "કનેક્ટ કરી શકાયું નથી" "વાયરલેસ ડિસ્પ્લે પ્રમાણપત્ર માટેના વિકલ્પો બતાવો" "વાઇ-ફાઇ લોગિંગ સ્તર વધારો, વાઇ-ફાઇ પીકરમાં SSID RSSI દીઠ બતાવો" - "બૅટરીનો ચાર્જ ઝડપથી ઓછો થવાનું ટાળે છે અને નેટવર્કની કાર્યક્ષમતામાં સુધારો કરે છે" + "બૅટરીનો ચાર્જ ઝડપથી ઓછો થવાનું ટાળે છે અને નેટવર્કના કાર્યપ્રદર્શનમાં સુધારો કરે છે" "આ મોડ ચાલુ કરેલો હશે, ત્યારે MAC રેન્ડમાઇઝેશન ચાલુ કરેલું હોય તેવા નેટવર્ક સાથે આ ડિવાઇસ જોડાશે ત્યારે દર વખતે તેનું MAC ઍડ્રેસ બદલાય તેમ બની શકે છે." "મીટર કરેલ" "મીટર ન કરેલ" @@ -388,7 +388,7 @@ "વાઇબ્રન્ટ (ડિફોલ્ટ)" "કુદરતી" - "માનક" + "સ્ટૅન્ડર્ડ" "વધારેલ રંગો" diff --git a/packages/SettingsLib/res/values-hy/strings.xml b/packages/SettingsLib/res/values-hy/strings.xml index 14ee4c9a16d..c9c4f25d9e5 100644 --- a/packages/SettingsLib/res/values-hy/strings.xml +++ b/packages/SettingsLib/res/values-hy/strings.xml @@ -446,7 +446,7 @@ "%1$s - %2$s" "%1$s մինչև լիցքավորումը" "%1$s%2$s մինչև լիցքավորումը" - "%1$s – Օպտիմալացվում է" + "%1$s – Օպտիմալացվում է մարտկոցի պահպանման համար" "Անհայտ" "Լիցքավորում" "Արագ լիցքավորում" diff --git a/packages/SettingsLib/res/values-is/strings.xml b/packages/SettingsLib/res/values-is/strings.xml index c5bcfc0bbea..f20f5117a75 100644 --- a/packages/SettingsLib/res/values-is/strings.xml +++ b/packages/SettingsLib/res/values-is/strings.xml @@ -226,12 +226,12 @@ "Wi-Fi pörunarkóði" "Pörun mistókst" "Gakktu úr skugga um að tækið sé tengt sama neti." - "Tengja tæki með Wi-Fi með því að skanna QR-kóða" + "Para tæki gegnum Wi-Fi með því að skanna QR-kóða" "Parar tæki…" "Ekki tókst að para við tækið. Annað hvort var QR-kóðinn rangur eða tækið ekki tengt sama neti." "IP-tala og gátt" "Skanna QR-kóða" - "Tengja tæki með Wi-Fi með því að skanna QR-kóða" + "Para tæki gegnum Wi-Fi með því að skanna QR-kóða" "Tengstu Wi-Fi neti" "adb, villuleit, dev" "Flýtileið í villutilkynningu" diff --git a/packages/SettingsLib/res/values-iw/arrays.xml b/packages/SettingsLib/res/values-iw/arrays.xml index 86d8bdec7a4..be8336b2a34 100644 --- a/packages/SettingsLib/res/values-iw/arrays.xml +++ b/packages/SettingsLib/res/values-iw/arrays.xml @@ -22,13 +22,13 @@ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - "סורק..." - "מתחבר ..." - "מאמת…" + "מתבצעת סריקה..." + "מתבצעת התחברות..." + "מתבצע אימות…" "‏משיג כתובת IP…" "מחובר" "בהשעיה" - "מתנתק..." + "מתבצעת התנתקות..." "מנותק" "נכשל" "חסומה" @@ -36,27 +36,27 @@ - "סורק..." - "מתחבר אל %1$s…" - "מאמת עם %1$s..." - "‏משיג כתובת IP מ-%1$s…" + "מתבצעת סריקה..." + "מתבצעת התחברות אל %1$s…" + "מתבצע אימות מול %1$s..." + "‏המערכת משיגה כתובת IP מ-%1$s…" "מחובר אל %1$s" "בהשעיה" - "מתנתק מרשת %1$s..." + "מתבצעת התנתקות מרשת %1$s…" "מנותק" "נכשל" "חסומה" - "נמנע זמנית מחיבור חלש" + "המערכת נמנעת זמנית מחיבור חלש" "בלי לבדוק לעולם" - "‏בדוק אם יש תוכן DRM בלבד" + "‏בדיקה אם יש תוכן DRM בלבד" "בדוק תמיד" - "‏לעולם אל תשתמש בבדיקת HDCP" - "‏השתמש בבדיקת HDCP עבור תוכן DRM בלבד" - "‏תמיד השתמש בבדיקת HDCP" + "‏אני לעולם לא רוצה להשתמש בבדיקת HDCP" + "‏שימוש בבדיקת HDCP עבור תוכן DRM בלבד" + "‏אני רוצה להשתמש תמיד בבדיקת HDCP" "מושבת" @@ -127,7 +127,7 @@ "השתמש בבחירת המערכת (ברירת המחדל)" - "16 סיביות לדגימה" + "16 ביטים לדגימה" "24 סיביות לדגימה" "32 סיביות לדגימה" @@ -137,7 +137,7 @@ "סטריאו" - "השתמש בבחירת המערכת (ברירת המחדל)" + "שימוש בבחירת המערכת (ברירת המחדל)" "מונו" "סטריאו" @@ -149,7 +149,7 @@ "אופטימיזציה להשגת איכות אודיו מרבית" - "אזן בין איכות החיבור לאיכות אודיו" + "איזון בין איכות החיבור לאיכות אודיו" "אופטימיזציה להשגת איכות חיבור מרבית" "האיכות הטובה ביותר (קצב העברת נתונים מותאם)" @@ -242,8 +242,8 @@ "כבוי" - "שרטט אזור חיתוך שאינו מלבני בצבע כחול" - "הדגש את פקודות האיור שנבדקות בצבע ירוק" + "שרטוט אזור חיתוך שאינו מלבני בצבע כחול" + "הדגשת פקודות האיור שנבדקות בצבע ירוק" "כבוי" diff --git a/packages/SettingsLib/res/values-iw/strings.xml b/packages/SettingsLib/res/values-iw/strings.xml index f55664a5185..aebd5bda70e 100644 --- a/packages/SettingsLib/res/values-iw/strings.xml +++ b/packages/SettingsLib/res/values-iw/strings.xml @@ -31,7 +31,7 @@ "בעיית אימות" "לא ניתן להתחבר" "לא ניתן להתחבר אל %1$s" - "בדוק את הסיסמה ונסה שוב" + "יש לבדוק את הסיסמה ולנסות שוב" "מחוץ לטווח" "לא יתבצע חיבור באופן אוטומטי" "אין גישה לאינטרנט" @@ -64,10 +64,10 @@ "התוקף פג" "%1$s / %2$s" "מנותק" - "מתנתק..." - "מתחבר ..." + "מתבצעת התנתקות..." + "מתבצעת התחברות…" "%1$s מחובר" - "מבצע התאמה..." + "ההתאמה מתבצעת..." "מחובר (ללא טלפון)%1$s" "מחובר (ללא מדיה)%1$s" "מחובר (ללא גישה להודעות)%1$s" @@ -87,7 +87,7 @@ "מכשיר קלט" "גישה לאינטרנט" "שיתוף אנשי קשר" - "השתמש עבור שיתוף אנשי קשר" + "שימוש עבור שיתוף אנשי קשר" "שיתוף חיבור לאינטרנט" "הודעות טקסט" "‏גישה ל-SIM" @@ -104,7 +104,7 @@ "מחובר למכשיר קלט" "יש חיבור למכשיר לצורך גישה לאינטרנט" "המערכת משתפת חיבור אינטרנט מקומי עם המכשיר" - "השתמש עבור גישה לאינטרנט" + "שימוש עבור גישה לאינטרנט" "שימוש עבור מפה" "‏השתמש לגישה של SIM" "שימוש לאודיו של מדיה" @@ -124,13 +124,13 @@ "אוזניות" "טלפון" "הדמיה" - "אוזנייה" + "אוזניות" "ציוד קלט היקפי" "Bluetooth" "מתבצעת התאמה של מכשיר שמיעה שמאלי…" "מתבצעת התאמה של מכשיר שמיעה ימני…" "שמאלי - טעינת הסוללה: %1$s" - "ימני - טעינת הסוללה: %1$s" + "ימני – טעינת הסוללה: %1$s" "‏Wi-Fi כבוי." "‏Wi-Fi מנותק." "‏פס אחד של Wi-Fi." @@ -163,7 +163,7 @@ "שפה" "שימוש בשפת המערכת" "לא נבחרה שפה" - "מגדיר קול ספציפי לשפה עבור הטקסט הנאמר" + "הגדרת קול ספציפי לשפה עבור הטקסט הנאמר" "דוגמה" "הפעלת הדגמה קצרה של סינתזת דיבור" "התקנת נתוני קול" @@ -175,9 +175,9 @@ "%1$s נתמכת באופן מלא" "%1$s מצריכה חיבור לרשת" "%1$s אינה נתמכת" - "בודק…" + "מתבצעת בדיקה…" "הגדרות עבור %s" - "השק הגדרות מנוע" + "הפעלת הגדרות מנוע" "מנוע מועדף" "כללי" "איפוס של גובה צליל הדיבור" @@ -235,7 +235,7 @@ "‏יש להתחבר לרשת Wi-Fi" "‏adb, ניפוי באגים, פיתוח" "קיצור של דוח באגים" - "כדי ליצור דוח באגים, הצג לחצן בתפריט לניהול צריכת החשמל" + "כדי ליצור דוח באגים, יש להציג לחצן בתפריט לניהול צריכת החשמל" "שיישאר פועל" "המסך לעולם לא יהיה במצב שינה במהלך טעינה" "‏הפעלת Snoop Log של Bluetooth HCI" @@ -244,7 +244,7 @@ "אפשר ביטול של נעילת מנהל האתחול" "‏האם לאפשר ביטול נעילה של OEM (יצרן ציוד מקורי)?" "אזהרה: תכונות הגנת מכשיר לא יפעלו במכשיר הזה כשההגדרה הזו פועלת." - "בחר אפליקציה של מיקום מדומה" + "בחירת אפליקציה של מיקום מדומה" "לא הוגדרה אפליקציה של מיקום מדומה" "אפליקציה של מיקום מדומה: %1$s" "תקשורת רשתות" @@ -255,10 +255,10 @@ "חבילת הגלישה פעילה תמיד" "שיפור מהירות באמצעות חומרה לצורך שיתוף אינטרנט בין ניידים" "‏הצגת מכשירי Bluetooth ללא שמות" - "השבת עוצמת קול מוחלטת" + "השבתת עוצמת קול מוחלטת" "‏הפעלת Gabeldorsche" "‏Bluetooth גרסה AVRCP" - "‏בחר Bluetooth גרסה AVRCP" + "‏בחירת Bluetooth גרסה AVRCP" "‏גרסת Bluetooth MAP" "‏יש לבחור גרסה של Bluetooth MAP" "‏Codec אודיו ל-Bluetooth" @@ -267,7 +267,7 @@ "‏הפעלת ‏Codec אודיו ל-Bluetooth\nבחירה: קצב דגימה" "כשזה מופיע באפור, אין לזה תמיכה בטלפון או באוזניות" "‏מספר סיביות לדגימה באודיו ל-Bluetooth" - "‏הפעלת ‏Codec אודיו ל-Bluetooth\nבחירה: סיביות לדגימה" + "‏הפעלת ‏Codec אודיו ל-Bluetooth\nבחירה: ביטים לדגימה" "‏מצב של ערוץ אודיו ל-Bluetooth" "‏הפעלת ‏Codec אודיו ל-Bluetooth\nבחירה: מצב ערוץ" "‏Codec אודיו LDAC ל-Bluetooth: איכות נגינה" @@ -280,49 +280,49 @@ "‏שם מארח של ספק DNS פרטי" "‏צריך להזין את שם המארח של ספק DNS" "לא ניתן היה להתחבר" - "‏הצג אפשרויות עבור אישור של תצוגת WiFi" - "‏העלה את רמת הרישום של Wi‑Fi ביומן, הצג לכל SSID RSSI ב-Wi‑Fi Picker" - "מפחית את קצב התרוקנות הסוללה ומשפר את ביצועי הרשת" + "‏הצגת אפשרויות עבור אישור של תצוגת WiFi" + "‏העלאת רמת הרישום של Wi‑Fi ביומן, הצגה לכל SSID RSSI ב-Wi‑Fi Picker" + "אפשרות זו מפחיתה את קצב התרוקנות הסוללה ומשפרת את ביצועי הרשת" "‏כשמצב זה מופעל, כתובת ה-MAC של המכשיר הזה עשויה להשתנות בכל פעם שהוא מתחבר לרשת שפועלת בה רנדומיזציה של כתובות MAC." "נמדדת" "לא נמדדת" - "גדלי מאגר של יומן רישום" - "בחר גדלים של יוצר יומן לכל מאגר יומן" + "גודלי מאגר של יומן רישום" + "יש לבחור גדלים של יוצר יומן לכל מאגר יומן" "האם למחוק את אחסון המתעד המתמיד?" "כשאנחנו כבר לא מבצעים מעקב באמצעות המתעד המתמיד, אנחנו נדרשים למחוק את נתוני המתעד המקומי במכשיר." "אחסון מתמיד של נתוני תיעוד במכשיר" - "בחר מאגר נתונים זמני ליומן לשם אחסון מתמיד במכשיר" - "‏בחר תצורת USB" - "‏בחר תצורת USB" + "בחירת מאגר נתונים זמני ליומן לשם אחסון מתמיד במכשיר" + "‏בחירה של תצורת USB" + "‏יש לבחור תצורת USB" "אפשרות של מיקומים מדומים" "אפשרות של מיקומים מדומים" "אפשר בדיקת תכונת תצוגה" - "‏השאר את חבילת הגלישה פעילה תמיד, גם כש-Wi‑Fi פעיל (למעבר מהיר בין רשתות)." + "‏השארת חבילת הגלישה פעילה תמיד, גם כש-Wi‑Fi פעיל (למעבר מהיר בין רשתות)." "אם השירות זמין, יש להשתמש בשיפור מהירות באמצעות חומרה לצורך שיתוף אינטרנט בין ניידים" "‏לאפשר ניפוי באגים של USB?" - "‏ניפוי באגים באמצעות USB מיועד למטרות פיתוח בלבד. השתמש בו להעתקת נתונים בין המחשב והמכשיר שלך, להתקנת אפליקציות במכשיר ללא התראה ולקריאת נתוני יומן." + "‏ניפוי באגים באמצעות USB מיועד למטרות פיתוח בלבד. אפשר להשתמש בו להעתקת נתונים בין המחשב והמכשיר, להתקנת אפליקציות במכשיר ללא התראה ולקריאת נתוני יומן." "האם לאפשר ניפוי באגים אלחוטי?" "ניפוי באגים אלחוטי מיועד למטרות פיתוח בלבד. יש להשתמש בו להעתקת נתונים בין המחשב והמכשיר שלך, להתקנת אפליקציות במכשיר ללא התראה ולקריאת נתוני יומן." "‏האם לבטל את הגישה לניפוי ב-USB מכל המחשבים שהענקת להם בעבר הרשאה?" "האם להתיר הגדרות פיתוח?" "הגדרות אלה מיועדות לשימוש בפיתוח בלבד. הן עלולות לגרום למכשיר או לאפליקציות המותקנות בו לקרוס או לפעול באופן לא תקין." - "‏אמת אפליקציות באמצעות USB" - "‏בדוק אפליקציות שהותקנו באמצעות ADB/ADT לאיתור התנהגות מזיקה." + "‏אימות אפליקציות באמצעות USB" + "‏יש לבדוק אפליקציות שהותקנו באמצעות ADB/ADT לאיתור התנהגות מזיקה." "‏יוצגו מכשירי Bluetooth ללא שמות (כתובות MAC בלבד)" - "‏משבית את תכונת עוצמת הקול המוחלטת ב-Bluetooth במקרה של בעיות בעוצמת הקול במכשירים מרוחקים, כגון עוצמת קול רמה מדי או חוסר שליטה ברמת העוצמה." + "‏השבתה של תכונת עוצמת הקול המוחלטת ב-Bluetooth במקרה של בעיות בעוצמת הקול במכשירים מרוחקים, כגון עוצמת קול רמה מדי או חוסר שליטה ברמת העוצמה." "‏הפעלת מקבץ הפיצ\'רים של Bluetooth Gabeldorsche." "הפעלה של תכונת הקישוריות המשופרת." "מסוף מקומי" - "הפעל אפליקציית מסוף המציעה גישה מקומית למעטפת" + "הפעלה של אפליקציית מסוף המציעה גישה מקומית למעטפת" "‏בדיקת HDCP" - "‏הגדר אופן בדיקת HDCP" + "‏הגדרת האופן של בדיקת HDCP" "ניפוי באגים" - "בחר אפליקציה לניפוי באגים" + "בחירת אפליקציה לניפוי באגים" "לא הוגדרה אפליקציה לניפוי" "אפליקציה לניפוי: %1$s" - "בחר אפליקציה" + "בחירת אפליקציה" "אף אחת" - "המתן למנקה באגים" + "יש להמתין לכלי לניפוי באגים" "אפליקציה שנוקו בה הבאגים ממתינה למנקה הבאגים לצירוף לפני ביצוע" "קלט" "שרטוט" @@ -330,30 +330,30 @@ "מדיה" "מעקב" "מצב קפדני מופעל" - "גרום למסך להבהב כאשר אפליקציות מבצעות פעולות ארוכות בשרשור הראשי" + "המסך יהבהב כאשר אפליקציות יבצעו פעולות ארוכות בשרשור הראשי" "מיקום מצביע" "שכבת-על של המסך המציגה את נתוני המגע הנוכחיים" - "הצג הקשות" - "הצג משוב ויזואלי להקשות" - "הצג עדכונים על פני השטח" - "הבזק את כל שטחי החלון כשהם מתעדכנים" + "הצגת הקשות" + "הצגת משוב ויזואלי להקשות" + "הצגת עדכונים על פני השטח" + "הבזקת כל שטחי החלון כשהם מתעדכנים" "תצוגת \'הצגת עדכונים\'" - "הבזק תצוגות בתוך חלונות בעת ציור" - "הצג עדכוני שכבות חומרה" - "הצג הבהוב ירוק לשכבות חומרה כשהן מתעדכנות" + "הבזקת תצוגות בתוך חלונות בעת ציור" + "הצגת עדכונים של שכבות חומרה" + "הצגת הבהוב ירוק לשכבות חומרה כשהן מתעדכנות" "‏חריגה בניפוי באגים ב-GPU" - "‏השבת שכבות על של HW" - "‏השתמש תמיד ב-GPU להרכבת מסך" + "‏השבתת שכבות על של HW" + "‏שימוש תמיד ב-GPU להרכבת מסך" "יצירת הדמיה של מרחב צבעים" - "‏הפעל מעקבי OpenGL" - "‏השבת ניתוב אודיו ב-USB" - "‏השבת ניתוב אוטומטי אל התקני אודיו חיצוניים ב-USB" - "הצג את גבולות הפריסה" - "הצג גבולות אזור, שוליים וכדומה" - "אלץ כיוון פריסה מימין לשמאל" - "אלץ כיוון פריסת מסך מימין לשמאל עבור כל השפות בכל המקומות" - "‏אלץ הפעלת 4x MSAA" - "‏הפעל 4x MSAA ביישומי OpenGL ES 2.0" + "‏הפעלת מעקבי OpenGL" + "‏השבתת ניתוב אודיו ב-USB" + "‏השבתת ניתוב אוטומטי אל התקני אודיו חיצוניים ב-USB" + "הצגת גבולות הפריסה" + "הצגת גבולות אזור, שוליים וכדומה" + "אילוץ כיוון פריסה מימין לשמאל" + "אילוץ של כיוון פריסת מסך מימין לשמאל עבור כל השפות בכל המקומות" + "‏אילוץ הפעלת 4x MSAA" + "‏הפעלת 4x MSAA ביישומי OpenGL ES 2.0" "ניפוי באגים בפעולות באזור שאינו מלבני" "‏עיבוד פרופיל ב-HWUI" "‏הפעלת שכבות לניפוי באגים ב-GPU" @@ -363,10 +363,10 @@ "קנה מידה לאנימציה של חלון" "קנה מידה לאנימציית מעבר" "קנה מידה למשך זמן אנימציה" - "צור הדמיית תצוגות משניות" + "יצירת הדמיה של תצוגות משניות" "אפליקציות" "ללא שמירת פעילויות" - "השמד כל פעילות ברגע שהמשתמש עוזב אותה" + "השמדת כל פעילות ברגע שהמשתמש עוזב אותה" "מגבלה של תהליכים ברקע" "‏הצגת מקרי ANR ברקע" "הצגת תיבת דו-שיח של \'אפליקציה לא מגיבה\' עבור אפליקציות שפועלות ברקע" @@ -374,13 +374,13 @@ "הצגת אזהרה כשאפליקציה שולחת התראה ללא ערוץ חוקי" "אילוץ הרשאת אפליקציות באחסון חיצוני" "מאפשר כתיבה של כל אפליקציה באחסון חיצוני, ללא התחשבות בערכי המניפסט" - "אלץ יכולת קביעת גודל של הפעילויות" + "אילוץ יכולת קביעת גודל של הפעילויות" "אפשר יכולת קביעת גודל של כל הפעילויות לריבוי חלונות, ללא קשר לערך המניפסט." - "הפעל את האפשרות לשנות את הגודל והמיקום של החלונות" - "הפעל תמיכה בתכונה הניסיונית של שינוי הגודל והמיקום של החלונות." + "הפעלת האפשרות לשנות את הגודל והמיקום של החלונות" + "הפעלת תמיכה בתכונה הניסיונית של שינוי הגודל והמיקום של החלונות." "סיסמת גיבוי שולחן העבודה" "גיבויים מלאים בשולחן העבודה אינם מוגנים כעת" - "הקש כדי לשנות או להסיר את הסיסמה לגיבויים מלאים בשולחן העבודה" + "יש להקיש כדי לשנות או להסיר את הסיסמה לגיבויים מלאים בשולחן העבודה" "הוגדרה סיסמת גיבוי חדשה" "הסיסמה החדשה והאישור אינם תואמים" "הגדרת סיסמת גיבוי נכשלה" @@ -396,19 +396,19 @@ "צבעים מותאמים באופן אופטימלי לתוכן דיגיטלי" "אפליקציות בהמתנה" - "אפליקציה לא פעילה. הקש כדי להחליף מצב." - "אפליקציה פעילה. הקש כדי להחליף מצב." + "אפליקציה לא פעילה. יש להקיש כדי להחליף מצב." + "אפליקציה פעילה. יש להקיש כדי להחליף מצב." "אפליקציה במצב המתנה: %s" "שירותים פועלים" "הצגת השירותים הפועלים כעת ושליטה בהם" "‏יישום WebView" "‏הגדרת יישום WebView" - "אפשרות זו כבר אינה תקפה. נסה שוב." + "אפשרות זו כבר אינה תקפה. אפשר לנסות שוב." "המרה לצורך הצפנת קבצים" - "המר..." + "להמרה..." "הצפנת קבצים כבר מוגדרת" "המרה להצפנה מבוססת קבצים" - "המר את מחיצת הנתונים להצפנה מבוססת-קבצים.\n אזהרה!! פעולה זו תמחק את כל הנתונים.\n תכונה זו זמינה בגרסת אלפא וייתכן שלא תפעל כראוי.\n הקש על \'מחיקה והמרה…\' כדי להמשיך." + "המרת מחיצת הנתונים להצפנה מבוססת-קבצים.\n אזהרה!! פעולה זו תמחק את כל הנתונים.\n תכונה זו זמינה בגרסת אלפא וייתכן שלא תפעל כראוי.\n יש להקיש על \'מחיקה והמרה…\' כדי להמשיך." "מחיקה והמרה…" "מצב צבע התמונה" "‏שימוש ב-sRGB" @@ -420,7 +420,7 @@ "תיקון צבע" "תיקון צבע מאפשר לשנות את האופן שבו צבעים מוצגים במכשיר שלך" "נעקף על ידי %1$s" - "%1$s - %2$s" + "%1$s%2$s" "הזמן הנותר: בערך %1$s" "הזמן הנותר: בערך %1$s (%2$s)" "הזמן הנותר על סמך השימוש שלך: בערך %1$s" @@ -443,9 +443,9 @@ "הטלפון עלול להיכבות בקרוב (%1$s)" "הטאבלט עלול להיכבות בקרוב (%1$s)" "המכשיר עלול להיכבות בקרוב (%1$s)" - "%1$s‏ - %2$s" + "%1$s‏ – %2$s" "נשארו %1$s עד הטעינה" - "%1$s - %2$s עד הטעינה" + "%1$s%2$s עד הטעינה" "%1$s ﹣ מופעל מיטוב לשמירה על תקינות הסוללה" "לא ידוע" "בטעינה" @@ -474,14 +474,14 @@ "הכי גדול" "מותאם אישית (%d)" "תפריט" - "הזן סיסמה כדי לבצע איפוס להגדרות היצרן במצב הדגמה" + "יש להזין סיסמה כדי לבצע איפוס להגדרות היצרן במצב הדגמה" "הבא" "דרושה סיסמה" "שיטות קלט פעילות" "שימוש בשפות מערכת" "פתיחת הגדרות עבור %1$s נכשלה" - "ייתכן ששיטת קלט זו תוכל לאסוף את כל הטקסט שאתה מקליד, כולל נתונים אישיים כגון סיסמאות ומספרי כרטיס אשראי. היא מגיעה מהאפליקציה %1$s. האם להשתמש בשיטת קלט זו?" - "שים לב: לאחר הפעלה מחדש של המכשיר, ניתן להפעיל את האפליקציה רק לאחר שתבטל את נעילת הטלפון" + "ייתכן ששיטת קלט זו תוכל לאסוף את כל הטקסט המוקלד, כולל נתונים אישיים כגון סיסמאות ומספרי כרטיס אשראי. היא מגיעה מהאפליקציה %1$s. האם להשתמש בשיטת קלט זו?" + "לתשומת ליבך: לאחר הפעלה מחדש של המכשיר, ניתן להפעיל את האפליקציה רק לאחר שתבטל את נעילת הטלפון" "‏סטטוס הרשמה ל-IMS" "רשום" "לא רשום" @@ -507,7 +507,7 @@ "בשעה %1$s" "ב-%1$s" "משך" - "שאל בכל פעם" + "יש לשאול בכל פעם" "עד הכיבוי" "הרגע" "רמקול של טלפון" @@ -545,7 +545,7 @@ "פרופיל חדש" "פרטי משתמש" "פרטי פרופיל" - "לפני שתוכל ליצור פרופיל מוגבל, תצטרך להגדיר נעילת מסך כדי להגן על האפליקציות ועל הנתונים האישיים שלך." + "לפני שיתאפשר לך ליצור פרופיל מוגבל, יהיה עליך להגדיר נעילת מסך כדי להגן על האפליקציות ועל הנתונים האישיים שלך." "הגדרת נעילה" "מעבר אל %s" "הוספת אורח" diff --git a/packages/SettingsLib/res/values-kk/strings.xml b/packages/SettingsLib/res/values-kk/strings.xml index bc12fee6a9e..decf940f14b 100644 --- a/packages/SettingsLib/res/values-kk/strings.xml +++ b/packages/SettingsLib/res/values-kk/strings.xml @@ -359,7 +359,7 @@ "GPU жөндеу қабаттарын қосу" "GPU жөндеу қабаттарының жүктелуіне рұқсат ету" "Жеткізушілерді журналға тіркеу" - "Қате туралы есепте қызмет көрсетушінің құрылғыға қатысты қосымша ақпаратын қамту. Мұнда жеке ақпарат көрсетілуі, батарея шығыны артуы және/немесе қосымша жад пайдаланылуы мүмкін." + "Қате туралы есепте жеткізушінің құрылғыға қатысты қосымша ақпараты қамтылады. Мұнда жеке ақпарат көрсетілуі, батарея шығыны артуы және/немесе қосымша жад пайдаланылуы мүмкін." "Терезе анимациясының өлшемі" "Ауысу анимациясының өлшемі" "Аниматор ұзақтығы" @@ -446,7 +446,7 @@ "%1$s - %2$s" "Зарядталғанға дейін %1$s қалды" "%1$s – зарядталғанға дейін %2$s" - "%1$s - Батареяның жұмыс істеу қабілеті оңтайландырылуда" + "%1$s - Батарея жұмысын оңтайландыру" "Белгісіз" "Зарядталуда" "Жылдам зарядталуда" @@ -496,7 +496,7 @@ "Бас тарту" "Жарайды" "Қосу" - "\"Мазаламау\" режимін қосу" + "Мазаламау режимін қосу" "Ешқашан" "Маңыздылары ғана" "%1$s. %2$s" @@ -546,8 +546,8 @@ "Шектелген профайл жасақтауға дейін қолданбалар мен жеке деректерді қорғау үшін экран бекітпесін тағайындау қажет." "Бекітпе тағайындау" "%s пайдаланушысына ауысу" - "Қонақты енгізу" - "Қонақты өшіру" + "Қонақ қосу" + "Қонақты жою" "Қонақ" "Құрылғыны әдепкісінше реттеу" "Өшірулі" diff --git a/packages/SettingsLib/res/values-km/strings.xml b/packages/SettingsLib/res/values-km/strings.xml index ce5ee87cc69..800e273941c 100644 --- a/packages/SettingsLib/res/values-km/strings.xml +++ b/packages/SettingsLib/res/values-km/strings.xml @@ -547,7 +547,7 @@ "កំណត់​ការ​ចាក់​សោ" "ប្ដូរទៅ %s" "បញ្ចូល​ភ្ញៀវ" - "លុប​​​ភ្ញៀវ" + "ដកភ្ញៀវចេញ" "ភ្ញៀវ" "លំនាំដើម​របស់ឧបករណ៍" "បានបិទ" diff --git a/packages/SettingsLib/res/values-kn/strings.xml b/packages/SettingsLib/res/values-kn/strings.xml index df25363d0cb..682f4d5f9ca 100644 --- a/packages/SettingsLib/res/values-kn/strings.xml +++ b/packages/SettingsLib/res/values-kn/strings.xml @@ -446,7 +446,7 @@ "%1$s - %2$s" "ಚಾರ್ಜ್ ಆಗಲು %1$s ಸಮಯ ಬಾಕಿ ಇದೆ" "%1$s - ಚಾರ್ಜ್ ಆಗಲು %2$s ಸಮಯ ಬೇಕು" - "%1$s - ಬ್ಯಾಟರಿಯ ಆರೋಗ್ಯಕ್ಕಾಗಿ ಆಪ್ಟಿಮೈಸ್ ಮಾಡಲಾಗುತ್ತಿದೆ" + "%1$s - ಬ್ಯಾಟರಿಯ ಸುಸ್ಥಿತಿಗಾಗಿ ಆಪ್ಟಿಮೈಸ್ ಮಾಡಲಾಗುತ್ತಿದೆ" "ಅಪರಿಚಿತ" "ಚಾರ್ಜ್ ಆಗುತ್ತಿದೆ" "ವೇಗದ ಚಾರ್ಜಿಂಗ್" diff --git a/packages/SettingsLib/res/values-ky/arrays.xml b/packages/SettingsLib/res/values-ky/arrays.xml index fe0f9e6ca46..36ae1e497d6 100644 --- a/packages/SettingsLib/res/values-ky/arrays.xml +++ b/packages/SettingsLib/res/values-ky/arrays.xml @@ -86,7 +86,7 @@ "карта14" - "Тутум тандаганды колдонуу (демейки)" + "Система тандаганды колдонуу (демейки)" "SBC" "AAC" "Qualcomm® aptX™ аудио" @@ -96,7 +96,7 @@ "Qualcomm® aptX™ TWS+ аудио" - "Тутум тандаганды колдонуу (демейки)" + "Система тандаганды колдонуу (демейки)" "SBC" "AAC" "Qualcomm® aptX™ аудио" @@ -106,38 +106,38 @@ "Qualcomm® aptX™ TWS+ аудио" - "Тутум тандаганды колдонуу (демейки)" + "Система тандаганды колдонуу (демейки)" "44,1 кГц" "48,0 кГц" "88,2 кГц" "96,0 кГц" - "Тутум тандаганды колдонуу (демейки)" + "Система тандаганды колдонуу (демейки)" "44,1 кГц" "48,0 кГц" "88,2 кГц" "96,0 кГц" - "Тутум тандаганды колдонуу (демейки)" + "Система тандаганды колдонуу (демейки)" "16 бит/үлгү" "24 бит/үлгү" "32 бит/үлгү" - "Тутум тандаганды колдонуу (демейки)" + "Система тандаганды колдонуу (демейки)" "16 бит/үлгү" "24 бит/үлгү" "32 бит/үлгү" - "Тутум тандаганды колдонуу (демейки)" + "Система тандаганды колдонуу (демейки)" "Моно" "Стерео" - "Тутум тандаганды колдонуу (демейки)" + "Система тандаганды колдонуу (демейки)" "Моно" "Стерео" diff --git a/packages/SettingsLib/res/values-ky/strings.xml b/packages/SettingsLib/res/values-ky/strings.xml index ce5313061e2..47dd2665a66 100644 --- a/packages/SettingsLib/res/values-ky/strings.xml +++ b/packages/SettingsLib/res/values-ky/strings.xml @@ -142,7 +142,7 @@ "Android OS" "Алынып салынган колдонмолор" "Өчүрүлгөн колдонмолор жана колдонуучулар" - "Тутум жаңыртуулары" + "Системанын жаңыртуулары" "USB модем" "Wi-Fi байланыш түйүнү" "Bluetooth модем" @@ -161,7 +161,7 @@ "Негизги тон" "Синтезделген кептин интонациясына таасирин тийгизет" "Тил" - "Тутум тилин колдонуу" + "Системанын тилин колдонуу" "Тил тандалган жок" "Текстти окуй турган тилди тандоо" "Үлгүнү угуу" @@ -254,7 +254,7 @@ "Wi‑Fi иштетилген MAC даректерин башаламан түзүү" "Мобилдик Интернет иштей берет" "Модем режиминде аппараттын иштешин тездетүү" - "Аталышсыз Bluetooth түзмөктөрү көрсөтүлсүн" + "Аталышсыз Bluetooth түзмөктөрү көрүнсүн" "Үндүн абсолюттук деңгээли өчүрүлсүн" "Gabeldorsche функциясын иштетүү" "Bluetooth AVRCP версиясы" @@ -478,7 +478,7 @@ "Кийинки" "Сырсөз талап кылынат" "Жигердүү киргизүү ыкмалары" - "Тутум тилдерин колдонуу" + "Системанын тилдерин колдонуу" "%1$s тууралоолору ачылган жок" "Бул киргизүү ыкмасы сиз терген бардык тексттер, сырсөздөр жана кредиттик карталар сыяктуу жеке маалыматтарды кошо чогултушу мүмкүн. Бул %1$s колдонмосу менен байланыштуу. Ушул киргизүү ыкма колдонулсунбу?" "Эскертүү: Өчүрүп-күйгүзгөндөн кийин, бул колдонмо телефондун кулпусу ачылмайынча иштебейт" diff --git a/packages/SettingsLib/res/values-lt/strings.xml b/packages/SettingsLib/res/values-lt/strings.xml index b5894f6bdf5..e1345bff66d 100644 --- a/packages/SettingsLib/res/values-lt/strings.xml +++ b/packages/SettingsLib/res/values-lt/strings.xml @@ -206,7 +206,7 @@ "USB perkrova" "Derinimo režimas, kai prijungtas USB" "Panaikinti USB derinimo prieigos teises" - "Belaidžio ryšio derinimas" + "Belaidžio ryšio derin." "Derinimo režimas, kai prisijungta prie „Wi‑Fi“" "Klaida" "Belaidžio ryšio derinimas" diff --git a/packages/SettingsLib/res/values-mk/arrays.xml b/packages/SettingsLib/res/values-mk/arrays.xml index 497611d2491..c36744a87cf 100644 --- a/packages/SettingsLib/res/values-mk/arrays.xml +++ b/packages/SettingsLib/res/values-mk/arrays.xml @@ -142,9 +142,9 @@ "Стерео" - "Оптимизирано за квалитет на аудиото (990 кб/с - 909 кб/с)" + "Оптимизирано за квалитет на аудиото (990 kbps - 909 kbps)" "Балансиран квалитет на звукот и врската (660 kb/s/606 kb/s)" - "Оптимизирано за квалитет на врската (330 кб/с - 303 кб/с)" + "Оптимизирано за квалитет на врската (330 kbps - 303 kbps)" "Најдобар напор (приспособлива стапка на битови)" diff --git a/packages/SettingsLib/res/values-ml/strings.xml b/packages/SettingsLib/res/values-ml/strings.xml index e9f707003fc..a5c32816a41 100644 --- a/packages/SettingsLib/res/values-ml/strings.xml +++ b/packages/SettingsLib/res/values-ml/strings.xml @@ -446,7 +446,7 @@ "%1$s - %2$s" "പൂർണ്ണമായി ചാർജാവാൻ %1$s ശേഷിക്കുന്നു" "%1$s - പൂർണ്ണമായി ചാർജാവാൻ %2$s" - "%1$s - ബാറ്ററി നില ഒപ്റ്റിമൈസ് ചെയ്യുന്നു" + "%1$s - ബാറ്ററിയുടെ ആയുസിനായി ഒപ്റ്റിമൈസ് ചെയ്യുന്നു" "അജ്ഞാതം" "ചാർജ് ചെയ്യുന്നു" "അതിവേഗ ചാർജിംഗ്" diff --git a/packages/SettingsLib/res/values-mn/strings.xml b/packages/SettingsLib/res/values-mn/strings.xml index 6b628bdf02b..d8ddefd33a3 100644 --- a/packages/SettingsLib/res/values-mn/strings.xml +++ b/packages/SettingsLib/res/values-mn/strings.xml @@ -396,8 +396,8 @@ "Дижитал агуулгад зориулан тааруулсан өнгө" "Зогсолтын горимын апп" - "Идэвхгүй байна. Унтраах/асаахын тулд дарна уу." - "Идэвхтэй байна. Унтраах/асаахын тулд дарна уу." + "Идэвхгүй байна. Асаах/унтраахын тулд дарна уу." + "Идэвхтэй байна. Асаах/унтраахын тулд дарна уу." "Апп зогсолтын горимын төлөв: %s" "Ажиллаж байгаа үйлчилгээнүүд" "Одоо ажиллаж байгаа үйлчилгээнүүдийг харах болон хянах" @@ -446,7 +446,7 @@ "%1$s - %2$s" "Цэнэглэх хүртэл үлдсэн %1$s" "%1$s - цэнэглэх хүртэл %2$s" - "%1$s - Батарейн чанарыг оновчилж байна" + "%1$s - Батарейн барилтыг оновчилж байна" "Тодорхойгүй" "Цэнэглэж байна" "Хурдан цэнэглэж байна" diff --git a/packages/SettingsLib/res/values-mr/strings.xml b/packages/SettingsLib/res/values-mr/strings.xml index c473a60adde..4a8a6b24183 100644 --- a/packages/SettingsLib/res/values-mr/strings.xml +++ b/packages/SettingsLib/res/values-mr/strings.xml @@ -168,7 +168,7 @@ "उच्चार संश्लेषणाचे एक छोटेसे प्रात्यक्षिक प्ले करा" "व्हॉइस डेटा इंस्टॉल करा" "उच्चार संश्लेषणासाठी आवश्यक आवाज डेटा इंस्टॉल करा" - "हे उच्चार संश्लेषण इंजिन पासवर्ड आणि क्रेडिट कार्ड नंबर यासारख्या वैयक्तिक मजकुरासह, बोलला जाणारा सर्व मजकूर संकलित करण्यात सक्षम होऊ शकते. हे %s इंजिनवरून येते. या उच्चार संश्लेषण इंजिनचा वापर सक्षम करायचा?" + "हे उच्चार संश्लेषण इंजीन पासवर्ड आणि क्रेडिट कार्ड नंबर यासारख्या वैयक्तिक मजकुरासह, बोलला जाणारा सर्व मजकूर संकलित करण्यात सक्षम होऊ शकते. हे %s इंजीनवरून येते. या उच्चार संश्लेषण इंजीनचा वापर सक्षम करायचा?" "या भाषेस टेक्‍स्‍ट टू स्‍पीचसाठी एका नेटवर्क कनेक्शनची आवश्यकता आहे." "हे उच्चार संश्लेषणाचे एक उदाहरण आहे" "डीफॉल्ट भाषा स्थिती" @@ -177,8 +177,8 @@ "%1$s समर्थित नाही" "तपासत आहे..." "%s साठी सेटिंग्ज" - "इंजिन सेटिंग्ज लाँच करा" - "प्राधान्य इंजिन" + "इंजीन सेटिंग्ज लाँच करा" + "प्राधान्य इंजीन" "सामान्य" "उच्चार पिच रीसेट करा" "डीफॉल्टवर मजकूर ज्या पिचवर बोलला जातो तो रीसेट करा." diff --git a/packages/SettingsLib/res/values-ms/strings.xml b/packages/SettingsLib/res/values-ms/strings.xml index 9262d5b7abe..c9e46fce102 100644 --- a/packages/SettingsLib/res/values-ms/strings.xml +++ b/packages/SettingsLib/res/values-ms/strings.xml @@ -67,7 +67,7 @@ "Memutuskan sambungan..." "Menyambung..." "%1$s disambungkan" - "Memasangkan..." + "Menggandingkan..." "Disambungkan (tiada telefon)%1$s" "Disambungkan (tiada media)%1$s" "Disambungkan (tiada akses mesej)%1$s" @@ -112,7 +112,7 @@ "Gunakan untuk pemindahan fail" "Gunakan untuk input" "Gunakan untuk Alat Bantu Dengar" - "Jadikan pasangan" + "Gandingkan" "JADIKAN PASANGAN" "Batal" "Berpasangan memberi anda akses kepada kenalan dan sejarah panggilan apabila disambungkan." diff --git a/packages/SettingsLib/res/values-my/strings.xml b/packages/SettingsLib/res/values-my/strings.xml index f2ed8a28dbe..03903cb41e7 100644 --- a/packages/SettingsLib/res/values-my/strings.xml +++ b/packages/SettingsLib/res/values-my/strings.xml @@ -306,7 +306,7 @@ "သင် ယခင်က ခွင့်ပြုခဲ့သော ကွန်ပျူတာအားလုံးမှ ယူအက်စ်ဘီ အမှားစစ်ခွင့်ကို ရုတ်သိမ်းမည်လား ?" "တည်ဆောက်ပြုပြင်ရန်ဆက်တင်များကို အသုံးပြုခွင့်ပေးမည်လား?" "ဤဆက်တင်းများကို တည်ဆောက်ပြုပြင်ရာတွင် သုံးရန်အတွက်သာ ရည်ရွယ်သည်။ ၎င်းတို့သည် သင်၏စက်နှင့် အပလီကေးရှင်းများကို ရပ်စေခြင်း သို့ လုပ်ဆောင်ချက်မမှန်ကန်ခြင်းများ ဖြစ်ပေါ်စေနိုင်သည်။" - "USB ဖြင့် အက်ပ်များကို အတည်ပြုစိစစ်ရန်" + "USB ဖြင့် အက်ပ်များစိစစ်ရန်" "ADB/ADT မှတစ်ဆင့် ထည့်သွင်းသော အက်ပ်များ အန္တရာယ်ဖြစ်နိုင်ခြင်း ရှိမရှိ စစ်ဆေးသည်။" "အမည်မရှိသော (MAC လိပ်စာများသာပါသော) ဘလူးတုသ်စက်ပစ္စည်းများကို ပြသပါမည်" "ချိတ်ဆက်ထားသည့် ကိရိယာတွင် လက်မခံနိုင်လောက်အောင် ဆူညံ သို့မဟုတ် ထိန်းညှိမရနိုင်သော အသံပိုင်းပြဿနာ ရှိခဲ့လျှင် ဘလူးတုသ် ပကတိ အသံနှုန်းကို ပိတ်ပါ။" diff --git a/packages/SettingsLib/res/values-nb/strings.xml b/packages/SettingsLib/res/values-nb/strings.xml index b8a010a6ed7..634bc1cc3d7 100644 --- a/packages/SettingsLib/res/values-nb/strings.xml +++ b/packages/SettingsLib/res/values-nb/strings.xml @@ -117,7 +117,7 @@ "Avbryt" "Med sammenkobling får den andre enheten tilgang til kontaktene og anropsloggen din når den er tilkoblet." "Kan ikke koble til %1$s." - "Kan ikke koble til %1$s på grunn av feil personlig kode eller passord." + "Kan ikke koble til %1$s på grunn av feil PIN-kode eller passord." "Kan ikke kommunisere med %1$s." "%1$s avslo paring." "Datamaskin" @@ -446,7 +446,7 @@ "%1$s%2$s" "%1$s til batteriet er fulladet" "%1$s%2$s til batteriet er fulladet" - "%1$s – Optimaliserer batteritilstanden" + "%1$s – optimaliserer batteritilstanden" "Ukjent" "Lader" "Lader raskt" diff --git a/packages/SettingsLib/res/values-ne/arrays.xml b/packages/SettingsLib/res/values-ne/arrays.xml index cbb0270b25c..f59b9dcb446 100644 --- a/packages/SettingsLib/res/values-ne/arrays.xml +++ b/packages/SettingsLib/res/values-ne/arrays.xml @@ -256,7 +256,7 @@ "Deuteranomaly का लागि क्षेत्रहरू देखाउनुहोस्" - "मानक सीमा" + "डिफल्ट सीमा" "कुनै पृष्ठभूमि प्रक्रियाहरू छैनन्" "बढीमा १ प्रक्रिया" "बढीमा २ प्रक्रियाहरू" diff --git a/packages/SettingsLib/res/values-ne/strings.xml b/packages/SettingsLib/res/values-ne/strings.xml index aa759c82a87..dd4823d3e1f 100644 --- a/packages/SettingsLib/res/values-ne/strings.xml +++ b/packages/SettingsLib/res/values-ne/strings.xml @@ -388,7 +388,7 @@ "जोसिलो (पूर्व निर्धारित)" "प्राकृतिक" - "मानक" + "डिफल्ट" "परिष्कृत रङ्गहरू" @@ -532,7 +532,7 @@ "प्रतिबन्धित प्रोफाइल" "नयाँ प्रयोगकर्ता थप्ने हो?" "तपाईं थप प्रयोगकर्ताहरू सिर्जना गरेर ती प्रयोगकर्तालाई यो यन्त्र प्रयोग गर्न दिन सक्नुहुन्छ। हरेक प्रयोगकर्ताको आफ्नै ठाउँ हुन्छ। उनीहरू यो ठाउँमा आफ्नै एप, वालपेपर आदिका लागि प्रयोग गर्न सक्छन्। उनीहरू सबैजनालाई असर पार्ने Wi-Fi जस्ता यन्त्रका सेटिङहरू पनि परिवर्तन गर्न सक्छन्।\n\nतपाईंले नयाँ प्रयोगकर्ता थप्दा उक्त व्यक्तिले आफ्नो ठाउँ सेटअप गर्नु पर्ने हुन्छ।\n\nसबै प्रयोगकर्ता अन्य सबै प्रयोगकर्ताले प्रयोग गर्ने एपहरू अद्यावधिक गर्न सक्छन्। तर पहुँचसम्बन्धी सेटिङ तथा सेवाहरू नयाँ प्रयोगकर्तामा नसर्न सक्छ।" - "जब तपाईंले नयाँ प्रयोगकर्ता थप्नुहुन्छ, त्यो व्यक्तिले आफ्नो ठाउँ सेट गर्न आवश्यक छ।\n\nकुनै पनि प्रयोगकर्ताले सबै अन्य प्रयोगकर्ताहरूका लागि एपहरू अद्यावधिक गर्न सक्छन्।" + "तपाईंले नयाँ प्रयोगकर्ता थप्नुभयो भने ती प्रयोगकर्ताले आफ्नो स्पेस सेट गर्नु पर्ने हुन्छ।\n\nसबै प्रयोगकर्ताले अरू प्रयोगकर्ताका एपहरू अपडेट गर्न सक्छन्।" "अहिले प्रयोगकर्ता सेटअप गर्ने हो?" "यी व्यक्ति यन्त्र यो यन्त्र चलाउन र आफ्नो ठाउँ सेट गर्न उपलब्ध छन् भन्ने कुरा सुनिश्चित गर्नुहोस्" "अहिले प्रोफाइल सेटअप गर्ने हो?" diff --git a/packages/SettingsLib/res/values-nl/arrays.xml b/packages/SettingsLib/res/values-nl/arrays.xml index a48e50681ed..dc14ff10d73 100644 --- a/packages/SettingsLib/res/values-nl/arrays.xml +++ b/packages/SettingsLib/res/values-nl/arrays.xml @@ -59,9 +59,9 @@ "HDCP-controle altijd gebruiken" - "Uitgeschakeld" - "Gefilterd ingeschakeld" - "Ingeschakeld" + "Uitgezet" + "Gefilterd staat aan" + "Aangezet" "AVRCP 1.5 (standaard)" @@ -252,8 +252,8 @@ "Uit" - "Gedeeltes met overbelasting weergeven" - "Gebieden voor deuteranomalie weergeven" + "Gedeelten met overbelasting tonen" + "Gebieden voor deuteranomalie tonen" "Standaardlimiet" diff --git a/packages/SettingsLib/res/values-nl/strings.xml b/packages/SettingsLib/res/values-nl/strings.xml index 9c2cb983b96..d029dbd8b1d 100644 --- a/packages/SettingsLib/res/values-nl/strings.xml +++ b/packages/SettingsLib/res/values-nl/strings.xml @@ -24,7 +24,7 @@ "Geen" "Opgeslagen" "Verbinding verbroken" - "Uitgeschakeld" + "Uitgezet" "IP-configuratie mislukt" "Niet verbonden wegens netwerk van lage kwaliteit" "Wifi-verbinding mislukt" @@ -131,7 +131,7 @@ "Rechter hoortoestel koppelen…" "Links: batterijniveau %1$s" "Rechts: batterijniveau %1$s" - "Wifi: uitgeschakeld." + "Wifi staat uit." "Wifi-verbinding verbroken." "Wifi: één streepje." "Wifi: twee streepjes." @@ -168,7 +168,7 @@ "Een korte demonstratie van spraaksynthese afspelen" "Spraakgegevens installeren" "De spraakgegevens voor spraaksynthese installeren" - "Deze engine voor spraaksynthese kan mogelijk alle tekst verzamelen die wordt gesproken, waaronder persoonsgegevens zoals wachtwoorden en creditcardnummers. Deze engine is afkomstig van de %s-engine. Het gebruik van deze engine voor spraaksynthese inschakelen?" + "Deze engine voor spraaksynthese kan mogelijk alle tekst verzamelen die wordt gesproken, waaronder persoonsgegevens zoals wachtwoorden en creditcardnummers. Deze engine is afkomstig van de %s-engine. Het gebruik van deze engine voor spraaksynthese aanzetten?" "Deze taal heeft een werkende netwerkverbinding nodig voor tekst-naar-spraak-uitvoer." "Dit is een voorbeeld van spraaksynthese" "Status van standaardtaal" @@ -197,7 +197,7 @@ "Persoonlijk" "Werk" "Ontwikkelaarsopties" - "Opties voor ontwikkelaars inschakelen" + "Opties voor ontwikkelaars aanzetten" "Opties instellen voor appontwikkeling" "Ontwikkelaarsopties zijn niet beschikbaar voor deze gebruiker" "Instellingen voor VPN zijn niet beschikbaar voor deze gebruiker" @@ -210,7 +210,7 @@ "Foutopsporingsmodus als wifi is verbonden" "Fout" "Draadloze foutopsporing" - "Schakel draadloze foutopsporing in om beschikbare apparaten te bekijken en te gebruiken" + "Zet draadloze foutopsporing aan om beschikbare apparaten te bekijken en te gebruiken" "Apparaat koppelen met QR-code" "Nieuwe apparaten koppelen via QR-codescanner" "Apparaat koppelen met koppelingscode" @@ -235,15 +235,15 @@ "Maak verbinding met een wifi-netwerk" "adb, foutopsporing, ontwikkeling" "Snelle link naar bugrapport" - "Een knop in het aan/uit-menu weergeven om een bugrapport te maken" + "Een knop in het aan/uit-menu tonen om een bugrapport te maken" "Stand-by" "Scherm gaat nooit uit tijdens het opladen" - "Snoop-logbestand voor Bluetooth-HCI inschakelen" - "Bluetooth-pakketten opslaan. (Schakel Bluetooth in nadat je deze instelling hebt gewijzigd)." + "Snoop-logbestand voor bluetooth-HCI aanzetten" + "Bluetooth-pakketten opslaan. (Zet Bluetooth aan nadat je deze instelling hebt gewijzigd)." "OEM-ontgrendeling" "Toestaan dat de bootloader wordt ontgrendeld" "OEM-ontgrendeling toestaan?" - "WAARSCHUWING: De apparaatbeveiligingsfuncties werken niet op dit apparaat wanneer deze instelling is ingeschakeld." + "WAARSCHUWING: De apparaatbeveiligingsfuncties werken niet op dit apparaat als deze instelling aanstaat." "App voor neplocatie selecteren" "Geen app voor neplocatie ingesteld" "App voor neplocatie: %1$s" @@ -254,9 +254,9 @@ "Via wifi ondersteunde MAC-herschikking" "Mobiele data altijd actief" "Hardwareversnelling voor tethering" - "Bluetooth-apparaten zonder namen weergeven" - "Absoluut volume uitschakelen" - "Gabeldorsche inschakelen" + "Bluetooth-apparaten zonder naam tonen" + "Absoluut volume uitzetten" + "Gabeldorsche aanzetten" "Bluetooth-AVRCP-versie" "Bluetooth-AVRCP-versie selecteren" "MAP-versie voor bluetooth" @@ -280,10 +280,10 @@ "Hostnaam van privé-DNS-provider" "Geef hostnaam van DNS-provider op" "Kan geen verbinding maken" - "Opties weergeven voor certificering van draadloze weergave" - "Logniveau voor wifi verhogen, weergeven per SSID RSSI in wifi-kiezer" + "Opties tonen voor certificering van draadloze weergave" + "Logniveau voor wifi verhogen, tonen per SSID RSSI in wifi-kiezer" "Verlaagt het batterijverbruik en verbetert de netwerkprestaties" - "Als deze modus is ingeschakeld, kan het MAC-adres van dit apparaat elke keer wijzigen als het verbinding maakt met een netwerk waarvoor MAC-herschikking is ingeschakeld." + "Als deze modus aanstaat, kan het MAC-adres van dit apparaat wijzigen telkens als het apparaat verbinding maakt met een netwerk waarvoor MAC-herschikking aanstaat." "Met datalimiet" "Gratis" "Logger-buffergrootten" @@ -296,7 +296,7 @@ "USB-configuratie selecteren" "Neplocaties toestaan" "Neplocaties toestaan" - "Inspectie van weergavekenmerk inschakelen" + "Inspectie van weergavekenmerk aanzetten" "Mobiele data altijd actief houden, ook als wifi actief is (voor sneller schakelen tussen netwerken)." "Hardwareversnelling voor tethering gebruiken indien beschikbaar" "USB-foutopsporing toestaan?" @@ -308,12 +308,12 @@ "Deze instellingen zijn uitsluitend bedoeld voor ontwikkelingsgebruik. Je apparaat en apps kunnen hierdoor vastlopen of anders reageren." "Apps verifiëren via USB" "Apps die zijn geïnstalleerd via ADB/ADT, controleren op schadelijk gedrag" - "Bluetooth-apparaten zonder namen (alleen MAC-adressen) worden weergegeven" - "Hiermee wordt de functie voor absoluut volume van Bluetooth uitgeschakeld in geval van volumeproblemen met externe apparaten, zoals een onacceptabel hoog volume of geen volumeregeling." - "Hierdoor wordt de Gabeldorsche-functiestack voor bluetooth ingeschakeld." - "Hiermee wordt de functie voor verbeterde connectiviteit ingeschakeld." + "Bluetooth-apparaten zonder naam (alleen MAC-adressen) worden weergegeven" + "Hiermee wordt de functie voor absoluut volume van Bluetooth uitgezet in geval van volumeproblemen met externe apparaten, zoals een onacceptabel hoog volume of geen volumeregeling." + "Hierdoor wordt de Gabeldorsche-functiestack voor bluetooth aangezet." + "Hiermee wordt de functie voor verbeterde connectiviteit aangezet." "Lokale terminal" - "Terminal-app inschakelen die lokale shell-toegang biedt" + "Terminal-app aanzetten die lokale shell-toegang biedt" "HDCP-controle" "HDCP-controlegedrag instellen" "Foutopsporing" @@ -329,36 +329,36 @@ "Rendering met hardwareversnelling" "Media" "Controle" - "Strikte modus ingeschakeld" + "Strikte modus staat aan" "Knipperend scherm bij lange bewerkingen door apps" "Cursorlocatie" "Schermoverlay met huidige aanraakgegevens" - "Tikken weergeven" - "Visuele feedback weergeven voor tikken" - "Oppervlakupdates weergeven" + "Tikken tonen" + "Visuele feedback tonen voor tikken" + "Oppervlakupdates tonen" "Volledige vensteroppervlakken flashen bij updates" "Weergave-updates tonen" - "Flash-weergave in vensters bij update" + "Flash-weergaven in vensters bij update" "Hardwarelayer-upd. tonen" "Hardwarelagen knipperen groen bij updates" "Foutopsporing GPU-overbelasting" - "HW-overlays uitschakelen" + "HW-overlays uitzetten" "GPU altijd gebruiken voor schermcompositing" "Kleurruimte simuleren" - "OpenGL-sporen inschakelen" + "OpenGL-sporen aanzetten" "USB-audiorouting uitsch." "Autom. routing naar USB-randapparatuur uitsch." - "Indelingsgrenzen weergeven" - "Clipgrenzen, marges en meer weergeven" + "Indelingsgrenzen tonen" + "Clipgrenzen, marges en meer tonen" "V.r.n.l.-indelingsrichting afdwingen" "Schermindelingsrichting geforceerd instellen op v.r.n.l. voor alle talen" "4x MSAA forceren" - "4x MSAA inschakelen in OpenGL ES 2.0-apps" + "4x MSAA aanzetten in OpenGL ES 2.0-apps" "Foutopsporing niet-rechthoekig bijsnijden" "HWUI-weergave van profiel" - "GPU-foutopsporingslagen inschakelen" + "GPU-foutopsporingslagen aanzetten" "Laden van GPU-foutopsporingslagen toestaan voor foutopsporingsapps" - "Uitgebreide leverancierslogboeken inschakelen" + "Uitgebreide leverancierslogboeken aanzetten" "Aanvullende apparaatspecifieke leverancierslogboeken opnemen in bugrapporten. Deze kunnen privégegevens bevatten, meer batterijlading gebruiken en/of meer opslagruimte gebruiken." "Venster­animatieschaal" "Overgangs­animatieschaal" @@ -370,14 +370,14 @@ "Achtergrondproceslimiet" "ANR\'s op de achtergrond" "Dialoogvenster \'App reageert niet\' weergeven voor achtergrond-apps" - "Kanaalwaarschuwingen voor meldingen weergeven" + "Kanaalwaarschuwingen voor meldingen tonen" "Geeft een waarschuwing op het scherm weer wanneer een app een melding post zonder geldig kanaal" "Toestaan van apps op externe opslag afdwingen" "Hiermee komt elke app in aanmerking voor schrijven naar externe opslag, ongeacht de manifestwaarden" "Formaat activiteiten geforceerd aanpasbaar maken" "Het formaat van alle activiteiten aanpasbaar maken, ongeacht de manifestwaarden." - "Vensters met vrije vorm inschakelen" - "Ondersteuning voor vensters met experimentele vrije vorm inschakelen." + "Vensters met vrije vorm aanzetten" + "Ondersteuning voor vensters met experimentele vrije vorm aanzetten." "Wachtwoord desktopback-up" "Volledige back-ups naar desktops zijn momenteel niet beveiligd" "Tik om het wachtwoord voor volledige back-ups naar desktops te wijzigen of te verwijderen" @@ -400,7 +400,7 @@ "Actief. Tik om te schakelen." "Stand-bystatus app: %s" "Actieve services" - "Services die momenteel actief zijn, weergeven en beheren" + "Services die momenteel actief zijn, bekijken en beheren" "WebView-implementatie" "WebView-implementatie instellen" "Deze keuze is niet meer geldig. Probeer het opnieuw." @@ -412,7 +412,7 @@ "Wissen en converteren…" "Kleurenmodus voor afbeeldingen" "sRGB gebruiken" - "Uitgeschakeld" + "Uitgezet" "Totale kleurenblindheid" "Deuteranomalie (rood-groen)" "Protanomalie (rood-groen)" @@ -437,12 +437,12 @@ "Nog minder dan %1$s (%2$s)" "Nog meer dan %1$s (%2$s)" "Meer dan %1$s" - "Telefoon wordt binnenkort mogelijk uitgeschakeld" - "Tablet wordt binnenkort mogelijk uitgeschakeld" - "Apparaat wordt binnenkort mogelijk uitgeschakeld" - "Telefoon wordt binnenkort mogelijk uitgeschakeld (%1$s)" - "Tablet wordt binnenkort mogelijk uitgeschakeld (%1$s)" - "Apparaat wordt binnenkort mogelijk uitgeschakeld (%1$s)" + "Telefoon wordt binnenkort mogelijk uitgezet" + "Tablet wordt binnenkort mogelijk uitgezet" + "Apparaat wordt binnenkort mogelijk uitgezet" + "Telefoon wordt binnenkort mogelijk uitgezet (%1$s)" + "Tablet wordt binnenkort mogelijk uitgezet (%1$s)" + "Apparaat wordt binnenkort mogelijk uitgezet (%1$s)" "%1$s - %2$s" "Nog %1$s tot opgeladen" "%1$s - %2$s tot opgeladen" @@ -455,7 +455,7 @@ "Aangesloten, kan nu niet opladen" "Volledig" "Ingesteld door beheerder" - "Uitgeschakeld" + "Uitgezet" "Toegestaan" "Niet toegestaan" "Onbekende apps installeren" @@ -480,7 +480,7 @@ "Actieve invoermethoden" "Systeemtalen gebruiken" "Instellingen openen voor %1$s mislukt" - "Deze invoermethode verzamelt mogelijk alle tekst die je typt, inclusief persoonsgegevens zoals wachtwoorden en creditcardnummers. De methode is afkomstig uit de app %1$s. Deze invoermethode inschakelen?" + "Deze invoermethode verzamelt mogelijk alle tekst die je typt, inclusief persoonsgegevens zoals wachtwoorden en creditcardnummers. De methode is afkomstig uit de app %1$s. Deze invoermethode aanzetten?" "Opmerking: Wanneer je telefoon opnieuw is opgestart, kan deze app pas worden gestart nadat je je telefoon hebt ontgrendeld" "IMS-registratiestatus" "Geregistreerd" @@ -495,21 +495,21 @@ "Minder tijd." "Annuleren" "OK" - "Inschakelen" - "Schakel Niet storen in." + "Aanzetten" + "Zet Niet storen aan." "Nooit" "Alleen prioriteit" "%1$s. %2$s" - "Je hoort je volgende wekker niet %1$s tenzij je dit vóór die tijd uitschakelt" + "Je hoort je volgende wekker niet %1$s tenzij je dit vóór die tijd uitzet" "Je hoort je volgende wekker niet %1$s" "om %1$s" "op %1$s" "Duur" "Altijd vragen" - "Totdat je uitschakelt" + "Totdat je uitzet" "Zojuist" "Telefoonspeaker" - "Probleem bij verbinding maken. Schakel het apparaat uit en weer in." + "Probleem bij verbinding maken. Zet het apparaat uit en weer aan." "Bedraad audioapparaat" "Hulp en feedback" "Opslag" @@ -550,8 +550,8 @@ "Gast verwijderen" "Gast" "Apparaatstandaard" - "Uitgeschakeld" - "Ingeschakeld" + "Uitgezet" + "Aangezet" "Je apparaat moet opnieuw worden opgestart om deze wijziging toe te passen. Start nu opnieuw op of annuleer de wijziging." "Bedrade hoofdtelefoon" diff --git a/packages/SettingsLib/res/values-or/strings.xml b/packages/SettingsLib/res/values-or/strings.xml index 173ae1cccef..aec99fd3ab8 100644 --- a/packages/SettingsLib/res/values-or/strings.xml +++ b/packages/SettingsLib/res/values-or/strings.xml @@ -114,7 +114,7 @@ "ଶ୍ରବଣ ଯନ୍ତ୍ର ପାଇଁ ବ୍ୟବହାର କରନ୍ତୁ" "ପେୟାର୍‌" "ପେୟାର୍‌" - "କ୍ୟାନ୍ସଲ୍‌ କରନ୍ତୁ" + "ବାତିଲ୍‌ କରନ୍ତୁ" "ପେୟାରିଂ ଫଳରେ ସଂଯୁକ୍ତ ଥିବା ବେଳେ ଆପଣଙ୍କ ସମ୍ପର୍କଗୁଡ଼ିକୁ ଏବଂ କଲ୍‌ର ଇତିବୃତିକୁ ଆକସେସ୍‌ ମଞ୍ଜୁର ହୁଏ।" "%1$s ସହ ପେୟାର୍‌ କରିହେଲା ନାହିଁ।" "ଏକ ଭୁଲ୍‌ PIN କିମ୍ବା ପାସକୀ କାରଣରୁ %1$s ସହ ପେୟାର୍‌ କରିପାରିଲା ନାହିଁ।" @@ -493,7 +493,7 @@ "ଅଧିକ ସମୟ।" "କମ୍ ସମୟ।" - "କ୍ୟାନ୍ସଲ୍" + "ବାତିଲ୍" "ଠିକ୍‌ ଅଛି" "ଚାଲୁ କରନ୍ତୁ" "\"ବିରକ୍ତ କରନ୍ତୁ ନାହିଁ\" ଅନ୍ କରନ୍ତୁ" diff --git a/packages/SettingsLib/res/values-pa/strings.xml b/packages/SettingsLib/res/values-pa/strings.xml index 177e29377ee..84dc9fe9a38 100644 --- a/packages/SettingsLib/res/values-pa/strings.xml +++ b/packages/SettingsLib/res/values-pa/strings.xml @@ -446,7 +446,7 @@ "%1$s - %2$s" "ਚਾਰਜ ਹੋਣ ਵਿੱਚ %1$s ਬਾਕੀ" "%1$s - %2$s ਤੱਕ ਚਾਰਜ ਹੋ ਜਾਵੇਗੀ" - "%1$s - ਬੈਟਰੀ ਸਥਿਤੀ ਲਈ ਅਨੁਕੂਲ ਬਣਾਇਆ ਜਾ ਰਿਹਾ" + "%1$s - ਬੈਟਰੀ ਦੀ ਸਥਿਤੀ ਲਈ ਅਨੁਕੂਲ ਬਣਾਇਆ ਜਾ ਰਿਹਾ ਹੈ" "ਅਗਿਆਤ" "ਚਾਰਜ ਹੋ ਰਿਹਾ ਹੈ" "ਤੇਜ਼ ਚਾਰਜ ਹੋ ਰਹੀ ਹੈ" @@ -468,7 +468,7 @@ "%1$s ਪਹਿਲਾਂ" "%1$s ਬਾਕੀ" "ਛੋਟਾ" - "ਪੂਰਵ-ਨਿਰਧਾਰਤ" + "ਪੂਰਵ-ਨਿਰਧਾਰਿਤ" "ਵੱਡੀ" "ਥੋੜ੍ਹਾ ਵੱਡੀ" "ਸਭ ਤੋਂ ਵੱਡੀ" diff --git a/packages/SettingsLib/res/values-pl/strings.xml b/packages/SettingsLib/res/values-pl/strings.xml index 00cc9872872..38bc6e1c354 100644 --- a/packages/SettingsLib/res/values-pl/strings.xml +++ b/packages/SettingsLib/res/values-pl/strings.xml @@ -446,7 +446,7 @@ "%1$s%2$s" "Do naładowania %1$s" "%1$s – do naładowania %2$s" - "%1$s – Optymalizuję, by utrzymać baterię w dobrym stanie" + "%1$s – Optymalizuję, aby utrzymać baterię w dobrym stanie" "Nieznane" "Ładowanie" "Szybkie ładowanie" diff --git a/packages/SettingsLib/res/values-ru/strings.xml b/packages/SettingsLib/res/values-ru/strings.xml index 21cacc82b17..ebe7c455a3f 100644 --- a/packages/SettingsLib/res/values-ru/strings.xml +++ b/packages/SettingsLib/res/values-ru/strings.xml @@ -548,7 +548,7 @@ "Чтобы создать профиль с ограниченным доступом, необходимо предварительно настроить блокировку экрана для защиты приложений и личных данных" "Включить блокировку" "Переключиться на этот аккаунт: %s" - "Добавить аккаунт гостя" + "Добавить гостя" "Удалить аккаунт гостя" "Гость" "Вариант по умолчанию" diff --git a/packages/SettingsLib/res/values-si/strings.xml b/packages/SettingsLib/res/values-si/strings.xml index 9cc7a20819b..24b7710ce1b 100644 --- a/packages/SettingsLib/res/values-si/strings.xml +++ b/packages/SettingsLib/res/values-si/strings.xml @@ -446,7 +446,7 @@ "%1$s - %2$s" "ආරෝපණය වන තෙක් %1$s ඇත" "%1$s - ආරෝපණය වන තෙක් %2$s" - "%1$s - බැටරි සෞඛ්‍යය සඳහා ප්‍රශස්ත කරමින්" + "%1$s - බැටරි ආයු කාලය වැඩි දියුණු කරමින්" "නොදනී" "ආරෝපණය වෙමින්" "ශීඝ්‍ර ආරෝපණය" diff --git a/packages/SettingsLib/res/values-sl/strings.xml b/packages/SettingsLib/res/values-sl/strings.xml index be2e1a8778e..68e1e5deaf1 100644 --- a/packages/SettingsLib/res/values-sl/strings.xml +++ b/packages/SettingsLib/res/values-sl/strings.xml @@ -446,7 +446,7 @@ "%1$s%2$s" "Še %1$s do polne napolnjenosti" "%1$s%2$s do polne napolnjenosti" - "%1$s – Optimizacija za ohran. zmog. baterije" + "%1$s – Optimizacija za ohranjanje zmogljivosti baterije" "Neznano" "Polnjenje" "Hitro polnjenje" diff --git a/packages/SettingsLib/res/values-sr/strings.xml b/packages/SettingsLib/res/values-sr/strings.xml index 2b59a92c6c3..947eb435165 100644 --- a/packages/SettingsLib/res/values-sr/strings.xml +++ b/packages/SettingsLib/res/values-sr/strings.xml @@ -446,7 +446,7 @@ "%1$s%2$s" "Напуниће се за %1$s" "%1$s – напуниће се за %2$s" - "%1$s – Оптимизује се ради стања батерије" + "%1$s – Оптимизује се ради бољег стања батерије" "Непознато" "Пуни се" "Брзо се пуни" diff --git a/packages/SettingsLib/res/values-sw/strings.xml b/packages/SettingsLib/res/values-sw/strings.xml index b1510529893..def4238780b 100644 --- a/packages/SettingsLib/res/values-sw/strings.xml +++ b/packages/SettingsLib/res/values-sw/strings.xml @@ -546,7 +546,7 @@ "Kabla uunde wasifu uliowekekwa vikwazo, utahitajika kuweka skrini iliyofungwa ili kulinda programu zako na data binafsi." "Weka ufunguo" "Badili utumie %s" - "Weka mgeni" + "Ongeza mgeni" "Ondoa mgeni" "Mgeni" "Hali chaguomsingi ya kifaa" diff --git a/packages/SettingsLib/res/values-ta/strings.xml b/packages/SettingsLib/res/values-ta/strings.xml index 58758bfc3ec..f6d4a3d3150 100644 --- a/packages/SettingsLib/res/values-ta/strings.xml +++ b/packages/SettingsLib/res/values-ta/strings.xml @@ -388,7 +388,7 @@ "வைபிரன்ட் (இயல்பு)" "இயற்கை வண்ணம்" - "வழக்கமான வண்ணம்" + "இயல்புநிலை" "மேம்படுத்தப்பட்ட வண்ணங்கள்" diff --git a/packages/SettingsLib/res/values-te/arrays.xml b/packages/SettingsLib/res/values-te/arrays.xml index 1363a4021bc..d8da7144340 100644 --- a/packages/SettingsLib/res/values-te/arrays.xml +++ b/packages/SettingsLib/res/values-te/arrays.xml @@ -256,7 +256,7 @@ "డ్యూటెరానోమలీ కోసం ప్రాంతాలను చూపండి" - "ప్రామాణిక పరిమితి" + "స్టాండర్డ్ పరిమితి" "నేపథ్య ప్రాసెస్‌లు లేవు" "గరిష్టంగా 1 ప్రాసెస్" "గరిష్టంగా 2 ప్రాసెస్‌లు" diff --git a/packages/SettingsLib/res/values-te/strings.xml b/packages/SettingsLib/res/values-te/strings.xml index 05dbd43f2da..cb6461fe45c 100644 --- a/packages/SettingsLib/res/values-te/strings.xml +++ b/packages/SettingsLib/res/values-te/strings.xml @@ -140,15 +140,15 @@ "ఓపెన్ నెట్‌వర్క్" "సురక్షిత నెట్‌వర్క్" "Android OS" - "తీసివేయబడిన అనువర్తనాలు" - "తీసివేయబడిన అనువర్తనాలు మరియు వినియోగదారులు" + "తీసివేయబడిన యాప్‌లు" + "తీసివేయబడిన యాప్‌లు మరియు వినియోగదారులు" "సిస్టమ్ అప్‌డేట్‌లు" "USB టీథరింగ్" "పోర్టబుల్ హాట్‌స్పాట్" "బ్లూటూత్ టెథెరింగ్" "టీథరింగ్" "టీథరింగ్ & పోర్టబుల్ హాట్‌స్పాట్" - "అన్ని కార్యాలయ అనువర్తనాలు" + "అన్ని కార్యాలయ యాప్‌లు" "అతిథి" "తెలియదు" "వినియోగదారు: %1$s" @@ -313,14 +313,14 @@ "బ్లూటూత్ Gabeldorsche ఫీచర్ స్ట్యాక్‌ను ఎనేబుల్ చేస్తుంది." "మెరుగైన కనెక్టివిటీ ఫీచర్‌ను ఎనేబుల్ చేస్తుంది." "స్థానిక టెర్మినల్" - "స్థానిక షెల్ ప్రాప్యతను అందించే టెర్మినల్ అనువర్తనాన్ని ప్రారంభించు" + "స్థానిక షెల్ ప్రాప్యతను అందించే టెర్మినల్ యాప్‌ను ప్రారంభించు" "HDCP తనిఖీ" "HDCP తనిఖీ ప్రవర్తనను సెట్ చేయండి" "డీబగ్గింగ్" "డీబగ్ యాప్‌ను ఎంచుకోండి" "డీబగ్ యాప్ సెట్ చేయబడలేదు" "డీబగ్గింగ్ యాప్: %1$s" - "అనువర్తనాన్ని ఎంచుకోండి" + "యాప్‌ను ఎంచుకోండి" "ఏదీ వద్దు" "డీబగ్గర్ కోసం వేచి ఉండండి" "డీబగ్ చేయబడిన యాప్ అమలు కావడానికి ముందు జోడించాల్సిన డీబగ్గర్ కోసం వేచి ఉంటుంది" @@ -388,7 +388,7 @@ "సచేతనం (డిఫాల్ట్)" "సహజం" - "ప్రామాణికం" + "స్టాండర్డ్" "మెరుగైన రంగులు" @@ -446,7 +446,7 @@ "%1$s - %2$s" "ఛార్జ్ అవ్వడానికి %1$s సమయం మిగిలి ఉంది" "%1$s - ఛార్జ్ అవ్వడానికి %2$s పడుతుంది" - "%1$s - బ్యాటరీ స్థితిని ఆప్టిమైజ్ చేయడం కోసం" + "%1$s - బ్యాటరీ జీవితకాలాన్ని పెంచడం కోసం ఆప్టిమైజ్ చేస్తోంది" "తెలియదు" "ఛార్జ్ అవుతోంది" "వేగవంతమైన ఛార్జింగ్" @@ -543,10 +543,10 @@ "కొత్త ప్రొఫైల్" "వినియోగదారు సమాచారం" "ప్రొఫైల్ సమాచారం" - "మీరు పరిమితం చేయబడిన ప్రొఫైల్‌ను సృష్టించడానికి ముందు, మీ అనువర్తనాలు మరియు వ్యక్తిగత డేటాను రక్షించడానికి స్క్రీన్ లాక్‌ను సెటప్ చేయాల్సి ఉంటుంది." + "మీరు పరిమితం చేయబడిన ప్రొఫైల్‌ను సృష్టించడానికి ముందు, మీ యాప్‌లు మరియు వ్యక్తిగత డేటాను రక్షించడానికి స్క్రీన్ లాక్‌ను సెటప్ చేయాల్సి ఉంటుంది." "లాక్‌ను సెట్ చేయి" "%sకు మార్చు" - "అతిథిని జోడించండి" + "గెస్ట్‌ను జోడించండి" "అతిథిని తీసివేయండి" "అతిథి" "పరికర ఆటోమేటిక్ సెట్టింగ్" diff --git a/packages/SettingsLib/res/values-th/strings.xml b/packages/SettingsLib/res/values-th/strings.xml index d0b4a9a90c8..d34455c1a6d 100644 --- a/packages/SettingsLib/res/values-th/strings.xml +++ b/packages/SettingsLib/res/values-th/strings.xml @@ -284,7 +284,7 @@ "เพิ่มระดับการบันทึก Wi‑Fi แสดงต่อ SSID RSSI ในตัวเลือก Wi‑Fi" "ลดการเปลืองแบตเตอรี่และเพิ่มประสิทธิภาพเครือข่าย" "เมื่อเปิดใช้โหมดนี้ ที่อยู่ MAC ของอุปกรณ์นี้อาจเปลี่ยนทุกครั้งที่เชื่อมต่อกับเครือข่ายที่มีการเปิดใช้การสุ่ม MAC" - "แบบจำกัดปริมาณอินเทอร์เน็ต" + "แบบจำกัดปริมาณ" "ไม่มีการวัดปริมาณอินเทอร์เน็ต" "ขนาดบัฟเฟอร์ของตัวบันทึก" "เลือกขนาด Logger ต่อบัฟเฟอร์ไฟล์บันทึก" diff --git a/packages/SettingsLib/res/values-uk/strings.xml b/packages/SettingsLib/res/values-uk/strings.xml index ad83aa54960..b1d5d43b1b0 100644 --- a/packages/SettingsLib/res/values-uk/strings.xml +++ b/packages/SettingsLib/res/values-uk/strings.xml @@ -446,7 +446,7 @@ "%1$s%2$s" "%1$s до повного заряду" "%1$s%2$s до повного заряду" - "%1$s – стан акумулятора оптимізується" + "%1$s – Оптимізація для збереження заряду акумулятора" "Невідомо" "Заряджається" "Швидке заряджання" diff --git a/packages/SettingsLib/res/values-uz/strings.xml b/packages/SettingsLib/res/values-uz/strings.xml index 4ddb19fcfb1..2591e3aad57 100644 --- a/packages/SettingsLib/res/values-uz/strings.xml +++ b/packages/SettingsLib/res/values-uz/strings.xml @@ -154,7 +154,7 @@ "Foydalanuvchi: %1$s" "Ba’zi birlamchi sozlamalar o‘rnatilgan" "Birlamchi sozlamalar belgilanmagan" - "Nutq sintezi sozlamalari" + "Matnni nutqqa aylantirish sozlamalari" "Nutq sintezi" "Nutq tezligi" "Matnni o‘qish tezligi" @@ -446,7 +446,7 @@ "%1$s%2$s" "%1$s ichida toʻladi" "%1$s%2$s ichida toʻladi" - "%1$s – Batareya quvvati muvozanatlanmoqda" + "%1$s – Batareya uchun optimizatsiya" "Noma’lum" "Quvvat olmoqda" "Tezkor quvvat olmoqda" @@ -547,7 +547,7 @@ "Qulf o‘rnatish" "Bunga almashish: %s" "Mehmon kiritish" - "Mehmon rejimini olib tashlash" + "Mehmonni olib tashlash" "Mehmon" "Qurilma standarti" "Yoqilmagan" diff --git a/packages/SettingsLib/res/values-zh-rCN/strings.xml b/packages/SettingsLib/res/values-zh-rCN/strings.xml index 5db88183c8e..a3e1532ac88 100644 --- a/packages/SettingsLib/res/values-zh-rCN/strings.xml +++ b/packages/SettingsLib/res/values-zh-rCN/strings.xml @@ -214,7 +214,7 @@ "使用二维码配对设备" "使用二维码扫描器配对新设备" "使用配对码配对设备" - "使用六位数验证码配对新设备" + "使用六位数的配对码配对新设备" "已配对的设备" "当前已连接" "设备详细信息" diff --git a/packages/SettingsLib/res/values-zh-rHK/strings.xml b/packages/SettingsLib/res/values-zh-rHK/strings.xml index 556df308c14..937439e2570 100644 --- a/packages/SettingsLib/res/values-zh-rHK/strings.xml +++ b/packages/SettingsLib/res/values-zh-rHK/strings.xml @@ -446,7 +446,7 @@ "%1$s - %2$s" "還需 %1$s才能充滿電" "%1$s - 還需 %2$s才能充滿電" - "%1$s - 正在優化電池狀態" + "%1$s - 優化電池效能" "未知" "充電中" "正在快速充電" diff --git a/packages/SettingsLib/res/values-zh-rTW/strings.xml b/packages/SettingsLib/res/values-zh-rTW/strings.xml index efe13bd3489..5f342ec4884 100644 --- a/packages/SettingsLib/res/values-zh-rTW/strings.xml +++ b/packages/SettingsLib/res/values-zh-rTW/strings.xml @@ -429,9 +429,9 @@ "根據你的使用情形,目前電量為 %2$s,預估可持續使用到%1$s" "根據你的使用情形,預估可持續使用到%1$s" - "目前電量 %2$s,預估還能持續使用到%1$s" + "目前電量 %2$s,預估可用到%1$s" "預估電力大約可使用到%1$s" - "還能持續使用到%1$s" + "可用到%1$s" "電池電力可能於%1$s 前耗盡" "電池可用時間不到 %1$s" "電池可用時間不到 %1$s (%2$s)" @@ -446,7 +446,7 @@ "%1$s - %2$s" "%1$s後充飽電" "%1$s - %2$s後充飽電" - "%1$s - 針對電池狀態進行最佳化調整" + "%1$s - 最佳化調整電池狀態" "不明" "充電中" "快速充電中" diff --git a/packages/SettingsLib/src/com/android/settingslib/bluetooth/LocalBluetoothProfileManager.java b/packages/SettingsLib/src/com/android/settingslib/bluetooth/LocalBluetoothProfileManager.java index 6fb66a754f7..7d8d883dc77 100644 --- a/packages/SettingsLib/src/com/android/settingslib/bluetooth/LocalBluetoothProfileManager.java +++ b/packages/SettingsLib/src/com/android/settingslib/bluetooth/LocalBluetoothProfileManager.java @@ -548,12 +548,13 @@ synchronized void updateProfiles(ParcelUuid[] uuids, ParcelUuid[] localUuids, mPbapProfile.setEnabled(device, true); } - if (mMapClientProfile != null) { + if ((mMapClientProfile != null) + && BluetoothUuid.containsAnyUuid(uuids, MapClientProfile.UUIDS)) { profiles.add(mMapClientProfile); removedProfiles.remove(mMapClientProfile); } - if ((mPbapClientProfile != null) && ArrayUtils.contains(localUuids, BluetoothUuid.PBAP_PCE) + if ((mPbapClientProfile != null) && BluetoothUuid.containsAnyUuid(uuids, PbapClientProfile.SRC_UUIDS)) { profiles.add(mPbapClientProfile); removedProfiles.remove(mPbapClientProfile); diff --git a/packages/SettingsLib/src/com/android/settingslib/bluetooth/MapClientProfile.java b/packages/SettingsLib/src/com/android/settingslib/bluetooth/MapClientProfile.java index 19cb2f59f32..4881a86b398 100644 --- a/packages/SettingsLib/src/com/android/settingslib/bluetooth/MapClientProfile.java +++ b/packages/SettingsLib/src/com/android/settingslib/bluetooth/MapClientProfile.java @@ -47,8 +47,6 @@ public final class MapClientProfile implements LocalBluetoothProfile { private final LocalBluetoothProfileManager mProfileManager; static final ParcelUuid[] UUIDS = { - BluetoothUuid.MAP, - BluetoothUuid.MNS, BluetoothUuid.MAS, }; diff --git a/packages/SettingsLib/src/com/android/settingslib/fuelgauge/BatteryStatus.java b/packages/SettingsLib/src/com/android/settingslib/fuelgauge/BatteryStatus.java index 6fabf9cc65d..157a06b8ee0 100644 --- a/packages/SettingsLib/src/com/android/settingslib/fuelgauge/BatteryStatus.java +++ b/packages/SettingsLib/src/com/android/settingslib/fuelgauge/BatteryStatus.java @@ -26,6 +26,7 @@ import static android.os.BatteryManager.EXTRA_MAX_CHARGING_VOLTAGE; import static android.os.BatteryManager.EXTRA_TEMPERATURE; import static android.os.BatteryManager.EXTRA_PLUGGED; +import static android.os.BatteryManager.EXTRA_PRESENT; import static android.os.BatteryManager.EXTRA_STATUS; //dev-harsh1998 Port vooc charging status to Android R @@ -63,10 +64,11 @@ public class BatteryStatus { // dev-harsh1998 port vooc charging to Android R fuel gauge public final boolean voocChargeStatus; + public final boolean present; public BatteryStatus(int status, int level, int plugged, int health, int maxChargingCurrent, int maxChargingVoltage, - int maxChargingWattage, int temperature, boolean voocChargeStatus) { + int maxChargingWattage, int temperature, boolean voocChargeStatus, boolean present) { this.status = status; this.level = level; this.plugged = plugged; @@ -76,6 +78,7 @@ public BatteryStatus(int status, int level, int plugged, int health, this.maxChargingWattage = maxChargingWattage; this.temperature = temperature; this.voocChargeStatus = voocChargeStatus; + this.present = present; } public BatteryStatus(Intent batteryChangedIntent) { @@ -85,6 +88,7 @@ public BatteryStatus(Intent batteryChangedIntent) { health = batteryChangedIntent.getIntExtra(EXTRA_HEALTH, BATTERY_HEALTH_UNKNOWN); temperature = batteryChangedIntent.getIntExtra(EXTRA_TEMPERATURE, -1); voocChargeStatus = batteryChangedIntent.getBooleanExtra(EXTRA_VOOC_CHARGER, false); + present = batteryChangedIntent.getBooleanExtra(EXTRA_PRESENT, true); final int maxChargingMicroAmp = batteryChangedIntent.getIntExtra(EXTRA_MAX_CHARGING_CURRENT, -1); diff --git a/packages/SettingsLib/src/com/android/settingslib/media/LocalMediaManager.java b/packages/SettingsLib/src/com/android/settingslib/media/LocalMediaManager.java index 72a6074ff89..9d477251c2e 100644 --- a/packages/SettingsLib/src/com/android/settingslib/media/LocalMediaManager.java +++ b/packages/SettingsLib/src/com/android/settingslib/media/LocalMediaManager.java @@ -205,7 +205,6 @@ public void startScan() { void dispatchDeviceListUpdate() { final List mediaDevices = new ArrayList<>(mMediaDevices); - Collections.sort(mediaDevices, COMPARATOR); for (DeviceCallback callback : getCallbacks()) { callback.onDeviceListUpdate(mediaDevices); } @@ -465,6 +464,7 @@ public void onDeviceListAdded(List devices) { synchronized (mMediaDevicesLock) { mMediaDevices.clear(); mMediaDevices.addAll(devices); + Collections.sort(devices, COMPARATOR); // Add disconnected bluetooth devices only when phone output device is available. for (MediaDevice device : devices) { final int type = device.getDeviceType(); diff --git a/packages/Shell/Android.bp b/packages/Shell/Android.bp index aaaf0448fc3..c51fb56464b 100644 --- a/packages/Shell/Android.bp +++ b/packages/Shell/Android.bp @@ -1,10 +1,14 @@ +// used both for the android_app and android_library +shell_srcs = ["src/**/*.java",":dumpstate_aidl"] +shell_static_libs = ["androidx.legacy_legacy-support-v4"] + android_app { name: "Shell", - srcs: ["src/**/*.java",":dumpstate_aidl"], + srcs: shell_srcs, aidl: { include_dirs: ["frameworks/native/cmds/dumpstate/binder"], }, - static_libs: ["androidx.legacy_legacy-support-v4"], + static_libs: shell_static_libs, platform_apis: true, certificate: "platform", privileged: true, @@ -12,3 +16,17 @@ android_app { include_filter: ["com.android.shell.*"], }, } + +// A library for product type like auto to create a new shell package +// with product specific permissions. +android_library { + name: "Shell-package-library", + srcs: shell_srcs, + aidl: { + include_dirs: ["frameworks/native/cmds/dumpstate/binder"], + }, + resource_dirs: ["res"], + static_libs: shell_static_libs, + platform_apis: true, + manifest: "AndroidManifest.xml", +} diff --git a/packages/Shell/res/values-iw/strings.xml b/packages/Shell/res/values-iw/strings.xml index c99e69e7f48..ade92dbdd54 100644 --- a/packages/Shell/res/values-iw/strings.xml +++ b/packages/Shell/res/values-iw/strings.xml @@ -18,18 +18,18 @@ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> "מעטפת" "דוחות על באגים" - "יצירת הדוח על הבאג #%d מתבצעת" + "בתהליך יצירה של דוח על באג (#%d)" "הדוח על הבאג #%d צולם" - "מוסיף פרטים לדוח על הבאג" + "בתהליך הוספת פרטים לדוח על הבאג" "המתן…" "הדוח על הבאג יופיע בטלפון בקרוב" - "הקש כדי לשתף את הדוח על הבאג" + "יש להקיש כדי לשתף את הדוח על הבאג" "הקש כדי לשתף את הדוח על הבאג" "החלק ימינה כדי לשתף את הדוח על הבאג ללא צילום מסך או המתן להשלמת צילום המסך" - "הקש כדי לשתף את הדוח על הבאג ללא צילום מסך, או המתן להשלמת צילום המסך" - "הקש כדי לשתף את הדוח על הבאג ללא צילום מסך, או המתן להשלמת צילום המסך" - "דוחות על באגים כוללים נתונים מקובצי היומן השונים במערכת, שעשויים לכלול נתונים הנחשבים רגישים (כגון שימוש באפליקציות ונתוני מיקום). שתף דוחות על באגים רק עם אפליקציות ואנשים שאתה סומך עליהם." - "אל תציג שוב" + "יש להקיש כדי לשתף את הדוח על הבאג ללא צילום מסך, או להמתין להשלמת צילום המסך" + "יש להקיש כדי לשתף את הדוח על הבאג ללא צילום מסך, או להמתין להשלמת צילום המסך" + "דוחות על באגים כוללים נתונים מקובצי היומן השונים במערכת, שעשויים לכלול נתונים הנחשבים רגישים (כגון שימוש באפליקציות ונתוני מיקום). כדאי לשתף דוחות על באגים רק עם אפליקציות ואנשים מהימנים." + "אל תציגו זאת שוב" "דוחות באגים" "לא ניתן היה לקרוא את קובץ הדוח על הבאג" "‏לא ניתן היה להוסיף את פרטי הדוח על הבאג לקובץ ה-zip" @@ -38,7 +38,7 @@ "צילום מסך" "צילום המסך בוצע בהצלחה." "לא ניתן היה לצלם מסך." - "פרטי הדוח על הבאג #%d" + "פרטי הדוח על הבאג (#%d)" "שם קובץ" "כותרת הבאג" "סיכום הבאג" diff --git a/packages/Shell/res/values-ky/strings.xml b/packages/Shell/res/values-ky/strings.xml index 3567ac276e6..d73ee2fdb4e 100644 --- a/packages/Shell/res/values-ky/strings.xml +++ b/packages/Shell/res/values-ky/strings.xml @@ -25,7 +25,7 @@ "Мүчүлүштүктөр жөнүндө кабар жакында телефонго чыгат" "Мүчүлүштүк тууралуу кабарды жөнөтүү үчүн таптап коюңуз" "Мүчүлүштүк тууралуу билдирүүңүздү бөлүшүү үчүн таптап коюңуз" - "Мүчүлүштүк тууралуу кабарды скриншотсуз жөнөтүү үчүн солго серпиңиз же скриншот даяр болгуча күтүңүз" + "Мүчүлүштүк тууралуу кабарды скриншотсуз жөнөтүү үчүн солго сүрүңүз же скриншот даяр болгуча күтүңүз" "Мүчүлүштүк тууралуу билдирүүңүздү скриншотсуз бөлүшүү үчүн таптап коюңуз же скриншот даяр болгуча күтө туруңуз" "Мүчүлүштүк тууралуу билдирүүңүздү скриншотсуз бөлүшүү үчүн таптап коюңуз же скриншот даяр болгуча күтө туруңуз" "Мүчүлүштүктөр тууралуу билдирүүлөрдө тутумдун ар кандай таржымалдарынан алынган дайындар, ошондой эле купуя маалымат камтылышы мүмкүн (мисалы, жайгашкан жер сыяктуу). Мындай билдирүүлөрдү бир гана ишеничтүү адамдар жана колдонмолор менен бөлүшүңүз." diff --git a/packages/Shell/res/values-nl/strings.xml b/packages/Shell/res/values-nl/strings.xml index 3868f4a2702..dadf9fa4b32 100644 --- a/packages/Shell/res/values-nl/strings.xml +++ b/packages/Shell/res/values-nl/strings.xml @@ -22,14 +22,14 @@ "Bugrapport #%d is vastgelegd" "Details toevoegen aan het bugrapport" "Even geduld…" - "Het bugrapport wordt over enkele ogenblikken op de telefoon weergegeven" + "Het bugrapport zie je over enkele ogenblikken op de telefoon" "Selecteer dit om je bugrapport te delen" "Tik om je bugrapport te delen" "Selecteer dit om je bugrapport te delen zonder screenshot of wacht tot het screenshot is voltooid" "Tik om je bugrapport te delen zonder screenshot of wacht tot het screenshot is voltooid" "Tik om je bugrapport te delen zonder screenshot of wacht tot het screenshot is voltooid" "Bugrapporten bevatten gegevens uit de verschillende logbestanden van het systeem, die gegevens kunnen bevatten die je als gevoelig beschouwt (zoals gegevens met betrekking tot app-gebruik en locatie). Deel bugrapporten alleen met mensen en apps die je vertrouwt." - "Niet opnieuw weergeven" + "Niet opnieuw tonen" "Bugrapporten" "Bestand met bugrapport kan niet worden gelezen" "Kan details van bugrapport niet toevoegen aan zip-bestand" diff --git a/packages/Shell/res/values-sv/strings.xml b/packages/Shell/res/values-sv/strings.xml index d9080a82a2f..d8877771fa7 100644 --- a/packages/Shell/res/values-sv/strings.xml +++ b/packages/Shell/res/values-sv/strings.xml @@ -25,9 +25,9 @@ "Felrapporten visas på mobilen inom kort" "Tryck för att dela felrapporten" "Tryck om du vill dela felrapporten" - "Svep för att dela felrapporten utan en skärmdump eller vänta tills skärmdumpen är klar" - "Tryck om du vill dela felrapporten utan en skärmdump eller vänta tills skärmdumpen är klar" - "Tryck om du vill dela felrapporten utan en skärmdump eller vänta tills skärmdumpen är klar" + "Svep för att dela felrapporten utan en skärmbild eller vänta tills skärmbilden är klar" + "Tryck om du vill dela felrapporten utan en skärmbild eller vänta tills skärmbilden är klar" + "Tryck om du vill dela felrapporten utan en skärmbild eller vänta tills skärmbilden är klar" "Felrapporter innehåller data från systemets olika loggfiler, vilka kan innehålla data som är känslig för dig (som appanvändning och platsdata). Dela bara felrapporter med personer du litar på." "Visa inte igen" "Felrapporter" @@ -35,8 +35,8 @@ "Det gick inte att lägga till information om felrapporten i ZIP-filen" "namnlös" "Information" - "Skärmdump" - "Skärmdump har tagits." + "Skärmbild" + "Skärmbild har tagits." "Det gick inte att ta skrämdump." "Information för felrapporten #%d" "Filnamn" diff --git a/packages/Shell/src/com/android/shell/BugreportProgressService.java b/packages/Shell/src/com/android/shell/BugreportProgressService.java index f6c2ee264cb..6b4c239f2b5 100644 --- a/packages/Shell/src/com/android/shell/BugreportProgressService.java +++ b/packages/Shell/src/com/android/shell/BugreportProgressService.java @@ -784,7 +784,7 @@ private static PendingIntent newCancelIntent(Context context, BugreportInfo info intent.setClass(context, BugreportProgressService.class); intent.putExtra(EXTRA_ID, info.id); return PendingIntent.getService(context, info.id, intent, - PendingIntent.FLAG_UPDATE_CURRENT); + PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE); } /** @@ -1244,7 +1244,7 @@ private void sendBugreportNotification(BugreportInfo info, boolean takingScreens .setTicker(title) .setContentText(content) .setContentIntent(PendingIntent.getService(mContext, info.id, shareIntent, - PendingIntent.FLAG_UPDATE_CURRENT)) + PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE)) .setDeleteIntent(newCancelIntent(mContext, info)); if (!TextUtils.isEmpty(info.getName())) { diff --git a/packages/SimAppDialog/res/values-mn/strings.xml b/packages/SimAppDialog/res/values-mn/strings.xml index f21b80bc759..51298bbda34 100644 --- a/packages/SimAppDialog/res/values-mn/strings.xml +++ b/packages/SimAppDialog/res/values-mn/strings.xml @@ -19,8 +19,8 @@ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> "Sim аппын харилцах цонх" "Мобайл үйлчилгээг идэвхжүүлэх" - "Та шинэ СИМ-ээ зөв ажиллуулахын тулд %1$s аппыг суулгах хэрэгтэй болно" - "Та шинэ СИМ-ээ зөв ажиллуулахын тулд оператор компанийхаа аппыг суулгах хэрэгтэй болно" + "Та шинэ SIM-ээ зөв ажиллуулахын тулд %1$s аппыг суулгах хэрэгтэй болно" + "Та шинэ SIM-ээ зөв ажиллуулахын тулд оператор компанийхаа аппыг суулгах хэрэгтэй болно" "Одоо биш" "Апп татах" diff --git a/packages/SoundPicker/res/values-pa/strings.xml b/packages/SoundPicker/res/values-pa/strings.xml index 2653c6442ae..eb630c90024 100644 --- a/packages/SoundPicker/res/values-pa/strings.xml +++ b/packages/SoundPicker/res/values-pa/strings.xml @@ -17,7 +17,7 @@ "ਪੂਰਵ-ਨਿਰਧਾਰਤ ਰਿੰਗਟੋਨ" - "ਪੂਰਵ-ਨਿਰਧਾਰਤ ਸੂਚਨਾ ਧੁਨੀ" + "ਪੂਰਵ-ਨਿਰਧਾਰਿਤ ਸੂਚਨਾ ਧੁਨੀ" "ਪੂਰਵ-ਨਿਰਧਾਰਤ ਅਲਾਰਮ ਧੁਨੀ" "ਰਿੰਗਟੋਨ ਸ਼ਾਮਲ ਕਰੋ" "ਅਲਾਰਮ ਸ਼ਾਮਲ ਕਰੋ" diff --git a/packages/SystemUI/plugin/src/com/android/systemui/plugins/FalsingManager.java b/packages/SystemUI/plugin/src/com/android/systemui/plugins/FalsingManager.java index 9d52098f37d..63f8b1f5dbb 100644 --- a/packages/SystemUI/plugin/src/com/android/systemui/plugins/FalsingManager.java +++ b/packages/SystemUI/plugin/src/com/android/systemui/plugins/FalsingManager.java @@ -30,7 +30,7 @@ */ @ProvidesInterface(version = FalsingManager.VERSION) public interface FalsingManager { - int VERSION = 4; + int VERSION = 5; void onSuccessfulUnlock(); @@ -42,7 +42,8 @@ public interface FalsingManager { boolean isUnlockingDisabled(); - boolean isFalseTouch(); + /** Returns true if the gesture should be rejected. */ + boolean isFalseTouch(int interactionType); void onNotificatonStopDraggingDown(); diff --git a/packages/SystemUI/plugin/src/com/android/systemui/plugins/statusbar/NotificationSwipeActionHelper.java b/packages/SystemUI/plugin/src/com/android/systemui/plugins/statusbar/NotificationSwipeActionHelper.java index 02c4c5eff26..4b6efa91a7c 100644 --- a/packages/SystemUI/plugin/src/com/android/systemui/plugins/statusbar/NotificationSwipeActionHelper.java +++ b/packages/SystemUI/plugin/src/com/android/systemui/plugins/statusbar/NotificationSwipeActionHelper.java @@ -14,16 +14,16 @@ package com.android.systemui.plugins.statusbar; -import com.android.systemui.plugins.annotations.DependsOn; -import com.android.systemui.plugins.annotations.ProvidesInterface; -import com.android.systemui.plugins.statusbar.NotificationSwipeActionHelper.SnoozeOption; - import android.service.notification.SnoozeCriterion; import android.service.notification.StatusBarNotification; import android.view.MotionEvent; import android.view.View; import android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction; +import com.android.systemui.plugins.annotations.DependsOn; +import com.android.systemui.plugins.annotations.ProvidesInterface; +import com.android.systemui.plugins.statusbar.NotificationSwipeActionHelper.SnoozeOption; + @ProvidesInterface(version = NotificationSwipeActionHelper.VERSION) @DependsOn(target = SnoozeOption.class) public interface NotificationSwipeActionHelper { @@ -52,7 +52,8 @@ public interface NotificationSwipeActionHelper { public boolean isDismissGesture(MotionEvent ev); - public boolean isFalseGesture(MotionEvent ev); + /** Returns true if the gesture should be rejected. */ + boolean isFalseGesture(); public boolean swipedFarEnough(float translation, float viewSize); diff --git a/packages/SystemUI/res-keyguard/values-ar/strings.xml b/packages/SystemUI/res-keyguard/values-ar/strings.xml index 459d162c65d..c027f8df1f6 100644 --- a/packages/SystemUI/res-keyguard/values-ar/strings.xml +++ b/packages/SystemUI/res-keyguard/values-ar/strings.xml @@ -38,7 +38,7 @@ "%s • جارٍ الشحن" "%s • جارٍ الشحن سريعًا" "%s • جارٍ الشحن ببطء" - "%s • التحسين لسلامة البطارية" + "%s • التحسين للحفاظ على سلامة البطارية" "توصيل جهاز الشحن." "اضغط على \"القائمة\" لإلغاء التأمين." "الشبكة مؤمّنة" diff --git a/packages/SystemUI/res-keyguard/values-b+sr+Latn/strings.xml b/packages/SystemUI/res-keyguard/values-b+sr+Latn/strings.xml index 34687406075..4220526635f 100644 --- a/packages/SystemUI/res-keyguard/values-b+sr+Latn/strings.xml +++ b/packages/SystemUI/res-keyguard/values-b+sr+Latn/strings.xml @@ -38,7 +38,7 @@ "%s • Puni se" "%s • Brzo se puni" "%s • Sporo se puni" - "%s • Optimizuje se radi dobrog stanja baterije" + "%s • Optimizuje se radi boljeg stanja baterije" "Priključite punjač." "Pritisnite Meni da biste otključali." "Mreža je zaključana" diff --git a/packages/SystemUI/res-keyguard/values-bg/strings.xml b/packages/SystemUI/res-keyguard/values-bg/strings.xml index 0911efade70..dc4ee693d89 100644 --- a/packages/SystemUI/res-keyguard/values-bg/strings.xml +++ b/packages/SystemUI/res-keyguard/values-bg/strings.xml @@ -38,7 +38,7 @@ "%s • Зарежда се" "%s • Зарежда се бързо" "%s • Зарежда се бавно" - "%s • Оптимизиране за състоянието на батерията" + "%s • Оптимизиране с цел състоянието на батерията" "Свържете зарядното си устройство." "Натиснете „Меню“, за да отключите." "Мрежата е заключена" diff --git a/packages/SystemUI/res-keyguard/values-ca/strings.xml b/packages/SystemUI/res-keyguard/values-ca/strings.xml index 421ddb6d31e..2e3b4af4a68 100644 --- a/packages/SystemUI/res-keyguard/values-ca/strings.xml +++ b/packages/SystemUI/res-keyguard/values-ca/strings.xml @@ -38,7 +38,7 @@ "%s • S\'està carregant" "%s • S\'està carregant ràpidament" "%s • S\'està carregant lentament" - "%s • S\'està optimitzant per mantenir el bon estat de la bateria" + "%s • S\'està optimitzant per preservar l\'estat de la bateria" "Connecta el carregador." "Prem Menú per desbloquejar." "La xarxa està bloquejada" diff --git a/packages/SystemUI/res-keyguard/values-eu/strings.xml b/packages/SystemUI/res-keyguard/values-eu/strings.xml index ce8ef202a03..93fe516a8aa 100644 --- a/packages/SystemUI/res-keyguard/values-eu/strings.xml +++ b/packages/SystemUI/res-keyguard/values-eu/strings.xml @@ -38,7 +38,7 @@ "%s • Kargatzen" "%s • Bizkor kargatzen" "%s • Mantso kargatzen" - "%s • Optimizatzen bateria egoera onean mantentzeko" + "%s • Optimizatzen, bateria egoera onean mantentzeko" "Konektatu kargagailua." "Desblokeatzeko, sakatu Menua." "Sarea blokeatuta dago" diff --git a/packages/SystemUI/res-keyguard/values-gl/strings.xml b/packages/SystemUI/res-keyguard/values-gl/strings.xml index 01a0fac5801..f8c5ebac951 100644 --- a/packages/SystemUI/res-keyguard/values-gl/strings.xml +++ b/packages/SystemUI/res-keyguard/values-gl/strings.xml @@ -38,7 +38,7 @@ "%s • Cargando" "%s • Cargando rapidamente" "%s • Cargando lentamente" - "%s • Optimizando para manter a batería en bo estado" + "%s • Optimizando a preservación da batería" "Conecta o cargador." "Preme Menú para desbloquear." "Bloqueada pola rede" diff --git a/packages/SystemUI/res-keyguard/values-hy/strings.xml b/packages/SystemUI/res-keyguard/values-hy/strings.xml index c8ed16d1032..43c6f2e88d0 100644 --- a/packages/SystemUI/res-keyguard/values-hy/strings.xml +++ b/packages/SystemUI/res-keyguard/values-hy/strings.xml @@ -38,7 +38,7 @@ "%s • Լիցքավորում" "%s • Արագ լիցքավորում" "%s • Դանդաղ լիցքավորում" - "%s • Օպտիմալացվում է մարտկոցի աշխատանքային հզորության համար" + "%s • Օպտիմալացվում է մարտկոցի պահպանման համար" "Միացրեք լիցքավորիչը:" "Ապակողպելու համար սեղմեք Ընտրացանկը:" "Ցանցը կողպված է" @@ -88,12 +88,12 @@ "Դուք սխալ եք մուտքագրել ձեր ապակողպման նախշը %1$d անգամ: \n\nՓորձեք կրկին %2$d վայրկյանից։" "SIM PIN կոդը սխալ է։ Այժմ պետք է դիմեք ձեր օպերատորին՝ սարքն արգելահանելու համար:" - Incorrect SIM PIN code, you have %d remaining attempts. + SIM PIN կոդը սխալ է: Մնաց %d փորձ, որից հետո պետք է դիմեք ձեր օպերատորին՝ սարքն արգելահանելու համար: SIM PIN կոդը սխալ է: Մնաց %d փորձ: "SIM-ը հնարավոր չէ օգտագործել: Դիմեք ձեր օպերատորին:" - Incorrect SIM PUK code, you have %d remaining attempts before SIM becomes permanently unusable. + SIM PUK կոդը սխալ է: Մնաց %d փորձ, որից հետո SIM քարտն այլևս հնարավոր չի լինի օգտագործել: SIM PUK կոդը սխալ է: Մնաց %d փորձ, որից հետո SIM քարտն այլևս հնարավոր չի լինի օգտագործել: "SIM PIN կոդի գործողությունը ձախողվեց:" @@ -114,15 +114,15 @@ "Սարքը կողպված է ադմինիստրատորի կողմից" "Սարքը կողպվել է ձեռքով" - Device hasn\'t been unlocked for %d hours. Confirm pattern. + Սարքը չի ապակողպվել %d ժամվա ընթացքում: Հաստատեք նախշը: Սարքը չի ապակողպվել %d ժամվա ընթացքում: Հաստատեք նախշը: - Device hasn\'t been unlocked for %d hours. Confirm PIN. + Սարքը չի ապակողպվել %d ժամվա ընթացքում: Հաստատեք PIN կոդը: Սարքը չի ապակողպվել %d ժամվա ընթացքում: Հաստատեք PIN կոդը: - Device hasn\'t been unlocked for %d hours. Confirm password. + Սարքը չի ապակողպվել %d ժամվա ընթացքում: Հաստատեք գաղտնաբառը: Սարքը չի ապակողպվել %d ժամվա ընթացքում: Հաստատեք գաղտնաբառը: "Չհաջողվեց ճանաչել" diff --git a/packages/SystemUI/res-keyguard/values-is/strings.xml b/packages/SystemUI/res-keyguard/values-is/strings.xml index 3f3bec9b8c8..bb8a908d20f 100644 --- a/packages/SystemUI/res-keyguard/values-is/strings.xml +++ b/packages/SystemUI/res-keyguard/values-is/strings.xml @@ -38,7 +38,7 @@ "%s • Í hleðslu" "%s • Hröð hleðsla" "%s • Hæg hleðsla" - "%s • Fínstillir til að bæta rafhlöðuendingu" + "%s • Fínstillir fyrir rafhlöðuendingu" "Tengdu hleðslutækið." "Ýttu á valmyndarhnappinn til að taka úr lás." "Net læst" diff --git a/packages/SystemUI/res-keyguard/values-it/strings.xml b/packages/SystemUI/res-keyguard/values-it/strings.xml index 47d17ce5789..c1baadf47de 100644 --- a/packages/SystemUI/res-keyguard/values-it/strings.xml +++ b/packages/SystemUI/res-keyguard/values-it/strings.xml @@ -38,7 +38,7 @@ "%s • In carica" "%s • Ricarica veloce" "%s • Ricarica lenta" - "%s • È in corso l\'ottimizzazione per l\'integrità della batteria" + "%s • Ottimizzazione per integrità batteria" "Collega il caricabatterie." "Premi Menu per sbloccare." "Rete bloccata" diff --git a/packages/SystemUI/res-keyguard/values-iw/strings.xml b/packages/SystemUI/res-keyguard/values-iw/strings.xml index 8780dc5e3c0..773e4efae2e 100644 --- a/packages/SystemUI/res-keyguard/values-iw/strings.xml +++ b/packages/SystemUI/res-keyguard/values-iw/strings.xml @@ -21,17 +21,17 @@ "מגן מקלדת" - "הזן את קוד הגישה" + "יש להזין את קוד האימות" "‏הזן את קוד ה-PUK של כרטיס ה-SIM ולאחר מכן הזן קוד גישה חדש" "‏קוד PUK של כרטיס SIM" - "‏קוד גישה חדש לכרטיס ה-SIM" + "‏קוד אימות חדש לכרטיס ה-SIM" "גע כדי להזין את הסיסמה" "הזן סיסמה לביטול הנעילה" "הזן את קוד הגישה לביטול הנעילה" - "הזנת קוד גישה" + "צריך להזין קוד אימות" "יש להזין קו ביטול נעילה" "יש להזין סיסמה" - "קוד הגישה שגוי" + "קוד האימות שגוי" "כרטיס לא חוקי." "הסוללה טעונה" "%s • בטעינה אלחוטית" @@ -43,14 +43,14 @@ "לחץ על \'תפריט\' כדי לבטל את הנעילה." "הרשת נעולה" "‏אין כרטיס SIM" - "‏הכנס כרטיס SIM." + "‏יש להכניס כרטיס SIM." "‏כרטיס ה-SIM חסר או שלא ניתן לקרוא אותו. הכנס כרטיס SIM." "‏לא ניתן להשתמש בכרטיס SIM זה." "‏כרטיס ה-SIM שלך הושבת לצמיתות.\nפנה לספק השירות האלחוטי שלך לקבלת כרטיס SIM אחר." "‏כרטיס ה-SIM נעול." "‏כרטיס ה-SIM נעול באמצעות PUK." "‏מבטל את הנעילה של כרטיס ה-SIM…" - "אזור לקוד הגישה" + "אזור של קוד האימות" "סיסמת מכשיר" "‏אזור לקוד הגישה של כרטיס ה-SIM" "‏אזור לקוד הגישה של כרטיס ה-SIM" @@ -63,7 +63,7 @@ "שכחתי את קו ביטול הנעילה" "קו ביטול נעילה שגוי" "סיסמה שגויה" - "קוד הגישה שגוי" + "קוד האימות שגוי" אפשר יהיה לנסות שוב בעוד %d שניות. אפשר יהיה לנסות שוב בעוד %d שניות. @@ -72,30 +72,30 @@ "שרטט את קו ביטול הנעילה" "‏הזן את קוד הגישה של כרטיס ה-SIM." - "‏הזן את קוד הגישה של כרטיס ה-SIM של %1$s." + "‏יש להזין את קוד האימות של כרטיס ה-SIM של %1$s." "‏%1$s יש להשבית את כרטיס ה-eSIM כדי להשתמש במכשיר ללא שירות סלולרי." - "הזן קוד גישה" - "הזן את הסיסמה" - "‏כרטיס ה-SIM מושבת כעת. הזן קוד PUK כדי להמשיך. פנה אל הספק לפרטים." - "‏ה-SIM של \"%1$s\" מושבת כעת. הזן קוד PUK כדי להמשיך. לפרטים, פנה אל הספק." + "יש להזין קוד אימות" + "צריך להזין את הסיסמה" + "‏כרטיס ה-SIM מושבת עכשיו. צריך להזין קוד PUK כדי להמשיך. יש לפנות אל הספק לקבלת פרטים." + "‏ה-SIM של \"%1$s\" מושבת עכשיו. צריך להזין קוד PUK כדי להמשיך. לפרטים, יש לפנות אל הספק." "הזן את קוד הגישה הרצוי" - "אשר את קוד הגישה הרצוי" - "‏מבטל את הנעילה של כרטיס ה-SIM…" + "צריך לאשר את קוד האימות הרצוי" + "‏מתבצע ביטול נעילה של כרטיס ה-SIM…" "הקלד קוד גישה שאורכו 4 עד 8 ספרות." "‏קוד PUK צריך להיות בן 8 ספרות או יותר." - "‏הזן את קוד ה-PUK הנכון. ניסיונות חוזרים ישביתו את כרטיס ה-SIM לצמיתות." + "‏יש להזין את קוד ה-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 שניות." "‏קוד הגישה של כרטיס ה-SIM שגוי. צור קשר עם הספק כדי לבטל את נעילת המכשיר." - ‏קוד הגישה של כרטיס ה-SIM שגוי. נותרו לך עוד %d ניסיונות. - ‏קוד הגישה של כרטיס ה-SIM שגוי. נותרו לך עוד %d ניסיונות. - ‏קוד הגישה של כרטיס ה-SIM שגוי. נותרו לך עוד %d ניסיונות. - ‏קוד הגישה של כרטיס ה-SIM שגוי. נותר לך עוד ניסיון %d לפני שיהיה עליך ליצור קשר עם הספק כדי לבטל את נעילת המכשיר. + ‏קוד האימות של כרטיס ה-SIM שגוי. נותרו לך עוד %d ניסיונות. + ‏קוד האימות של כרטיס ה-SIM שגוי. נותרו לך עוד %d ניסיונות. + ‏קוד האימות של כרטיס ה-SIM שגוי. נותרו לך עוד %d ניסיונות. + ‏קוד האימות של כרטיס ה-SIM שגוי. נותר לך עוד ניסיון %d לפני שיהיה עליך ליצור קשר עם הספק כדי לבטל את נעילת המכשיר. - "‏לא ניתן להשתמש בכרטיס ה-SIM. צור קשר עם הספק." + "‏לא ניתן להשתמש בכרטיס ה-SIM. יש ליצור קשר עם הספק." ‏קוד ה-PUK של כרטיס ה-SIM שגוי. נותרו לך עוד %d ניסיונות לפני שכרטיס ה-SIM יינעל לצמיתות. ‏קוד ה-PUK של כרטיס ה-SIM שגוי. נותרו לך עוד %d ניסיונות לפני שכרטיס ה-SIM יינעל לצמיתות. @@ -103,27 +103,27 @@ ‏קוד ה-PUK של כרטיס ה-SIM שגוי. נותר לך ניסיון %d נוסף לפני שכרטיס ה-SIM יינעל לצמיתות. "‏פעולת קוד הגישה של כרטיס ה-SIM נכשלה!" - "‏פעולת קוד ה-PUK של כרטיס ה-SIM נכשלה!" + "‏הניסיון לביטול הנעילה של כרטיס ה-SIM באמצעות קוד PUK נכשל!" "הקוד התקבל!" "אין שירות." "החלפת שיטת קלט" "מצב טיסה" "יש להזין את קו ביטול הנעילה לאחר הפעלה מחדש של המכשיר" - "יש להזין קוד גישה לאחר הפעלה מחדש של המכשיר" + "צריך להזין קוד אימות לאחר הפעלה מחדש של המכשיר" "יש להזין סיסמה לאחר הפעלה מחדש של המכשיר" "יש להזין את קו ביטול הנעילה כדי להגביר את רמת האבטחה" "יש להזין קוד גישה כדי להגביר את רמת האבטחה" "יש להזין סיסמה כדי להגביר את רמת האבטחה" - "יש להזין את קו ביטול הנעילה בזמן מעבר בין פרופילים" - "יש להזין את קוד הגישה בזמן מעבר בין פרופילים" + "יש להזין את קו ביטול הנעילה כשמחליפים בין פרופילים" + "צריך להזין את קוד האימות כשמחליפים פרופיל" "יש להזין את הסיסמה בזמן מעבר בין פרופילים" "מנהל המכשיר נעל את המכשיר" "המכשיר ננעל באופן ידני" - נעילת המכשיר לא בוטלה במשך %d שעות. הזן את קו ביטול הנעילה. - נעילת המכשיר לא בוטלה במשך %d שעות. הזן את קו ביטול הנעילה. - נעילת המכשיר לא בוטלה במשך %d שעות. הזן את קו ביטול הנעילה. - נעילת המכשיר לא בוטלה במשך %d שעה. הזן את קו ביטול הנעילה. + נעילת המכשיר לא בוטלה במשך %d שעות. יש להזין את קו ביטול הנעילה. + נעילת המכשיר לא בוטלה במשך %d שעות. יש להזין את קו ביטול הנעילה. + נעילת המכשיר לא בוטלה במשך %d שעות. יש להזין את קו ביטול הנעילה. + נעילת המכשיר לא בוטלה במשך שעה אחת (%d). יש להזין את קו ביטול הנעילה. נעילת המכשיר לא בוטלה במשך %d שעות. הזן את קוד הגישה. @@ -132,24 +132,24 @@ נעילת המכשיר לא בוטלה במשך %d שעה. הזן את קוד הגישה. - נעילת המכשיר לא בוטלה במשך %d שעות. הזן את הסיסמה. - נעילת המכשיר לא בוטלה במשך %d שעות. הזן את הסיסמה. - נעילת המכשיר לא בוטלה במשך %d שעות. הזן את הסיסמה. - נעילת המכשיר לא בוטלה במשך %d שעה. הזן את הסיסמה. + נעילת המכשיר לא בוטלה במשך %d שעות. יש להזין את הסיסמה. + נעילת המכשיר לא בוטלה במשך %d שעות. יש להזין את הסיסמה. + נעילת המכשיר לא בוטלה במשך %d שעות. יש להזין את הסיסמה. + נעילת המכשיר לא בוטלה במשך %d שעה. יש להזין את הסיסמה. "לא זוהתה" "לא זוהתה" - ‏יש להזין קוד גישה לכרטיס SIM. נותרו לך %d ניסונות נוספים. - ‏יש להזין קוד גישה לכרטיס SIM. נותרו לך %d ניסונות נוספים. - ‏יש להזין קוד גישה לכרטיס SIM. נותרו לך %d ניסונות נוספים. - ‏יש להזין קוד גישה לכרטיס SIM. נותר לך %d ניסיון נוסף לפני שיהיה צורך ליצור קשר עם הספק כדי לבטל את נעילת המכשיר. + ‏יש להזין קוד אימות של כרטיס SIM. נותרו לך %d ניסיונות נוספים. + ‏יש להזין קוד אימות של כרטיס SIM. נותרו לך %d ניסיונות נוספים. + ‏יש להזין קוד אימות של כרטיס SIM. נותרו לך %d ניסיונות נוספים. + ‏יש להזין קוד אימות של כרטיס SIM. נותר לך ניסיון נוסף (%d) לפני שיהיה צורך ליצור קשר עם הספק כדי לבטל את נעילת המכשיר. - ‏כרטיס ה-SIM מושבת כעת. יש להזין קוד PUK כדי להמשיך. נותרו לך %d ניסיונות נוספים לפני שכרטיס ה-SIM ינעל לצמיתות. למידע נוסף, ניתן לפנות לספק שלך. - ‏כרטיס ה-SIM מושבת כעת. יש להזין קוד PUK כדי להמשיך. נותרו לך %d ניסיונות נוספים לפני שכרטיס ה-SIM ינעל לצמיתות. למידע נוסף, ניתן לפנות לספק שלך. - ‏כרטיס ה-SIM מושבת כעת. יש להזין קוד PUK כדי להמשיך. נותרו לך %d ניסיונות נוספים לפני שכרטיס ה-SIM ינעל לצמיתות. למידע נוסף, ניתן לפנות לספק שלך. - ‏כרטיס ה-SIM מושבת כעת. יש להזין קוד PUK כדי להמשיך. נותר לך %d ניסיון נוסף לפני שכרטיס ה-SIM ינעל לצמיתות. למידע נוסף, ניתן לפנות לספק שלך. + ‏כרטיס ה-SIM מושבת כעת. יש להזין קוד PUK כדי להמשיך. נותרו לך %d ניסיונות נוספים לפני שכרטיס ה-SIM יינעל באופן סופי. למידע נוסף, ניתן לפנות לספק שלך. + ‏כרטיס ה-SIM מושבת כעת. יש להזין קוד PUK כדי להמשיך. נותרו לך %d ניסיונות נוספים לפני שכרטיס ה-SIM יינעל באופן סופי. למידע נוסף, ניתן לפנות לספק שלך. + ‏כרטיס ה-SIM מושבת כעת. יש להזין קוד PUK כדי להמשיך. נותרו לך %d ניסיונות נוספים לפני שכרטיס ה-SIM יינעל באופן סופי. למידע נוסף, ניתן לפנות לספק שלך. + ‏כרטיס ה-SIM מושבת כעת. יש להזין קוד PUK כדי להמשיך. נותר לך ניסיון אחד (%d) נוסף לפני שכרטיס ה-SIM יינעל באופן סופי. למידע נוסף, ניתן לפנות לספק שלך. "ברירת מחדל" "בועה" diff --git a/packages/SystemUI/res-keyguard/values-kk/strings.xml b/packages/SystemUI/res-keyguard/values-kk/strings.xml index b20cb05ea86..8e701fe8643 100644 --- a/packages/SystemUI/res-keyguard/values-kk/strings.xml +++ b/packages/SystemUI/res-keyguard/values-kk/strings.xml @@ -38,7 +38,7 @@ "%s • Зарядталуда" "%s • Жылдам зарядталуда" "%s • Баяу зарядталуда" - "%s • Батареяның жұмыс істеу қабілеті оңтайландырылуда" + "%s • Батарея жұмысын оңтайландыру" "Зарядтағышты қосыңыз." "Ашу үшін \"Мәзір\" пернесін басыңыз." "Желі құлыптаулы" diff --git a/packages/SystemUI/res-keyguard/values-kn/strings.xml b/packages/SystemUI/res-keyguard/values-kn/strings.xml index a5271237977..96865419cbf 100644 --- a/packages/SystemUI/res-keyguard/values-kn/strings.xml +++ b/packages/SystemUI/res-keyguard/values-kn/strings.xml @@ -38,7 +38,7 @@ "%s • ಚಾರ್ಜ್‌ ಮಾಡಲಾಗುತ್ತಿದೆ" "%s • ವೇಗವಾಗಿ ಚಾರ್ಜ್‌ಮಾಡಲಾಗುತ್ತಿದೆ" "%s • ನಿಧಾನವಾಗಿ ಚಾರ್ಜ್ ಮಾಡಲಾಗುತ್ತಿದೆ" - "%s • ಬ್ಯಾಟರಿಯ ಆರೋಗ್ಯಕ್ಕಾಗಿ ಆಪ್ಟಿಮೈಸ್ ಮಾಡಲಾಗುತ್ತಿದೆ" + "%s • ಬ್ಯಾಟರಿಯ ಸುಸ್ಥಿತಿಗಾಗಿ ಆಪ್ಟಿಮೈಸ್ ಮಾಡಲಾಗುತ್ತಿದೆ" "ನಿಮ್ಮ ಚಾರ್ಜರ್ ಸಂಪರ್ಕಗೊಳಿಸಿ." "ಅನ್‌ಲಾಕ್ ಮಾಡಲು ಮೆನು ಒತ್ತಿರಿ." "ನೆಟ್‌ವರ್ಕ್ ಲಾಕ್ ಆಗಿದೆ" diff --git a/packages/SystemUI/res-keyguard/values-ml/strings.xml b/packages/SystemUI/res-keyguard/values-ml/strings.xml index 66d0ac756bf..80761591e0b 100644 --- a/packages/SystemUI/res-keyguard/values-ml/strings.xml +++ b/packages/SystemUI/res-keyguard/values-ml/strings.xml @@ -38,7 +38,7 @@ "%s • ചാർജ് ചെയ്യുന്നു" "%s • വേഗത്തിൽ ചാർജ് ചെയ്യുന്നു" "%s • പതുക്കെ ചാർജ് ചെയ്യുന്നു" - "%s • ബാറ്ററി നില ഒപ്റ്റിമൈസ് ചെയ്യുന്നു" + "%s • ബാറ്ററിയുടെ ആയുസിനായി ഒപ്റ്റിമൈസ് ചെയ്യുന്നു" "നിങ്ങളുടെ ചാർജർ കണക്റ്റുചെയ്യുക." "അൺലോക്കുചെയ്യാൻ മെനു അമർത്തുക." "നെറ്റ്‌വർക്ക് ലോക്കുചെയ്‌തു" diff --git a/packages/SystemUI/res-keyguard/values-mn/strings.xml b/packages/SystemUI/res-keyguard/values-mn/strings.xml index 2ff4a22d673..13c152f8f38 100644 --- a/packages/SystemUI/res-keyguard/values-mn/strings.xml +++ b/packages/SystemUI/res-keyguard/values-mn/strings.xml @@ -38,7 +38,7 @@ "%s • Цэнэглэж байна" "%s • Хурдан цэнэглэж байна" "%s • Удаан цэнэглэж байна" - "%s • Батарейн чанарыг оновчилж байна" + "%s • Батарейн барилтыг оновчилж байна" "Цэнэглэгчээ холбоно уу." "Түгжээг тайлах бол цэсийг дарна уу." "Сүлжээ түгжигдсэн" diff --git a/packages/SystemUI/res-keyguard/values-nl/strings.xml b/packages/SystemUI/res-keyguard/values-nl/strings.xml index a9fd827442e..32759215483 100644 --- a/packages/SystemUI/res-keyguard/values-nl/strings.xml +++ b/packages/SystemUI/res-keyguard/values-nl/strings.xml @@ -56,9 +56,9 @@ "Gebied voor pukcode van simkaart" "Volgende wekker ingesteld voor %1$s" "Delete" - "Simkaart uitschakelen" - "E-simkaart kan niet worden uitgeschakeld" - "De e-simkaart kan niet worden uitgeschakeld vanwege een fout." + "E-simkaart uitzetten" + "E-simkaart kan niet worden uitgezet" + "De e-simkaart kan niet worden uitgezet vanwege een fout." "Enter" "Patroon vergeten" "Onjuist patroon" @@ -81,7 +81,7 @@ "Simkaart ontgrendelen…" "Geef een pincode van vier tot acht cijfers op." "De pukcode is minimaal acht cijfers lang." - "Geef de juiste pukcode opnieuw op. Bij herhaalde pogingen wordt de simkaart definitief uitgeschakeld." + "Geef de juiste pukcode opnieuw op. Bij herhaalde pogingen wordt de simkaart definitief uitgezet." "Te veel patroonpogingen" "Je hebt je pincode %1$d keer onjuist getypt. \n\nProbeer het over %2$d seconden opnieuw." "Je hebt je wachtwoord %1$d keer onjuist getypt. \n\nProbeer het over %2$d seconden opnieuw." diff --git a/packages/SystemUI/res-keyguard/values-pa/strings.xml b/packages/SystemUI/res-keyguard/values-pa/strings.xml index 43d549c92e6..47b2881e11f 100644 --- a/packages/SystemUI/res-keyguard/values-pa/strings.xml +++ b/packages/SystemUI/res-keyguard/values-pa/strings.xml @@ -38,7 +38,7 @@ "%s • ਚਾਰਜ ਹੋ ਰਿਹਾ ਹੈ" "%s • ਤੇਜ਼ੀ ਨਾਲ ਚਾਰਜ ਹੋ ਰਿਹਾ ਹੈ" "%s • ਹੌਲੀ-ਹੌਲੀ ਚਾਰਜ ਹੋ ਰਿਹਾ ਹੈ" - "%s • ਬੈਟਰੀ ਸਥਿਤੀ ਲਈ ਅਨੁਕੂਲ ਬਣਾਇਆ ਜਾ ਰਿਹਾ" + "%s • ਬੈਟਰੀ ਦੀ ਸਥਿਤੀ ਲਈ ਅਨੁਕੂਲ ਬਣਾਇਆ ਜਾ ਰਿਹਾ ਹੈ" "ਆਪਣਾ ਚਾਰਜਰ ਕਨੈਕਟ ਕਰੋ।" "ਅਣਲਾਕ ਕਰਨ ਲਈ \"ਮੀਨੂ\" ਦਬਾਓ।" "ਨੈੱਟਵਰਕ ਲਾਕ ਕੀਤਾ ਗਿਆ" @@ -135,7 +135,7 @@ ਸਿਮ ਹੁਣ ਬੰਦ ਹੋ ਗਿਆ ਹੈ। ਜਾਰੀ ਰੱਖਣ ਲਈ PUK ਕੋਡ ਦਾਖਲ ਕਰੋ। ਸਿਮ ਦੇ ਪੱਕੇ ਤੌਰ \'ਤੇ ਬੇਕਾਰ ਹੋ ਜਾਣ ਤੋਂ ਪਹਿਲਾਂ ਤੁਹਾਡੇ ਕੋਲ %d ਕੋਸ਼ਿਸ਼ ਬਾਕੀ ਹੈ। ਵੇਰਵਿਆਂ ਲਈ ਕੈਰੀਅਰ ਨੂੰ ਸੰਪਰਕ ਕਰੋ। ਸਿਮ ਹੁਣ ਬੰਦ ਹੋ ਗਿਆ ਹੈ। ਜਾਰੀ ਰੱਖਣ ਲਈ PUK ਕੋਡ ਦਾਖਲ ਕਰੋ। ਸਿਮ ਦੇ ਪੱਕੇ ਤੌਰ \'ਤੇ ਬੇਕਾਰ ਹੋ ਜਾਣ ਤੋਂ ਪਹਿਲਾਂ ਤੁਹਾਡੇ ਕੋਲ %d ਕੋਸ਼ਿਸ਼ਾਂ ਬਾਕੀ ਹਨ। ਵੇਰਵਿਆਂ ਲਈ ਕੈਰੀਅਰ ਨੂੰ ਸੰਪਰਕ ਕਰੋ। - "ਪੂਰਵ-ਨਿਰਧਾਰਤ" + "ਪੂਰਵ-ਨਿਰਧਾਰਿਤ" "ਬੁਲਬੁਲਾ" "ਐਨਾਲੌਗ" diff --git a/packages/SystemUI/res-keyguard/values-pl/strings.xml b/packages/SystemUI/res-keyguard/values-pl/strings.xml index 76f755c2b96..01427be041a 100644 --- a/packages/SystemUI/res-keyguard/values-pl/strings.xml +++ b/packages/SystemUI/res-keyguard/values-pl/strings.xml @@ -38,7 +38,7 @@ "%s • Ładowanie" "%s • Szybkie ładowanie" "%s • Wolne ładowanie" - "%s • Optymalizuję, by utrzymać baterię w dobrym stanie" + "%s • Optymalizuję, aby utrzymać baterię w dobrym stanie" "Podłącz ładowarkę." "Naciśnij Menu, aby odblokować." "Sieć zablokowana" diff --git a/packages/SystemUI/res-keyguard/values-si/strings.xml b/packages/SystemUI/res-keyguard/values-si/strings.xml index 3a6078224be..64609b30206 100644 --- a/packages/SystemUI/res-keyguard/values-si/strings.xml +++ b/packages/SystemUI/res-keyguard/values-si/strings.xml @@ -38,7 +38,7 @@ "%s • ආරෝපණය වෙමින්" "%s • වේගයෙන් ආරෝපණය වෙමින්" "%s • සෙමින් ආරෝපණය වෙමින්" - "%s • බැටරි සෞඛ්‍යය සඳහා ප්‍රශස්ත කරමින්" + "%s • බැටරි ආයු කාලය වැඩි දියුණු කරමින්" "ඔබගේ ආරෝපකයට සම්බන්ධ කරන්න." "අගුලු හැරීමට මෙනුව ඔබන්න." "ජාලය අගුළු දමා ඇත" diff --git a/packages/SystemUI/res-keyguard/values-sr/strings.xml b/packages/SystemUI/res-keyguard/values-sr/strings.xml index 90b8a3e362f..7ca04ce8198 100644 --- a/packages/SystemUI/res-keyguard/values-sr/strings.xml +++ b/packages/SystemUI/res-keyguard/values-sr/strings.xml @@ -38,7 +38,7 @@ "%s • Пуни се" "%s • Брзо се пуни" "%s • Споро се пуни" - "%s • Оптимизује се ради доброг стања батерије" + "%s • Оптимизује се ради бољег стања батерије" "Прикључите пуњач." "Притисните Мени да бисте откључали." "Мрежа је закључана" diff --git a/packages/SystemUI/res-keyguard/values-te/strings.xml b/packages/SystemUI/res-keyguard/values-te/strings.xml index c69a8f56b93..990253a7862 100644 --- a/packages/SystemUI/res-keyguard/values-te/strings.xml +++ b/packages/SystemUI/res-keyguard/values-te/strings.xml @@ -38,7 +38,7 @@ "%s • ఛార్జ్ అవుతోంది" "%s • వేగంగా ఛార్జ్ అవుతోంది" "%s • నెమ్మదిగా ఛార్జ్ అవుతోంది" - "%s • బ్యాటరీ జీవితకాలాన్ని ఆప్టిమైజ్ చేయడం కోసం" + "%s • బ్యాటరీ జీవితకాలాన్ని పెంచడం కోసం ఆప్టిమైజ్ చేస్తోంది" "మీ ఛార్జర్‌ను కనెక్ట్ చేయండి." "అన్‌లాక్ చేయడానికి మెనుని నొక్కండి." "నెట్‌వర్క్ లాక్ చేయబడింది" diff --git a/packages/SystemUI/res-keyguard/values-uk/strings.xml b/packages/SystemUI/res-keyguard/values-uk/strings.xml index a16576d37e9..62950e29c70 100644 --- a/packages/SystemUI/res-keyguard/values-uk/strings.xml +++ b/packages/SystemUI/res-keyguard/values-uk/strings.xml @@ -38,7 +38,7 @@ "%s • Заряджання" "%s • Швидке заряджання" "%s • Повільне заряджання" - "%s • Стан акумулятора оптимізується" + "%s • Оптимізація для збереження заряду акумулятора" "Підключіть зарядний пристрій." "Натисніть меню, щоб розблокувати." "Мережу заблоковано" diff --git a/packages/SystemUI/res-keyguard/values-uz/strings.xml b/packages/SystemUI/res-keyguard/values-uz/strings.xml index 44e419180f6..f2ca159bff0 100644 --- a/packages/SystemUI/res-keyguard/values-uz/strings.xml +++ b/packages/SystemUI/res-keyguard/values-uz/strings.xml @@ -38,7 +38,7 @@ "%s • Quvvat olmoqda" "%s • Tezkor quvvat olmoqda" "%s • Sekin quvvat olmoqda" - "%s • Batareya quvvati muvozanatlanmoqda" + "%s • Batareya uchun optimizatsiya" "Quvvatlash moslamasini ulang." "Qulfdan chiqarish uchun Menyu tugmasini bosing." "Tarmoq qulflangan" diff --git a/packages/SystemUI/res-keyguard/values-zh-rHK/strings.xml b/packages/SystemUI/res-keyguard/values-zh-rHK/strings.xml index 1054e36fc04..b4006e8b734 100644 --- a/packages/SystemUI/res-keyguard/values-zh-rHK/strings.xml +++ b/packages/SystemUI/res-keyguard/values-zh-rHK/strings.xml @@ -38,7 +38,7 @@ "%s • 正在充電" "%s • 正在快速充電" "%s •正在慢速充電" - "%s • 正在優化電池狀態" + "%s • 優化電池效能" "請連接充電器。" "按下 [選單] 即可解鎖。" "網絡已鎖定" diff --git a/packages/SystemUI/res-keyguard/values-zh-rTW/strings.xml b/packages/SystemUI/res-keyguard/values-zh-rTW/strings.xml index 7efa2f934d9..757bf56f305 100644 --- a/packages/SystemUI/res-keyguard/values-zh-rTW/strings.xml +++ b/packages/SystemUI/res-keyguard/values-zh-rTW/strings.xml @@ -38,7 +38,7 @@ "%s • 充電中" "%s • 快速充電中" "%s • 慢速充電中" - "%s • 針對電池狀態進行最佳化調整" + "%s • 最佳化調整電池狀態" "請連接充電器。" "按選單鍵解鎖。" "網路已鎖定" diff --git a/packages/SystemUI/res-product/values-az/strings.xml b/packages/SystemUI/res-product/values-az/strings.xml index ee86ae23d48..c0668dbcea0 100644 --- a/packages/SystemUI/res-product/values-az/strings.xml +++ b/packages/SystemUI/res-product/values-az/strings.xml @@ -38,8 +38,8 @@ "Telefonun kilidini açmaq üçün %1$d dəfə yanlış cəhd etmisiniz. Daha %2$d uğursuz cəhddən sonra iş profili silinəcək və bütün profil datası ləğv ediləcək." "Planşetin kilidini açmaq üçün %d dəfə yanlış cəhd etmisiniz. İş profili silinəcək və bütün data ləğv ediləcək." "Telefonun kilidini açmaq üçün %d dəfə yanlış cəhd etmisiniz. İş profili silinəcək və bütün data ləğv ediləcək." - "Kilid açma modelini %1$d dəfə yanlış çəkmisiniz. Daha %2$d uğursuz cəhddən sonra planşet kilidini e-poçt hesabınızla açmaq tələb olunacaq.\n\n %3$d saniyə sonra yenidən cəhd edin." - "Kilid açma modelini artıq %1$d dəfə yanlış çəkmisiniz. Daha %2$d uğursuz cəhddən sonra telefon kilidini e-poçt hesabınızla açmaq tələb olunacaq.\n\n %3$d saniyə sonra yenidən cəhd edin." + "Kilid açma modelini %1$d dəfə yanlış çəkmisiniz. Daha %2$d uğursuz cəhddən sonra planşet kilidini e-poçt hesabınızla açmaq tələb olunacaq.\n\n %3$d saniyə sonra cəhd edin." + "Kilid açma modelini artıq %1$d dəfə yanlış çəkmisiniz. Daha %2$d uğursuz cəhddən sonra telefon kilidini e-poçt hesabınızla açmaq tələb olunacaq.\n\n %3$d saniyə sonra cəhd edin." "Daha çox seçim üçün telefonu kiliddən çıxarın" "Daha çox seçim üçün planşeti kiliddən çıxarın" "Daha çox seçim üçün cihazı kiliddən çıxarın" diff --git a/packages/SystemUI/res-product/values-iw/strings.xml b/packages/SystemUI/res-product/values-iw/strings.xml index 4ba8657a77e..4026dac78d2 100644 --- a/packages/SystemUI/res-product/values-iw/strings.xml +++ b/packages/SystemUI/res-product/values-iw/strings.xml @@ -26,20 +26,20 @@ "‏אין כרטיס SIM בטאבלט." "‏אין כרטיס SIM בטלפון." "קודי האימות אינם תואמים" - "ניסית לבטל את נעילת הטאבלט %1$d פעמים. לאחר %2$d ניסיונות כושלים נוספים, טאבלט זה יאופס וכל הנתונים שבו יימחקו." + "ניסית לבטל את נעילת הטאבלט %1$d פעמים. לאחר %2$d ניסיונות כושלים נוספים, הטאבלט הזה יאופס וכל הנתונים שבו יימחקו." "ניסית לבטל את נעילת הטלפון %1$d פעמים. לאחר %2$d ניסיונות כושלים נוספים, טלפון זה יאופס וכל הנתונים שבו יימחקו." "ניסית לבטל את נעילת הטאבלט %d פעמים. הטאבלט יאופס וכל הנתונים שלו יימחקו." "ניסית לבטל את נעילת הטלפון %d פעמים. הטלפון יאופס וכל הנתונים שבו יימחקו." - "ניסית לבטל את נעילת הטאבלט %1$d פעמים. לאחר %2$d ניסיונות כושלים נוספים, משתמש זה יוסר וכל נתוני המשתמש יימחקו." - "ניסית לבטל את נעילת הטלפון %1$d פעמים. לאחר %2$d ניסיונות כושלים נוספים, משתמש זה יוסר וכל נתוני המשתמש יימחקו." + "ניסית לבטל את נעילת הטאבלט %1$d פעמים. לאחר %2$d ניסיונות כושלים נוספים, המשתמש הזה יוסר וכל נתוני המשתמש יימחקו." + "ניסית לבטל את נעילת הטלפון %1$d פעמים. לאחר %2$d ניסיונות כושלים נוספים, המשתמש הזה יוסר וכל נתוני המשתמש יימחקו." "ניסית לבטל את נעילת הטאבלט %d פעמים באופן שגוי. משתמש זה יוסר וכל נתוני המשתמש יימחקו." - "ניסית לבטל את נעילת הטלפון %d פעמים. משתמש זה יוסר וכל נתוני המשתמש יימחקו." + "ניסית לבטל את נעילת הטלפון %d פעמים. המשתמש הזה יוסר וכל נתוני המשתמש יימחקו." "ניסית לבטל את נעילת הטאבלט %1$d פעמים. לאחר %2$d ניסיונות כושלים נוספים, פרופיל העבודה יוסר וכל נתוני הפרופיל יימחקו." "ניסית לבטל את נעילת הטלפון %1$d פעמים. לאחר %2$d ניסיונות כושלים נוספים, פרופיל העבודה יוסר וכל נתוני הפרופיל יימחקו." "ניסית לבטל את נעילת הטאבלט %d פעמים. פרופיל העבודה יוסר וכל נתוני הפרופיל יימחקו." "ניסית לבטל את נעילת הטלפון %d פעמים. פרופיל העבודה יוסר וכל נתוני הפרופיל יימחקו." "שרטטת קו ביטול נעילה שגוי %1$d פעמים. לאחר %2$d ניסיונות כושלים נוספים, ,תישלח אליך בקשה לבטל את נעילת הטאבלט באמצעות חשבון אימייל‏.\n\n יש לנסות שוב בעוד %3$d שניות." - "שרטטת קו ביטול נעילה שגוי %1$d פעמים. לאחר %2$d ניסיונות כושלים נוספים, תשילח אליך בקשה לבטל את נעילת הטלפון באמצעות חשבון אימייל‏.\n\n יש לנסות שוב בעוד %3$d שניות." + "שרטטת קו ביטול נעילה שגוי %1$d פעמים. לאחר %2$d ניסיונות כושלים נוספים, תישלח אליך בקשה לבטל את נעילת הטלפון באמצעות חשבון אימייל‏.\n\n יש לנסות שוב בעוד %3$d שניות." "לאפשרויות נוספות, יש לבטל את נעילת הטלפון" "לאפשרויות נוספות, יש לבטל את נעילת הטאבלט" "לאפשרויות נוספות, יש לבטל את נעילת המכשיר" diff --git a/packages/SystemUI/res-product/values-nl/strings.xml b/packages/SystemUI/res-product/values-nl/strings.xml index 76f66b79069..015ff3eaed9 100644 --- a/packages/SystemUI/res-product/values-nl/strings.xml +++ b/packages/SystemUI/res-product/values-nl/strings.xml @@ -21,8 +21,8 @@ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> "Lijn de telefoon opnieuw uit om sneller op te laden" "Lijn de telefoon opnieuw uit om draadloos op te laden" - "Het Android TV-apparaat wordt binnenkort uitgeschakeld. Druk op een knop om het ingeschakeld te houden." - "Het apparaat wordt binnenkort uitgeschakeld. Druk om het ingeschakeld te houden." + "Het Android TV-apparaat wordt binnenkort uitgezet. Druk op een knop om het aan te laten." + "Het apparaat wordt binnenkort uitgezet. Druk om het aan te laten." "Geen simkaart in tablet." "Geen simkaart in telefoon." "Pincodes komen niet overeen" diff --git a/packages/SystemUI/res/drawable/ic_battery_unknown.xml b/packages/SystemUI/res/drawable/ic_battery_unknown.xml new file mode 100644 index 00000000000..8b2ba12fe0b --- /dev/null +++ b/packages/SystemUI/res/drawable/ic_battery_unknown.xml @@ -0,0 +1,24 @@ + + + + diff --git a/packages/SystemUI/res/values-af/strings.xml b/packages/SystemUI/res/values-af/strings.xml index 9de89960c76..ad70a67421b 100644 --- a/packages/SystemUI/res/values-af/strings.xml +++ b/packages/SystemUI/res/values-af/strings.xml @@ -181,6 +181,7 @@ "Battery, twee stawe." "Battery, drie stawe." "Battery vol." + "Batterypersentasie is onbekend." "Geen foon nie." "Foon, een staaf." "Foon, twee stawe." @@ -1097,4 +1098,6 @@ "%1$s (ontkoppel)" "Kon nie koppel nie. Probeer weer." "Bind nuwe toestel saam" + "Kon nie jou batterymeter lees nie" + "Tik vir meer inligting" diff --git a/packages/SystemUI/res/values-am/strings.xml b/packages/SystemUI/res/values-am/strings.xml index e29ba4f4d33..2900060b84b 100644 --- a/packages/SystemUI/res/values-am/strings.xml +++ b/packages/SystemUI/res/values-am/strings.xml @@ -68,7 +68,7 @@ "ሁልጊዜ በዚህ አውታረ መረብ ላይ ፍቀድ" "ፍቀድ" "ገመድ-አልባ debugging አይፈቀድም" - "በአሁኑ ጊዜ በመለያ ወደዚህ መሣሪያ የገባው ተጠቃሚ የገመድ-አልባ debuggingን ማብራት አይችልም። ይህን ባህሪ ለመጠቀም ወደ ዋና ተጠቃሚ ይቀይሩ።" + "በአሁኑ ጊዜ በመለያ ወደዚህ መሣሪያ የገባው ተጠቃሚ የገመድ-አልባ ማረምን ማብራት አይችልም። ይህን ባህሪ ለመጠቀም ወደ ዋና ተጠቃሚ ይቀይሩ።" "የዩኤስቢ ወደብ ተሰናክሏል" "መሣሪያዎን ከፈሳሽ ወይም ፍርስራሽ ለመጠበቅ ሲባል የዩኤስቢ ወደቡ ተሰናክሏል፣ እና ማናቸውም ተቀጥላዎችን አያገኝም።\n\nየዩኤስቢ ወደቡን እንደገና መጠቀም ችግር በማይኖረው ጊዜ ማሳወቂያ ይደርሰዎታል።" "ኃይል መሙያዎችን እና ተጨማሪ መሣሪያዎችን ፈልጎ ለማግኘት የነቃ የዩኤስቢ ወደብ" @@ -181,6 +181,7 @@ "ባትሪ ሁለት አሞሌዎች።" "ባትሪ ሦስት አሞሌዎች።" "ባትሪ ሙሉ ነው።" + "የባትሪ መቶኛ አይታወቅም።" "ምንም ስልክ የለም።" "የስልክ አንድ አሞሌ" "የስልክ ሁለት አሞሌ" @@ -1097,4 +1098,6 @@ "%1$s (ግንኙነት ተቋርጧል)" "ማገናኘት አልተቻለም። እንደገና ይሞክሩ።" "አዲስ መሣሪያ ያጣምሩ" + "የባትሪ መለኪያዎን የማንበብ ችግር" + "ለበለጠ መረጃ መታ ያድርጉ" diff --git a/packages/SystemUI/res/values-ar/strings.xml b/packages/SystemUI/res/values-ar/strings.xml index 7690c92add1..3d38d5ed088 100644 --- a/packages/SystemUI/res/values-ar/strings.xml +++ b/packages/SystemUI/res/values-ar/strings.xml @@ -181,6 +181,7 @@ "إشارة البطارية تتكون من شريطين." "إشارة البطارية تتكون من ثلاثة أشرطة." "إشارة البطارية كاملة." + "نسبة شحن البطارية غير معروفة." "ليست هناك إشارة بالهاتف." "إشارة الهاتف تتكون من شريط واحد." "إشارة الهاتف تتكون من شريطين." @@ -488,7 +489,7 @@ "مرحبًا بك مجددًا في جلسة الضيف" "هل تريد متابعة جلستك؟" "البدء من جديد" - "نعم، متابعة." + "نعم، متابعة" "مستخدم ضيف" "لحذف التطبيقات والبيانات، عليك إزالة حساب الضيف" "إزالة الضيف" @@ -1121,4 +1122,6 @@ "%1$s (غير متّصل)" "تعذّر الاتصال. يُرجى إعادة المحاولة." "إقران جهاز جديد" + "حدثت مشكلة أثناء قراءة مقياس مستوى شحن البطارية." + "انقر للحصول على مزيد من المعلومات." diff --git a/packages/SystemUI/res/values-as/strings.xml b/packages/SystemUI/res/values-as/strings.xml index 610b03cfab2..c8e5e367548 100644 --- a/packages/SystemUI/res/values-as/strings.xml +++ b/packages/SystemUI/res/values-as/strings.xml @@ -181,6 +181,7 @@ "বেটাৰিৰ দুডাল দণ্ড।" "বেটাৰিৰ তিনিডাল দণ্ড।" "বেটাৰি পূৰাকৈ চ্চাৰ্জ হৈছে।" + "বেটাৰীৰ চাৰ্জৰ শতাংশ অজ্ঞাত।" "ফ\'নত ছিগনেল নাই৷" "ফ\'ন ছিগনেলৰ এডাল দণ্ড।" "ফ\'ন ছিগনেলৰ দুডাল দণ্ড।" @@ -477,7 +478,7 @@ "অতিথি আঁতৰাবনে?" "এই ছেশ্বনৰ সকলো এপ্ আৰু ডেটা মচা হ\'ব।" "আঁতৰাওক" - "আপোনাক পুনৰাই স্বাগতম জনাইছোঁ!" + "অতিথি, আপোনাক পুনৰ স্বাগতম!" "আপুনি আপোনাৰ ছেশ্বন অব্যাহত ৰাখিব বিচাৰেনে?" "আকৌ আৰম্ভ কৰক" "হয়, অব্যাহত ৰাখক" @@ -766,7 +767,7 @@ "বেটাৰিৰ ব্যৱহাৰ" "চ্চাৰ্জ কৰি থকাৰ সময়ত বেটাৰি সঞ্চয়কাৰী উপলব্ধ নহয়।" - "বেটাৰি সঞ্চয়কাৰী" + "বেটাৰী সঞ্চয়কাৰী" "কাৰ্যদক্ষতা আৰু নেপথ্য ডেটা হ্ৰাস কৰে" "%1$s বুটাম" "হ\'ম" @@ -1097,4 +1098,6 @@ "%1$s (সংযোগ বিচ্ছিন্ন হৈছে)" "সংযোগ কৰিব পৰা নগ’ল। পুনৰ চেষ্টা কৰক।" "নতুন ডিভাইচ পেয়াৰ কৰক" + "আপোনাৰ বেটাৰী মিটাৰ পঢ়োঁতে সমস্যা হৈছে" + "অধিক তথ্যৰ বাবে টিপক" diff --git a/packages/SystemUI/res/values-az/strings.xml b/packages/SystemUI/res/values-az/strings.xml index b5e92554916..701927f3271 100644 --- a/packages/SystemUI/res/values-az/strings.xml +++ b/packages/SystemUI/res/values-az/strings.xml @@ -181,6 +181,7 @@ "Batareya iki xətdir." "Batareya üç xətdir." "Batareya doludur" + "Batareyanın faizi naməlumdur." "Telefon yoxdur." "Şəbəkə bir xətdir." "Şəbəkə iki xətdir." @@ -1097,4 +1098,6 @@ "%1$s (bağlantı kəsilib)" "Qoşulmaq alınmadı. Yenə cəhd edin." "Yeni cihazı qoşalaşdırın" + "Batareya ölçüsünü oxuyarkən problem yarandı" + "Ətraflı məlumat üçün toxunun" diff --git a/packages/SystemUI/res/values-b+sr+Latn/strings.xml b/packages/SystemUI/res/values-b+sr+Latn/strings.xml index 7f0ea04d0f4..6c01ceed9ff 100644 --- a/packages/SystemUI/res/values-b+sr+Latn/strings.xml +++ b/packages/SystemUI/res/values-b+sr+Latn/strings.xml @@ -181,6 +181,7 @@ "Baterija od dve crte." "Baterija od tri crte." "Baterija je puna." + "Procenat napunjenosti baterije nije poznat." "Nema telefona." "Signal telefona ima jednu crtu." "Signal telefona od dve crte." @@ -1103,4 +1104,6 @@ "%1$s (veza je prekinuta)" "Povezivanje nije uspelo. Probajte ponovo." "Upari novi uređaj" + "Problem sa očitavanjem merača baterije" + "Dodirnite za više informacija" diff --git a/packages/SystemUI/res/values-be/strings.xml b/packages/SystemUI/res/values-be/strings.xml index 216880003e2..bcc534790ed 100644 --- a/packages/SystemUI/res/values-be/strings.xml +++ b/packages/SystemUI/res/values-be/strings.xml @@ -28,7 +28,7 @@ "Засталося %s" "Засталося %1$s, у вас ёсць каля %2$s на аснове даных аб выкарыстанні вашай прылады" "Засталося %1$s, у вас ёсць каля %2$s" - "Засталося %s. Уключана эканомія зараду." + "Засталося %s. Уключаны рэжым эканоміі зараду." "Не ўдалося выканаць зарадку праз USB. Выкарыстоўвайце зараднае прыстасаванне з камплекта прылады." "Не ўдалося выканаць зарадку праз USB" "Выкарыстоўвайце зараднае прыстасаванне з камплекта прылады" @@ -181,6 +181,7 @@ "2 планкі акумулятара." "Тры планкі акумулятара." "Акумулятар поўны." + "Працэнт зараду акумулятара невядомы." "Няма тэлефона." "Адна планка на тэлефоне." "2 планкі тэлефона." @@ -492,7 +493,7 @@ "Выканаць выхад бягучага карыстальніка" "ВЫКАНАЦЬ ВЫХАД КАРЫСТАЛЬНІКА" "Дадаць новага карыстальніка?" - "Пасля стварэння профіля яго трэба наладзіць.\n\nЛюбы карыстальнік прылады можа абнаўляць праграмы ўсіх іншых карыстальнікаў." + "Пасля стварэння профілю яго трэба наладзіць.\n\nЛюбы карыстальнік прылады можа абнаўляць праграмы ўсіх іншых карыстальнікаў." "Дасягнуты ліміт карыстальнікаў" Можна дадаць %d карыстальніка. @@ -775,7 +776,7 @@ %d хвіліны "Выкарыстанне зараду" - "Эканомія зараду акумулятара недаступная падчас зарадкі" + "Рэжым эканоміі зараду акумулятара недаступны падчас зарадкі" "Эканомія зараду" "Памяншае прадукцыйнасць і фонавую перадачу даных" "Кнопка %1$s" @@ -995,7 +996,7 @@ "Уключыце, калі зарад акумулятара заканчваецца" "Не, дзякуй" "Уключаны рэжым эканоміі зараду" - "Калі ўзровень зараду акумулятара знізіцца да %d%%, аўтаматычна ўключыцца рэжым эканоміі энергіі." + "Калі ўзровень зараду акумулятара знізіцца да %d%%, аўтаматычна ўключыцца рэжым эканоміі зараду." "Налады" "Зразумела" "Dump SysUI Heap" @@ -1109,4 +1110,6 @@ "%1$s (адключана)" "Не ўдалося падключыцца. Паўтарыце спробу." "Спалучыць з новай прыладай" + "Праблема з чытаннем індыкатара зараду акумулятара" + "Націсніце, каб убачыць больш" diff --git a/packages/SystemUI/res/values-bg/strings.xml b/packages/SystemUI/res/values-bg/strings.xml index ec02f2a6f3f..6b8844d67d0 100644 --- a/packages/SystemUI/res/values-bg/strings.xml +++ b/packages/SystemUI/res/values-bg/strings.xml @@ -181,6 +181,7 @@ "Батерията е с две чертички." "Батерията е с три чертички." "Батерията е пълна." + "Процентът на батерията е неизвестен." "Няма телефон." "Телефонът е с една чертичка." "Телефонът е с две чертички." @@ -487,7 +488,7 @@ "Излизане на потребителя" "Излезте от профила на текущия потребител" "ИЗЛИЗАНЕ НА ПОТРЕБИТЕЛЯ" - "Да се добави ли нов потреб.?" + "Да се добави ли нов потребител?" "Когато добавите нов потребител, той трябва да настрои работното си пространство.\n\nВсеки потребител може да актуализира приложенията за всички останали потребители." "Достигнахте огранич. за потребители" @@ -1097,4 +1098,6 @@ "%1$s (връзката е прекратена)" "Неуспешно свързване. Опитайте отново." "Сдвояване на ново устройство" + "Възникна проблем при четенето на данните за нивото на батерията" + "Докоснете за още информация" diff --git a/packages/SystemUI/res/values-bn/strings.xml b/packages/SystemUI/res/values-bn/strings.xml index 9e6bb6eb492..d68f46337f2 100644 --- a/packages/SystemUI/res/values-bn/strings.xml +++ b/packages/SystemUI/res/values-bn/strings.xml @@ -181,6 +181,7 @@ "দুই দন্ড ব্যাটারি রয়েছে৷" "তিন দন্ড ব্যাটারি রয়েছে৷" "ব্যাটারি পূর্ণ রয়েছে৷" + "ব্যাটারি কত শতাংশ আছে তা জানা যায়নি।" "কোনো ফোনের সংকেত নেই৷" "এক দন্ড ফোনের সংকেত রয়েছে৷" "দুই দন্ড ফোনের সংকেত রয়েছে৷" @@ -475,12 +476,12 @@ "ব্যবহারকারী জুড়ুন" "নতুন ব্যবহারকারী" "অতিথি সরাবেন?" - "এই সেশনের সব অ্যাপ্লিকেশান ও ডেটা মুছে ফেলা হবে।" + "এই সেশনের সব অ্যাপ ও ডেটা মুছে ফেলা হবে।" "সরান" "অতিথি, আপনি ফিরে আসায় আপনাকে স্বাগত!" - "আপনি কি আপনার সেশনটি অবিরত রাখতে চান?" + "আপনি কি আপনার সেশনটি চালিয়ে যেতে চান?" "আবার শুরু করুন" - "হ্যাঁ, অবিরত থাকুন" + "হ্যাঁ, চালিয়ে যান" "অতিথি ব্যবহারকারী" "অ্যাপ্লিকেশান এবং ডেটা মুছে ফেলার জন্য অতিথি ব্যবহারকারী সরান।" "অতিথি সরান" @@ -488,7 +489,7 @@ "বর্তমান ব্যবহারকারীকে লগ-আউট করুন" "ব্যবহারকারীকে লগ-আউট করুন" "নতুন ব্যবহারকারীকে যোগ করবেন?" - "আপনি একজন নতুন ব্যবহারকারী যোগ করলে তাকে তার জায়গা সেট-আপ করে নিতে হবে৷\n\nযেকোনো ব্যবহারকারী অন্য সব ব্যবহারকারীর জন্য অ্যাপ্লিকেশান আপডেট করতে পারবেন৷" + "আপনি একজন নতুন ব্যবহারকারী যোগ করলে তাকে তার জায়গা সেট-আপ করে নিতে হবে৷\n\nযেকোনও ব্যবহারকারী অন্য সব ব্যবহারকারীর জন্য অ্যাপ আপডেট করতে পারবেন৷" "আর কোনও প্রোফাইল যোগ করা যাবে না" আপনি %d জন পর্যন্ত ব্যবহারকারীর প্রোফাইল যোগ করতে পারেন। @@ -1097,4 +1098,6 @@ "%1$s (কানেক্ট করা নেই)" "কানেক্ট করা যায়নি। আবার চেষ্টা করুন।" "নতুন ডিভাইস পেয়ার করুন" + "ব্যাটারির মিটারের রিডিং নেওয়ার সময় সমস্যা হয়েছে" + "আরও তথ্যের জন্য ট্যাপ করুন" diff --git a/packages/SystemUI/res/values-bs/strings.xml b/packages/SystemUI/res/values-bs/strings.xml index ef2d50480e5..d3ef3ba9eff 100644 --- a/packages/SystemUI/res/values-bs/strings.xml +++ b/packages/SystemUI/res/values-bs/strings.xml @@ -181,6 +181,7 @@ "Baterija na dvije crtice." "Baterija na tri crtice." "Baterija je puna." + "Postotak napunjenosti baterije nije poznat" "Nema telefonskog signala." "Telefonski signal na jednoj crtici." "Telefonski signal na dvije crtice." @@ -476,8 +477,8 @@ "Pokaži profil" "Dodaj korisnika" "Novi korisnik" - "Želite li ukloniti gosta?" - "Sve aplikacije i svi podaci iz ove sesije bit će izbrisani." + "Ukloniti gosta?" + "Sve aplikacije i podaci iz ove sesije će se izbrisati." "Ukloni" "Zdravo! Lijepo je opet vidjeti goste." "Želite li nastaviti sesiju?" @@ -489,7 +490,7 @@ "Odjavi korisnika" "Odjavi trenutnog korisnika" "ODJAVI KORISNIKA" - "Želite dodati novog korisnika?" + "Dodati novog korisnika?" "Kada dodate novog korisnika, ta osoba treba postaviti svoj prostor.\n\nSvaki korisnik može ažurirati aplikacije za sve ostale korisnike." "Dostignut limit za broj korisnika" @@ -501,7 +502,7 @@ "Sve aplikacije i podaci ovog korisnika bit će izbrisani." "Ukloni" "Uključena je Ušteda baterije" - "Minimizira rad i prijenos podataka u pozadini" + "Smanjuje performanse i prijenos podataka u pozadini" "Isključi Uštedu baterije" "Aplikacija %s će imati pristup svim informacijama koje se prikazuju na ekranu ili koje se reproduciraju s vašeg uređaja za vrijeme snimanja ili emitiranja. To obuhvata informacije kao što su lozinke, detalji o plaćanju, fotografije, poruke i zvuk koji reproducirate." "Usluga koja pruža ovu funkciju će imati pristup svim informacijama koje se prikazuju na ekranu ili koje se reproduciraju s vašeg uređaja za vrijeme snimanja ili emitiranja. To obuhvata informacije kao što su lozinke, detalji o plaćanju, fotografije, poruke i zvuk koji reproducirate." @@ -772,7 +773,7 @@ "Potrošnja baterije" "Ušteda baterije je isključena prilikom punjenja" "Ušteda baterije" - "Ograničava rad i prijenos podataka u pozadini" + "Smanjuje performanse i prijenos podataka u pozadini" "Dugme %1$s" "Tipka za početak" "Nazad" @@ -1103,4 +1104,6 @@ "%1$s (veza je prekinuta)" "Povezivanje nije uspjelo. Pokušajte ponovo." "Uparite novi uređaj" + "Došlo je do problema prilikom očitavanja mjerača stanja baterije" + "Dodirnite za više informacija" diff --git a/packages/SystemUI/res/values-ca/strings.xml b/packages/SystemUI/res/values-ca/strings.xml index b6b4f050313..251464d3cee 100644 --- a/packages/SystemUI/res/values-ca/strings.xml +++ b/packages/SystemUI/res/values-ca/strings.xml @@ -181,6 +181,7 @@ "Bateria: dues barres." "Bateria: tres barres." "Bateria carregada." + "Es desconeix el percentatge de bateria." "No hi ha senyal de telèfon." "Senyal de telèfon: una barra" "Senyal de telèfon: dues barres." @@ -714,7 +715,7 @@ "Pot sonar o vibrar en funció de la configuració del telèfon" "Pot sonar o vibrar en funció de la configuració del telèfon. Les converses de l\'aplicació %1$s es mostren com a bombolles de manera predeterminada." "Atrau la teva atenció amb una drecera flotant a aquest contingut." - "Es mostra com a bombolla flotant a la part superior de la secció de converses i mostra la foto de perfil a la pantalla de bloqueig" + "Es mostra com a bombolla flotant a la part superior de la secció de converses i la foto de perfil apareix a la pantalla de bloqueig" "Configuració" "Prioritat" "%1$s no admet les funcions de converses" @@ -1097,4 +1098,6 @@ "%1$s (desconnectat)" "No s\'ha pogut connectar. Torna-ho a provar." "Vincula un dispositiu nou" + "Hi ha hagut un problema en llegir el mesurador de la bateria" + "Toca per obtenir més informació" diff --git a/packages/SystemUI/res/values-cs/strings.xml b/packages/SystemUI/res/values-cs/strings.xml index 4cab09fd3df..e4b32f9fe1a 100644 --- a/packages/SystemUI/res/values-cs/strings.xml +++ b/packages/SystemUI/res/values-cs/strings.xml @@ -181,6 +181,7 @@ "Dvě čárky baterie." "Tři čárky baterie." "Baterie je nabitá." + "Procento baterie není známé." "Žádná telefonní síť." "Jedna čárka signálu telefonní sítě." "Dvě čárky signálu telefonní sítě." @@ -720,7 +721,7 @@ "Může vyzvánět nebo vibrovat v závislosti na nastavení telefonu" "Může vyzvánět nebo vibrovat v závislosti na nastavení telefonu. Konverzace z aplikace %1$s ve výchozím nastavení bublají." "Přitahuje pozornost pomocí plovoucí zkratky k tomuto obsahu." - "Zobrazuje se v horní části sekce konverzací a má podobu plovoucí bubliny, zobrazuje profilovou fotku na obrazovce uzamčení" + "Zobrazuje se v horní části sekce konverzací, má podobu plovoucí bubliny, zobrazuje profilovou fotku na obrazovce uzamčení" "Nastavení" "Priorita" "Aplikace %1$s funkce konverzace nepodporuje" @@ -1109,4 +1110,6 @@ "%1$s (odpojeno)" "Spojení se nezdařilo. Zkuste to znovu." "Spárovat nové zařízení" + "Problém s načtením měřiče baterie" + "Klepnutím zobrazíte další informace" diff --git a/packages/SystemUI/res/values-da/strings.xml b/packages/SystemUI/res/values-da/strings.xml index c34b498cdbb..66885745b47 100644 --- a/packages/SystemUI/res/values-da/strings.xml +++ b/packages/SystemUI/res/values-da/strings.xml @@ -181,6 +181,7 @@ "Batteri to bjælker." "Batteri tre bjælker." "Batteri fuldt." + "Batteriniveauet er ukendt." "Ingen telefon." "Telefon en bjælke." "Telefon to bjælker." @@ -487,8 +488,8 @@ "Log brugeren ud" "Log den aktuelle bruger ud" "LOG BRUGEREN UD" - "Vil du tilføje den nye bruger?" - "Når du tilføjer en ny bruger, skal personen konfigurere sit område.\n\nEnhver bruger kan opdatere apps for alle andre brugere." + "Vil du tilføje en ny bruger?" + "Når du tilføjer en ny bruger, skal personen konfigurere sit område.\n\nAlle brugere kan opdatere apps for alle de andre brugere." "Grænsen for antal brugere er nået" Du kan tilføje op til %d bruger. @@ -779,7 +780,7 @@ "Tab" "Mellemrumstast" "Enter" - "Tilbagetast" + "Backspace" "Afspil/pause" "Stop" "Næste" @@ -1039,8 +1040,8 @@ "Hold afbryderknappen nede for at få adgang til dine betjeningselementer" "Vælg en app for at tilføje styring" - %s styringselement er tilføjet. - %s styringselementer er tilføjet. + %s styring er tilføjet. + %s styring er tilføjet. "Fjernet" "Angivet som favorit" @@ -1051,7 +1052,7 @@ "Flyt til position %d" "Betjeningselementer" "Vælg de indstillinger, der skal vises i menuen for afbryderknappen" - "Flyt rundt på styringselementer ved at holde dem nede og trække" + "Flyt et felt ved at holde det nede og trække" "Alle styringselementerne blev fjernet" "Ændringerne blev ikke gemt" "Se andre apps" @@ -1097,4 +1098,6 @@ "%1$s (ingen forbindelse)" "Der kunne ikke oprettes forbindelse. Prøv igen." "Par ny enhed" + "Der er problemer med at aflæse dit batteriniveau" + "Tryk for at få flere oplysninger" diff --git a/packages/SystemUI/res/values-de/strings.xml b/packages/SystemUI/res/values-de/strings.xml index 38b57be632a..3b37ca3c4ad 100644 --- a/packages/SystemUI/res/values-de/strings.xml +++ b/packages/SystemUI/res/values-de/strings.xml @@ -181,6 +181,7 @@ "Akku - zwei Balken" "Akku - drei Balken" "Akku voll" + "Akkustand unbekannt." "Kein Telefon" "Telefonsignal - ein Balken" "Telefonsignal - zwei Balken" @@ -714,7 +715,7 @@ "Kann klingeln oder vibrieren, abhängig von den Telefoneinstellungen" "Kann klingeln oder vibrieren, je nach Telefoneinstellungen. Unterhaltungen von %1$s werden standardmäßig als Bubble angezeigt." "Du wirst mit einer unverankerten Verknüpfung darauf aufmerksam gemacht." - "Wird oben im Bereich \"Unterhaltungen\" als unverankerte Bubble mit einem Profilbild auf dem Sperrbildschirm angezeigt" + "Wird oben im Bereich „Unterhaltungen“ als unverankerte Bubble angezeigt und erscheint mit einem Profilbild auf dem Sperrbildschirm" "Einstellungen" "Priorität" "%1$s unterstützt keine Funktionen für Unterhaltungen" @@ -962,7 +963,7 @@ "%1$s, %2$s" "WLAN ist deaktiviert" "Bluetooth ist deaktiviert" - "\"Bitte nicht stören\" ist deaktiviert" + "„Bitte nicht stören“ ist deaktiviert" "\"Bitte nicht stören\" wurde von einer automatischen Regel aktiviert (%s)." "\"Bitte nicht stören\" wurde von einer App aktiviert (%s)." "\"Bitte nicht stören\" wurde von einer automatischen Regel oder einer App aktiviert." @@ -1097,4 +1098,6 @@ "%1$s (nicht verbunden)" "Verbindung nicht möglich. Versuch es noch einmal." "Neues Gerät koppeln" + "Problem beim Lesen des Akkustands" + "Für weitere Informationen tippen" diff --git a/packages/SystemUI/res/values-el/strings.xml b/packages/SystemUI/res/values-el/strings.xml index e95bad0c01a..89331973c53 100644 --- a/packages/SystemUI/res/values-el/strings.xml +++ b/packages/SystemUI/res/values-el/strings.xml @@ -181,6 +181,7 @@ "Δύο γραμμές μπαταρίας." "Τρεις γραμμές μπαταρίας." "Πλήρης μπαταρία." + "Άγνωστο ποσοστό μπαταρίας." "Δεν υπάρχει τηλέφωνο." "Μία γραμμή τηλεφώνου." "Δύο γραμμές τηλεφώνου." @@ -477,7 +478,7 @@ "Κατάργηση επισκέπτη;" "Όλες οι εφαρμογές και τα δεδομένα αυτής της περιόδου σύνδεσης θα διαγραφούν." "Κατάργηση" - "Επισκέπτη , καλώς όρισες ξανά!" + "Kαλώς ορίσατε ξανά!" "Θέλετε να συνεχίσετε την περίοδο σύνδεσής σας;" "Έναρξη από την αρχή" "Ναι, συνέχεια" @@ -488,7 +489,7 @@ "Αποσύνδεση τρέχοντα χρήστη" "ΑΠΟΣΥΝΔΕΣΗ ΧΡΗΣΤΗ" "Προσθήκη νέου χρήστη;" - "Κατά την προσθήκη ενός νέου χρήστη, αυτός θα πρέπει να ρυθμίσει το χώρο του.\n\nΟποιοσδήποτε χρήστης μπορεί να ενημερώσει τις εφαρμογές για όλους τους άλλους χρήστες." + "Κατά την προσθήκη ενός νέου χρήστη, αυτός θα πρέπει να ρυθμίσει τον χώρο του.\n\nΟποιοσδήποτε χρήστης μπορεί να ενημερώσει τις εφαρμογές για όλους τους άλλους χρήστες." "Συμπληρώθηκε το όριο χρηστών" Μπορείτε να προσθέσετε έως %d χρήστες. @@ -1097,4 +1098,6 @@ "%1$s (αποσυνδέθηκε)" "Δεν ήταν δυνατή η σύνδεση. Δοκιμάστε ξανά." "Σύζευξη νέας συσκευής" + "Υπάρχει κάποιο πρόβλημα με την ανάγνωση του μετρητή μπαταρίας" + "Πατήστε για περισσότερες πληροφορίες." diff --git a/packages/SystemUI/res/values-en-rAU/strings.xml b/packages/SystemUI/res/values-en-rAU/strings.xml index 58af3dff165..0adf19447e8 100644 --- a/packages/SystemUI/res/values-en-rAU/strings.xml +++ b/packages/SystemUI/res/values-en-rAU/strings.xml @@ -181,6 +181,7 @@ "Battery two bars." "Battery three bars." "Battery full." + "Battery percentage unknown." "No phone." "Phone one bar." "Phone two bars." @@ -1097,4 +1098,6 @@ "%1$s (disconnected)" "Couldn\'t connect. Try again." "Pair new device" + "Problem reading your battery meter" + "Tap for more information" diff --git a/packages/SystemUI/res/values-en-rCA/strings.xml b/packages/SystemUI/res/values-en-rCA/strings.xml index c0378edc2a9..9265f714105 100644 --- a/packages/SystemUI/res/values-en-rCA/strings.xml +++ b/packages/SystemUI/res/values-en-rCA/strings.xml @@ -181,6 +181,7 @@ "Battery two bars." "Battery three bars." "Battery full." + "Battery percentage unknown." "No phone." "Phone one bar." "Phone two bars." @@ -1097,4 +1098,6 @@ "%1$s (disconnected)" "Couldn\'t connect. Try again." "Pair new device" + "Problem reading your battery meter" + "Tap for more information" diff --git a/packages/SystemUI/res/values-en-rGB/strings.xml b/packages/SystemUI/res/values-en-rGB/strings.xml index 58af3dff165..0adf19447e8 100644 --- a/packages/SystemUI/res/values-en-rGB/strings.xml +++ b/packages/SystemUI/res/values-en-rGB/strings.xml @@ -181,6 +181,7 @@ "Battery two bars." "Battery three bars." "Battery full." + "Battery percentage unknown." "No phone." "Phone one bar." "Phone two bars." @@ -1097,4 +1098,6 @@ "%1$s (disconnected)" "Couldn\'t connect. Try again." "Pair new device" + "Problem reading your battery meter" + "Tap for more information" diff --git a/packages/SystemUI/res/values-en-rIN/strings.xml b/packages/SystemUI/res/values-en-rIN/strings.xml index 58af3dff165..0adf19447e8 100644 --- a/packages/SystemUI/res/values-en-rIN/strings.xml +++ b/packages/SystemUI/res/values-en-rIN/strings.xml @@ -181,6 +181,7 @@ "Battery two bars." "Battery three bars." "Battery full." + "Battery percentage unknown." "No phone." "Phone one bar." "Phone two bars." @@ -1097,4 +1098,6 @@ "%1$s (disconnected)" "Couldn\'t connect. Try again." "Pair new device" + "Problem reading your battery meter" + "Tap for more information" diff --git a/packages/SystemUI/res/values-en-rXC/strings.xml b/packages/SystemUI/res/values-en-rXC/strings.xml index 808ce2bf7cf..2120e835c30 100644 --- a/packages/SystemUI/res/values-en-rXC/strings.xml +++ b/packages/SystemUI/res/values-en-rXC/strings.xml @@ -181,6 +181,7 @@ "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‎‏‏‎‎‏‎‎‏‏‎‏‏‏‏‎‏‏‎‎‏‎‏‎‏‏‏‏‎‎‎‏‏‏‎‏‎‏‎‎‎‏‎‏‏‏‎‎‏‏‎‏‎‎‏‏‏‏‎Battery two bars.‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‎‏‏‏‎‏‎‎‏‎‎‎‏‏‎‏‏‏‏‎‏‎‏‏‎‏‎‎‏‎‎‏‏‎‎‎‎‎‏‎‎‎‎‏‎‎‎‏‏‎‎‏‎‏‎‎‎‏‏‎Battery three bars.‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‏‎‎‏‎‎‎‏‎‏‏‏‎‏‎‏‎‏‎‎‎‎‏‏‎‏‏‏‏‎‏‎‎‎‎‏‎‎‏‎‎‎‎‎‎‏‎‏‏‎‏‎‎‏‎‏‏‏‎‎Battery full.‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‎‎‏‎‎‎‏‎‏‏‎‏‎‎‎‏‏‏‏‎‎‎‎‎‏‎‏‏‎‎‏‎‏‏‏‏‎‏‎‏‎‏‎‏‎‎‎‎‏‏‎‎‏‏‏‏‎‎‎‎Battery percentage unknown.‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‎‏‎‏‎‎‎‎‏‎‎‏‏‎‏‎‎‏‎‎‎‎‏‎‎‏‎‎‎‎‎‎‏‏‏‏‎‎‎‎‎‏‎‎‏‏‎‏‏‎‎‎‏‏‏‎‎‎‏‎No phone.‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‎‎‏‏‏‏‎‏‏‏‎‎‏‎‏‎‏‏‎‏‎‎‏‎‏‎‏‏‎‏‎‎‎‏‎‏‏‎‎‏‎‏‏‏‎‎‏‏‏‏‎‎‏‏‏‎‏‎‎‎Phone one bar.‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‏‏‎‎‎‎‎‏‎‎‎‎‎‎‎‎‏‏‏‏‎‏‏‏‎‎‎‎‎‎‎‏‎‏‏‎‎‎‎‎‏‎‏‏‎‏‏‎‏‎‏‎‏‎‏‎‎‏‎‎Phone two bars.‎‏‎‎‏‎" @@ -1097,4 +1098,6 @@ "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‎‎‏‎‏‏‏‎‏‎‏‎‏‎‏‏‎‏‏‏‎‎‏‎‎‎‏‏‏‎‎‎‎‏‏‏‏‎‏‎‎‎‏‎‎‎‎‎‏‎‎‏‎‏‏‏‏‏‎‎‎‏‎‎‏‏‎%1$s‎‏‎‎‏‏‏‎ (disconnected)‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‏‎‎‏‏‎‎‎‎‏‎‎‎‏‎‏‏‎‏‏‏‎‎‏‎‏‏‎‏‎‎‎‏‏‎‏‎‎‏‎‎‎‏‏‎‏‎‏‎‏‎‏‏‎‎‎‎‏‎‎Couldn\'t connect. Try again.‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‎‎‏‎‎‎‏‏‏‏‏‏‎‏‎‎‏‎‎‏‏‎‎‏‎‏‎‏‏‎‎‏‏‎‎‎‏‎‏‎‎‏‎‎‏‏‏‎‏‏‎‏‎‎‏‏‎‎Pair new device‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‎‏‎‏‏‏‏‎‎‎‏‎‏‎‏‎‏‏‎‎‎‏‏‏‎‎‏‏‏‏‎‎‏‏‏‏‏‏‏‏‎‏‏‎‏‏‏‏‎‎‎‎‎‎‏‏‏‎‎Problem reading your battery meter‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‎‏‏‎‏‏‎‎‎‎‏‎‏‏‏‏‏‏‎‎‎‏‏‏‏‎‏‏‎‎‏‎‎‏‏‏‏‎‏‎‎‎‎‎‎‎‎‎‏‎‎‎‏‎‎‎‏‏‎Tap for more information‎‏‎‎‏‎" diff --git a/packages/SystemUI/res/values-es-rUS/strings.xml b/packages/SystemUI/res/values-es-rUS/strings.xml index 7e67ab5031a..0a3df72bba0 100644 --- a/packages/SystemUI/res/values-es-rUS/strings.xml +++ b/packages/SystemUI/res/values-es-rUS/strings.xml @@ -110,7 +110,7 @@ "Compartir" "Se canceló la grabación de pantalla" "Se guardó la grabación de pantalla; presiona para verla" - "Error al borrar la grabación de pantalla" + "No se pudo borrar la grabación de pantalla" "Error al obtener permisos" "Error al iniciar la grabación de pantalla" "Opciones de transferencia de archivos por USB" @@ -128,8 +128,8 @@ "Teléfono" "Asistente voz" "Desbloquear" - "Esperando huella digital" - "Desbloquear sin utilizar la huella digital" + "Esperando huella dactilar" + "Desbloquear sin utilizar la huella dactilar" "Escaneando rostro" "Enviar" "Administrar notificaciones" @@ -168,8 +168,8 @@ "Hubo demasiados intentos incorrectos. Se borrará este usuario." "Hubo demasiados intentos incorrectos. Se borrarán este perfil de trabajo y sus datos." "Descartar" - "Toca el sensor de huellas digitales" - "Ícono de huella digital" + "Toca el sensor de huellas dactilares" + "Ícono de huella dactilar" "Autenticando tu rostro…" "Ícono de rostro" "Botón de zoom de compatibilidad" @@ -181,6 +181,7 @@ "Dos barras de batería" "Tres barras de batería" "Batería completa" + "Se desconoce el porcentaje de la batería." "Sin teléfono" "Una barra de teléfono" "Dos barras de teléfono" @@ -477,7 +478,7 @@ "¿Eliminar invitado?" "Se eliminarán las aplicaciones y los datos de esta sesión." "Eliminar" - "Bienvenido nuevamente, invitado." + "¡Hola de nuevo, invitado!" "¿Quieres retomar la sesión?" "Volver a empezar" "Sí, continuar" @@ -1097,4 +1098,6 @@ "%1$s (desconectado)" "No se pudo establecer la conexión. Vuelve a intentarlo." "Vincular dispositivo nuevo" + "Problema al leer el medidor de batería" + "Presiona para obtener más información" diff --git a/packages/SystemUI/res/values-es/strings.xml b/packages/SystemUI/res/values-es/strings.xml index d4ec4e5f63c..8eb5bf50758 100644 --- a/packages/SystemUI/res/values-es/strings.xml +++ b/packages/SystemUI/res/values-es/strings.xml @@ -181,6 +181,7 @@ "Dos barras de batería" "Tres barras de batería" "Batería completa" + "Porcentaje de batería desconocido." "Sin teléfono" "Una barra de cobertura" "Dos barras de cobertura" @@ -1097,4 +1098,6 @@ "%1$s (desconectado)" "No se ha podido conectar. Inténtalo de nuevo." "Vincular nuevo dispositivo" + "No se ha podido leer el indicador de batería" + "Toca la pantalla para consultar más información" diff --git a/packages/SystemUI/res/values-et/strings.xml b/packages/SystemUI/res/values-et/strings.xml index 319630cdbfa..a41e69e9f91 100644 --- a/packages/SystemUI/res/values-et/strings.xml +++ b/packages/SystemUI/res/values-et/strings.xml @@ -181,6 +181,7 @@ "Aku: kaks pulka." "Aku: kolm pulka." "Aku täis." + "Aku laetuse protsent on teadmata." "Telefonisignaal puudub" "Telefonisignaal: üks pulk." "Telefonisignaal: kaks pulka." @@ -1097,4 +1098,6 @@ "%1$s (pole ühendatud)" "Ühenduse loomine ebaõnnestus. Proovige uuesti." "Uue seadme sidumine" + "Probleem akumõõdiku lugemisel" + "Puudutage lisateabe saamiseks" diff --git a/packages/SystemUI/res/values-eu/strings.xml b/packages/SystemUI/res/values-eu/strings.xml index 092e331963a..8922c85fdbc 100644 --- a/packages/SystemUI/res/values-eu/strings.xml +++ b/packages/SystemUI/res/values-eu/strings.xml @@ -181,6 +181,7 @@ "Bateriak bi barra ditu." "Bateriak hiru barra ditu." "Bateria beteta dago." + "Bateriaren ehunekoa ezezaguna da." "Ez dago telefono-zenbakirik." "Telefono-seinaleak barra bat du." "Telefono-seinaleak bi barra ditu." @@ -469,8 +470,8 @@ "%2$s • Bizkor kargatzen (%1$s guztiz kargatu arte)" "%2$s • Mantso kargatzen (%1$s guztiz kargatu arte)" "Aldatu erabiltzailea" - "Aldatu erabiltzailez. %s da saioa hasita duena." - "Uneko erabiltzailea: %s" + "Aldatu erabiltzailea. %s da saioa hasita daukana." + "Erabiltzailea: %s" "Erakutsi profila" "Gehitu erabiltzailea" "Erabiltzaile berria" @@ -485,10 +486,10 @@ "Aplikazioak eta datuak ezabatzeko, kendu gonbidatua" "KENDU GONBIDATUA" "Amaitu erabiltzailearen saioa" - "Amaitu uneko erabiltzailearen saioa" + "Amaitu erabiltzailearen saioa" "AMAITU ERABILTZAILEAREN SAIOA" "Beste erabiltzaile bat gehitu?" - "Erabiltzaile bat gehitzen duzunean, horrek bere eremua konfiguratu beharko du.\n\nEdozein erabiltzailek egunera ditzake beste erabiltzaile guztien aplikazioak." + "Erabiltzaile bat gehitzen duzunean, erabiltzaile horrek bere eremua konfiguratu beharko du.\n\nEdozein erabiltzailek egunera ditzake beste erabiltzaile guztien aplikazioak." "Erabiltzaile-mugara iritsi zara" Gehienez, %d erabiltzaile gehi ditzakezu. @@ -917,8 +918,8 @@ "Ez baduzu nahi %s zerbitzuak eginbide hori erabiltzea, sakatu hau ezarpenak ireki eta aukera desaktibatzeko." "Erreproduzitu" "Pausatu" - "Saltatu hurrengora" - "Saltatu aurrekora" + "Joan hurrengora" + "Joan aurrekora" "Aldatu tamaina" "Beroegi egoteagatik itzali da" "Ohi bezala ari da funtzionatzen telefonoa orain.\nInformazio gehiago lortzeko, sakatu hau." @@ -973,7 +974,7 @@ "Sakatu bateria eta datuen erabilerari buruzko xehetasunak ikusteko" "Datu-konexioa desaktibatu nahi duzu?" "%s erabilita ezingo dituzu erabili datuak edo Internet. Wifi-sare baten bidez soilik konektatu ahal izango zara Internetera." - "Uneko operadorea" + "Zure operadorea" "Aplikazio bat baimen-eskaera oztopatzen ari denez, ezarpenek ezin dute egiaztatu erantzuna." "%2$s aplikazioaren zatiak erakusteko baimena eman nahi diozu %1$s aplikazioari?" "- %1$s aplikazioaren informazioa irakur dezake." @@ -1073,8 +1074,8 @@ "Pasatu hatza aukera gehiago ikusteko" "Gomendioak kargatzen" "Multimedia-edukia" - "Ezkutatu uneko saioa." - "Ezin da ezkutatu uneko saioa." + "Ezkutatu saioa." + "Ezin da ezkutatu saioa." "Baztertu" "Berrekin" "Ezarpenak" @@ -1097,4 +1098,6 @@ "%1$s (deskonektatuta)" "Ezin izan da konektatu. Saiatu berriro." "Parekatu beste gailu batekin" + "Arazo bat gertatu da bateria-neurgailua irakurtzean" + "Informazio gehiago lortzeko, sakatu hau" diff --git a/packages/SystemUI/res/values-fa/strings.xml b/packages/SystemUI/res/values-fa/strings.xml index 769aa19d03a..c2872a8da59 100644 --- a/packages/SystemUI/res/values-fa/strings.xml +++ b/packages/SystemUI/res/values-fa/strings.xml @@ -181,6 +181,7 @@ "دو نوار برای باتری." "سه نوار برای باتری." "باتری پر است." + "درصد شارژ باتری مشخص نیست." "بدون تلفن." "یک نوار برای تلفن." "دو نوار برای تلفن." @@ -714,7 +715,7 @@ "بسته به تنظیمات ممکن است تلفن زنگ بزند یا لرزش داشته باشد" "بسته به تنظیمات ممکن است تلفن زنگ بزند یا لرزش داشته باشد. مکالمه‌های %1$s به‌طور پیش‌فرض در حبابک نشان داده می‌شوند." "با میان‌بری شناور به این محتوا، توجه‌تان را جلب می‌کند." - "در بالای بخش مکالمه به‌صورت حبابک شناور نشان داده می‌شود و تصویر نمایه را در صفحه قفل نمایش می‌دهد" + "در بالای بخش مکالمه به‌صورت حبابک شناور نشان داده می‌شود و عکس نمایه را در صفحه قفل نمایش می‌دهد" "تنظیمات" "اولویت" "%1$s از ویژگی‌های مکالمه پشتیبانی نمی‌کند" @@ -1025,7 +1026,7 @@ "مکالمه روی اولویت تنظیم شده است" "مکالمه‌های اولویت‌دار:" "نمایش در بالای بخش مکالمه" - "تصویر نمایه را در صفحه قفل نمایش می‌دهد" + "عکس نمایه را در صفحه قفل نمایش می‌دهد" "به‌شکل حبابک شناور روی برنامه‌ها ظاهر می‌شود" "وقفه در «مزاحم نشوید»" "متوجه‌ام" @@ -1097,4 +1098,6 @@ "%1$s (اتصال قطع شد)" "متصل نشد. دوباره امتحان کنید." "مرتبط کردن دستگاه جدید" + "مشکلی در خواندن میزان باتری وجود دارد" + "برای اطلاعات بیشتر ضربه بزنید" diff --git a/packages/SystemUI/res/values-fi/strings.xml b/packages/SystemUI/res/values-fi/strings.xml index 4debb6477d0..19794e0a419 100644 --- a/packages/SystemUI/res/values-fi/strings.xml +++ b/packages/SystemUI/res/values-fi/strings.xml @@ -118,7 +118,7 @@ "Käytä kamerana (PTP)" "Asenna Android File Transfer -sovellus Macille" "Takaisin" - "Aloituspainike" + "Aloitus" "Valikko" "Esteettömyys" "Näytön kääntäminen" @@ -181,6 +181,7 @@ "Akun virta - kaksi palkkia." "Akun virta - kolme palkkia." "Akku täynnä." + "Akun varaustaso ei tiedossa." "Ei puhelinverkkoyhteyttä." "Puhelinverkkosignaali - yksi palkki." "Puhelinverkkosignaali - kaksi palkkia." @@ -1097,4 +1098,6 @@ "%1$s (yhteys katkaistu)" "Ei yhteyttä. Yritä uudelleen." "Muodosta uusi laitepari" + "Ongelma akkumittarin lukemisessa" + "Saat lisätietoja napauttamalla" diff --git a/packages/SystemUI/res/values-fr-rCA/strings.xml b/packages/SystemUI/res/values-fr-rCA/strings.xml index d2b2e5f411b..0459ca94570 100644 --- a/packages/SystemUI/res/values-fr-rCA/strings.xml +++ b/packages/SystemUI/res/values-fr-rCA/strings.xml @@ -181,6 +181,7 @@ "Niveau de batterie : moyen" "Niveau de batterie : bon" "Batterie pleine" + "Pourcentage de la pile inconnu." "Aucun signal" "Signal : faible" "Signal : moyen" @@ -1097,4 +1098,6 @@ "%1$s (déconnecté)" "Impossible de se connecter. Réessayez." "Associer un autre appareil" + "Un problème est survenu lors de la lecture du niveau de charge de la pile" + "Touchez pour en savoir plus" diff --git a/packages/SystemUI/res/values-fr/strings.xml b/packages/SystemUI/res/values-fr/strings.xml index 63a3ead8e4e..7b6ad6bd7b5 100644 --- a/packages/SystemUI/res/values-fr/strings.xml +++ b/packages/SystemUI/res/values-fr/strings.xml @@ -181,6 +181,7 @@ "Niveau de batterie : moyen" "Niveau de batterie : bon" "Batterie pleine" + "Pourcentage de la batterie inconnu." "Aucun signal" "Signal : faible" "Signal : moyen" @@ -256,7 +257,7 @@ "Notification masquée" "Bulle fermée." "Volet des notifications" - "Paramètres rapides" + "Réglages rapides" "Écran de verrouillage" "Paramètres" "Aperçu" @@ -643,7 +644,7 @@ "System UI Tuner" "Afficher le pourcentage intégré de la batterie" "Affichez le pourcentage correspondant au niveau de la batterie dans l\'icône de la barre d\'état lorsque l\'appareil n\'est pas en charge." - "Configuration rapide" + "Réglages rapides" "Barre d\'état" "Aperçu" "Mode de démonstration de l\'interface du système" @@ -653,13 +654,13 @@ "Alarme" "Profil professionnel" "Mode Avion" - "Ajouter une tuile" - "Tuile de diffusion" + "Ajouter un bloc" + "Bloc de diffusion" "Vous n\'entendrez pas votre prochaine alarme %1$s, sauf si vous désactivez cette option avant." "Vous n\'entendrez pas votre prochaine alarme %1$s." %1$s" "le %1$s" - "Configuration rapide – %s" + "Réglages rapides – %s" "Point d\'accès" "Profil professionnel" "Divertissant pour certains, mais pas pour tous" @@ -672,8 +673,8 @@ "L\'application n\'est pas installée sur votre appareil." "Afficher les secondes sur l\'horloge" "Afficher les secondes dans la barre d\'état. Cela risque de réduire l\'autonomie de la batterie." - "Réorganiser la fenêtre de configuration rapide" - "Afficher la luminosité dans fenêtre de configuration rapide" + "Réorganiser les Réglages rapides" + "Afficher la luminosité dans les Réglages rapides" "Paramètres expérimentaux" "Activer le Bluetooth ?" "Pour connecter un clavier à votre tablette, vous devez avoir activé le Bluetooth." @@ -882,22 +883,22 @@ "Écran du haut à 50 %" "Écran du haut à 30 %" "Écran du bas en plein écran" - "supprimer la carte" - "ajouter la carte à la fin" - "Déplacer la carte" - "Ajouter une carte" + "supprimer le bloc" + "ajouter le bloc à la fin" + "Déplacer le bloc" + "Ajouter un bloc" "Déplacer vers %1$d" "Ajouter à la position %1$d" "Position %1$d" - "Éditeur de configuration rapide." + "Éditeur Réglages rapides" "Notification %1$s : %2$s" "Il est possible que l\'application ne fonctionne pas en mode Écran partagé." "Application incompatible avec l\'écran partagé." "Il est possible que l\'application ne fonctionne pas sur un écran secondaire." "L\'application ne peut pas être lancée sur des écrans secondaires." "Ouvrir les paramètres." - "Ouvrir la fenêtre de configuration rapide." - "Fermer la fenêtre de configuration rapide." + "Ouvrir les Réglages rapides." + "Fermer les Réglages rapides." "Alarme définie." "Connecté en tant que %s" "Aucun accès à Internet" @@ -1097,4 +1098,6 @@ "%1$s (déconnecté)" "Impossible de se connecter. Réessayez." "Associer un nouvel appareil" + "Un problème est survenu au niveau de la lecture de votre outil de mesure de batterie" + "Appuyer pour en savoir plus" diff --git a/packages/SystemUI/res/values-gl/strings.xml b/packages/SystemUI/res/values-gl/strings.xml index abb831595da..a210c33297d 100644 --- a/packages/SystemUI/res/values-gl/strings.xml +++ b/packages/SystemUI/res/values-gl/strings.xml @@ -181,6 +181,7 @@ "Dúas barras de batería" "Tres barras de batería" "Batería cargada" + "Descoñécese a porcentaxe da batería." "Sen teléfono" "Unha barra de cobertura" "Dúas barras de cobertura" @@ -474,10 +475,10 @@ "Mostrar perfil" "Engadir usuario" "Novo usuario" - "Queres eliminar o invitado?" + "Queres quitar o convidado?" "Eliminaranse todas as aplicacións e datos desta sesión." - "Eliminar" - "Benvido de novo, convidado." + "Quitar" + "Benvido de novo, convidado" "Queres continuar coa túa sesión?" "Comezar de novo" "Si, continuar" @@ -488,7 +489,7 @@ "Pechar sesión do usuario actual" "PECHAR SESIÓN DO USUARIO" "Engadir un usuario novo?" - "Cando engadas un usuario novo, este deberá configurar o seu espazo\n\nCalquera usuario pode actualizar as aplicacións para todos os demais usuarios." + "Cando engadas un usuario novo, este deberá configurar o seu espazo.\n\nCalquera usuario pode actualizar as aplicacións para todos os demais usuarios." "Alcanzouse o límite de usuarios" Podes engadir ata %d usuarios. @@ -765,7 +766,7 @@ %d minuto "Uso de batería" - "A función de aforro da batería non está dispoñible durante a carga" + "A función de aforro de batería non está dispoñible durante a carga" "Aforro de batería" "Reduce o rendemento e os datos en segundo plano" "Botón %1$s" @@ -1097,4 +1098,6 @@ "%1$s (dispositivo desconectado)" "Non se puido establecer a conexión. Téntao de novo." "Vincular dispositivo novo" + "Produciuse un problema ao ler o medidor da batería" + "Toca para obter máis información" diff --git a/packages/SystemUI/res/values-gu/strings.xml b/packages/SystemUI/res/values-gu/strings.xml index 5eb8db7a73c..db782167c7a 100644 --- a/packages/SystemUI/res/values-gu/strings.xml +++ b/packages/SystemUI/res/values-gu/strings.xml @@ -181,6 +181,7 @@ "બૅટરી બે બાર." "બૅટરી ત્રણ બાર." "બૅટરી પૂર્ણ." + "બૅટરીની ટકાવારી અજાણ છે." "કોઈ ફોન નથી." "ફોન એક બાર." "ફોન બે બાર." @@ -389,7 +390,7 @@ "સ્વતઃ" "રંગોને ઉલટાવો" "રંગ સુધારણા મોડ" - "વધુ સેટિંગ્સ" + "વધુ સેટિંગ" "થઈ ગયું" "કનેક્ટ થયેલ" "કનેક્ટ કરેલ, %1$s બૅટરી" @@ -475,10 +476,10 @@ "વપરાશકર્તા ઉમેરો" "નવો વપરાશકર્તા" "અતિથિ દૂર કરીએ?" - "આ સત્રમાંની તમામ ઍપ્લિકેશનો અને ડેટા કાઢી નાખવામાં આવશે." + "આ સત્રમાંની તમામ ઍપ અને ડેટા કાઢી નાખવામાં આવશે." "દૂર કરો" "ફરી સ્વાગત છે, અતિથિ!" - "શું તમે તમારું સત્ર ચાલુ કરવા માંગો છો?" + "શું તમે તમારું સત્ર ચાલુ રાખવા માંગો છો?" "શરૂ કરો" "હા, ચાલુ રાખો" "અતિથિ વપરાશકર્તા" @@ -488,7 +489,7 @@ "વર્તમાન વપરાશકર્તાને લૉગઆઉટ કરો" "વપરાશકર્તાને લૉગઆઉટ કરો" "નવા વપરાશકર્તાને ઉમેરીએ?" - "જ્યારે તમે કોઈ નવા વપરાશકર્તાને ઉમેરો છો, ત્યારે તે વ્યક્તિને તેમનું સ્થાન સેટ કરવાની જરૂર પડે છે.\n\nકોઈપણ વપરાશકર્તા બધા અન્ય વપરાશકર્તાઓ માટે એપ્લિકેશન્સને અપડેટ કરી શકે છે." + "જ્યારે તમે કોઈ નવા વપરાશકર્તાને ઉમેરો છો, ત્યારે તે વ્યક્તિને તેમનું સ્થાન સેટ કરવાની જરૂર પડે છે.\n\nકોઈપણ વપરાશકર્તા બધા અન્ય વપરાશકર્તાઓ માટે ઍપને અપડેટ કરી શકે છે." "વપરાશકર્તા સંખ્યાની મર્યાદા" તમે %d વપરાશકર્તા સુધી ઉમેરી શકો છો. @@ -498,7 +499,7 @@ "આ વપરાશકર્તાની તમામ ઍપ્લિકેશનો અને ડેટા કાઢી નાખવામાં આવશે." "દૂર કરો" "બૅટરી સેવર ચાલુ છે" - "પ્રદર્શન અને બૅકગ્રાઉન્ડ ડેટા ઘટાડે છે" + "કાર્યપ્રદર્શન અને બૅકગ્રાઉન્ડ ડેટા ઘટાડે છે" "બૅટરી સેવર બંધ કરો" "રેકૉર્ડ અથવા કાસ્ટ કરતી વખતે, %sને તમારી સ્ક્રીન પર દેખાતી હોય અથવા તમારા ડિવાઇસ પર ચલાવવામાં આવતી હોય તેવી બધી માહિતીનો ઍક્સેસ હશે. આમાં પાસવર્ડ, ચુકવણીની વિગતો, ફોટા, સંદેશા અને તમે ચલાવો છો તે ઑડિયો જેવી માહિતીનો સમાવેશ થાય છે." "રેકૉર્ડ અથવા કાસ્ટ કરતી વખતે, આ સુવિધા આપતી સેવાને તમારી સ્ક્રીન પર દેખાતી હોય અથવા તમારા ડિવાઇસ પર ચલાવવામાં આવતી હોય તેવી બધી માહિતીનો ઍક્સેસ હશે. આમાં પાસવર્ડ, ચુકવણીની વિગતો, ફોટા, સંદેશા અને તમે ચલાવો છો તે ઑડિયો જેવી માહિતીનો સમાવેશ થાય છે." @@ -542,7 +543,7 @@ "CA પ્રમાણપત્રો" "VPN અક્ષમ કરો" "VPN ડિસ્કનેક્ટ કરો" - "નીતિઓ જુઓ" + "પૉલિસીઓ જુઓ" "આ ડિવાઇસ %1$sની માલિકીનું છે.\n\nતમારા IT વ્યવસ્થાપક સેટિંગ, કૉર્પોરેટ ઍક્સેસ, ઍપ, તમારા ડિવાઇસ સાથે સંકળાયેલો ડેટા અને તમારા ડિવાઇસની સ્થાન માહિતીનું નિરીક્ષણ તેમજ તેને મેનેજ કરી શકે છે.\n\nવધુ માહિતી માટે, તમારા IT વ્યવસ્થાપકનો સંપર્ક કરો." "આ ડિવાઇસ તમારી સંસ્થાની માલિકીનું છે.\n\nતમારા IT વ્યવસ્થાપક સેટિંગ, કૉર્પોરેટ ઍક્સેસ, ઍપ, તમારા ડિવાઇસ સાથે સંકળાયેલો ડેટા અને તમારા ડિવાઇસની સ્થાન માહિતીનું નિરીક્ષણ તેમજ તેને મેનેજ કરી શકે છે.\n\nવધુ માહિતી માટે, તમારા IT વ્યવસ્થાપકનો સંપર્ક કરો." "તમારી સંસ્થાએ આ ઉપકરણ પર પ્રમાણપત્ર સત્તાધિકારી ઇન્સ્ટૉલ કર્યું છે. તમારા સુરક્ષિત નેટવર્ક ટ્રાફિકનું નિયમન થઈ શકે છે અથવા તેમાં ફેરફાર કરવામાં આવી શકે છે." @@ -737,7 +738,7 @@ "%1$s માટે સૂચના નિયંત્રણો ચાલુ છે" "%1$s માટે સૂચના નિયંત્રણો બંધ છે" "આ ચૅનલની સૂચનાઓને મંજૂરી આપો" - "વધુ સેટિંગ્સ" + "વધુ સેટિંગ" "કસ્ટમાઇઝ કરો" "થઈ ગયું" "રદ કરો" @@ -767,7 +768,7 @@ "બૅટરી વપરાશ" "ચાર્જિંગ દરમિયાન બૅટરી સેવર ઉપલબ્ધ નથી" "બૅટરી સેવર" - "પ્રદર્શન અને બૅકગ્રાઉન્ડ ડેટા ઘટાડે છે" + "કાર્યપ્રદર્શન અને બૅકગ્રાઉન્ડ ડેટા ઘટાડે છે" "બટન %1$s" "Home" "Back" @@ -1097,4 +1098,6 @@ "%1$s (ડિસ્કનેક્ટ થયેલું)" "કનેક્ટ કરી શકાયું નહીં. ફરી પ્રયાસ કરો." "નવા ડિવાઇસ સાથે જોડાણ કરો" + "તમારું બૅટરી મીટર વાંચવામાં સમસ્યા આવી" + "વધુ માહિતી માટે ટૅપ કરો" diff --git a/packages/SystemUI/res/values-hi/strings.xml b/packages/SystemUI/res/values-hi/strings.xml index f1c9cc9bd5b..766a45cff53 100644 --- a/packages/SystemUI/res/values-hi/strings.xml +++ b/packages/SystemUI/res/values-hi/strings.xml @@ -181,6 +181,7 @@ "बैटरी दो बार." "बैटरी तीन बार." "बैटरी पूरी है." + "इस बारे में जानकारी नहीं है कि अभी बैटरी कितने प्रतिशत चार्ज है." "कोई फ़ोन नहीं." "फ़ोन एक बार." "फ़ोन दो बार." @@ -239,9 +240,7 @@ "बैटरी का विवरण खोलें" "%d प्रति‍शत बैटरी." "%1$s प्रतिशत बैटरी बची है और आपके इस्तेमाल के हिसाब से यह %2$s में खत्म हो जाएगी" - - - + "बैटरी चार्ज हो रही है, %d प्रतिशत." "सिस्टम सेटिंग." "सूचनाएं." "पूरी सूचनाएं देखें" @@ -476,10 +475,10 @@ "प्रोफ़ाइल दिखाएं" "उपयोगकर्ता जोड़ें" "नया उपयोगकर्ता" - "अतिथि को निकालें?" - "इस सत्र के सभी ऐप्स और डेटा को हटा दिया जाएगा." + "क्या आप मेहमान को हटाना चाहते हैं?" + "इस सत्र के सभी ऐप्लिकेशन और डेटा को हटा दिया जाएगा." "निकालें" - "अतिथि, आपका फिर से स्वागत है!" + "मेहमान, आपका फिर से स्वागत है!" "क्‍या आप अपना सत्र जारी रखना चाहते हैं?" "फिर से शुरू करें" "हां, जारी रखें" @@ -498,9 +497,9 @@ "उपयोगकर्ता निकालें?" "इस उपयोगकर्ता के सभी ऐप और डेटा को हटा दिया जाएगा." - "निकालें" + "हटाएं" "बैटरी सेवर चालू है" - "निष्‍पादन और पृष्ठभूमि डेटा को कम करता है" + "परफ़ॉर्मेंस और बैकग्राउंड डेटा को कम करता है" "बैटरी सेवर बंद करें" "रिकॉर्ड या कास्ट करते समय, %s आपकी स्क्रीन पर दिख रही या आपके डिवाइस पर चलाई जा रही जानकारी ऐक्सेस कर सकता है. इसमें पासवर्ड, पैसे चुकाने का ब्यौरा, फ़ोटो, मैसेज, और चलाए गए ऑडियो जैसी जानकारी शामिल है." "रिकॉर्ड या कास्ट करते समय, वह सेवा जो यह फ़ंक्शन उपलब्ध कराती है, आपके डिवाइस पर चलाई जा रही या स्क्रीन पर दिख रही जानकारी को ऐक्सेस कर सकती है. इसमें पासवर्ड, पैसे चुकाने का ब्यौरा, फ़ोटो, मैसेज, और चलाए गए ऑडियो जैसी जानकारी शामिल है." @@ -716,7 +715,7 @@ "फ़ोन की सेटिंग के आधार पर, सूचना आने पर घंटी बज सकती है या वाइब्रेशन हो सकता है" "फ़ोन की सेटिंग के आधार पर, सूचना आने पर घंटी बज सकती है या वाइब्रेशन हो सकता है. %1$s में होने वाली बातचीत, डिफ़ॉल्ट रूप से बबल के तौर पर दिखती है." "फ़्लोट करने वाले शॉर्टकट की मदद से इस सामग्री पर आपका ध्यान बना रहता है." - "इससे बातचीत, सेक्शन में सबसे ऊपर और फ़्लोटिंग बबल के तौर पर दिखती है. साथ ही, लॉक स्क्रीन पर प्रोफ़ाइल फ़ोटो दिखती है" + "इससे चैट, बातचीत सेक्शन में सबसे ऊपर फ़्लोटिंग बबल के तौर पर दिखती है. साथ ही, लॉक स्क्रीन पर प्रोफ़ाइल फ़ोटो दिखती है" "सेटिंग" "प्राथमिकता" "%1$s पर बातचीत की सुविधाएं काम नहीं करतीं" @@ -769,7 +768,7 @@ "बैटरी उपयोग" "चार्ज किए जाने के दौरान बैटरी सेवर उपलब्ध नहीं है" "बैटरी सेवर" - "निष्‍पादन और पृष्ठभूमि डेटा को कम करता है" + "परफ़ॉर्मेंस और बैकग्राउंड डेटा को कम करता है" "बटन %1$s" "Home" "Back" @@ -981,8 +980,8 @@ "- यह %1$s से सूचना पढ़ सकता है" "- यह %1$s में कार्रवाई कर सकता है" "%1$s को किसी भी ऐप्लिकेशन के हिस्से (स्लाइस) दिखाने की मंज़ूरी दें" - "मंज़ूरी दें" - "नामंज़ूर करें" + "अनुमति दें" + "अनुमति न दें" "बैटरी सेवर शेड्यूल करने के लिए टैप करें" "जब बैटरी खत्म होने वाली हो तब \'बैटरी सेवर\' चालू करें" "जी नहीं, शुक्रिया" @@ -1099,4 +1098,6 @@ "%1$s (डिसकनेक्ट किया गया)" "कनेक्ट नहीं किया जा सका. फिर से कोशिश करें." "नया डिवाइस जोड़ें" + "आपके डिवाइस के बैटरी मीटर की रीडिंग लेने में समस्या आ रही है" + "ज़्यादा जानकारी के लिए टैप करें" diff --git a/packages/SystemUI/res/values-hr/strings.xml b/packages/SystemUI/res/values-hr/strings.xml index 9a659ccad10..d22c319cc0e 100644 --- a/packages/SystemUI/res/values-hr/strings.xml +++ b/packages/SystemUI/res/values-hr/strings.xml @@ -181,6 +181,7 @@ "Baterija dva stupca." "Baterija tri stupca." "Baterija je puna." + "Postotak baterije nije poznat." "Nema telefona." "Telefonski signal jedan stupac." "Telefonski signal dva stupca." @@ -967,10 +968,10 @@ "%1$s, %2$s" "Wi-Fi je isključen" "Bluetooth je isključen" - "Način Ne ometaj isključen" - "Način Ne ometaj uključilo je automatsko pravilo (%s)." - "Način Ne ometaj uključila je aplikacija (%s)." - "Način Ne ometaj uključilo je automatsko pravilo ili aplikacija." + "Način Ne uznemiravaj isključen" + "Način Ne uznemiravaj uključilo je automatsko pravilo (%s)." + "Način Ne uznemiravaj uključila je aplikacija (%s)." + "Način Ne uznemiravaj uključilo je automatsko pravilo ili aplikacija." "Do %s" "Zadrži" "Zamijeni" @@ -1103,4 +1104,6 @@ "%1$s (nije povezano)" "Povezivanje nije bilo moguće. Pokušajte ponovo." "Upari novi uređaj" + "Problem s očitavanjem mjerača baterije" + "Dodirnite za više informacija" diff --git a/packages/SystemUI/res/values-hu/strings.xml b/packages/SystemUI/res/values-hu/strings.xml index 98c520bce3d..0a37bf8f75c 100644 --- a/packages/SystemUI/res/values-hu/strings.xml +++ b/packages/SystemUI/res/values-hu/strings.xml @@ -181,6 +181,7 @@ "Akkumulátor két sáv." "Akkumulátor három sáv." "Akkumulátor feltöltve." + "Az akkumulátor töltöttségi szintje ismeretlen." "Nincs telefon." "Telefon egy sáv." "Telefon két sáv." @@ -419,7 +420,7 @@ "Bekapcsolás: %s" "Eddig: %s" "Sötét téma" - "Akkumulátorkímélő" + "Akkumulátorkímélő mód" "Be: napnyugta" "Napfelkeltéig" "Be: %s" @@ -1097,4 +1098,6 @@ "%1$s (leválasztva)" "Sikertelen csatlakozás. Próbálja újra." "Új eszköz párosítása" + "Probléma merült fel az akkumulátor-töltésmérő olvasásakor" + "Koppintással további információkat érhet el." diff --git a/packages/SystemUI/res/values-hy/strings.xml b/packages/SystemUI/res/values-hy/strings.xml index d3f0791c08f..cfd0c0bec4d 100644 --- a/packages/SystemUI/res/values-hy/strings.xml +++ b/packages/SystemUI/res/values-hy/strings.xml @@ -181,6 +181,7 @@ "Մարտկոցի երկու գիծ:" "Մարտկոցի երեք գիծ:" "Մարտկոցը լիքն է:" + "Մարտկոցի լիցքի մակարդակն անհայտ է։" "Հեռախոս չկա:" "Հեռախոսի մեկ գիծ:" "Հեռախոսի երկու գիծ:" @@ -474,12 +475,12 @@ "Ցույց տալ դիտարկումը" "Ավելացնել օգտատեր" "Նոր օգտատեր" - "Հեռացնե՞լ հյուրին:" + "Հեռացնե՞լ հյուրին" "Այս աշխատաշրջանի բոլոր ծրագրերն ու տվյալները կջնջվեն:" "Հեռացնել" - "Բարի վերադարձ, հյուր:" - "Դուք ցանկանու՞մ եք շարունակել ձեր գործողությունը:" - "Սկսել" + "Բարի վերադարձ, հյուր" + "Շարունակե՞լ աշխատաշրջանը։" + "Վերսկսել" "Այո, շարունակել" "Հյուր" "Հավելվածները և տվյալները ջնջելու համար հեռացրեք հյուրին" @@ -487,7 +488,7 @@ "Ընթացիկ օգտատիրոջ դուրս գրում" "Ընթացիկ օգտատիրոջ դուրս գրում" "ԸՆԹԱՑԻԿ ՕԳՏՎՈՂԻ ԴՈՒՐՍ ԳՐՈՒՄ" - "Ավելացնե՞լ նոր պրոֆիլ:" + "Ավելացնե՞լ նոր օգտատեր" "Երբ նոր օգտատեր եք ավելացնում, նա պետք է կարգավորի իր պրոֆիլը:\n\nՑանկացած օգտատեր կարող է թարմացնել հավելվածները մյուս բոլոր հաշիվների համար:" "Սահմանաչափը սպառված է" @@ -757,11 +758,11 @@ "ՀԵՏԱՐԿԵԼ" "Հետաձգվել է %1$sով" - %d hours + %d ժամ %d ժամ - %d minutes + %d րոպե %d րոպե "Մարտկոցի օգտագործում" @@ -996,7 +997,7 @@ "տեսախցիկը" "վայրը" "խոսափողը" - "Տվիչներն անջատած են" + "Տվիչներն անջատված են" "Սարքի ծառայություններ" "Անանուն" "Հպեք՝ հավելվածը վերագործարկելու և լիաէկրան ռեժիմին անցնելու համար։" @@ -1097,4 +1098,6 @@ "%1$s (անջատված է)" "Չհաջողվեց միանալ։ Նորից փորձեք։" "Նոր սարքի զուգակցում" + "Մարտկոցի ցուցիչի ցուցմունքը կարդալու հետ կապված խնդիր կա" + "Հպեք՝ ավելին իմանալու համար" diff --git a/packages/SystemUI/res/values-in/strings.xml b/packages/SystemUI/res/values-in/strings.xml index 954562764ee..85e58f387c7 100644 --- a/packages/SystemUI/res/values-in/strings.xml +++ b/packages/SystemUI/res/values-in/strings.xml @@ -181,6 +181,7 @@ "Baterai dua batang." "Baterai tiga batang." "Baterai penuh." + "Persentase baterai tidak diketahui." "Tidak dapat melakukan panggilan." "Ponsel satu batang." "Ponsel dua batang." @@ -590,20 +591,20 @@ "aktifkan" "nonaktifkan" "Ganti perangkat keluaran" - "Aplikasi dipasangi pin" - "Ini akan terus ditampilkan sampai Anda melepas pin. Sentuh lama tombol Kembali dan Ringkasan untuk melepas pin." - "Ini akan terus ditampilkan sampai Anda melepas pin. Sentuh lama tombol Kembali dan Beranda untuk melepas pin." - "Aplikasi akan terus ditampilkan sampai pin dilepas. Geser ke atas dan tahan untuk lepas pin." - "Ini akan terus ditampilkan sampai Anda melepas pin. Sentuh lama tombol Ringkasan untuk melepas pin." - "Ini akan terus ditampilkan sampai Anda melepas pin. Sentuh lama tombol Beranda untuk melepas pin." + "Aplikasi disematkan" + "Ini akan terus ditampilkan sampai Anda melepas sematan. Sentuh lama tombol Kembali dan Ringkasan untuk melepas sematan." + "Ini akan terus ditampilkan sampai Anda melepas sematan. Sentuh lama tombol Kembali dan Beranda untuk melepas sematan." + "Aplikasi akan terus ditampilkan sampai sematan dilepaskan. Geser ke atas dan tahan agar sematan lepas." + "Ini akan terus ditampilkan sampai Anda melepas sematan. Sentuh lama tombol Ringkasan untuk melepas sematan." + "Ini akan terus ditampilkan sampai Anda melepas sematan. Sentuh lama tombol Beranda untuk melepas sematan." "Data pribadi dapat diakses (seperti kontak dan konten email)." "Aplikasi yang disematkan dapat membuka aplikasi lain." - "Untuk melepas pin aplikasi ini, sentuh & lama tombol Kembali dan Ringkasan" - "Untuk melepas pin aplikasi ini, sentuh & lama tombol Kembali dan Layar utama" - "Untuk melepas pin aplikasi ini, geser ke atas & tahan" + "Untuk melepas sematan aplikasi ini, sentuh lama tombol Kembali dan Ringkasan" + "Untuk melepas sematan aplikasi ini, sentuh lama tombol Kembali dan Layar utama" + "Untuk melepas sematan aplikasi ini, geser ke atas & tahan" "Mengerti" "Lain kali" - "Aplikasi dipasangi pin" + "Aplikasi disematkan" "Aplikasi dilepas pinnya" "Sembunyikan %1$s?" "Ini akan muncul kembali saat Anda mengaktifkannya dalam setelan." @@ -1097,4 +1098,6 @@ "%1$s (terputus)" "Tidak dapat terhubung. Coba lagi." "Sambungkan perangkat baru" + "Terjadi masalah saat membaca indikator baterai" + "Ketuk untuk informasi selengkapnya" diff --git a/packages/SystemUI/res/values-is/strings.xml b/packages/SystemUI/res/values-is/strings.xml index 9a380757dd5..324abb50849 100644 --- a/packages/SystemUI/res/values-is/strings.xml +++ b/packages/SystemUI/res/values-is/strings.xml @@ -181,6 +181,7 @@ "Tvö strik á rafhlöðu." "Þrjú strik á rafhlöðu." "Rafhlaða fullhlaðin." + "Staða rafhlöðu óþekkt." "Ekkert símasamband." "Styrkur símasambands er eitt strik." "Styrkur símasambands er tvö strik." @@ -1097,4 +1098,6 @@ "%1$s (aftengt)" "Tenging mistókst. Reyndu aftur." "Para nýtt tæki" + "Vandamál við að lesa stöðu rafhlöðu" + "Ýttu til að fá frekari upplýsingar" diff --git a/packages/SystemUI/res/values-it/strings.xml b/packages/SystemUI/res/values-it/strings.xml index 6e4daae0a08..8dcb5bc2030 100644 --- a/packages/SystemUI/res/values-it/strings.xml +++ b/packages/SystemUI/res/values-it/strings.xml @@ -63,7 +63,7 @@ "Consenti" "Debug USB non consentito" "L\'utente che ha eseguito l\'accesso a questo dispositivo non può attivare il debug USB. Per utilizzare questa funzione, passa all\'utente principale." - "Consentire debug wireless su questa rete?" + "Consentire il debug wireless su questa rete?" "Nome della rete (SSID)\n%1$s\n\nIndirizzo Wi‑Fi (BSSID)\n%2$s" "Consenti sempre su questa rete" "Consenti" @@ -181,6 +181,7 @@ "Batteria: due barre." "Batteria: tre barre." "Batteria carica." + "Percentuale della batteria sconosciuta." "Nessun telefono." "Telefono: una barra." "Telefono: due barre." @@ -477,7 +478,7 @@ "Rimuovere l\'ospite?" "Tutte le app e i dati di questa sessione verranno eliminati." "Rimuovi" - "Bentornato, ospite." + "Ti ridiamo il benvenuto alla sessione Ospite." "Vuoi continuare la sessione?" "Ricomincia" "Sì, continua" @@ -1097,4 +1098,6 @@ "%1$s (disconnesso)" "Impossibile connettersi. Riprova." "Accoppia nuovo dispositivo" + "Problema durante la lettura dell\'indicatore di livello della batteria" + "Tocca per ulteriori informazioni" diff --git a/packages/SystemUI/res/values-iw/strings.xml b/packages/SystemUI/res/values-iw/strings.xml index b81129924cd..33a7621853d 100644 --- a/packages/SystemUI/res/values-iw/strings.xml +++ b/packages/SystemUI/res/values-iw/strings.xml @@ -28,35 +28,35 @@ "נותרו %s" "נותרו %1$s, נשארו בערך %2$s על סמך השימוש במכשיר" "נותרו %1$s, נשארו בערך %2$s" - "נותרו %s. הופעלה תכונת החיסכון בסוללה." + "נותרו %s. התכונה \'חיסכון בסוללה\' הופעלה." "‏לא ניתן לטעון באמצעות USB. ניתן להשתמש במטען שצורף למכשיר שלך." "‏לא ניתן לטעון באמצעות USB" "שימוש במטען שסופק עם המכשיר" "הגדרות" "להפעיל את תכונת החיסכון בסוללה?" - "מידע על מצב החיסכון בסוללה" + "מידע על מצב \'חיסכון בסוללה\'" "הפעלה" "הפעלת תכונת החיסכון בסוללה" "הגדרות" "Wi-Fi" "סיבוב אוטומטי של המסך" - "השתק" + "השתקה" "אוטומטי" "התראות" - "‏Bluetooth קשור" + "‏ה-Bluetooth שותף" "הגדר שיטות קלט" "מקלדת פיזית" "האם לתת לאפליקציה %1$s גישה אל %2$s?" "‏האם לאפשר לאפליקציה %1$s גישה אל %2$s?\nאפליקציה זו לא קיבלה הרשאה להקליט אך יכולה לתעד אודיו באמצעות מכשיר USB זה." "האם לתת לאפליקציה %1$s גישה אל %2$s?" "האם לפתוח את %1$s כדי לעבוד עם %2$s?" - "‏לפתוח את %1$s לטיפול במכשיר %2$s?\nאפליקציה זו לא קיבלה הרשאה להקליט אך יכולה לתעד אודיו באמצעות מכשיר USB זה." + "‏לפתוח את %1$s לטיפול בהתקן %2$s?\nהאפליקציה הזו לא קיבלה הרשאה להקליט אך היא יכולה לתעד אודיו באמצעות התקן ה-USB הזה." "האם לפתוח את %1$s כדי לעבוד עם %2$s?" "‏אין אפליקציות מותקנות הפועלות עם אביזר ה-USB. למידע נוסף על אביזר זה היכנס לכתובת %1$s" "‏אביזר USB" "הצג" "האפליקציה %1$s תמיד תיפתח כשהאביזר %2$s יחובר" - "האפליקציה %1$s תמיד תיפתח כשהאביזר %2$s יחובר" + "האפליקציה %1$s תמיד תיפתח כשההתקן %2$s יחובר" "‏האם לאפשר ניפוי באגים ב-USB?" "‏טביעת האצבע של מפתח ה-RSA של המחשב היא:\n%1$s" "אפשר תמיד ממחשב זה" @@ -75,7 +75,7 @@ "‏הפעלת USB" "מידע נוסף" "הגדל תצוגה כדי למלא את המסך" - "מתח כדי למלא את המסך" + "מתיחה למילוי של המסך" "צילום מסך" "נשלחה תמונה" "שומר צילום מסך..." @@ -109,14 +109,14 @@ "ביטול" "שיתוף" "הקלטת המסך בוטלה" - "הקלטת המסך נשמרה, יש להקיש כדי להציג" + "הקלטת המסך נשמרה, אפשר להקיש כדי לצפות בה" "שגיאה במחיקת הקלטת המסך" "קבלת ההרשאות נכשלה" "שגיאה בהפעלה של הקלטת המסך" "‏אפשרויות העברת קבצים ב-USB" - "‏טען כנגן מדיה (MTP)" - "‏טען כמצלמה (PTP)" - "‏התקן את אפליקציית העברת הקבצים של Android עבור Mac" + "‏טעינה כנגן מדיה (MTP)" + "‏טעינה כמצלמה (PTP)" + "‏התקנת האפליקציה \'העברת קבצים ב-Android\' עבור Mac" "הקודם" "בית" "תפריט" @@ -126,7 +126,7 @@ "חיפוש" "מצלמה" "טלפון" - "מסייע קולי" + "האסיסטנט" "ביטול נעילה" "ממתין לטביעת אצבע" "בטל את הנעילה בלי להשתמש בטביעת האצבע" @@ -134,7 +134,7 @@ "שליחה" "ניהול התראות" "פתח את הטלפון" - "פתח את המסייע הקולי" + "פתיחת האסיסטנט" "פתח את המצלמה" "ביטול" "אישור" @@ -144,7 +144,7 @@ "המערכת מחפשת את הפנים שלך" "זיהוי הפנים בוצע" "מאושר" - "יש להקיש על \'אישור\' לסיום" + "יש להקיש על \'אישור\' לסיום התהליך" "מאומת" "שימוש בקוד אימות" "שימוש בקו ביטול נעילה" @@ -156,13 +156,13 @@ "יש לנסות שוב. ניסיון %1$d מתוך %2$d." "הנתונים שלך יימחקו" "הזנת קו ביטול נעילה שגוי בניסיון הבא תגרום למחיקת הנתונים במכשיר." - "הזנת קוד גישה שגוי בניסיון הבא תגרום למחיקת הנתונים במכשיר." + "הזנת קוד אימות שגוי בניסיון הבא תגרום למחיקת הנתונים במכשיר." "הזנת סיסמה שגויה בניסיון הבא תגרום למחיקת הנתונים במכשיר." "הזנת קו ביטול נעילה שגוי בניסיון הבא תגרום למחיקת המשתמש הזה." "הזנת קוד גישה שגוי בניסיון הבא תגרום למחיקת המשתמש הזה." "הזנת סיסמה שגויה בניסיון הבא תגרום למחיקת המשתמש הזה." "הזנת קו ביטול נעילה שגוי בניסיון הבא תגרום למחיקת פרופיל העבודה והנתונים המשויכים אליו." - "הזנת קוד גישה שגוי בניסיון הבא תגרום למחיקת פרופיל העבודה והנתונים המשויכים אליו." + "הזנה של קוד אימות שגוי בניסיון הבא תגרום למחיקת פרופיל העבודה והנתונים המשויכים אליו." "הזנת סיסמה שגויה בניסיון הבא תגרום למחיקת פרופיל העבודה והנתונים המשויכים אליו." "נעשו יותר מדי ניסיונות שגויים. הנתונים במכשיר יימחקו." "נעשו יותר מדי ניסיונות שגויים. המשתמש הזה יימחק." @@ -173,7 +173,7 @@ "מחפש אותך…" "סמל הפנים" "לחצן מרחק מתצוגה של תאימות." - "שנה מרחק מתצוגה של מסך קטן לגדול יותר." + "שינוי מרחק מתצוגה של מסך קטן לגדול יותר." "‏Bluetooth מחובר." "‏Bluetooth מנותק." "אין סוללה." @@ -181,6 +181,7 @@ "שני פסים של סוללה." "שלושה פסים של סוללה." "סוללה מלאה." + "אחוז טעינת הסוללה לא ידוע." "אין טלפון." "פס אחד של טלפון." "שני פסים של טלפון." @@ -191,7 +192,7 @@ "שני פסים של נתונים." "שלושה פסים של נתונים." "אות הנתונים מלא." - "מחובר אל %s." + "התבצע חיבור אל %s." "מחובר אל %s." "מחובר אל %s." "‏ללא WiMAX." @@ -211,7 +212,7 @@ "פועל." "כבוי." "מחובר." - "מתחבר." + "מתבצע חיבור." "GPRS" "HSPA" "3G" @@ -235,7 +236,7 @@ "מצב טיסה" "‏VPN פועל." "‏אין כרטיס SIM." - "רשת ספק משתנה" + "רשת הספק משתנה" "פתיחת פרטי סוללה" "%d אחוזים של סוללה." "רמת הטעינה בסוללה: %1$s אחוזים, הזמן הנותר המשוער על סמך השימוש שלך:%2$s" @@ -284,11 +285,11 @@ "‏Bluetooth נכבה." "‏Bluetooth הופעל." "דיווח מיקום כבוי." - "דיווח מיקום מופעל." + "התכונה \'דיווח מיקום\' מופעלת." "דיווח מיקום נכבה." "דיווח מיקום הופעל." "ההתראה נקבעה ל-%s." - "סגור לוח." + "סגירת הלוח." "יותר זמן." "פחות זמן." "הפנס כבוי." @@ -318,7 +319,7 @@ "הגעת למגבלת הנתונים שהגדרת. אתה כבר לא משתמש בחבילת גלישה.\n\nאם תמשיך, ייתכנו חיובים על שימוש בנתונים." "המשך" "‏מחפש GPS" - "‏מיקום מוגדר על ידי GPS" + "‏המיקום מוגדר על ידי GPS" "בקשות מיקום פעילות" "ההגדרה \'חיישנים כבויים\' פעילה" "הסרת כל ההתראות." @@ -333,9 +334,9 @@ "הגדרת התראות" "הגדרות %s" "המסך יסתובב באופן אוטומטי." - "המסך נעול כעת לרוחב." + "המסך נעול עכשיו לרוחב." "המסך נעול כעת לאורך." - "המסך יסתובב כעת באופן אוטומטי." + "המסך יסתובב עכשיו באופן אוטומטי." "המסך נעול כעת לרוחב." "המסך נעול כעת לאורך." "מזנון קינוחים" @@ -360,12 +361,12 @@ "סיבוב אוטומטי" "סיבוב אוטומטי של המסך" "מצב %s" - "סיבוב נעול" + "סיבוב המסך נעול" "לאורך" "לרוחב" "שיטת קלט" "מיקום" - "מיקום כבוי" + "המיקום מושבת" "מכשיר מדיה" "RSSI" "שיחות חירום בלבד" @@ -380,7 +381,7 @@ "‏Wi-Fi כבוי" "‏Wi-Fi פועל" "‏אין רשתות Wi-Fi זמינות" - "ההפעלה מתבצעת…" + "בתהליך הפעלה…" "העברת מסך" "מעביר" "מכשיר ללא שם" @@ -408,19 +409,19 @@ "התראות" "פנס" - "מצלמה בשימוש" + "המצלמה בשימוש" "חבילת גלישה" "שימוש בנתונים" "מכסת נתונים נותרת" - "חריגה מההגבלה" + "חריגה מהמגבלה" "%s בשימוש" "הגבלה של %s" "אזהרה - %s" "פרופיל עבודה" "תאורת לילה" - "מופעל בשקיעה" + "התכונה מופעלת בשקיעה" "עד הזריחה" - "מופעל בשעה %s" + "תופעל בשעה %s" "עד %s" "עיצוב כהה" "חיסכון בסוללה" @@ -439,28 +440,28 @@ "יש לגרור ימינה כדי לעבור במהירות בין אפליקציות" "החלפת מצב של מסכים אחרונים" "טעון" - "טוען" + "בטעינה" "%s עד למילוי" "לא בטעינה" "ייתכן שהרשת\nמנוטרת" "חיפוש" - "הסט למעלה כדי להציג %s." - "הסט שמאלה כדי להציג %s." + "אפשר להסיט למעלה כדי לבצע %s." + "הסטה שמאלה כדי לבצע %s." "כדי לא להפריע לך, המכשיר לא ירטוט ולא ישמיע שום צליל, חוץ מהתראות, תזכורות, אירועים ושיחות ממתקשרים מסוימים לבחירתך. המצב הזה לא ישפיע על צלילים שהם חלק מתוכן שבחרת להפעיל, כמו מוזיקה, סרטונים ומשחקים." "כדי לא להפריע לך, המכשיר לא ירטוט ולא ישמיע שום צליל, חוץ מהתראות. המצב הזה לא ישפיע על צלילים שהם חלק מתוכן שבחרת להפעיל, כמו מוזיקה, סרטונים ומשחקים." "התאמה אישית" "פעולה זו מבטלת את כל הצלילים והרטט, כולל צלילים ורטט שמקורם בהתראות, מוזיקה, סרטונים ומשחקים. בכל מקרה, עדיין אפשר להתקשר." - "פעולה זו מבטלת את כל הצלילים והרטט, כולל בהתראות, מוזיקה, סרטונים ומשחקים." + "הפעולה הזו מבטלת את כל הצלילים והרטט, כולל בהתראות, מוזיקה, סרטונים ומשחקים." "+%d" - "התראות בדחיפות נמוכה יותר בהמשך" - "הקש שוב כדי לפתוח" + "התראות בדחיפות נמוכה יותר מופיעות בהמשך" + "יש להקיש שוב כדי לפתוח את ההתראה" "צריך להחליק כדי לפתוח" "יש להחליק למעלה כדי לנסות שוב" "המכשיר הזה שייך לארגון שלך" "המכשיר הזה שייך לארגון %s" "החלק מהסמל כדי להפעיל את הטלפון" - "החלק מהסמל כדי להפעיל את המסייע הקולי" - "החלק מהסמל כדי להפעיל את המצלמה" + "יש להחליק מהסמל כדי להפעיל את האסיסטנט" + "צריך להחליק מהסמל כדי להפעיל את המצלמה" "שקט מוחלט. הגדרה זו תשתיק גם קוראי מסך." "שקט מוחלט" "עדיפות בלבד" @@ -480,7 +481,7 @@ "משתמש חדש" "להסיר אורח?" "כל האפליקציות והנתונים בפעילות זו באתר יימחקו." - "הסר" + "הסרה" "שמחים לראותך שוב!" "האם ברצונך להמשיך בפעילות באתר?" "ברצוני להתחיל מחדש" @@ -491,7 +492,7 @@ "ניתוק משתמש" "צא מהמשתמש הנוכחי" "נתק משתמש" - "האם להוסיף משתמש חדש?" + "להוסיף משתמש חדש?" "בעת הוספת משתמש חדש, על משתמש זה להגדיר את השטח שלו.\n\nכל משתמש יכול לעדכן אפליקציות עבור כל המשתמשים האחרים." "הגעת למגבלת המשתמשים שניתן להוסיף" @@ -502,16 +503,16 @@ "האם להסיר את המשתמש?" "כל האפליקציות והנתונים של המשתמש הזה יימחקו." - "הסר" + "הסרה" "תכונת החיסכון בסוללה פועלת" "מפחית את הביצועים ונתונים ברקע" - "כיבוי תכונת החיסכון בסוללה" + "השבתת התכונה \'חיסכון בסוללה\'" "‏לאפליקציית %s תהיה גישה לכל המידע הגלוי במסך שלך ולכל תוכן שמופעל במכשיר שלך בזמן הקלטה או העברה (casting). המידע הזה כולל פרטים כמו סיסמאות, פרטי תשלום, תמונות, הודעות ואודיו שמושמע מהמכשיר." "‏לשירות שמספק את הפונקציה הזו תהיה גישה לכל הפרטים שגלויים במסך שלך או מופעלים מהמכשיר שלך בזמן הקלטה או העברה (cast). זה כולל פרטים כמו סיסמאות, פרטי תשלום, תמונות, הודעות ואודיו שמושמע מהמכשיר." "‏להתחיל להקליט או להעביר (cast)?" "‏להתחיל להקליט או להעביר (cast) באמצעות %s?" "אל תציג שוב" - "ניקוי הכל" + "ניקוי הכול" "ניהול" "היסטוריה" "התראות חדשות" @@ -526,7 +527,7 @@ "ייתכן שהרשת נמצאת במעקב" "ייתכן שהרשת מנוטרת" "הארגון שלך הוא הבעלים של מכשיר זה והוא עשוי לנטר את התנועה ברשת" - "הארגון %1$s הוא הבעלים של מכשיר זה והוא עשוי לנטר את התנועה ברשת" + "הארגון %1$s הוא הבעלים של המכשיר הזה והוא עשוי לנטר את התנועה ברשת" "המכשיר הזה שייך לארגון שלך, והוא מחובר ל-%1$s" "המכשיר הזה שייך לארגון %1$s והוא מחובר ל-%2$s" "המכשיר הזה שייך לארגון שלך" @@ -546,16 +547,16 @@ "VPN" "רישום התנועה ברשת" "‏אישורי CA" - "‏השבת VPN" - "‏נתק את ה-VPN" - "הצג מדיניות" + "‏השבתת VPN" + "‏ניתוק ה-VPN" + "הצגת מדיניות" "‏המכשיר הזה שייך לארגון %1$s.\n\nמנהל ה-IT יכול לנטר ולנהל הגדרות, גישה ארגונית, אפליקציות, נתונים המשויכים למכשיר ומידע על מיקום המכשיר.\n\nלמידע נוסף, יש לפנות למנהל ה-IT." "‏המכשיר הזה שייך לארגון שלך.\n\nמנהל ה-IT יכול לנטר ולנהל הגדרות, גישה ארגונית, אפליקציות, נתונים המשויכים למכשיר ומידע על מיקום המכשיר.\n\nלמידע נוסף, יש לפנות למנהל ה-IT." "הארגון שלך התקין רשות אישורים במכשיר. ניתן לעקוב אחר התנועה ברשת המאובטחת או לשנות אותה." "הארגון שלך התקין רשות אישורים בפרופיל העבודה. ניתן לעקוב אחר התנועה ברשת המאובטחת או לשנות אותה." "במכשיר זה מותקנת רשות אישורים. ניתן לעקוב אחר התנועה ברשת המאובטחת או לשנות אותה." "מנהל המערכת הפעיל את התכונה \'רישום התנועה ברשת\', שמנטרת את תנועת הנתונים במכשיר." - "אתה מחובר לאפליקציה %1$s, שיכולה לעקוב אחר הפעילות שלך ברשת, כולל הודעות אימייל, אפליקציות ואתרים." + "התחברת לאפליקציה %1$s, שיכולה לעקוב אחר הפעילות שלך ברשת, כולל הודעות אימייל, אפליקציות ואתרים." "אתה מחובר לאפליקציות %1$s ו-%2$s, שיכולות לעקוב אחר הפעילות שלך ברשת, כולל הודעות אימייל, אפליקציות ואתרים." "פרופיל העבודה שלך מחובר לאפליקציה %1$s, שיכולה לעקוב אחר הפעילות שלך ברשת, כולל הודעות אימייל, אפליקציות ואתרים." "הפרופיל האישי שלך מחובר לאפליקציה %1$s, שיכולה לעקוב אחר הפעילות שלך ברשת, כולל הודעות אימייל, אפליקציות ואתרים." @@ -564,22 +565,22 @@ "מנהל המערכת יכול לנטר ולנהל הגדרות, גישה ארגונית, אפליקציות, נתונים המשויכים למכשיר ומידע על מיקום המכשיר." " " "למידע נוסף" - "אתה מחובר לאפליקציה %1$s, שיכולה לעקוב אחר הפעילות שלך ברשת, כולל הודעות אימייל, אפליקציות ואתרים." + "התחברת לאפליקציה %1$s, שיכולה לעקוב אחר הפעילות שלך ברשת, כולל הודעות אימייל, אפליקציות ואתרים." " " "‏להגדרות ה-VPN" " " - "פתח את פרטי הכניסה המהימנים" + "פתיחה של פרטי הכניסה המהימנים" "מנהל המערכת הפעיל את תכונת רישום התנועה ברשת, שמנטרת את תנועת הנתונים במכשיר.\n\nלמידע נוסף, צור קשר עם מנהל המערכת." "‏נתת לאפליקציה כלשהי הרשאה להגדיר חיבור ‏VPN‏.\n\nהאפליקציה הזו יכולה לעקוב אחר הפעילות שלך ברשת ובמכשיר, כולל הודעות אימייל, אפליקציות ואתרים." "‏פרופיל העבודה שלך מנוהל על-ידי %1$s.\n\n מנהל המערכת שלך יכול לעקוב אחרי הפעילות שלך ברשת, כולל פעילות באימייל, באפליקציות ובאתרים.\n\n למידע נוסף, צור קשר עם מנהל המערכת.\n\nבנוסף, אתה מחובר ל-VPN, שגם באמצעותו ניתן לעקוב אחרי הפעילות שלך ברשת." "VPN" "אתה מחובר לאפליקציה %1$s, שיכולה לעקוב אחר הפעילות שלך ברשת, כולל הודעות אימייל, אפליקציות ואתרים." - "אתה מחובר לאפליקציה %1$s, שיכולה לעקוב אחר הפעילות שלך ברשת הפרטית, כולל הודעות אימייל, אפליקציות ואתרים." + "התחברת לאפליקציית %1$s, שיכולה לעקוב אחר הפעילות שלך ברשת, כולל הודעות אימייל, אפליקציות ואתרים." "אתה מחובר לאפליקציה %1$s, שיכולה לעקוב אחר הפעילות שלך ברשת הפרטית, כולל הודעות אימייל, אפליקציות ואתרים." "פרופיל העבודה שלך מנוהל על ידי %1$s. הפרופיל מחובר לאפליקציה %2$s, שיכולה לעקוב אחר הפעילות שלך ברשת, כולל הודעות אימייל, אפליקציות ואתרים.\n\nלמידע נוסף, פנה למנהל המערכת." "פרופיל העבודה שלך מנוהל על ידי %1$s. הפרופיל מחובר לאפליקציה %2$s, שיכולה לעקוב אחר הפעילות שלך ברשת, כולל הודעות אימייל, אפליקציות ואתרים.\n\nהפרופיל מחובר גם לאפליקציה %3$s, שיכולה לעקוב אחר הפעילות שלך ברשת." "הנעילה נמנעת על ידי סביבה אמינה" - "המכשיר יישאר נעול עד שתבטל את נעילתו באופן ידני" + "המכשיר יישאר נעול עד שהנעילה שלו תבוטל באופן ידני" "%1$s\n%2$s" "קבלה מהירה של התראות" "צפה בהן לפני שתבטל נעילה" @@ -588,9 +589,9 @@ "%1$s‏. %2$s" "כבה עכשיו" "הגדרות צליל" - "הרחב" - "כווץ" - "הוספת כתוביות אוטומטית למדיה" + "הרחבה" + "כיווץ" + "הוספת כתוביות באופן אוטומטי למדיה" "סגירת הטיפ לגבי כתוביות" "שכבת-על לכיתוב" "הפעלה" @@ -611,8 +612,8 @@ "לא, תודה" "האפליקציה הוצמדה" "הצמדת האפליקציה בוטלה" - "להסתיר%1$s?" - "יופיע מחדש בפעם הבאה שתפעיל את האפשרות בהגדרות." + "להסתיר את %1$s?" + "יופיע מחדש בפעם הבאה שהאפשרות הזו תופעל בהגדרות." "הסתר" "שיחה" "מערכת" @@ -630,14 +631,14 @@ "הטלפון במצב רטט" "הטלפון מושתק" "‏%1$s. הקש כדי לבטל את ההשתקה." - "‏%1$s. הקש כדי להגדיר רטט. ייתכן ששירותי הנגישות מושתקים." + "‏%1$s. צריך להקיש כדי להגדיר רטט. ייתכן ששירותי הנגישות מושתקים." "‏%1$s. הקש כדי להשתיק. ייתכן ששירותי הנגישות מושתקים." - "‏%1$s. הקש כדי להעביר למצב רטט." - "‏%1$s. הקש כדי להשתיק." + "‏%1$s. יש להקיש כדי להעביר למצב רטט." + "‏%1$s. יש להקיש כדי להשתיק." "השתקה" "ביטול ההשתקה" "רטט" - "‏בקרי עוצמת שמע של %s" + "‏בקרי עוצמת קול של %s" "הטלפון יצלצל כשמתקבלות שיחות והתראות (%1$s)" "פלט מדיה" "פלט שיחת טלפון" @@ -653,16 +654,16 @@ "שורת סטטוס" "סקירה" "מצב הדגמה בממשק המשתמש של המערכת" - "הפעל מצב הדגמה" - "הצג מצב הדגמה" + "הפעלת מצב הדגמה" + "הצגת מצב הדגמה" "אתרנט" "התראה" "פרופיל עבודה" "מצב טיסה" - "הוסף אריח" + "הוספת אריח" "אריח שידור" - "לא תשמע את ההתראה הבאה שלך %1$s, אלא אם תשבית קודם את ההגדרה הזו" - "לא תשמע את ההתראה הבאה שלך %1$s" + "כדי לשמוע את ההתראה הבאה שלך %1$s, עליך להשבית את התכונה הזו" + "לא ניתן יהיה לשמוע את ההתראה הבאה שלך %1$s" "בשעה %1$s" "ב-%1$s" "הגדרות מהירות, %s." @@ -676,11 +677,11 @@ "הסר מההגדרות" "‏האם להסיר את System UI Tuner ולהפסיק להשתמש בכל התכונות שלו?" "האפליקציה אינה מותקנת במכשיר" - "הצג שניות בשעון" - "הצג שניות בשעון בשורת הסטטוס. פעולה זו עשויה להשפיע על אורך חיי הסוללה." + "הצגת שניות בשעון" + "הצגת שניות בשעון בשורת הסטטוס. פעולה זו עשויה להשפיע על זמן חיי הסוללה." "סידור מחדש של הגדרות מהירות" - "הצג בהירות בהגדרות מהירות" - "ניסיוני" + "הצגת בהירות בהגדרות המהירות" + "ניסיוניות" "‏האם להפעיל את ה-Bluetooth?" "‏כדי לחבר את המקלדת לטאבלט, תחילה עליך להפעיל את ה-Bluetooth." "הפעלה" @@ -777,7 +778,7 @@ "שימוש בסוללה" "תכונת החיסכון בסוללה אינה זמינה בעת טעינת המכשיר" "חיסכון בסוללה" - "מפחית את רמת הביצועים ואת נתוני הרקע" + "מפחיתה את רמת הביצועים ואת נתוני הרקע" "לחצן %1$s" "דף הבית" "הקודם" @@ -795,13 +796,13 @@ "הבא" "הקודם" "הרץ אחורה" - "הרץ קדימה" + "הרצה קדימה" "דפדוף למעלה" "דפדוף למטה" "מחיקה" "דף הבית" "סיום" - "הזן" + "הוספה" "‏מקש Num Lock" "מקלדת נומרית %1$s" "מערכת" @@ -812,7 +813,7 @@ "מקשי קיצור במקלדת" "החלפה של פריסת מקלדת" "אפליקציות" - "מסייע" + "אסיסטנט" "דפדפן" "אנשי קשר" "אימייל" @@ -822,8 +823,8 @@ "יומן" "הצג עם פקדי עוצמת הקול" "נא לא להפריע" - "מקש קיצור ללחצני עוצמת קול" - "יציאה מ\'נא לא להפריע\' בלחיצה על הלחצן להגברת עוצמת הקול" + "קיצור דרך ללחצני עוצמת קול" + "יציאה ממצב \'נא לא להפריע\' בלחיצה על הלחצן להגברת עוצמת הקול" "סוללה" "שעון" "אוזניות" @@ -870,13 +871,13 @@ "עריכה" "שעה" - "הצג שעות, דקות ושניות" + "הצגת שעות, דקות ושניות" "הצג שעות ודקות (ברירת מחדל)" - "אל תציג את הסמל הזה" + "לא להציג את הסמל הזה" "הצג תמיד באחוזים" - "הצג באחוזים בזמן טעינה (ברירת מחדל)" + "הצגת אחוזים בזמן הטעינה (ברירת מחדל)" "אל תציג את הסמל הזה" "הצגת סמלי התראות בעדיפות נמוכה" @@ -909,7 +910,7 @@ "פתיחה של \'הגדרות מהירות\'." "סגירה של \'הגדרות מהירות\'." "הגדרת התראה." - "מחובר בתור %s" + "בוצעה כניסה בתור %s" "אין אינטרנט" "פתיחת פרטים." "לא זמין כי %s" @@ -917,22 +918,22 @@ "עריכת סדר ההגדרות." "דף %1$d מתוך %2$d" "מסך נעילה" - "הרחב" + "הרחבה" "מזער" "סגירה" "הגדרות" - "גרור למטה כדי לסגור" + "יש לגרור למטה כדי לסגור" "תפריט" "%s במצב תמונה בתוך תמונה" - "אם אינך רוצה שהתכונה הזו תשמש את %s, יש להקיש כדי לפתוח את ההגדרות ולכבות את התכונה." - "הפעל" - "השהה" + "אם אינך רוצה שהתכונה הזו תשמש את %s, יש להקיש כדי לפתוח את ההגדרות ולהשבית את התכונה." + "הפעלה" + "השהיה" "אפשר לדלג אל הבא" "אפשר לדלג אל הקודם" "שינוי גודל" "הטלפון כבה עקב התחממות" "הטלפון פועל כרגיל עכשיו.\nיש להקיש כדי להציג מידע נוסף" - "הטלפון שלך התחמם יותר מדי וכבה כדי להתקרר. הטלפון פועל כרגיל עכשיו.\n\nייתכן שהטלפון יתחמם יותר מדי אם:\n • תשתמש באפליקציות עתירות משאבים (כגון משחקים, אפליקציות וידאו או אפליקציות ניווט)\n • תוריד או תעלה קבצים גדולים\n • תשתמש בטלפון בטמפרטורות גבוהות" + "הטלפון שלך התחמם יותר מדי וכבה כדי להתקרר. הטלפון פועל כרגיל עכשיו.\n\nייתכן שהטלפון יתחמם יותר מדי אם:\n • משתמשים באפליקציות עתירות משאבים (כגון משחקים, אפליקציות וידאו או אפליקציות ניווט)\n • מורידים או מעלים קבצים גדולים\n • משתמשים בטלפון בסביבה עם טמפרטורות גבוהות" "לצפייה בשלבי הטיפול" "הטלפון מתחמם" "חלק מהתכונות מוגבלות כל עוד הטלפון מתקרר.\nיש להקיש כדי להציג מידע נוסף" @@ -986,9 +987,9 @@ "הספק שלך" "יש אפליקציה שמסתירה את בקשת ההרשאה, ולכן להגדרות אין אפשרות לאמת את התשובה." "האם לאפשר ל-%1$s להציג חלקים מ-%2$s?" - "- תהיה לה אפשרות לקרוא מידע מ-%1$s" + "- תהיה לה אפשרות לקרוא מידע מאפליקציית %1$s" "- תהיה לה יכולת לנקוט פעולה בתוך %1$s" - "יש לאשר ל-%1$s להראות חלקים מכל אפליציה שהיא" + "יש לאשר לאפליקציית %1$s להראות חלקים מכל אפליציה שהיא" "אני רוצה לאשר" "אני לא מרשה" "יש להקיש כדי לתזמן את מצב החיסכון בסוללה" @@ -1010,8 +1011,8 @@ "שירותים למכשיר" "ללא שם" "צריך להקיש כדי להפעיל מחדש את האפליקציה הזו ולעבור למסך מלא." - "הגדרות בשביל בועות של %1$s" - "גלישה" + "הגדרות לבועות של %1$s" + "אפשרויות נוספות" "הוספה בחזרה לערימה" "ניהול" "%1$s מהאפליקציה %2$s" @@ -1046,7 +1047,7 @@ "פקדי מכשירים" "יש להוסיף פקדים למכשירים המחוברים" "הגדרה של פקדי מכשירים" - "יש ללחוץ לחיצה ארוכה על לחצן ההפעלה כדי לגשת לבקרים" + "יש ללחוץ לחיצה ארוכה על לחצן ההפעלה כדי לגשת לפקדי המכשיר" "יש לבחור אפליקציה כדי להוסיף פקדים" נוספו %s פקדים. @@ -1059,7 +1060,7 @@ "סומן כהעדפה, במיקום %d" "הוסר מהמועדפים" "להוסיף למועדפים" - "להוסיף למועדפים" + "להסיר מהמועדפים" "העברה למיקום %d" "פקדים" "יש לבחור פקדים לגישה מתפריט ההפעלה" @@ -1076,7 +1077,7 @@ "הפקדים עודכנו" "קוד האימות מכיל אותיות או סמלים" "אימות %s" - "קוד גישה שגוי" + "קוד אימות שגוי" "בתהליך אימות…" "יש להזין קוד אימות" "יש לנסות קוד אימות אחר" @@ -1109,4 +1110,6 @@ "%1$s (מנותק)" "לא ניתן היה להתחבר. יש לנסות שוב." "התאמה של מכשיר חדש" + "בעיה בקריאת מדדי הסוללה" + "יש להקיש כדי להציג מידע נוסף" diff --git a/packages/SystemUI/res/values-iw/strings_tv.xml b/packages/SystemUI/res/values-iw/strings_tv.xml index 1e5fc91ecff..67a78378b5f 100644 --- a/packages/SystemUI/res/values-iw/strings_tv.xml +++ b/packages/SystemUI/res/values-iw/strings_tv.xml @@ -21,8 +21,8 @@ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> "תמונה בתוך תמונה" "(תוכנית ללא כותרת)" - "‏סגור PIP" + "‏סגירת PIP" "מסך מלא" "המיקרופון פעיל" - "‏%1$s קיבלה גישה למיקרופון שלך" + "‏לאפליקציה %1$s יש גישה למיקרופון שלך" diff --git a/packages/SystemUI/res/values-ja/strings.xml b/packages/SystemUI/res/values-ja/strings.xml index 2c71a21081e..91488fa7094 100644 --- a/packages/SystemUI/res/values-ja/strings.xml +++ b/packages/SystemUI/res/values-ja/strings.xml @@ -181,6 +181,7 @@ "電池残量:レベル2" "電池残量:レベル3" "電池残量:満" + "電池残量は不明です。" "電波状態:なし" "電波状態:レベル1" "電波状態:レベル2" @@ -1097,4 +1098,6 @@ "%1$s(未接続)" "接続できませんでした。もう一度お試しください。" "新しいデバイスとのペア設定" + "電池残量の読み込み中に問題が発生しました" + "タップすると詳細が表示されます" diff --git a/packages/SystemUI/res/values-ka/strings.xml b/packages/SystemUI/res/values-ka/strings.xml index 4e7493cb273..a2e1b7f2519 100644 --- a/packages/SystemUI/res/values-ka/strings.xml +++ b/packages/SystemUI/res/values-ka/strings.xml @@ -181,6 +181,7 @@ "ბატარეა ორ ზოლზე." "ბატარეა სამ ზოლზე." "ბატარეა სავსეა." + "ბატარეის პროცენტული მაჩვენებელი უცნობია." "ტელეფონი არ არის." "ტელეფონის სიგნალი ერთ ზოლზეა." "ტელეფონის სიგნალი ორ ზოლზეა." @@ -1097,4 +1098,6 @@ "%1$s (კავშირი გაწყვეტილია)" "დაკავშირება ვერ მოხერხდა. ცადეთ ხელახლა." "ახალი მოწყობილობის დაწყვილება" + "თქვენი ბატარეის მზომის წაკითხვასთან დაკავშირებით პრობლემა დაფიქსირდა" + "შეეხეთ მეტი ინფორმაციისთვის" diff --git a/packages/SystemUI/res/values-kk/strings.xml b/packages/SystemUI/res/values-kk/strings.xml index db520088c48..331f25e1a61 100644 --- a/packages/SystemUI/res/values-kk/strings.xml +++ b/packages/SystemUI/res/values-kk/strings.xml @@ -36,7 +36,7 @@ "Батареяны үнемдеу режимін қосу керек пе?" "Батареяны үнемдеу режимі туралы ақпарат" "Қосу" - "Battery saver функциясын қосу" + "Батареяны үнемдеу режимін қосу" "Параметрлер" "Wi-Fi" "Авто айналатын экран" @@ -181,6 +181,7 @@ "Батарея екі баған." "Батарея үш баған." "Батарея толы." + "Батарея зарядының мөлшері белгісіз." "Телефон жоқ." "Телефон бір баған." "Телефон екі баған." @@ -274,8 +275,8 @@ "үнсіз" "оятқыштар ғана" "Мазаламау." - "\"Мазаламау\" режимі өшірілді." - "\"Мазаламау\" режимі қосылды." + "Мазаламау режимі өшірілді." + "Мазаламау режимі қосылды." "Bluetooth." "Bluetooth өшірулі." "Bluetooth қосулы." @@ -305,8 +306,8 @@ "Жұмыс режимі қосулы." "Жұмыс режимі өшірілді." "Жұмыс режимі қосылды." - "Data Saver өшірілді." - "Data Saver қосылды." + "Трафикті үнемдеу режимі өшірілді." + "Трафикті үнемдеу режимі қосылды." "Sensor Privacy функциясы өшірулі." "Sensor Privacy функциясы қосулы." "Дисплей жарықтығы" @@ -397,7 +398,7 @@ "Тетеринг" "Хотспот" "Қосылуда…" - "Data Saver қосулы" + "Трафикті үнемдеу режимі қосулы" %d құрылғы %d құрылғы @@ -477,7 +478,7 @@ "Қонақты жою керек пе?" "Осы сеанстағы барлық қолданбалар мен деректер жойылады." "Алып тастау" - "Қош келдіңіз, қонақ" + "Қош келдіңіз, қонақ!" "Сеансты жалғастыру керек пе?" "Қайта бастау" "Иә, жалғастыру" @@ -499,7 +500,7 @@ "Жою" "Батареяны үнемдеу режимі қосулы" "Өнімділікті және фондық деректерді азайтады" - "Battery saver функциясын өшіру" + "Батареяны үнемдеу режимін өшіру" "%s жазу не трансляциялау кезінде экранда көрсетілетін немесе дыбысталатын барлық ақпаратты пайдалана алады. Бұған құпия сөздер, төлем туралы мәліметтер, суреттер, хабарлар және аудиоматериалдар кіреді." "Осы функцияны ұсынатын қызмет жазу не трансляциялау кезінде экранда көрсетілетін немесе құрылғыда дыбысталатын ақпаратты пайдалана алады. Бұған құпия сөздер, төлем туралы мәліметтер, суреттер, хабарлар және аудиоматериалдар кіреді." "Жазу немесе трансляциялау басталсын ба?" @@ -513,7 +514,7 @@ "Хабарландырулар" "Әңгімелер" "Барлық дыбыссыз хабарландыруларды өшіру" - "Хабарландырулар \"Мазаламау\" режимінде кідіртілді" + "Хабарландырулар Мазаламау режимінде кідіртілді" "Қазір бастау" "Хабарландырулар жоқ" "Профиль бақылануы мүмкін" @@ -813,16 +814,16 @@ "Дыбыс деңгейін басқару элементтерімен бірге көрсету" "Мазаламау" "Дыбыс деңгейі түймелерінің төте жолы" - "Дыбысы арттырылған кезде, \"Мазаламау\" режимінен шығу" + "Дыбысы арттырылған кезде, Мазаламау режимінен шығу" "Батарея" "Сағат" "Құлақаспап жинағы" "Параметрлерді ашу" "Құлақаспап қосылды" "Құлақаспап жинағы қосылды" - "Data Saver" - "Дерек сақтағыш қосулы" - "Дерек сақтағышы өшірулі" + "Трафикті үнемдеу" + "Трафикті үнемдеу режимі қосулы" + "Трафикті үнемдеу режимі өшірулі" "Қосулы" "Өшірулі" "Қолжетімді емес" @@ -962,10 +963,10 @@ "%1$s, %2$s" "Wi-Fi өшірулі" "Bluetooth өшірулі" - "\"Мазаламау\" режимі өшірулі" - "\"Мазаламау\" режимі (%s) автоматты ережесі арқылы қосылды." - "\"Мазаламау\" режимі (%s) қолданбасы арқылы қосылды." - "\"Мазаламау\" режимі автоматты ереже немесе қолданба арқылы қосылды." + "Мазаламау режимі өшірулі" + "Мазаламау режимі (%s) автоматты ережесі арқылы қосылды." + "Мазаламау режимі (%s) қолданбасы арқылы қосылды." + "Мазаламау режимі автоматты ереже немесе қолданба арқылы қосылды." "%s дейін" "Қалсын" "Ауыстыру" @@ -984,8 +985,8 @@ "Түймені түртіп, Батареяны үнемдеу режимін реттеңіз" "Батареяның заряды бітуге жақындағанда қосыңыз." "Жоқ, рақмет" - "Battery Saver кестесі қосылды" - "Батарея заряды %d%% деңгейінен төмендегенде, Battery Saver автоматты түрде қосылады." + "Батареяны үнемдеу кестесі қосылды" + "Батарея заряды %d%% деңгейінен төмендегенде, Батареяны үнемдеу режимі автоматты түрде қосылады." "Параметрлер" "Түсінікті" "Dump SysUI Heap" @@ -1027,7 +1028,7 @@ "Әңгімелер бөлімінің жоғарғы жағында көрсетіледі." "Профиль суреті құлыптаулы экранда көрсетіледі." "Қолданбалар терезесінің бергі жағынан қалқыма хабарлар түрінде көрсетіледі." - "\"Мазаламау\" режимінде көрсетіледі." + "Мазаламау режимінде көрсетіледі." "Түсінікті" "Параметрлер" "Ұлғайту терезесін қабаттастыру" @@ -1097,4 +1098,6 @@ "%1$s (ажыратылған)" "Қосылмады. Қайта қосылып көріңіз." "Жаңа құрылғымен жұптау" + "Батарея зарядының дерегі алынбай жатыр" + "Толығырақ ақпарат алу үшін түртіңіз." diff --git a/packages/SystemUI/res/values-km/strings.xml b/packages/SystemUI/res/values-km/strings.xml index 4d88cfd5cd2..1020948bf63 100644 --- a/packages/SystemUI/res/values-km/strings.xml +++ b/packages/SystemUI/res/values-km/strings.xml @@ -181,6 +181,7 @@ "ថ្ម​ពីរ​កាំ។" "ថ្ម​ទាំង​បី​​កាំ​។" "ថ្ម​ពេញ​ហើយ។" + "មិនដឹងអំពី​ភាគរយថ្មទេ។" "គ្មាន​ទូរស័ព្ទ។" "សេវា​ទូរស័ព្ទ​មួយ​កាំ។" "សេវា​ទូរស័ព្ទ​ពីរ​កាំ។" @@ -472,23 +473,23 @@ "ប្ដូរ​អ្នកប្រើ ​អ្នកប្រើ​បច្ចុប្បន្ន %s" "អ្នកប្រើបច្ចុប្បន្ន %s" "បង្ហាញ​ប្រវត្តិរូប" - "បន្ថែម​អ្នកប្រើ" + "បញ្ចូល​អ្នកប្រើ" "អ្នកប្រើ​ថ្មី" - "លុប​ភ្ញៀវ​?" - "ទិន្នន័យ និង​កម្មវិធី​ទាំងអស់​ក្នុង​សម័យ​នេះ​នឹង​ត្រូវ​បាន​លុប។" - "លុបចេញ" + "ដកភ្ញៀវចេញឬ?" + "កម្មវិធី និងទិន្នន័យ​ទាំងអស់​ក្នុង​វគ្គ​នេះ​នឹង​ត្រូវ​លុប។" + "ដកចេញ" "សូម​ស្វាគមន៍​ការ​ត្រឡប់​មកវិញ, ភ្ញៀវ!" - "តើ​អ្នក​ចង់​បន្ត​សម័យ​របស់​អ្នក​?" - "ចាប់ផ្ដើម" + "តើ​អ្នក​ចង់​បន្ត​វគ្គ​របស់​អ្នក​ទេ?" + "ចាប់ផ្ដើមសាជាថ្មី" "បាទ​/ចាស ​បន្ត" "អ្នកប្រើភ្ញៀវ" "ដើម្បីលុបកម្មវិធី និងទិន្នន័យ សូមយកអ្នកប្រើជាភ្ញៀវចេញ" - "យកភ្ញៀវចេញ" + "ដកភ្ញៀវចេញ" "ចុះឈ្មោះអ្នកប្រើចេញ" "ចុះឈ្មោះអ្នកប្រើបច្ចុប្បន្នចេញ" "ចុះឈ្មោះអ្នកប្រើចេញ" - "បន្ថែម​អ្នកប្រើ​ថ្មី?" - "ពេល​អ្នក​បន្ថែម​អ្នកប្រើ​ថ្មី អ្នកប្រើ​នោះ​ត្រូវ​កំណត់​ទំហំ​ផ្ទាល់​របស់​គេ។\n\nអ្នក​ប្រើ​ណាមួយ​ក៏​អាច​ធ្វើ​បច្ចុប្បន្នភាព​កម្មវិធី​សម្រាប់​អ្នកប្រើ​ផ្សេង​បាន​ដែរ។" + "បញ្ចូល​អ្នកប្រើ​ថ្មីឬ?" + "នៅពេល​អ្នក​បញ្ចូល​អ្នកប្រើ​ថ្មី អ្នកប្រើ​នោះ​ត្រូវ​រៀបចំកន្លែងរបស់​គេ។\n\nអ្នក​ប្រើ​ណា​ក៏​អាច​ដំឡើងកំណែ​កម្មវិធី​សម្រាប់​អ្នកប្រើទាំងអស់ផ្សេងទៀត​បាន​ដែរ។" "​បាន​ឈាន​ដល់ចំនួន​កំណត់អ្នកប្រើប្រាស់" អ្នកអាចបញ្ចូល​អ្នក​ប្រើប្រាស់បាន​រហូតដល់ %d នាក់។ @@ -496,7 +497,7 @@ "យកអ្នកប្រើចេញ?" "កម្មវិធី និងទិន្នន័យទាំងអស់របស់អ្នកប្រើនេះនឹងត្រូវបានលុប។" - "យកចេញ" + "ដកចេញ" "មុខងារ​សន្សំ​ថ្មបានបើក" "ការ​បន្ថយ​ការ​ប្រតិបត្តិ និង​ទិន្នន័យ​ផ្ទៃ​ខាងក្រោយ" "បិទ​មុខងារ​សន្សំ​ថ្ម" @@ -1097,4 +1098,6 @@ "%1$s (បាន​ផ្ដាច់)" "មិន​អាច​ភ្ជាប់​បាន​ទេ។ សូមព្យាយាមម្ដងទៀត។" "ផ្គូផ្គង​ឧបករណ៍ថ្មី" + "មានបញ្ហាក្នុង​ការអាន​ឧបករណ៍រង្វាស់កម្រិតថ្មរបស់អ្នក" + "ចុចដើម្បីទទួលបាន​ព័ត៌មានបន្ថែម" diff --git a/packages/SystemUI/res/values-kn/strings.xml b/packages/SystemUI/res/values-kn/strings.xml index ffa1ede2e58..b9fc9057639 100644 --- a/packages/SystemUI/res/values-kn/strings.xml +++ b/packages/SystemUI/res/values-kn/strings.xml @@ -181,6 +181,7 @@ "ಬ್ಯಾಟರಿ ಎರಡು ಪಟ್ಟಿಗಳು." "ಬ್ಯಾಟರಿ ಮೂರು ಪಟ್ಟಿಗಳು." "ಬ್ಯಾಟರಿ ಭರ್ತಿಯಾಗಿದೆ." + "ಬ್ಯಾಟರಿ ಶೇಕಡಾವಾರು ತಿಳಿದಿಲ್ಲ." "ಯಾವುದೇ ಫೋನ್ ಇಲ್ಲ." "ಪೋನ್ ಒಂದು ಪಟ್ಟಿ." "ಫೋನ್ ಎರಡು ಪಟ್ಟಿಗಳು." @@ -480,7 +481,7 @@ "ಮತ್ತೆ ಸುಸ್ವಾಗತ, ಅತಿಥಿ!" "ನಿಮ್ಮ ಸೆಷನ್‌ ಮುಂದುವರಿಸಲು ಇಚ್ಚಿಸುವಿರಾ?" "ಪ್ರಾರಂಭಿಸಿ" - "ಹೌದು, ಮುಂದುವರಿ" + "ಹೌದು, ಮುಂದುವರಿಸಿ" "ಅತಿಥಿ ಬಳಕೆದಾರ" "ಅಪ್ಲಿಕೇಶನ್‌ಗಳು ಮತ್ತು ಡೇಟಾ ಅಳಿಸಲು, ಅತಿಥಿ ಬಳಕೆದಾರರನ್ನು ತೆಗೆದುಹಾಕಿ" "ಅತಿಥಿಯನ್ನು ತೆಗೆದುಹಾಕಿ" @@ -1097,4 +1098,6 @@ "%1$s (ಸಂಪರ್ಕ ಕಡಿತಗೊಳಿಸಲಾಗಿದೆ)" "ಸಂಪರ್ಕಿಸಲು ಸಾಧ್ಯವಾಗುತ್ತಿಲ್ಲ. ಪುನಃ ಪ್ರಯತ್ನಿಸಿ." "ಹೊಸ ಸಾಧನವನ್ನು ಜೋಡಿಸಿ" + "ನಿಮ್ಮ ಬ್ಯಾಟರಿ ಮೀಟರ್ ಓದುವಾಗ ಸಮಸ್ಯೆ ಎದುರಾಗಿದೆ" + "ಇನ್ನಷ್ಟು ಮಾಹಿತಿಗಾಗಿ ಟ್ಯಾಪ್ ಮಾಡಿ" diff --git a/packages/SystemUI/res/values-ko/strings.xml b/packages/SystemUI/res/values-ko/strings.xml index 03114e0a3b2..f5aadc85eab 100644 --- a/packages/SystemUI/res/values-ko/strings.xml +++ b/packages/SystemUI/res/values-ko/strings.xml @@ -181,6 +181,7 @@ "배터리 막대가 두 개입니다." "배터리 막대가 세 개입니다." "배터리 충전이 완료되었습니다." + "배터리 잔량을 알 수 없습니다." "휴대전화의 신호가 없습니다." "휴대전화 신호 막대가 하나입니다." "휴대전화 신호 막대가 두 개입니다." @@ -477,10 +478,10 @@ "게스트를 삭제하시겠습니까?" "이 세션에 있는 모든 앱과 데이터가 삭제됩니다." "삭제" - "게스트 세션 다시 시작" + "게스트 세션 진행" "세션을 계속 진행하시겠습니까?" "다시 시작" - "예, 계속합니다." + "계속 진행" "게스트 사용자" "앱 및 데이터를 삭제하려면 게스트 사용자를 삭제하세요." "게스트 삭제" @@ -488,7 +489,7 @@ "현재 사용자 로그아웃" "사용자 로그아웃" "신규 사용자를 추가할까요?" - "추가된 새로운 사용자는 자신의 공간을 설정해야 합니다.\n\n모든 사용자는 다른 사용자들을 위하여 앱을 업데이트할 수 있습니다." + "추가된 새로운 사용자는 자신의 공간을 설정해야 합니다.\n\n사용자라면 누구든 다른 사용자를 위해 앱을 업데이트할 수 있습니다." "사용자 제한 도달" 사용자를 %d명까지 추가할 수 있습니다. @@ -714,7 +715,7 @@ "휴대전화 설정에 따라 벨소리나 진동이 울릴 수 있음" "휴대전화 설정에 따라 벨소리나 진동이 울릴 수 있습니다. 기본적으로 %1$s의 대화는 대화창으로 표시됩니다." "이 콘텐츠로 연결되는 플로팅 바로가기로 사용자의 주의를 끕니다." - "대화 섹션 상단에 표시, 플로팅 대화창으로 표시, 그리고 잠금 화면에 프로필 사진이 표시됨" + "대화 섹션 상단에 표시, 플로팅 대화창으로 표시, 잠금 화면에 프로필 사진이 표시됨" "설정" "우선순위" "%1$s 앱은 대화 기능을 지원하지 않습니다." @@ -1097,4 +1098,6 @@ "%1$s(연결 끊김)" "연결할 수 없습니다. 다시 시도하세요." "새 기기와 페어링" + "배터리 수준을 읽는 중에 문제가 발생함" + "탭하여 자세한 정보를 확인하세요." diff --git a/packages/SystemUI/res/values-ky/strings.xml b/packages/SystemUI/res/values-ky/strings.xml index 42d63a8024f..d1b6a09b4d6 100644 --- a/packages/SystemUI/res/values-ky/strings.xml +++ b/packages/SystemUI/res/values-ky/strings.xml @@ -92,7 +92,7 @@ "Экрандан жаздырылып алынган видео иштетилүүдө" "Экранды жаздыруу сеансы боюнча учурдагы билдирме" "Жаздырып баштайсызбы?" - "Жаздыруу учурунда Android тутуму экраныңызда көрүнүп турган жана түзмөктө ойноп жаткан бардык купуя маалыматты жаздырып алат. Буга сырсөздөр, төлөм маалыматы, сүрөттөр, билдирүүлөр жана аудио файлдар кирет." + "Жаздыруу учурунда Android системасы экраныңызда көрүнүп турган жана түзмөктө ойноп жаткан бардык купуя маалыматты жаздырып алат. Буга сырсөздөр, төлөм маалыматы, сүрөттөр, билдирүүлөр жана аудио файлдар кирет." "Аудио жаздыруу" "Түзмөктүн аудиосу" "Музыка, чалуулар жана шыңгырлар сыяктуу түзмөгүңүздөгү добуштар" @@ -181,6 +181,7 @@ "Эки таякча батарея." "Үч таякча батарея." "Батарея толук." + "Батарея кубатынын деңгээли белгисиз." "Телефон сигналы жок." "Телефон сигналы бир таякча." "Телефон сигналы эки таякча." @@ -431,7 +432,7 @@ "Баштадык" "Токтотуу" "Түзмөк" - "Башка колдонмого которулуу үчүн,, өйдө сүрүңүз" + "Башка колдонмого которулуу үчүн өйдө сүрүңүз" "Колдонмолорду тез которуштуруу үчүн, оңго сүйрөңүз" "Сереп салууну өчүрүү/күйгүзүү" "Кубатталды" @@ -454,9 +455,9 @@ "Кайталоо үчүн экранды өйдө сүрүңүз" "Бул түзмөк уюмуңузга таандык" "Бул түзмөк төмөнкүгө таандык: %s" - "Сүрөтчөнү серпип телефонго өтүңүз" - "Сүрөтчөнү серпип үн жардамчысына өтүңүз" - "Сүрөтчөнү серпип камерага өтүңүз" + "Сүрөтчөнү сүрүп телефонго өтүңүз" + "Сүрөтчөнү сүрүп үн жардамчысына өтүңүз" + "Сүрөтчөнү сүрүп камерага өтүңүз" "Толук жымжырттык талап кылынат. Бул экрандагыны окугучтарды да тынчтандырат." "Тымтырс" "Шашылыш билдирүүлөр гана" @@ -475,9 +476,9 @@ "Колдонуучу кошуу" "Жаңы колдонуучу" "Конокту алып саласызбы?" - "Бул сеанстагы бардык колдонмолор жана дайындар өчүрүлөт." + "Бул сеанстагы бардык колдонмолор жана маалыматтар өчүрүлөт." "Алып салуу" - "Кайтып келишиңиз менен, конок!" + "Кайтып келишиңиз менен!" "Сеансыңызды улантасызбы?" "Кайра баштоо" "Ооба, уланта берели" @@ -670,8 +671,8 @@ "Жөндөөлөрдөн алып салуу" "System UI Tuner Жөндөөлөрдөн өчүрүлүп, анын бардык функциялары токтотулсунбу?" "Колдонмо сиздин түзмөгүңүздө орнотулган эмес" - "Сааттын секунддары көрсөтүлсүн" - "Абал тилкесинен сааттын секунддары көрсөтүлсүн. Батареянын кубаты көбүрөөк сарпталышы мүмкүн." + "Сааттын секунддары көрүнсүн" + "Абал тилкесинен сааттын секунддары көрүнсүн. Батареянын кубаты көбүрөөк сарпталышы мүмкүн." "Ыкчам жөндөөлөрдү кайра коюу" "Ыкчам жөндөөлөрдөн жарык деңгээлин көрсөтүү" "Сынамык" @@ -680,7 +681,7 @@ "Күйгүзүү" "Үнсүз көрүнөт" "Бардык билдирмелерди бөгөттөө" - "Үнү менен көрсөтүлсүн" + "Үнү менен көрүнсүн" "Үнү менен көрсөтүлүп бөгөттөлбөсүн" "Эскертмелерди башкаруу каражаттары" "Күйүк" @@ -714,7 +715,7 @@ "Телефондун жөндөөлөрүнө жараша шыңгырап же дирилдеши мүмкүн" "Телефондун жөндөөлөрүнө жараша шыңгырап же дирилдеши мүмкүн. %1$s колдонмосундагы жазышуулар демейки жөндөө боюнча калкып чыкма билдирмелер түрүндө көрүнөт." "Калкыма ыкчам баскыч менен көңүлүңүздү бул мазмунга буруп турат." - "Жазышуулар тизмесинин өйдө жагында калкып чыкма билдирме түрүндө көрүнүп, профиль сүрөтү кулпуланган экрандан чагылдырылат" + "Жазышуулар тизмесинин өйдө жагында калкып чыкма билдирме түрүндө көрүнсө, профиль сүрөтү кулпуланган экранда көрүнөт" "Жөндөөлөр" "Маанилүүлүгү" "%1$s жазышуу функцияларын колдоого албайт" @@ -810,7 +811,7 @@ "Музыка" "YouTube" "Жылнаама" - "Үн көзөмөлдөгүчтөрү менен көрсөтүлсүн" + "Үн көзөмөлдөгүчтөрү менен көрүнсүн" "Тынчымды алба" "Үндү көзөмөлдөөчү баскычтардын кыска жолдору" "Үн катуулатылганда \"Тынчымды алба\" режиминен чыгуу" @@ -865,8 +866,8 @@ "Бул сүрөтчө көрүнбөсүн" - "Ар дайым пайызы көрсөтүлсүн" - "Кубаттоо учурунда пайызы көрсөтүлсүн (демейки)" + "Ар дайым пайызы көрүнсүн" + "Кубаттоо учурунда пайызы көрүнсүн (демейки)" "Бул сүрөтчө көрүнбөсүн" "Анча маанилүү эмес билдирменин сүрөтчөлөрүн көрсөтүү" @@ -1097,4 +1098,6 @@ "%1$s (ажыратылды)" "Байланышпай койду. Кайталоо." "Жаңы түзмөктү жупташтыруу" + "Батареяңыздын кубаты аныкталбай жатат" + "Кеңири маалымат алуу үчүн таптап коюңуз" diff --git a/packages/SystemUI/res/values-lo/strings.xml b/packages/SystemUI/res/values-lo/strings.xml index 5ee3d00f266..daae298d031 100644 --- a/packages/SystemUI/res/values-lo/strings.xml +++ b/packages/SystemUI/res/values-lo/strings.xml @@ -181,6 +181,7 @@ "ແບັດເຕີຣີສອງຂີດ." "ແບັດເຕີຣີສາມຂີດ." "ແບັດເຕີຣີເຕັມ." + "ບໍ່ຮູ້ເປີເຊັນແບັດເຕີຣີ." "ບໍ່ມີໂທລະສັບ." "ສັນຍານນຶ່ງຂີດ." "ສັນຍານສອງຂີດ." @@ -477,7 +478,7 @@ "ລຶບ​ແຂກ​ບໍ?" "ແອັບຯ​ແລະ​ຂໍ້​ມູນ​ທັງ​ໝົດ​ໃນ​ເຊດ​ຊັນ​ນີ້​ຈະ​ຖືກ​ລຶບ​ອອກ." "ລຶບ​" - "ຍິນ​ດີ​ຕ້ອນ​ຮັບ​ກັບ​ມາ, ຜູ່​ຢ້ຽມ​ຢາມ!" + "ຍິນ​ດີ​ຕ້ອນ​ຮັບ​ກັບ​ມາ, ຜູ້ຢ້ຽມຢາມ!" "ທ່ານ​ຕ້ອງ​ການ​ສືບ​ຕໍ່​ເຊດ​ຊັນ​ຂອງ​ທ່ານບໍ່?" "ເລີ່ມຕົ້ນໃຫມ່" "​ຕົກ​ລົງ, ດຳ​ເນີນ​ການ​ຕໍ່" @@ -488,7 +489,7 @@ "ອອກ​ຈາກ​ຜູ້​ໃຊ້​ປະ​ຈຸ​ບັນ" "ເອົາຜູ້ໃຊ້ອອກຈາກລະບົບ" "ເພີ່ມຜູ້ໃຊ້ໃໝ່ບໍ?" - "ເມື່ອ​ທ່ານ​ເພີ່ມ​ຜູ້ໃຊ້​ໃໝ່, ຜູ້ໃຊ້​ນັ້ນ​ຈະ​ຕ້ອງ​ຕັ້ງ​ຄ່າ​ພື້ນ​ທີ່​ບ່ອນ​ຈັດ​ເກັບ​ຂໍ້​ມູນ​ຂອງ​ລາວ.\n\nຜູ້ໃຊ້​ທຸກ​ຄົນ​ສາ​ມາດ​ອັບ​ເດດ​ແອັບຯຂອງ​ຜູ້​ໃຊ້​ຄົນ​ອື່ນ​ທັງ​ໝົດ​ໄດ້." + "ເມື່ອ​ທ່ານ​ເພີ່ມ​ຜູ້ໃຊ້​ໃໝ່, ຜູ້ໃຊ້​ນັ້ນ​ຈະ​ຕ້ອງ​ຕັ້ງ​ຄ່າ​ພື້ນ​ທີ່​ບ່ອນ​ຈັດ​ເກັບ​ຂໍ້​ມູນ​ຂອງ​ລາວ.\n\nຜູ້ໃຊ້​ທຸກ​ຄົນ​ສາ​ມາດ​ອັບ​ເດດ​ແອັບຂອງ​ຜູ້​ໃຊ້​ຄົນ​ອື່ນ​ທັງ​ໝົດ​ໄດ້." "ຮອດຂີດຈຳກັດຜູ້ໃຊ້ແລ້ວ" ທ່ານສາມາດເພີ່ມໄດ້ສູງສຸດ %d ຄົນ. @@ -1097,4 +1098,6 @@ "%1$s (ຕັດການເຊື່ອມຕໍ່ແລ້ວ)" "ບໍ່ສາມາດເຊື່ອມຕໍ່ໄດ້. ລອງໃໝ່." "ຈັບຄູ່ອຸປະກອນໃໝ່" + "ເກີດບັນຫາໃນການອ່ານຕົວວັດແທກແບັດເຕີຣີຂອງທ່ານ" + "ແຕະເພື່ອເບິ່ງຂໍ້ມູນເພີ່ມເຕີມ" diff --git a/packages/SystemUI/res/values-lt/strings.xml b/packages/SystemUI/res/values-lt/strings.xml index 56df8d6e75b..5607584e735 100644 --- a/packages/SystemUI/res/values-lt/strings.xml +++ b/packages/SystemUI/res/values-lt/strings.xml @@ -181,6 +181,7 @@ "Dvi akumuliatoriaus juostos." "Trys akumuliatoriaus juostos." "Akumuliatorius įkrautas." + "Akumuliatoriaus energija procentais nežinoma." "Nėra telefono." "Viena telefono juosta." "Dvi telefono juostos." @@ -515,7 +516,7 @@ "Tvarkyti" "Istorija" "Nauja" - "Tylūs" + "Tylus" "Pranešimai" "Pokalbiai" "Išvalyti visus tylius pranešimus" @@ -1109,4 +1110,6 @@ "„%1$s“ (atjungta)" "Nepavyko prijungti. Bandykite dar kartą." "Naujo įrenginio susiejimas" + "Nuskaitant akumuliatoriaus skaitiklį iškilo problema" + "Palieskite, kad sužinotumėte daugiau informacijos" diff --git a/packages/SystemUI/res/values-lv/strings.xml b/packages/SystemUI/res/values-lv/strings.xml index fde18e50c1d..7c64e26136b 100644 --- a/packages/SystemUI/res/values-lv/strings.xml +++ b/packages/SystemUI/res/values-lv/strings.xml @@ -181,6 +181,7 @@ "Akumulators: divas joslas." "Akumulators: trīs joslas." "Akumulators ir pilnīgi uzlādēts." + "Akumulatora uzlādes līmenis procentos nav zināms." "Nav tālruņa." "Tālrunis: viena josla." "Tālrunis: divas joslas." @@ -717,7 +718,7 @@ "Atkarībā no tālruņa iestatījumiem var zvanīt vai vibrēt" "Atkarībā no tālruņa iestatījumiem var zvanīt vai vibrēt. Sarunas no lietotnes %1$s pēc noklusējuma tiek parādītas burbulī." "Piesaista jūsu uzmanību, rādot peldošu saīsni uz šo saturu." - "Parādās sarunu sadaļas augšdaļā un kā peldošs burbulis, kā arī bloķēšanas ekrānā tiek rādīts profila attēls" + "Parādās sarunu sadaļas augšdaļā, arī kā peldošs burbulis, profila attēls parādās bloķēšanas ekrānā" "Iestatījumi" "Prioritārs" "Lietotnē %1$s netiek atbalstītas sarunu funkcijas." @@ -1103,4 +1104,6 @@ "%1$s (savienojums pārtraukts)" "Nevarēja izveidot savienojumu. Mēģiniet vēlreiz." "Savienošana pārī ar jaunu ierīci" + "Nevar iegūt informāciju par akumulatora uzlādes līmeni." + "Pieskarieties, lai iegūtu plašāku informāciju." diff --git a/packages/SystemUI/res/values-mk/strings.xml b/packages/SystemUI/res/values-mk/strings.xml index 56a63c5f486..4e7c06370b0 100644 --- a/packages/SystemUI/res/values-mk/strings.xml +++ b/packages/SystemUI/res/values-mk/strings.xml @@ -181,6 +181,7 @@ "Батерија две цртички." "Батерија три цртички." "Батеријата е полна." + "Процентот на батеријата е непознат." "Нема сигнал." "Телефон една цртичка.." "Телефон две цртички." @@ -512,7 +513,7 @@ "Безгласно" "Известувања" "Разговори" - "Избриши ги сите тивки известувања" + "Избриши ги сите бесчујни известувања" "Известувањата се паузирани од „Не вознемирувај“" "Започни сега" "Нема известувања" @@ -1097,4 +1098,6 @@ "%1$s (исклучен)" "Не може да се поврзе. Обидете се повторно." "Спарете нов уред" + "Проблем при читањето на мерачот на батеријата" + "Допрете за повеќе информации" diff --git a/packages/SystemUI/res/values-ml/strings.xml b/packages/SystemUI/res/values-ml/strings.xml index f0f6982ac3d..dc07b609756 100644 --- a/packages/SystemUI/res/values-ml/strings.xml +++ b/packages/SystemUI/res/values-ml/strings.xml @@ -181,6 +181,7 @@ "ബാറ്ററി രണ്ട് ബാർ." "ബാറ്ററി മൂന്ന് ബാർ." "ബാറ്ററി നിറഞ്ഞു." + "ബാറ്ററി ശതമാനം അജ്ഞാതമാണ്." "ഫോൺ സിഗ്‌നൽ ഒന്നുമില്ല." "ഫോണിൽ ഒരു ബാർ." "ഫോണിൽ രണ്ട് ബാർ." @@ -475,9 +476,9 @@ "ഉപയോക്താവിനെ ചേര്‍ക്കുക" "പുതിയ ഉപയോക്താവ്" "അതിഥിയെ നീക്കംചെയ്യണോ?" - "ഈ സെഷനിലെ എല്ലാ അപ്ലിക്കേഷനുകളും ഡാറ്റയും ഇല്ലാതാക്കും." + "ഈ സെഷനിലെ എല്ലാ ആപ്പുകളും ഡാറ്റയും ഇല്ലാതാക്കും." "നീക്കംചെയ്യുക" - "അതിഥിയ്‌ക്ക് വീണ്ടും സ്വാഗതം!" + "അതിഥി, വീണ്ടും സ്വാഗതം!" "നിങ്ങളുടെ സെഷൻ തുടരണോ?" "പുനരാംരംഭിക്കുക" "അതെ, തുടരുക" @@ -488,7 +489,7 @@ "നിലവിലെ ഉപയോക്താവിനെ ലോഗൗട്ട് ചെയ്യുക" "ഉപയോക്താവിനെ ലോഗൗട്ട് ചെയ്യുക" "പുതിയ ഉപയോക്താവിനെ ചേർക്കണോ?" - "നിങ്ങൾ ഒരു പുതിയ ഉപയോക്താവിനെ ചേർക്കുമ്പോൾ, ആ വ്യക്തിക്ക് അവരുടെ ഇടം സജ്ജീകരിക്കേണ്ടതുണ്ട്.\n\nമറ്റ് എല്ലാ ഉപയോക്താക്കൾക്കുമായി ഏതൊരു ഉപയോക്താവിനും അപ്ലിക്കേഷനുകൾ അപ്‌ഡേറ്റ് ചെയ്യാനാവും." + "നിങ്ങൾ പുതിയൊരു ഉപയോക്താവിനെ ചേർക്കുമ്പോൾ, ആ വ്യക്തിക്ക് അവരുടെ ഇടം സജ്ജീകരിക്കേണ്ടതുണ്ട്.\n\nമറ്റ് എല്ലാ ഉപയോക്താക്കൾക്കുമായി ഏതൊരു ഉപയോക്താവിനും ആപ്പുകൾ അപ്‌ഡേറ്റ് ചെയ്യാനാവും." "ഉപയോക്തൃ പരിധി എത്തി" നിങ്ങൾക്ക് %d ഉപയോക്താക്കളെ വരെ ചേർക്കാനാവും. @@ -711,7 +712,7 @@ "ബബ്ൾ" "ശബ്ദമോ വൈബ്രേഷനോ ഇല്ല" "ശബ്‌ദമോ വൈബ്രേഷനോ ഇല്ല, സംഭാഷണ വിഭാഗത്തിന് താഴെയായി ദൃശ്യമാകും" - "ഫോൺ ക്രമീകരണം അടിസ്ഥാനമാക്കി റിംഗ് ചെയ്‌തേക്കാം അല്ലെങ്കിൽ വൈബ്രേറ്റ് ചെയ്‌തേക്കാം" + "ഫോൺ ക്രമീകരണം അടിസ്ഥാനമാക്കി റിംഗ്/വൈബ്രേറ്റ് ചെയ്യും" "ഫോൺ ക്രമീകരണം അടിസ്ഥാനമാക്കി റിംഗ് ചെയ്‌തേക്കാം അല്ലെങ്കിൽ വൈബ്രേറ്റ് ചെയ്‌തേക്കാം. %1$s-ൽ നിന്നുള്ള സംഭാഷണങ്ങൾ ഡിഫോൾട്ടായി ബബ്ൾ ആവുന്നു." "ഈ ഉള്ളടക്കത്തിലേക്ക് ഒരു ഫ്ലോട്ടിംഗ് കുറുക്കുവഴി ഉപയോഗിച്ച് നിങ്ങളുടെ ശ്രദ്ധ നിലനിർത്തുന്നു." "സംഭാഷണ വിഭാഗത്തിന് മുകളിലായി കാണിക്കുന്നു, ഫ്ലോട്ടിംഗ് ബബിളായി ദൃശ്യമാകുന്നു, ലോക്ക് സ്ക്രീനിൽ പ്രൊഫൈൽ ചിത്രം പ്രദർശിപ്പിക്കുന്നു" @@ -1097,4 +1098,6 @@ "%1$s (വിച്ഛേദിച്ചു)" "കണക്റ്റ് ചെയ്യാനായില്ല. വീണ്ടും ശ്രമിക്കുക." "പുതിയ ഉപകരണവുമായി ജോടിയാക്കുക" + "നിങ്ങളുടെ ബാറ്ററി മീറ്റർ വായിക്കുന്നതിൽ പ്രശ്‌നമുണ്ട്" + "കൂടുതൽ വിവരങ്ങൾക്ക് ടാപ്പ് ചെയ്യുക" diff --git a/packages/SystemUI/res/values-mn/strings.xml b/packages/SystemUI/res/values-mn/strings.xml index 95624983b0c..4f85c057fd7 100644 --- a/packages/SystemUI/res/values-mn/strings.xml +++ b/packages/SystemUI/res/values-mn/strings.xml @@ -28,7 +28,7 @@ "%s үлдсэн" "%1$s үлдсэн байна. Таны хэрэглээнд тулгуурлан ойролцоогоор %2$s-н хугацаа үлдсэн" "%1$s үлдсэн байна. Ойролцоогоор %2$s-н хугацаа үлдсэн" - "%s үлдсэн. Тэжээл хэмнэгч асаалттай байна." + "%s үлдсэн. Батарей хэмнэгч асаалттай байна." "USB-р цэнэглэх боломжгүй байна. Төхөөрөмждөө дагалдаж ирсэн цэнэглэгчийг ашиглана уу." "USB-р цэнэглэх боломжгүй байна" "Төхөөрөмждөө дагалдаж ирсэн цэнэглэгчийг ашиглах" @@ -181,6 +181,7 @@ "Батерей хоёр баганатай." "Батерей гурван баганатай." "Батерей дүүрэн." + "Батарейн хувь тодорхойгүй байна." "Утас байхгүй." "Утас нэг баганатай." "Утас хоёр баганатай." @@ -389,7 +390,7 @@ "АВТОМАТ" "Өнгийг урвуулах" "Өнгө залруулах горим" - "Өөр тохиргоо" + "Бусад тохиргоо" "Дууссан" "Холбогдсон" "Холбогдсон, батерей %1$s" @@ -433,7 +434,7 @@ "Төхөөрөмж" "Апп сэлгэхийн тулд дээш шударна уу" "Аппуудыг хурдан сэлгэхийн тулд баруун тийш чирнэ үү" - "Тоймыг унтраах/асаах" + "Тоймыг асаах/унтраах" "Цэнэглэгдсэн" "Цэнэглэж байна" "дүүргэхэд %s" @@ -475,9 +476,9 @@ "Хэрэглэгч нэмэх" "Шинэ хэрэглэгч" "Зочныг хасах уу?" - "Энэ сешний бүх апп болон дата устах болно." + "Энэ харилцан үйлдлийн бүх апп болон дата устах болно." "Хасах" - "Тавтай морилно уу!" + "Эргэн тавтай морилно уу!" "Та үргэлжлүүлэхийг хүсэж байна уу?" "Дахин эхлүүлэх" "Тийм, үргэлжлүүлэх" @@ -488,7 +489,7 @@ "Одоогийн хэрэглэгчийг гаргах" "ХЭРЭГЛЭГЧЭЭС ГАРАХ" "Шинэ хэрэглэгч нэмэх үү?" - "Та шинэ хэрэглэгч нэмбэл тухайн хүн өөрийн профайлыг тохируулах шаардлагатай.\n\nАль ч хэрэглэгч бүх хэрэглэгчийн апп-уудыг шинэчлэх боломжтой." + "Та шинэ хэрэглэгч нэмбэл тухайн хүн өөрийн профайлыг тохируулах шаардлагатай.\n\nАль ч хэрэглэгч бүх хэрэглэгчийн аппуудыг шинэчлэх боломжтой." "Хэрэглэгчийн хязгаарт хүрсэн" Та %d хүртэлх хэрэглэгч нэмэх боломжтой. @@ -497,9 +498,9 @@ "Хэрэглэгчийг устгах уу?" "Энэ хэрэглэгчийн бүх апп болон мэдээлэл устах болно." "Арилгах" - "Тэжээл хэмнэгч асаалттай байна" + "Батарей хэмнэгч асаалттай байна" "Ажиллагаа болон далд датаг бууруулна" - "Тэжээл хэмнэгчийг унтраах" + "Батарей хэмнэгчийг унтраах" "%s нь бичлэг хийх эсвэл дамжуулах үед таны дэлгэц дээр харагдах эсвэл таны төхөөрөмжөөс тоглуулах бүх мэдээлэлд хандах боломжтой байна. Үүнд нууц үг, төлбөрийн дэлгэрэнгүй, зураг болон таны тоглуулдаг аудио зэрэг мэдээлэл багтана." "Энэ функцийг ажиллуулж байгаа үйлчилгээ нь бичлэг хийх эсвэл дамжуулах үед таны дэлгэц дээр харагдах эсвэл таны төхөөрөмжөөс тоглуулах бүх мэдээлэлд хандах боломжтой байна. Үүнд нууц үг, төлбөрийн дэлгэрэнгүй, зураг болон таны тоглуулдаг аудио зэрэг мэдээлэл багтана." "Бичлэг хийх эсвэл дамжуулахыг эхлүүлэх үү?" @@ -765,7 +766,7 @@ %d минут "Батарей ашиглалт" - "Цэнэглэх үед тэжээл хэмнэгч ажиллахгүй" + "Цэнэглэх үед батарей хэмнэгч ажиллахгүй" "Батарей хэмнэгч" "Гүйцэтгэл болон дэвсгэрийн датаг багасгадаг" "%1$s товчлуур" @@ -981,11 +982,11 @@ "%1$s-д дурын аппаас хэсэг харуулахыг зөвшөөрөх" "Зөвшөөрөх" "Татгалзах" - "Тэжээл хэмнэгч онцлогийг хуваарилахын тулд товших" + "Батарей хэмнэгч онцлогийг хуваарилахын тулд товших" "Батарей дуусах гэж байгаа үед асаана уу" "Үгүй, баярлалаа" - "Тэжээл хэмнэгч онцлогийн хуваарийг асаасан" - "Батарей %d%%-с бага болсон үед Тэжээл хэмнэгч автоматаар асна." + "Батарей хэмнэгч онцлогийн хуваарийг асаасан" + "Батарей %d%%-с бага болсон үед Батарей хэмнэгч автоматаар асна." "Тохиргоо" "Ойлголоо" "Dump SysUI Heap" @@ -1097,4 +1098,6 @@ "%1$s (салсан)" "Холбогдож чадсангүй. Дахин оролдоно уу." "Шинэ төхөөрөмж хослуулах" + "Таны батарей хэмжигчийг уншихад асуудал гарлаа" + "Нэмэлт мэдээлэл авахын тулд товшино уу" diff --git a/packages/SystemUI/res/values-mr/strings.xml b/packages/SystemUI/res/values-mr/strings.xml index 61f2b67dcca..1a608dae038 100644 --- a/packages/SystemUI/res/values-mr/strings.xml +++ b/packages/SystemUI/res/values-mr/strings.xml @@ -181,6 +181,7 @@ "बॅटरी दोन बार." "बॅटरी तीन बार." "बॅटरी पूर्ण भरली." + "बॅटरीच्या चार्जिंगची टक्केवारी माहित नाही." "कोणताही फोन नाही." "फोन एक बार." "फोन दोन बार." @@ -1097,4 +1098,6 @@ "%1$s (डिस्कनेक्ट केले)" "कनेक्ट करू शकलो नाही. पुन्हा प्रयत्न करा." "नवीन डिव्हाइससोबत पेअर करा" + "तुमचे बॅटरी मीटर वाचताना समस्या आली" + "अधिक माहितीसाठी टॅप करा" diff --git a/packages/SystemUI/res/values-ms/strings.xml b/packages/SystemUI/res/values-ms/strings.xml index d8878c8ce20..de2fcd817b7 100644 --- a/packages/SystemUI/res/values-ms/strings.xml +++ b/packages/SystemUI/res/values-ms/strings.xml @@ -181,6 +181,7 @@ "Bateri dua bar." "Bateri tiga bar." "Bateri penuh." + "Peratusan kuasa bateri tidak diketahui." "Tiada telefon." "Telefon satu bar." "Telefon dua bar." @@ -714,7 +715,7 @@ "Mungkin berbunyi atau bergetar berdasarkan tetapan telefon" "Mungkin berbunyi atau bergetar berdasarkan tetapan telefon. Perbualan daripada gelembung %1$s secara lalai." "Memastikan anda memberikan perhatian dengan pintasan terapung ke kandungan ini." - "Ditunjukkan di sebelah atas bahagian perbualan, muncul sebagai gelembung terapung, memaparkan gambar profil pada skrin kunci" + "Ditunjukkan di sebelah atas bahagian perbualan, terpapar sebagai gelembung terapung, gambar profil dipaparkan pada skrin kunci" "Tetapan" "Keutamaan" "%1$s tidak menyokong ciri perbualan" @@ -1097,4 +1098,6 @@ "%1$s (diputuskan sambungan)" "Tidak boleh menyambung. Cuba lagi." "Gandingkan peranti baharu" + "Masalah membaca meter bateri anda" + "Ketik untuk mendapatkan maklumat lanjut" diff --git a/packages/SystemUI/res/values-my/strings.xml b/packages/SystemUI/res/values-my/strings.xml index 90eca8912ed..07400bb4f18 100644 --- a/packages/SystemUI/res/values-my/strings.xml +++ b/packages/SystemUI/res/values-my/strings.xml @@ -181,6 +181,7 @@ "ဘတ္တရီနှစ်ဘား။" "ဘတ္တရီသုံးဘား။" "ဘတ္တရီအပြည့်။" + "ဘက်ထရီရာခိုင်နှုန်းကို မသိပါ။" "ဖုန်းလိုင်းမရှိပါ။" "ဖုန်းလိုင်းတစ်ဘား။" "ဖုန်းလိုင်းနှစ်ဘား။" @@ -222,7 +223,7 @@ "LTE" "LTE+" "1X" - "ပြင်ပကွန်ရက်နှင့် ချိတ်ဆက်ခြင်း" + "ပြင်ပကွန်ရက်သုံးခြင်း" "EDGE" "Wi-Fi" "ဆင်းကဒ်မရှိပါ။" @@ -474,12 +475,12 @@ "ပရိုဖိုင်ကို ပြရန်" "အသုံးပြုသူ ထည့်ရန်" "အသုံးပြုသူ အသစ်" - "ဧည့်သည်ကို ဖယ်ထုတ်လိုက်ရမလား?" + "ဧည့်သည်ကို ဖယ်မလား။" "ဒီချိတ်ဆက်မှု ထဲက အက်ပ်များ အားလုံး နှင့် ဒေတာကို ဖျက်ပစ်မည်။" "ဖယ်ထုတ်ပါ" - "ပြန်လာတာ ကြိုဆိုပါသည်၊ ဧည့်သည်!" - "သင်သည် သင်၏ ချိတ်ဆက်မှုကို ဆက်ပြုလုပ် လိုပါသလား?" - "အစမှ ပြန်စပါ" + "ဧည့်သည်ကို ပြန်လည် ကြိုဆိုပါသည်။" + "သင်၏ စက်ရှင်ကို ဆက်လုပ်လိုပါသလား။" + "ပြန်စပါ" "ဆက်လုပ်ပါ" "ဧည့်သည် အသုံးပြုသူ" "အက်ပ်များနှင့် ဒေတာအား ဖျက်ရန်၊ တခဏသုံးစွဲသူအား ဖယ်ရှားပါ" @@ -1097,4 +1098,6 @@ "%1$s (ချိတ်ဆက်မထားပါ)" "ချိတ်ဆက်၍ မရပါ။ ထပ်စမ်းကြည့်ပါ။" "စက်အသစ် တွဲချိတ်ရန်" + "သင်၏ ဘက်ထရီမီတာကို ဖတ်ရာတွင် ပြဿနာရှိနေသည်" + "နောက်ထပ်အချက်အလက်များအတွက် တို့ပါ" diff --git a/packages/SystemUI/res/values-nb/strings.xml b/packages/SystemUI/res/values-nb/strings.xml index dc004ddd399..ead1fd5ab48 100644 --- a/packages/SystemUI/res/values-nb/strings.xml +++ b/packages/SystemUI/res/values-nb/strings.xml @@ -181,6 +181,7 @@ "Batteri – to stolper." "Batteri – tre stolper." "Batteriet er fullt." + "Batteriprosenten er ukjent." "Ingen telefon." "Telefon – én stolpe." "Telefon – to stolper." @@ -1097,4 +1098,6 @@ "%1$s (frakoblet)" "Kunne ikke koble til. Prøv på nytt." "Koble til en ny enhet" + "Kunne ikke lese batterimåleren" + "Trykk for å få mer informasjon" diff --git a/packages/SystemUI/res/values-ne/strings.xml b/packages/SystemUI/res/values-ne/strings.xml index 075f6737087..4af7294beec 100644 --- a/packages/SystemUI/res/values-ne/strings.xml +++ b/packages/SystemUI/res/values-ne/strings.xml @@ -181,6 +181,7 @@ "ब्याट्रिका दुईवटा पट्टिहरू" "ब्याट्रिका तिनवटा पट्टिहरू" "ब्याट्री पूर्ण छ।" + "ब्याट्रीमा कति प्रतिशत चार्ज छ भन्ने कुराको जानाकरी छैन।" "फोन छैन्।" "फोन एउटा पट्टि।" "फोन दुई पट्टि।" @@ -475,9 +476,9 @@ "प्रयोगकर्ता थप्नुहोस्" "नयाँ प्रयोगकर्ता" "अतिथि हटाउने हो?" - "यस सत्रमा सबै एपहरू र डेटा मेटाइनेछ।" + "यो सत्रमा भएका सबै एपहरू र डेटा मेटाइने छ।" "हटाउनुहोस्" - "पुनः स्वागत, अतिथि!" + "तपाईंलाई फेरि स्वागत छ, अतिथि" "तपाईं आफ्नो सत्र जारी गर्न चाहनुहुन्छ?" "सुरु गर्नुहोस्" "हो, जारी राख्नुहोस्" @@ -488,7 +489,7 @@ "वर्तमान प्रयोगकर्ता लगआउट गर्नुहोस्" "प्रयोगकर्ता लगआउट गर्नुहोस्" "नयाँ प्रयोगकर्ता थप्ने हो?" - "जब तपाईँले नयाँ प्रयोगकर्ता थप्नुहुन्छ, त्यस प्रयोगकर्ताले आफ्नो स्थान स्थापना गर्न पर्ने छ।\n\nकुनै पनि प्रयोगकर्ताले सबै अन्य प्रयोगकर्ताहरूका लागि एपहरू अद्यावधिक गर्न सक्छन्।" + "जब तपाईँले नयाँ प्रयोगकर्ता थप्नुहुन्छ, त्यस प्रयोगकर्ताले आफ्नो स्थान स्थापना गर्न पर्ने छ।\n\nसबै प्रयोगकर्ताले अरू प्रयोगकर्ताका एपहरू अपडेट गर्न सक्छन्।" "प्रयोगकर्ताको सीमा पुग्यो" तपाईं अधिकतम %d प्रयोगहरू मात्र थप्न सक्नुहुन्छ। @@ -509,7 +510,7 @@ "व्यवस्थित गर्नुहोस्" "इतिहास" "नयाँ" - "मौन" + "साइलेन्ट" "सूचनाहरू" "वार्तालापहरू" "सबै मौन सूचनाहरू हटाउनुहोस्" @@ -700,21 +701,21 @@ "रोक लगाउनुहोस्" "देखाउने क्रम जारी राख्नुहोस्" "सानो बनाउनुहोस्" - "मौन" + "साइलेन्ट" "मौन रहनुहोस्" "सतर्क गराउने" "सर्तक गराइरहनुहोस्" "सूचनाहरू निष्क्रिय पार्नुहोस्" "यो एपका सूचनाहरू देखाउने क्रम जारी राख्ने हो?" - "मौन" + "साइलेन्ट" "पूर्वनिर्धारित" "बबल" "न घन्टी बज्छ न त कम्पन नै हुन्छ" "न घन्टी बज्छ न त कम्पन नै हुन्छ र वार्तालाप खण्डको तलतिर देखा पर्छ" - "फोनको सेटिङका आधारमा घन्टी बज्न वा कम्पन हुन सक्छ" - "फोनको सेटिङका आधारमा घन्टी बज्न वा कम्पन हुन सक्छ। %1$s का वार्तालापहरू पूर्वनिर्धारित रूपमा बबलमा देखाइन्छन्।" + "फोनको सेटिङका आधारमा घन्टी बज्न वा भाइब्रेट हुन सक्छ" + "फोनको सेटिङका आधारमा घन्टी बज्न वा भाइब्रेट हुन सक्छ। %1$s का वार्तालापहरू पूर्वनिर्धारित रूपमा बबलमा देखाइन्छन्।" "फ्लोटिङ सर्टकटमार्फत यो सामग्रीतर्फ तपाईंको ध्यान आकर्षित गर्दछ।" - "वार्तालाप खण्डको सिरानमा देखा पर्छ, तैरने बबलका रूपमा देखा पर्छ, लक स्क्रिनमा प्रोफाइल फोटो देखाइन्छ" + "वार्तालाप खण्डको सिरानमा देखा पर्छ, तैरने बबलका रूपमा देखा पर्छ, लक स्क्रिनमा प्रोफाइल फोटो देखिन्छ" "सेटिङ" "प्राथमिकता" "%1$s मा वार्तालापसम्बन्धी सुविधा प्रयोग गर्न मिल्दैन" @@ -1097,4 +1098,6 @@ "%1$s (डिस्कनेक्ट गरिएको)" "कनेक्ट गर्न सकिएन। फेरि प्रयास गर्नुहोस्।" "नयाँ यन्त्रको जोडा बनाउनुहोस्" + "यन्त्रको ब्याट्रीको मिटर रिडिङ क्रममा समस्या भयो" + "थप जानकारी प्राप्त गर्न ट्याप गर्नुहोस्" diff --git a/packages/SystemUI/res/values-nl/strings.xml b/packages/SystemUI/res/values-nl/strings.xml index d8331bfd820..bf2d757dd69 100644 --- a/packages/SystemUI/res/values-nl/strings.xml +++ b/packages/SystemUI/res/values-nl/strings.xml @@ -28,15 +28,15 @@ "Nog %s" "Nog %1$s, dat is ongeveer %2$s op basis van je gebruik" "Nog %1$s, dat is ongeveer %2$s" - "Nog %s. Batterijbesparing is ingeschakeld." + "Nog %s. Batterijbesparing staat aan." "Kan niet opladen via USB. Gebruik de oplader die bij je apparaat is geleverd." "Kan niet opladen via USB" "Gebruik de oplader die bij je apparaat is geleverd" "Instellingen" "Batterijbesparing aanzetten?" "Over Batterijbesparing" - "Inschakelen" - "Batterijbesparing inschakelen" + "Aanzetten" + "Batterijbesparing aanzetten" "Instellingen" "Wifi" "Scherm automatisch draaien" @@ -54,7 +54,7 @@ "%1$s openen om %2$s te verwerken?" "Er werken geen geïnstalleerde apps met dit USB-accessoire. Meer informatie op: %1$s" "USB-accessoire" - "Weergeven" + "Bekijken" "%1$s altijd openen wanneer %2$s is verbonden" "%1$s altijd openen wanneer %2$s is verbonden" "USB-foutopsporing toestaan?" @@ -62,17 +62,17 @@ "Altijd toestaan vanaf deze computer" "Toestaan" "USB-foutopsporing niet toegestaan" - "De gebruiker die momenteel is ingelogd op dit apparaat, kan USB-foutopsporing niet inschakelen. Als je deze functie wilt gebruiken, schakel je naar de primaire gebruiker." + "De gebruiker die momenteel is ingelogd op dit apparaat, kan USB-foutopsporing niet aanzetten. Als je deze functie wilt gebruiken, schakel je naar de primaire gebruiker." "Draadloze foutopsporing toestaan in dit netwerk?" "Netwerknaam (SSID)\n%1$s\n\nWifi-adres (BSSID)\n%2$s" "Altijd toestaan in dit netwerk" "Toestaan" "Draadloze foutopsporing niet toegestaan" - "De gebruiker die momenteel is ingelogd op dit apparaat, kan draadloze foutopsporing niet inschakelen. Als je deze functie wilt gebruiken, schakel je over naar de primaire gebruiker." - "USB-poort uitgeschakeld" - "De USB-poort is uitgeschakeld en detecteert geen accessoires, zodat je apparaat wordt beschermd tegen vloeistof en vuil.\n\nJe ontvangt een melding wanneer je de USB-poort weer kunt gebruiken." + "De gebruiker die momenteel is ingelogd op dit apparaat, kan draadloze foutopsporing niet aanzetten. Als je deze functie wilt gebruiken, schakel je over naar de primaire gebruiker." + "USB-poort staat uit" + "De USB-poort staat uit en detecteert geen accessoires, zodat je apparaat wordt beschermd tegen vloeistof en vuil.\n\nJe ontvangt een melding wanneer je de USB-poort weer kunt gebruiken." "USB-poort kan opladers en accessoires detecteren" - "USB inschakelen" + "USB aanzetten" "Meer informatie" "Zoom om scherm te vullen" "Rek uit v. schermvulling" @@ -101,7 +101,7 @@ "Starten" "Scherm opnemen" "Scherm en audio opnemen" - "Tikken op het scherm weergeven" + "Tikken op het scherm tonen" "Tik om te stoppen" "Stoppen" "Pauzeren" @@ -181,6 +181,7 @@ "Batterij: twee streepjes." "Batterij: drie streepjes." "Batterij is vol." + "Batterijpercentage onbekend." "Geen telefoonsignaal." "Telefoon: één streepje." "Telefoon: twee streepjes." @@ -208,8 +209,8 @@ "Twee streepjes." "Drie streepjes." "Signaal is op volledige sterkte." - "Ingeschakeld." - "Uitgeschakeld." + "Aan." + "Uit." "Verbonden." "Verbinden." "GPRS" @@ -233,7 +234,7 @@ "Uit" "Bluetooth-tethering." "Vliegtuigmodus." - "VPN ingeschakeld." + "VPN staat aan." "Geen simkaart." "Netwerk van provider wordt gewijzigd" "Accudetails openen" @@ -244,9 +245,9 @@ "Meldingen." "Alle meldingen bekijken" "Melding wissen" - "gps ingeschakeld." + "Gps staat aan." "Verbinding maken met gps." - "TeleTypewriter ingeschakeld." + "TeleTypewriter staat aan." "Belsoftware trilt." "Belsoftware stil." @@ -263,30 +264,30 @@ "Vergrendelscherm voor werk" "Sluiten" "%1$s." - "Wifi uitgeschakeld." - "Wifi ingeschakeld." + "Wifi staat uit." + "Wifi staat aan." "Mobiel %1$s. %2$s. %3$s." "Batterij: %s." "Vliegtuigmodus uit." "Vliegtuigmodus aan." - "Vliegtuigmodus uitgeschakeld." - "Vliegtuigmodus ingeschakeld." + "Vliegtuigmodus staat uit." + "Vliegtuigmodus staat aan." "totale stilte" "alleen wekkers" "Niet storen." - "\'Niet storen\' is uitgeschakeld." - "\'Niet storen\' is ingeschakeld." + "Niet storen staat uit." + "Niet storen staat aan." "Bluetooth." "Bluetooth uit." "Bluetooth aan." "Bluetooth-verbinding wordt gemaakt." "Bluetooth-verbinding gemaakt." - "Bluetooth uitgeschakeld." - "Bluetooth ingeschakeld." + "Bluetooth staat uit." + "Bluetooth staat aan." "Locatiemelding uit." "Locatiemelding aan." - "Locatiemelding uitgeschakeld." - "Locatiemelding ingeschakeld." + "Locatiemelding staat uit." + "Locatiemelding staat aan." "Wekker is ingesteld op %s." "Paneel sluiten." "Meer tijd." @@ -294,21 +295,21 @@ "Zaklamp uit." "Zaklamp niet beschikbaar." "Zaklamp aan." - "Zaklamp uitgeschakeld." - "Zaklamp ingeschakeld." - "Kleurinversie uitgeschakeld." - "Kleurinversie ingeschakeld." - "Mobiele hotspot uitgeschakeld." - "Mobiele hotspot ingeschakeld." + "Zaklamp staat uit." + "Zaklamp staat aan." + "Kleurinversie staat uit." + "Kleurinversie staat aan." + "Mobiele hotspot staat uit." + "Mobiele hotspot staat aan." "Casten van scherm gestopt." "Werkmodus uit." "Werkmodus aan." - "Werkmodus uitgeschakeld." - "Werkmodus ingeschakeld." - "Databesparing is uitgeschakeld." - "Databesparing is ingeschakeld." - "Sensorprivacy uitgeschakeld." - "Sensorprivacy ingeschakeld." + "Werkmodus staat uit." + "Werkmodus staat aan." + "Databesparing staat uit." + "Databesparing staat aan." + "Sensorprivacy staat uit." + "Sensorprivacy staat aan." "Helderheid van het scherm" "Opladen" "2G/3G-data zijn onderbroken" @@ -353,7 +354,7 @@ "Headset" "Invoer" "Hoortoestellen" - "Inschakelen..." + "Aanzetten…" "Helderheid" "Automatisch draaien" "Scherm automatisch draaien" @@ -378,7 +379,7 @@ "Wifi uit" "Wifi aan" "Geen wifi-netwerken beschikbaar" - "Inschakelen..." + "Aanzetten…" "Screencast" "Casten" "Naamloos apparaat" @@ -396,8 +397,8 @@ "Verbinding maken…" "Tethering" "Hotspot" - "Inschakelen..." - "Databesparing is ingeschakeld" + "Aanzetten…" + "Databesparing staat aan" %d apparaten %d apparaat @@ -425,15 +426,15 @@ "Aan om %s" "Tot %s" "NFC" - "NFC is uitgeschakeld" - "NFC is ingeschakeld" + "NFC staat uit" + "NFC staat aan" "Schermopname" "Starten" "Stoppen" "Apparaat" "Swipe omhoog om te schakelen tussen apps" "Sleep naar rechts om snel tussen apps te schakelen" - "Overzicht in-/uitschakelen" + "Overzicht aan- of uitzetten" "Opgeladen" "Opladen" "%s tot volledig opgeladen" @@ -471,7 +472,7 @@ "Gebruiker wijzigen" "Schakelen tussen gebruikers, huidige gebruiker %s" "Huidige gebruiker %s" - "Profiel weergeven" + "Profiel tonen" "Gebruiker toevoegen" "Nieuwe gebruiker" "Gast verwijderen?" @@ -488,7 +489,7 @@ "Huidige gebruiker uitloggen" "GEBRUIKER UITLOGGEN" "Nieuwe gebruiker toevoegen?" - "Wanneer u een nieuwe gebruiker toevoegt, moet die persoon zijn eigen profiel instellen.\n\nElke gebruiker kan apps updaten voor alle andere gebruikers." + "Als je een nieuwe gebruiker toevoegt, moet die persoon zijn eigen profiel instellen.\n\nElke gebruiker kan apps updaten voor alle andere gebruikers." "Gebruikerslimiet bereikt" Je kunt maximaal %d gebruikers toevoegen. @@ -499,12 +500,12 @@ "Verwijderen" "Batterijbesparing aan" "Vermindert de prestaties en achtergrondgegevens" - "Batterijbesparing uitschakelen" + "Batterijbesparing uitzetten" "%s krijgt toegang tot alle informatie die zichtbaar is op je scherm of die wordt afgespeeld vanaf je apparaat tijdens het opnemen of casten. Dit omvat informatie zoals wachtwoorden, betalingsgegevens, foto\'s, berichten en audio die je afspeelt." "De service die deze functie levert, krijgt toegang tot alle informatie die zichtbaar is op je scherm of die wordt afgespeeld vanaf je apparaat tijdens het opnemen of casten. Dit omvat informatie zoals wachtwoorden, betalingsgegevens, foto\'s, berichten en audio die je afspeelt." "Beginnen met opnemen of casten?" "Beginnen met opnemen of casten met %s?" - "Niet opnieuw weergeven" + "Niet opnieuw tonen" "Alles wissen" "Beheren" "Geschiedenis" @@ -540,7 +541,7 @@ "VPN" "Netwerkregistratie" "CA-certificaten" - "VPN uitschakelen" + "VPN uitzetten" "Verbinding met VPN verbreken" "Beleid bekijken" "Dit apparaat is eigendom van %1$s.\n\nJe IT-beheerder kan instellingen, zakelijke toegang, apps, aan je apparaat gekoppelde gegevens en de locatiegegevens van je apparaat bekijken en beheren.\n\nNeem contact op met je IT-beheerder voor meer informatie." @@ -548,7 +549,7 @@ "Je organisatie heeft een certificeringsinstantie geïnstalleerd op dit apparaat. Je beveiligde netwerkverkeer kan worden bijgehouden of aangepast." "Je organisatie heeft een certificeringsinstantie geïnstalleerd in je werkprofiel. Je beveiligde netwerkverkeer kan worden bijgehouden of aangepast." "Er is een certificeringsinstantie geïnstalleerd op dit apparaat. Je beveiligde netwerkverkeer kan worden bijgehouden of aangepast." - "Je beheerder heeft netwerkregistratie ingeschakeld, waarmee het verkeer op je apparaat wordt bijgehouden." + "Je beheerder heeft de netwerkregistratie aangezet, waarmee het verkeer op je apparaat wordt gecontroleerd." "Je bent verbonden met %1$s, waarmee je netwerkactiviteit (waaronder e-mails, apps en websites) kan worden gecontroleerd." "Je bent verbonden met %1$s en %2$s, waarmee je netwerkactiviteit (waaronder e-mails, apps en websites) kan worden bijgehouden." "Je werkprofiel is verbonden met %1$s, waarmee je netwerkactiviteit (waaronder e-mails, apps en websites) kan worden bijgehouden." @@ -563,7 +564,7 @@ "VPN-instellingen openen" " " "Vertrouwde gegevens openen" - "Je beheerder heeft netwerkregistratie ingeschakeld, waarmee verkeer op je apparaat wordt bijgehouden.\n\nNeem contact op met je beheerder voor meer informatie." + "Je beheerder heeft de netwerkregistratie aangezet, waarmee verkeer op je apparaat wordt gecontroleerd.\n\nNeem contact op met je beheerder voor meer informatie." "Je hebt een app rechten gegeven voor het instellen van een VPN-verbinding.\n\nMet deze app kan je apparaat- en netwerkactiviteit worden gecontroleerd, inclusief e-mails, apps en websites." "Je werkprofiel wordt beheerd door %1$s.\n\nJe beheerder kan je netwerkactiviteit controleren, inclusief e-mails, apps en websites.\n\nNeem contact op met je beheerder voor meer informatie.\n\nJe bent ook verbonden met een VPN, waarmee je netwerkactiviteit kan worden gecontroleerd." "VPN" @@ -580,15 +581,15 @@ "Nee, bedankt" "Instellen" "%1$s. %2$s" - "Nu uitschakelen" + "Nu uitzetten" "Geluidsinstellingen" "Uitvouwen" "Samenvouwen" "Automatisch ondertitelen" "Ondertitelingstip sluiten" "Ondertitelingsoverlay" - "inschakelen" - "uitschakelen" + "aanzetten" + "uitzetten" "Naar een ander uitvoerapparaat schakelen" "App is vastgezet" "Het scherm blijft zichtbaar totdat je het losmaakt. Tik op Terug en Overzicht en houd deze vast om het scherm los te maken." @@ -606,7 +607,7 @@ "App vastgezet" "App losgemaakt" "%1$s verbergen?" - "Deze wordt opnieuw weergegeven zodra u de instelling weer inschakelt." + "Deze zie je opnieuw zodra je de instelling weer aanzet." "Verbergen" "Bellen" "Systeem" @@ -620,16 +621,16 @@ "Gesprekken" "Bellen" "Trillen" - "Dempen" + "Geluid staat uit" "Telefoon op trillen" - "Telefoon gedempt" + "Telefoongeluid staat uit" "%1$s. Tik om dempen op te heffen." - "%1$s. Tik om in te stellen op trillen. Toegankelijkheidsservices kunnen zijn gedempt." - "%1$s. Tik om te dempen. Toegankelijkheidsservices kunnen zijn gedempt." + "%1$s. Tik om in te stellen op trillen. Het geluid van toegankelijkheidsservices kan hierdoor uitgaan." + "%1$s. Tik om te dempen. Het geluid van toegankelijkheidsservices kan hierdoor uitgaan." "%1$s. Tik om in te stellen op trillen." - "%1$s. Tik om te dempen." - "dempen" - "dempen opheffen" + "%1$s. Tik om geluid uit te zetten." + "geluid uit" + "geluid aanzetten" "trillen" "%s-volumeknoppen" "Gesprekken en meldingen gaan over (%1$s)" @@ -641,14 +642,14 @@ "Wifi" "Bluetooth en wifi" "Systeem-UI-tuner" - "Percentage ingebouwde batterij weergeven" - "Accupercentage weergeven in het icoon op de statusbalk wanneer er niet wordt opgeladen" + "Percentage ingebouwde batterij tonen" + "Batterijniveau (percentage) tonen in het icoon op de statusbalk wanneer niet wordt opgeladen" "Snelle instellingen" "Statusbalk" "Overzicht" "Demomodus voor systeemgebruikersinterface" - "Demomodus inschakelen" - "Demomodus weergeven" + "Demomodus aanzetten" + "Demomodus tonen" "Ethernet" "Wekker" "Werkprofiel" @@ -670,61 +671,61 @@ "Verwijderen uit Instellingen" "Systeem-UI-tuner uit Instellingen verwijderen en het gebruik van alle functies daarvan stopzetten?" "Deze app is niet geïnstalleerd op je apparaat" - "Klokseconden weergeven" - "Klokseconden op de statusbalk weergeven. Kan van invloed zijn op de accuduur." + "Klokseconden tonen" + "Klokseconden op de statusbalk tonen. Kan van invloed zijn op de batterijduur." "Snelle instellingen opnieuw indelen" - "Helderheid weergeven in Snelle instellingen" + "Helderheid tonen in Snelle instellingen" "Experimenteel" - "Bluetooth inschakelen?" - "Als je je toetsenbord wilt verbinden met je tablet, moet je eerst Bluetooth inschakelen." - "Inschakelen" - "Meldingen zonder geluid weergeven" + "Bluetooth aanzetten?" + "Als je je toetsenbord wilt verbinden met je tablet, moet je eerst Bluetooth aanzetten." + "Aanzetten" + "Meldingen zonder geluid tonen" "Alle meldingen blokkeren" "Niet zonder geluid weergeven" "Niet zonder geluid weergeven of blokkeren" "Beheeropties voor meldingen met betrekking tot stroomverbruik" "Aan" "Uit" - "Met beheeropties voor meldingen met betrekking tot stroomverbruik kun je een belangrijkheidsniveau van 0 tot 5 instellen voor de meldingen van een app. \n\n""Niveau 5"" \n- Boven aan de lijst met meldingen weergeven \n- Onderbreking op volledig scherm toestaan \n- Altijd korte weergave \n\n""Niveau 4"" \n- Geen onderbreking op volledig scherm \n- Altijd korte weergave \n\n""Niveau 3"" \n- Geen onderbreking op volledig scherm \n- Nooit korte weergave \n\n""Niveau 2"" \n- Geen onderbreking op volledig scherm \n- Nooit korte weergave \n- Nooit geluid laten horen of trillen \n\n""Niveau 1"" \n- Geen onderbreking op volledig scherm \n- Nooit korte weergave \n- Nooit geluid laten horen of trillen \n- Verbergen op vergrendelscherm en statusbalk \n- Onder aan de lijst met meldingen weergeven \n\n""Niveau 0"" \n- Alle meldingen van de app blokkeren" + "Met beheeropties voor meldingen met betrekking tot stroomverbruik kun je een belangrijkheidsniveau van 0 tot 5 instellen voor de meldingen van een app. \n\n""Niveau 5"" \n- Bovenaan de lijst met meldingen tonen \n- Onderbreking op volledig scherm toestaan \n- Altijd korte weergave \n\n""Niveau 4"" \n- Geen onderbreking op volledig scherm \n- Altijd korte weergave \n\n""Niveau 3"" \n- Geen onderbreking op volledig scherm \n- Nooit korte weergave \n\n""Niveau 2"" \n- Geen onderbreking op volledig scherm \n- Nooit korte weergave \n- Nooit geluid laten horen of trillen \n\n""Niveau 1"" \n- Geen onderbreking op volledig scherm \n- Nooit korte weergave \n- Nooit geluid laten horen of trillen \n- Verbergen op vergrendelscherm en statusbalk \n- Onderaan de lijst met meldingen tonen \n\n""Niveau 0"" \n- Alle meldingen van de app blokkeren" "Meldingen" - "Meldingen worden niet meer weergegeven" + "Je ziet deze meldingen niet meer" "Deze meldingen worden geminimaliseerd" - "Deze meldingen worden zonder geluid weergegeven" + "Deze meldingen worden zonder geluid getoond" "Deze meldingen stellen je op de hoogte" - "Meestal sluit je deze meldingen. \nWil je ze blijven weergeven?" + "Meestal sluit je deze meldingen. \nWil je ze blijven tonen?" "Klaar" "Toepassen" - "Deze meldingen blijven weergeven?" + "Deze meldingen blijven tonen?" "Meldingen stoppen" "Zonder geluid afleveren" "Blokkeren" - "Blijven weergeven" + "Blijven tonen" "Minimaliseren" "Stil" "Stil blijven" "Waarschuwen" "Blijven waarschuwen" - "Meldingen uitschakelen" - "Meldingen van deze app blijven weergeven?" + "Meldingen uitzetten" + "Meldingen van deze app blijven tonen?" "Stil" "Standaard" "Bubbel" "Geen geluid of trilling" - "Geen geluid of trilling en wordt lager in het gedeelte met gesprekken weergegeven" + "Geen geluid of trilling en wordt lager in het gedeelte met gesprekken getoond" "Kan overgaan of trillen op basis van de telefooninstellingen" - "Kan overgaan of trillen op basis van de telefooninstellingen. Gesprekken uit %1$s worden standaard als bubbels weergegeven." + "Kan overgaan of trillen op basis van de telefooninstellingen. Gesprekken uit %1$s worden standaard als bubbels getoond." "Trekt de aandacht met een zwevende snelkoppeling naar deze content." - "Wordt bovenaan het gespreksgedeelte weergegeven, verschijnt als zwevende bubbel, geeft profielfoto weer op vergrendelscherm" + "Verschijnt als zwevende bubbel bovenaan het gespreksgedeelte en toont profielfoto op vergrendelscherm" "Instellingen" "Prioriteit" "%1$s ondersteunt geen gespreksfuncties" "Geen recente bubbels" - "Recente bubbels en gesloten bubbels worden hier weergegeven" + "Recente bubbels en gesloten bubbels zie je hier" "Deze meldingen kunnen niet worden aangepast." - "Deze groep meldingen kan hier niet worden geconfigureerd" + "Deze groep meldingen kan hier niet worden ingesteld" "Melding via proxy" "Alle meldingen van %1$s" - "Meer weergeven" + "Meer tonen" "Deze app gebruikt de camera." "Deze app gebruikt de microfoon." "Deze app wordt over andere apps op je scherm heen weergegeven." @@ -746,7 +747,7 @@ "Geen belangrijk gesprek" "Zonder geluid" "Waarschuwen" - "Ballon weergeven" + "Ballon tonen" "Bubbels verwijderen" "Toevoegen aan startscherm" "%1$s %2$s" @@ -810,7 +811,7 @@ "Muziek" "YouTube" "Agenda" - "Weergeven met volumeknoppen" + "Tonen met volumeknoppen" "Niet storen" "Volumeknoppen als sneltoets" "\'Niet storen\' afsluiten bij volume omhoog" @@ -821,8 +822,8 @@ "Hoofdtelefoon aangesloten" "Headset aangesloten" "Databesparing" - "Databesparing is ingeschakeld" - "Databesparing is uitgeschakeld" + "Databesparing staat aan" + "Databesparing staat uit" "Aan" "Uit" "Niet beschikbaar" @@ -860,16 +861,16 @@ "Bewerken" "Tijd" - "Uren, minuten en seconden weergeven" - "Uren en minuten weergeven (standaard)" - "Dit icoon niet weergeven" + "Uren, minuten en seconden tonen" + "Uren en minuten tonen (standaard)" + "Dit icoon niet tonen" - "Percentage altijd weergeven" - "Percentage weergeven tijdens opladen (standaard)" - "Dit icoon niet weergeven" + "Percentage altijd tonen" + "Percentage tonen tijdens opladen (standaard)" + "Dit icoon niet tonen" - "Pictogrammen voor meldingen met lage prioriteit weergeven" + "Iconen voor meldingen met lage prioriteit tonen" "Overig" "Scheiding voor gesplitst scherm" "Linkerscherm op volledig scherm" @@ -922,7 +923,7 @@ "Formaat aanpassen" "Telefoon uitgezet wegens hitte" "Je telefoon functioneert nu weer zoals gebruikelijk.\nTik voor meer informatie" - "Je telefoon was te warm en is uitgeschakeld om af te koelen. Je telefoon presteert nu weer zoals gebruikelijk.\n\nJe telefoon kan warm worden als je:\n • bronintensieve apps gebruikt (zoals game-, video-, of navigatie-apps),\n • grote bestanden up- of downloadt,\n • je telefoon gebruikt bij hoge temperaturen." + "Je telefoon was te warm en is uitgezet om af te koelen. Je telefoon presteert nu weer zoals gebruikelijk.\n\nJe telefoon kan warm worden als je:\n • bronintensieve apps gebruikt (zoals game-, video-, of navigatie-apps),\n • grote bestanden up- of downloadt,\n • je telefoon gebruikt bij hoge temperaturen." "Onderhoudsstappen bekijken" "De telefoon wordt warm" "Bepaalde functies zijn beperkt terwijl de telefoon afkoelt.\nTik voor meer informatie" @@ -960,12 +961,12 @@ "Mobiele data" "%1$s%2$s" "%1$s, %2$s" - "Wifi is uitgeschakeld" - "Bluetooth is uitgeschakeld" - "\'Niet storen\' is uitgeschakeld" - "\'Niet storen\' is ingeschakeld door een automatische regel (%s)." - "\'Niet storen\' is ingeschakeld door een app (%s)." - "\'Niet storen\' is ingeschakeld door een automatische regel of app." + "Wifi staat uit" + "Bluetooth staat uit" + "Niet storen staat uit" + "Niet storen is aangezet door een automatische regel (%s)." + "Niet storen is aangezet door een app (%s)." + "Niet storen is aangezet door een automatische regel of app." "Tot %s" "Behouden" "Vervangen" @@ -975,17 +976,17 @@ "Je hebt dan geen toegang meer tot data of internet via %s. Internet is alleen nog beschikbaar via wifi." "je provider" "Aangezien een app een rechtenverzoek afdekt, kan Instellingen je reactie niet verifiëren." - "%1$s toestaan om segmenten van %2$s weer te geven?" + "%1$s toestaan om segmenten van %2$s te tonen?" "- Deze kan informatie lezen van %1$s" "- Deze kan acties uitvoeren in %1$s" - "%1$s toestaan om segmenten van apps weer te geven" + "%1$s toestaan om segmenten van apps te tonen" "Toestaan" "Weigeren" "Tikken om Batterijbesparing in te schakelen" - "Inschakelen wanneer de batterij waarschijnlijk leeg raakt" + "Aanzetten als de batterij waarschijnlijk leeg raakt" "Nee" - "Batterijbesparing is ingeschakeld" - "Batterijbesparing wordt automatisch ingeschakeld wanneer de batterijstatus lager is dan %d%%." + "Batterijbesparing staat aan" + "Batterijbesparing wordt automatisch aangezet wanneer de batterijstatus lager is dan %d%%." "Instellingen" "OK" "Dump SysUI Heap" @@ -1012,9 +1013,9 @@ "Naar linksonder verplaatsen" "Naar rechtsonder verplaatsen" "Bubbel sluiten" - "Gesprekken niet in bubbels weergeven" + "Gesprekken niet in bubbels tonen" "Chatten met bubbels" - "Nieuwe gesprekken worden weergegeven als zwevende iconen of \'bubbels\'. Tik om een bubbel te openen. Sleep om de bubbel te verplaatsen." + "Nieuwe gesprekken worden als zwevende iconen of bubbels getoond. Tik om een bubbel te openen. Sleep om een bubbel te verplaatsen." "Beheer bubbels wanneer je wilt" "Tik op Beheren om bubbels van deze app uit te schakelen" "OK" @@ -1024,9 +1025,9 @@ "Stand-by" "Gesprek ingesteld als prioriteit" "Prioriteitsgesprekken:" - "Worden bovenaan het gespreksgedeelte weergegeven" + "Worden bovenaan het gespreksgedeelte getoond" "Tonen profielafbeelding op vergrendelscherm" - "Worden als zwevende ballon weergegeven vóór apps" + "Zijn als zwevende ballon zichtbaar vóór apps" "Onderbreken \'Niet storen\'" "OK" "Instellingen" @@ -1097,4 +1098,6 @@ "%1$s (verbinding verbroken)" "Kan geen verbinding maken. Probeer het nog eens." "Nieuw apparaat koppelen" + "Probleem bij het lezen van je batterijmeter" + "Tik hier voor meer informatie" diff --git a/packages/SystemUI/res/values-or/strings.xml b/packages/SystemUI/res/values-or/strings.xml index a6927218d5c..fd1134960f1 100644 --- a/packages/SystemUI/res/values-or/strings.xml +++ b/packages/SystemUI/res/values-or/strings.xml @@ -181,6 +181,7 @@ "ବ୍ୟାଟେରୀର ଦୁଇଟି ବାର୍‍ ଅଛି।" "ବ୍ୟାଟେରୀର ତିନୋଟି ବାର୍‍ ଅଛି।" "ବ୍ୟାଟେରୀ ପୂର୍ଣ୍ଣ‍।" + "ବ୍ୟାଟେରୀ ଶତକଡ଼ା ଅଜଣା ଅଟେ।" "କୌଣସି ଫୋନ୍ ନାହିଁ।" "ଫୋନର ଗୋଟିଏ ବାର ଅଛି।" "ଫୋନର ଦୁଇଟି ବାର୍‌ ଅଛି।" @@ -370,7 +371,7 @@ "ସେଟିଂସ୍" "ସମୟ" "ମୁଁ" - "ୟୁଜର୍‌" + "ଉପଯୋଗକର୍ତ୍ତା‌" "ନୂଆ ଉପଯୋଗକର୍ତ୍ତା" "ୱାଇ-ଫାଇ" "ସଂଯୁକ୍ତ ହୋଇନାହିଁ" @@ -475,10 +476,10 @@ "ଉପଯୋଗକର୍ତ୍ତାଙ୍କୁ ଯୋଗ କରନ୍ତୁ" "ନୂଆ ଉପଯୋଗକର୍ତ୍ତା" "ଅତିଥିଙ୍କୁ କାଢ଼ିଦେବେ?" - "ଏହି ଅବଧିର ସମସ୍ତ ଆପ୍‌ ଓ ଡାଟା ଡିଲିଟ୍‌ ହୋଇଯିବ।" + "ଏହି ସେସନର ସମସ୍ତ ଆପ୍‌ ଓ ଡାଟା ଡିଲିଟ୍‌ ହୋଇଯିବ।" "କାଢ଼ିଦିଅନ୍ତୁ" "ପୁଣି ସ୍ୱାଗତ, ଅତିଥି!" - "ଆପଣ ନିଜର ଅବଧି ଜାରି ରଖିବାକୁ ଚାହାନ୍ତି କି?" + "ଆପଣ ନିଜର ସେସନ୍ ଜାରି ରଖିବାକୁ ଚାହାଁନ୍ତି କି?" "ଆରମ୍ଭ କରନ୍ତୁ" "ହଁ, ଜାରି ରଖନ୍ତୁ" "ଅତିଥି ୟୁଜର୍‍" @@ -488,7 +489,7 @@ "ବର୍ତ୍ତମାନର ୟୁଜରଙ୍କୁ ଲଗଆଉଟ୍‍ କରନ୍ତୁ" "ୟୁଜରଙ୍କୁ ଲଗଆଉଟ୍‍ କରନ୍ତୁ" "ନୂତନ ଉପଯୋଗକର୍ତ୍ତା ଯୋଗ କରିବେ?" - "ଜଣେ ନୂଆ ୟୁଜର୍‍ଙ୍କୁ ଯୋଡ଼ିବାବେଳେ, ସେହି ବ୍ୟକ୍ତିଙ୍କୁ ସ୍ଥାନ ସେଟ୍‍ କରିବାକୁ ପଡ଼ିବ। \n \n ଅନ୍ୟ ସମସ୍ତ ୟୁଜର୍‍ଙ୍କ ପାଇଁ ଯେକୌଣସି ୟୁଜର୍‍ ଆପ୍‌ଗୁଡ଼ିକୁ ଅପଡେଟ୍‌ କରିପାରିବେ।" + "ଆପଣ ଜଣେ ନୂଆ ଉପଯୋଗକର୍ତ୍ତାଙ୍କୁ ଯୋଗ କଲେ,ତାଙ୍କୁ ସ୍ପେସ୍ ସେଟ୍ ଅପ୍ କରିବାକୁ ପଡ଼ିବ। \n \n ଅନ୍ୟ ସମସ୍ତ ଉପଯୋଗକର୍ତ୍ତାଙ୍କ ପାଇଁ ଯେ କୌଣସି ଉପଯୋଗକର୍ତ୍ତା ଆପଗୁଡ଼ିକୁ ଅପଡେଟ୍‌ କରିପାରିବେ।" "ଉପଯୋଗକର୍ତ୍ତା ସୀମାରେ ପହଞ୍ଚିଛି" କେବଳ %d ଉପଯୋଗକର୍ତ୍ତା ହିଁ ତିଆରି କରିହେବ। @@ -1097,4 +1098,6 @@ "%1$s (ବିଚ୍ଛିନ୍ନ କରାଯାଇଛି)" "ସଂଯୋଗ କରାଯାଇପାରିଲା ନାହିଁ। ପୁଣି ଚେଷ୍ଟା କରନ୍ତୁ।" "ନୂଆ ଡିଭାଇସକୁ ପେୟାର୍ କରନ୍ତୁ" + "ଆପଣଙ୍କ ବ୍ୟାଟେରୀ ମିଟର୍ ପଢ଼ିବାରେ ସମସ୍ୟା ହେଉଛି" + "ଅଧିକ ସୂଚନା ପାଇଁ ଟାପ୍ କରନ୍ତୁ" diff --git a/packages/SystemUI/res/values-pa/strings.xml b/packages/SystemUI/res/values-pa/strings.xml index 4db23a63c0b..7da4635b77e 100644 --- a/packages/SystemUI/res/values-pa/strings.xml +++ b/packages/SystemUI/res/values-pa/strings.xml @@ -181,6 +181,7 @@ "ਬੈਟਰੀ ਦੋ ਬਾਰਸ।" "ਬੈਟਰੀ ਤਿੰਨ ਬਾਰਸ।" "ਬੈਟਰੀ ਪੂਰੀ।" + "ਬੈਟਰੀ ਪ੍ਰਤੀਸ਼ਤ ਅਗਿਆਤ ਹੈ।" "ਕੋਈ ਫ਼ੋਨ ਨਹੀਂ।" "ਫ਼ੋਨ ਇੱਕ ਬਾਰ।" "ਫ਼ੋਨ ਦੋ ਬਾਰਸ।" @@ -479,7 +480,7 @@ "ਹਟਾਓ" "ਮਹਿਮਾਨ, ਫਿਰ ਤੁਹਾਡਾ ਸੁਆਗਤ ਹੈ!" "ਕੀ ਤੁਸੀਂ ਆਪਣਾ ਸੈਸ਼ਨ ਜਾਰੀ ਰੱਖਣਾ ਚਾਹੁੰਦੇ ਹੋ?" - "ਸ਼ੁਰੂ ਕਰੋ" + "ਮੁੜ-ਸ਼ੁਰੂ ਕਰੋ" "ਹਾਂ, ਜਾਰੀ ਰੱਖੋ" "ਮਹਿਮਾਨ ਉਪਭੋਗਤਾ" "ਐਪਾਂ ਅਤੇ ਡਾਟਾ ਮਿਟਾਉਣ ਲਈ, ਮਹਿਮਾਨ ਵਰਤੋਂਕਾਰ ਹਟਾਓ" @@ -707,7 +708,7 @@ "ਸੂਚਨਾਵਾਂ ਬੰਦ ਕਰੋ" "ਕੀ ਇਸ ਐਪ ਤੋਂ ਸੂਚਨਾਵਾਂ ਨੂੰ ਦਿਖਾਉਣਾ ਜਾਰੀ ਰੱਖਣਾ ਹੈ?" "ਸ਼ਾਂਤ" - "ਪੂਰਵ-ਨਿਰਧਾਰਤ" + "ਪੂਰਵ-ਨਿਰਧਾਰਿਤ" "ਬੁਲਬੁਲਾ" "ਕੋਈ ਧੁਨੀ ਜਾਂ ਥਰਥਰਾਹਟ ਨਹੀਂ" "ਕੋਈ ਧੁਨੀ ਜਾਂ ਥਰਥਰਾਹਟ ਨਹੀਂ ਅਤੇ ਸੂਚਨਾਵਾਂ ਗੱਲਬਾਤ ਸੈਕਸ਼ਨ ਵਿੱਚ ਹੇਠਲੇ ਪਾਸੇ ਦਿਸਦੀਆਂ ਹਨ" @@ -1097,4 +1098,6 @@ "%1$s (ਡਿਸਕਨੈਕਟ ਹੋਇਆ)" "ਕਨੈਕਟ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਿਆ। ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ।" "ਨਵਾਂ ਡੀਵਾਈਸ ਜੋੜਾਬੱਧ ਕਰੋ" + "ਤੁਹਾਡੇ ਬੈਟਰੀ ਮੀਟਰ ਨੂੰ ਪੜ੍ਹਨ ਵਿੱਚ ਸਮੱਸਿਆ ਹੋ ਰਹੀ ਹੈ" + "ਹੋਰ ਜਾਣਕਾਰੀ ਲਈ ਟੈਪ ਕਰੋ" diff --git a/packages/SystemUI/res/values-pl/strings.xml b/packages/SystemUI/res/values-pl/strings.xml index ad41a59a5a6..56ed3de4cd8 100644 --- a/packages/SystemUI/res/values-pl/strings.xml +++ b/packages/SystemUI/res/values-pl/strings.xml @@ -181,6 +181,7 @@ "Bateria: dwa paski." "Bateria: trzy paski." "Bateria naładowana." + "Poziom naładowania baterii jest nieznany." "Brak sygnału telefonu." "Telefon: jeden pasek." "Telefon: dwa paski." @@ -481,7 +482,7 @@ "Usunąć gościa?" "Wszystkie aplikacje i dane w tej sesji zostaną usunięte." "Usuń" - "Witaj ponownie, gościu!" + "Witaj ponownie, Gościu!" "Chcesz kontynuować sesję?" "Rozpocznij nową" "Tak, kontynuuj" @@ -1109,4 +1110,6 @@ "%1$s (rozłączono)" "Nie udało się połączyć. Spróbuj ponownie." "Sparuj nowe urządzenie" + "Problem z odczytaniem pomiaru wykorzystania baterii" + "Kliknij, aby uzyskać więcej informacji" diff --git a/packages/SystemUI/res/values-pt-rBR/strings.xml b/packages/SystemUI/res/values-pt-rBR/strings.xml index 43f6b2b4ea2..860c372eec8 100644 --- a/packages/SystemUI/res/values-pt-rBR/strings.xml +++ b/packages/SystemUI/res/values-pt-rBR/strings.xml @@ -181,6 +181,7 @@ "Duas barras de bateria." "Três barras de bateria." "Bateria cheia." + "Porcentagem da bateria desconhecida." "Sem telefone." "Uma barra de sinal do telefone." "Duas barras de sinal do telefone." @@ -474,16 +475,16 @@ "Mostrar perfil" "Adicionar usuário" "Novo usuário" - "Remover convidado?" + "Remover visitante?" "Todos os apps e dados nesta sessão serão excluídos." "Remover" - "Bem-vindo, convidado." + "Você voltou, visitante!" "Quer continuar a sessão?" "Recomeçar" "Sim, continuar" - "Usuário convidado" - "Para excluir apps e dados, remova o usuário convidado" - "REMOVER CONVIDADO" + "Usuário visitante" + "Para excluir apps e dados, remova o usuário visitante" + "REMOVER VISITANTE" "Desconectar usuário" "Desconectar usuário atual" "DESCONECTAR USUÁRIO" @@ -784,7 +785,7 @@ "Parar" "Avançar" "Anterior" - "Retroceder" + "Voltar" "Avançar rapidamente" "Page Up" "Page Down" @@ -843,7 +844,7 @@ "Inclinação à esquerda" "Inclinação à direita" - "Alternador de teclado" + "Seletor de teclado" "Salvar" "Redefinir" "Ajustar largura do botão" @@ -1097,4 +1098,6 @@ "%1$s (desconectado)" "Não foi possível conectar. Tente novamente." "Parear novo dispositivo" + "Problema para ler seu medidor de bateria" + "Toque para mais informações" diff --git a/packages/SystemUI/res/values-pt-rPT/strings.xml b/packages/SystemUI/res/values-pt-rPT/strings.xml index c707ad6be72..b491bd6b8f7 100644 --- a/packages/SystemUI/res/values-pt-rPT/strings.xml +++ b/packages/SystemUI/res/values-pt-rPT/strings.xml @@ -181,6 +181,7 @@ "Duas barras de bateria." "Três barras de bateria." "Bateria carregada." + "Percentagem da bateria desconhecida." "Sem telefone." "Uma barra de telefone." "Duas barras de telefone." @@ -475,9 +476,9 @@ "Adicionar utilizador" "Novo utilizador" "Remover o convidado?" - "Todas as aplicações e dados desta sessão serão eliminados." + "Todas as apps e dados desta sessão serão eliminados." "Remover" - "Bem-vindo de volta, caro(a) convidado(a)!" + "Bem-vindo de volta, convidado!" "Pretende continuar a sessão?" "Recomeçar" "Sim, continuar" @@ -488,7 +489,7 @@ "Terminar sessão do utilizador atual" "TERMINAR SESSÃO DO UTILIZADOR" "Adicionar um novo utilizador?" - "Ao adicionar um novo utilizador, essa pessoa tem de configurar o respetivo espaço.\n\nQualquer utilizador pode atualizar aplicações para todos os outros utilizadores." + "Ao adicionar um novo utilizador, essa pessoa tem de configurar o respetivo espaço.\n\nQualquer utilizador pode atualizar apps para todos os outros utilizadores." "Limite de utilizadores alcançado" Pode adicionar até %d utilizadores. @@ -1097,4 +1098,6 @@ "%1$s (desligado)" "Não foi possível ligar. Tente novamente." "Sincronize o novo dispositivo" + "Ocorreu um problema ao ler o medidor da bateria" + "Toque para obter mais informações" diff --git a/packages/SystemUI/res/values-pt/strings.xml b/packages/SystemUI/res/values-pt/strings.xml index 43f6b2b4ea2..860c372eec8 100644 --- a/packages/SystemUI/res/values-pt/strings.xml +++ b/packages/SystemUI/res/values-pt/strings.xml @@ -181,6 +181,7 @@ "Duas barras de bateria." "Três barras de bateria." "Bateria cheia." + "Porcentagem da bateria desconhecida." "Sem telefone." "Uma barra de sinal do telefone." "Duas barras de sinal do telefone." @@ -474,16 +475,16 @@ "Mostrar perfil" "Adicionar usuário" "Novo usuário" - "Remover convidado?" + "Remover visitante?" "Todos os apps e dados nesta sessão serão excluídos." "Remover" - "Bem-vindo, convidado." + "Você voltou, visitante!" "Quer continuar a sessão?" "Recomeçar" "Sim, continuar" - "Usuário convidado" - "Para excluir apps e dados, remova o usuário convidado" - "REMOVER CONVIDADO" + "Usuário visitante" + "Para excluir apps e dados, remova o usuário visitante" + "REMOVER VISITANTE" "Desconectar usuário" "Desconectar usuário atual" "DESCONECTAR USUÁRIO" @@ -784,7 +785,7 @@ "Parar" "Avançar" "Anterior" - "Retroceder" + "Voltar" "Avançar rapidamente" "Page Up" "Page Down" @@ -843,7 +844,7 @@ "Inclinação à esquerda" "Inclinação à direita" - "Alternador de teclado" + "Seletor de teclado" "Salvar" "Redefinir" "Ajustar largura do botão" @@ -1097,4 +1098,6 @@ "%1$s (desconectado)" "Não foi possível conectar. Tente novamente." "Parear novo dispositivo" + "Problema para ler seu medidor de bateria" + "Toque para mais informações" diff --git a/packages/SystemUI/res/values-ro/strings.xml b/packages/SystemUI/res/values-ro/strings.xml index 5dbee8ff9b0..6046383df33 100644 --- a/packages/SystemUI/res/values-ro/strings.xml +++ b/packages/SystemUI/res/values-ro/strings.xml @@ -181,6 +181,7 @@ "Baterie: două bare." "Baterie: trei bare." "Baterie: complet." + "Procentajul bateriei este necunoscut." "Nu există semnal pentru telefon." "Semnal pentru telefon: o bară." "Semnal pentru telefon: două bare." @@ -1103,4 +1104,6 @@ "%1$s (s-a deconectat)" "Nu s-a putut conecta. Reîncercați." "Asociați un nou dispozitiv" + "Problemă la citirea măsurării bateriei" + "Atingeți pentru mai multe informații" diff --git a/packages/SystemUI/res/values-ru/strings.xml b/packages/SystemUI/res/values-ru/strings.xml index 33bcc77926b..405cbdb22a4 100644 --- a/packages/SystemUI/res/values-ru/strings.xml +++ b/packages/SystemUI/res/values-ru/strings.xml @@ -181,6 +181,7 @@ "Заряд батареи: два деления." "Заряд батареи: три деления." "Батарея полностью заряжена." + "Уровень заряда батареи в процентах неизвестен." "Сигнал телефонной сети отсутствует." "Сигнал телефонной сети: одно деление." "Сигнал телефонной сети: два деления." @@ -1109,4 +1110,6 @@ "%1$s (отключено)" "Не удалось подключиться. Повторите попытку." "Подключить новое устройство" + "Не удается получить данные об уровне заряда батареи" + "Нажмите, чтобы узнать больше." diff --git a/packages/SystemUI/res/values-si/strings.xml b/packages/SystemUI/res/values-si/strings.xml index 2d9879b93ad..8c061fcea8a 100644 --- a/packages/SystemUI/res/values-si/strings.xml +++ b/packages/SystemUI/res/values-si/strings.xml @@ -181,6 +181,7 @@ "බැටරිය තීරු දෙකයි." "බැටරිය තීරු තුනයි." "බැටරිය පිරී ඇත." + "බැටරි ප්‍රතිශතය නොදනී." "දුරකථනයක් නැත." "දුරකථනය තීරු එකයි." "දුරකථනය තීරු දෙකයි." @@ -1097,4 +1098,6 @@ "%1$s (විසන්ධි විය)" "සම්බන්ධ වීමට නොහැකි විය. නැවත උත්සාහ කරන්න." "නව උපාංගය යුගල කරන්න" + "ඔබගේ බැටරි මනුව කියවීමේ දෝෂයකි" + "තවත් තොරතුරු සඳහා තට්ටු කරන්න" diff --git a/packages/SystemUI/res/values-sk/strings.xml b/packages/SystemUI/res/values-sk/strings.xml index a1724a4f62c..4a29d87f44b 100644 --- a/packages/SystemUI/res/values-sk/strings.xml +++ b/packages/SystemUI/res/values-sk/strings.xml @@ -181,6 +181,7 @@ "Dve čiarky batérie." "Tri čiarky batérie." "Batéria je nabitá." + "Percento batérie nie je známe." "Žiadna telefónna sieť." "Jeden stĺpec signálu telefónnej siete." "Dve čiarky signálu telefónnej siete." @@ -1109,4 +1110,6 @@ "%1$s (odpojené)" "Nepodarilo sa pripojiť. Skúste to znova." "Spárovať nové zariadenie" + "Pri čítaní meradla batérie sa vyskytol problém" + "Klepnutím si zobrazíte ďalšie informácie" diff --git a/packages/SystemUI/res/values-sl/strings.xml b/packages/SystemUI/res/values-sl/strings.xml index 11d3fc53fbc..d5de4d3f0d3 100644 --- a/packages/SystemUI/res/values-sl/strings.xml +++ b/packages/SystemUI/res/values-sl/strings.xml @@ -181,6 +181,7 @@ "Baterija z dvema črticama." "Baterija s tremi črticami." "Baterija je polna." + "Neznan odstotek napolnjenosti baterije." "Ni telefona." "Telefon z eno črtico." "Telefon z dvema črticama." @@ -423,7 +424,7 @@ "Vklop ob %s" "Do %s" "Temna tema" - "Varčevanje z baterijo" + "Varčevanje z energijo baterije" "Ob sončnem zahodu" "Do sončnega vzhoda" "Vklop ob %s" @@ -1109,4 +1110,6 @@ "%1$s (povezava prekinjena)" "Povezave ni bilo mogoče vzpostaviti. Poskusite znova." "Seznanitev nove naprave" + "Težava z branjem indikatorja stanja napolnjenosti baterije" + "Dotaknite se za več informacij" diff --git a/packages/SystemUI/res/values-sq/strings.xml b/packages/SystemUI/res/values-sq/strings.xml index 99b2ed553ff..de809013637 100644 --- a/packages/SystemUI/res/values-sq/strings.xml +++ b/packages/SystemUI/res/values-sq/strings.xml @@ -181,6 +181,7 @@ "Bateria ka edhe dy vija." "Bateria ka edhe tre vija." "Bateria u mbush." + "Përqindja e baterisë e panjohur." "Nuk ka telefon." "Telefoni ka edhe një vijë." "Telefoni ka dy vija." @@ -1097,4 +1098,6 @@ "%1$s (e shkëputur)" "Nuk mund të lidhej. Provo sërish." "Çifto pajisjen e re" + "Problem me leximin e matësit të baterisë" + "Trokit për më shumë informacione" diff --git a/packages/SystemUI/res/values-sr/strings.xml b/packages/SystemUI/res/values-sr/strings.xml index 69d596841ff..425ce213c1c 100644 --- a/packages/SystemUI/res/values-sr/strings.xml +++ b/packages/SystemUI/res/values-sr/strings.xml @@ -181,6 +181,7 @@ "Батерија од две црте." "Батерија од три црте." "Батерија је пуна." + "Проценат напуњености батерије није познат." "Нема телефона." "Сигнал телефона има једну црту." "Сигнал телефона од две црте." @@ -1103,4 +1104,6 @@ "%1$s (веза је прекинута)" "Повезивање није успело. Пробајте поново." "Упари нови уређај" + "Проблем са очитавањем мерача батерије" + "Додирните за више информација" diff --git a/packages/SystemUI/res/values-sv/strings.xml b/packages/SystemUI/res/values-sv/strings.xml index 26ab0dd18d5..27de6d27b3f 100644 --- a/packages/SystemUI/res/values-sv/strings.xml +++ b/packages/SystemUI/res/values-sv/strings.xml @@ -76,18 +76,18 @@ "Läs mer" "Zooma för att fylla skärm" "Dra för att fylla skärmen" - "Skärmdump" + "Skärmbild" "har skickat en bild" - "Skärmdumpen sparas ..." - "Skärmdumpen sparas ..." - "Skärmdumpen har sparats" - "Visa skärmdumpen genom att trycka här" - "Det gick inte att spara skärmdumpen" - "Testa att ta en skärmdump igen" - "Det går inte att spara skärmdumpen eftersom lagringsutrymmet inte räcker" - "Appen eller organisationen tillåter inte att du tar skärmdumpar" - "Stäng skärmdump" - "Förhandsgranskning av skärmdump" + "Skärmbilden sparas ..." + "Skärmbilden sparas ..." + "Skärmbilden har sparats" + "Visa skärmbilden genom att trycka här" + "Det gick inte att spara skärmbilden" + "Testa att ta en skärmbild igen" + "Det går inte att spara skärmbilden eftersom lagringsutrymmet inte räcker" + "Appen eller organisationen tillåter inte att du tar skärmbilder" + "Stäng skärmbild" + "Förhandsgranskning av skärmbild" "Skärminspelare" "Behandlar skärminspelning" "Avisering om att skärminspelning pågår" @@ -181,6 +181,7 @@ "Batteri: två staplar." "Batteri: tre staplar." "Batteriet är fulladdat." + "Okänd batterinivå." "Ingen telefon." "Telefon: en stapel." "Telefon: två staplar." @@ -477,7 +478,7 @@ "Vill du ta bort gästen?" "Alla appar och data i denna session kommer att raderas." "Ta bort" - "Välkommen tillbaka gäst!" + "Välkommen tillbaka som gäst!" "Vill du fortsätta sessionen?" "Börja om" "Ja, fortsätt" @@ -714,7 +715,7 @@ "Kan ringa eller vibrera beroende på inställningarna på telefonen" "Kan ringa eller vibrera beroende på inställningarna på telefonen. Konversationer från %1$s visas i bubblor som standard." "Behåller din uppmärksamhet med en flytande genväg till innehållet." - "Visas högst upp bland konversationerna som en flytande bubbla, visar profilbilden på låsskärmen" + "Visas högst upp bland konversationerna som en flytande bubbla och visar profilbilden på låsskärmen" "Inställningar" "Prioritet" "%1$s har inte stöd för konversationsfunktioner" @@ -947,7 +948,7 @@ "Appen %1$s" "Aviseringar" "Batteri" - "Skärmdumpar" + "Skärmbilder" "Allmänna meddelanden" "Lagring" "Tips" @@ -1097,4 +1098,6 @@ "%1$s (frånkopplad)" "Det gick inte att ansluta. Försök igen." "Parkoppla en ny enhet" + "Batteriindikatorn visas inte" + "Tryck för mer information" diff --git a/packages/SystemUI/res/values-sw/strings.xml b/packages/SystemUI/res/values-sw/strings.xml index b5ac5eb512e..fb1ae556900 100644 --- a/packages/SystemUI/res/values-sw/strings.xml +++ b/packages/SystemUI/res/values-sw/strings.xml @@ -24,7 +24,7 @@ "Hakuna arifa" "Inaendelea" "Arifa" - "Huenda chaji itaisha hivi karibuni" + "Chaji inaweza kuisha hivi karibuni" "Imebakisha %s" "Imesalia %1$s, itadumu takribani %2$s kulingana na jinsi unavyotumia" "Imesalia %1$s, itadumu takribani %2$s" @@ -181,6 +181,7 @@ "Pau mbili za betri" "Pau tatu za betri." "Betri imejaa." + "Asilimia ya betri haijulikani." "Hakuna simu" "Mwambaa mmoja wa simu." "Miambaa miwili ya simu" @@ -477,9 +478,9 @@ "Ungependa kumwondoa mgeni?" "Data na programu zote katika kipindi hiki zitafutwa." "Ondoa" - "Karibu tena, mwalikwa!" + "Karibu tena mgeni!" "Je, unataka kuendelea na kipindi chako?" - "Anza tena" + "Anza upya" "Ndiyo, endelea" "Mtumiaji mgeni" "Ili kufuta programu na data, mwondoe mtumiaji mgeni" @@ -1097,4 +1098,6 @@ "%1$s (hakijaunganishwa)" "Imeshindwa kuunganisha. Jaribu tena." "Oanisha kifaa kipya" + "Tatizo la kusoma mita ya betri yako" + "Gusa ili upate maelezo zaidi" diff --git a/packages/SystemUI/res/values-ta/strings.xml b/packages/SystemUI/res/values-ta/strings.xml index f809ec15fed..e085e63d781 100644 --- a/packages/SystemUI/res/values-ta/strings.xml +++ b/packages/SystemUI/res/values-ta/strings.xml @@ -45,7 +45,7 @@ "அறிவிப்புகள்" "புளூடூத் இணைக்கப்பட்டது" "உள்ளீட்டு முறைகளை அமை" - "கைமுறை விசைப்பலகை" + "கைமுறை கீபோர்டு" "%2$sஐ அணுக, %1$s ஆப்ஸை அனுமதிக்கவா?" "%2$sஐப் பயன்படுத்த %1$sஐ அனுமதிக்கவா?\nஇந்த ஆப்ஸிற்கு ரெக்கார்டு செய்வதற்கான அனுமதி வழங்கப்படவில்லை, எனினும் இந்த USB சாதனம் மூலம் ஆடியோவைப் பதிவுசெய்யும்." "%2$sஐ அணுக, %1$s ஆப்ஸை அனுமதிக்கவா?" @@ -181,6 +181,7 @@ "பேட்டரி சக்தி இரண்டு பார் அளவில் உள்ளது." "பேட்டரி சக்தி மூன்று பார் அளவில் உள்ளது." "பேட்டரி முழுமையாக உள்ளது." + "பேட்டரி சதவீதம் தெரியவில்லை." "சிக்னல் இல்லை." "சிக்னல் ஒரு கோட்டில் உள்ளது." "சிக்னல் இரண்டு கோட்டில் உள்ளது." @@ -419,7 +420,7 @@ "%sக்கு ஆன் செய்" "%s வரை" "டார்க் தீம்" - "பேட்டரி சேமிப்பான்" + "பேட்டரி சேமிப்பு" "மாலையில் ஆன் செய்" "காலை வரை" "%sக்கு ஆன் செய்" @@ -475,7 +476,7 @@ "பயனரைச் சேர்" "புதியவர்" "கெஸ்ட்டை அகற்றவா?" - "இந்த அமர்வின் எல்லா பயன்பாடுகளும், தரவும் நீக்கப்படும்." + "இந்த அமர்வின் எல்லா ஆப்ஸும் தரவும் நீக்கப்படும்." "அகற்று" "நல்வரவு!" "உங்கள் அமர்வைத் தொடர விருப்பமா?" @@ -488,7 +489,7 @@ "தற்போதைய பயனரிலிருந்து வெளியேறு" "பயனரை வெளியேற்று" "புதியவரைச் சேர்க்கவா?" - "புதிய பயனரைச் சேர்க்கும்போது, அவர் தனக்கான இடத்தை அமைக்க வேண்டும்.\n\nஎந்தவொரு பயனரும், மற்ற எல்லா பயனர்களுக்காகவும் பயன்பாடுகளைப் புதுப்பிக்கலாம்." + "புதிய பயனரைச் சேர்க்கும்போது, அவர் தனக்கான இடத்தை அமைக்க வேண்டும்.\n\nஎந்தவொரு பயனரும், மற்ற எல்லா பயனர்களுக்காகவும் ஆப்ஸைப் புதுப்பிக்கலாம்." "பயனர் வரம்பை அடைந்துவிட்டீர்கள்" %d பயனர்கள் வரை சேர்க்க முடியும். @@ -676,7 +677,7 @@ "விரைவு அமைப்புகளில் ஒளிர்வுப் பட்டியைக் காட்டு" "பரிசோதனை முயற்சி" "புளூடூத்தை இயக்கவா?" - "உங்கள் டேப்லெட்டுடன் விசைப்பலகையை இணைக்க, முதலில் புளூடூத்தை இயக்க வேண்டும்." + "உங்கள் டேப்லெட்டுடன் கீபோர்டை இணைக்க, முதலில் புளூடூத்தை இயக்க வேண்டும்." "இயக்கு" "ஒலியின்றி அறிவிப்புகளைக் காட்டு" "எல்லா அறிவிப்புகளையும் தடு" @@ -748,7 +749,7 @@ "விழிப்பூட்டுகிறது" "குமிழைக் காட்டு" "குமிழ்களை அகற்று" - "முகப்புத் திரையில் சேர்" + "முகப்புத் திரையில் சேருங்கள்" "%1$s %2$s" "அறிவிப்புக் கட்டுப்பாடுகள்" "அறிவிப்பை உறக்கநிலையாக்கும் விருப்பங்கள்" @@ -766,7 +767,7 @@ "பேட்டரி பயன்பாடு" "சார்ஜ் செய்யும் போது பேட்டரி சேமிப்பானைப் பயன்படுத்த முடியாது" - "பேட்டரி சேமிப்பான்" + "பேட்டரி சேமிப்பு" "செயல்திறனையும் பின்புலத்தில் தரவு செயலாக்கப்படுவதையும் குறைக்கும்" "%1$s பட்டன்" "ஹோம்" @@ -799,7 +800,7 @@ "சமீபத்தியவை" "முந்தையது" "அறிவிப்புகள்" - "கீபோர்ட் ஷார்ட்கட்கள்" + "கீபோர்டு ஷார்ட்கட்கள்" "கீபோர்டு லே அவுட்டை மாற்று" "ஆப்ஸ்" "அசிஸ்ட்" @@ -834,7 +835,7 @@ "கிளிப்போர்டு" "விசைக்குறியீடு" - "சுழற்ற உறுதிப்படுத்து, விசைப்பலகை மாற்றி" + "சுழற்ற உறுதிப்படுத்து, கீபோர்டு மாற்றி" "ஏதுமில்லை" @@ -843,7 +844,7 @@ "இடப்புறம் சாய்ந்தது" "வலப்புறம் சாய்ந்தது" - "விசைப்பலகை மாற்றி" + "கீபோர்டு மாற்றி" "சேமி" "மீட்டமை" "பட்டனின் அகலத்தை மாற்று" @@ -1097,4 +1098,6 @@ "%1$s (இணைப்பு துண்டிக்கப்பட்டது)" "இணைக்க முடியவில்லை. மீண்டும் முயலவும்." "புதிய சாதனத்தை இணைத்தல்" + "பேட்டரி அளவை அறிவதில் சிக்கல்" + "மேலும் தகவல்களுக்கு தட்டவும்" diff --git a/packages/SystemUI/res/values-te/strings.xml b/packages/SystemUI/res/values-te/strings.xml index d56c1e1ddb0..865821f9f2a 100644 --- a/packages/SystemUI/res/values-te/strings.xml +++ b/packages/SystemUI/res/values-te/strings.xml @@ -52,7 +52,7 @@ "%2$sని నిర్వహించడానికి %1$sని తెరవాలా?" "%2$sని హ్యాండిల్ చేయడానికి %1$sను తెరవాలా?\nఈ యాప్‌కు రికార్డ్ చేసే అనుమతి మంజూరు కాలేదు, అయినా ఈ USB పరికరం ద్వారా ఆడియోను క్యాప్చర్ చేయగలదు." "%2$sని నిర్వహించడానికి %1$sని తెరవాలా?" - "ఈ USB ఉపకరణంతో ఇన్‌స్టాల్ చేయబడిన అనువర్తనాలు ఏవీ పని చేయవు. ఈ ఉపకరణం గురించి %1$sలో మరింత తెలుసుకోండి" + "ఈ USB ఉపకరణంతో ఇన్‌స్టాల్ చేయబడిన యాప్‌లు ఏవీ పని చేయవు. ఈ ఉపకరణం గురించి %1$sలో మరింత తెలుసుకోండి" "USB ఉపకరణం" "వీక్షించండి" "%2$s కనెక్ట్ అయి ఉన్న ఎల్లప్పుడూ %1$sని తెరవండి" @@ -181,6 +181,7 @@ "బ్యాటరీ రెండు బార్లు." "బ్యాటరీ మూడు బార్లు." "బ్యాటరీ నిండింది." + "బ్యాటరీ శాతం తెలియదు." "ఫోన్ లేదు." "ఫోన్ ఒక బారు." "ఫోన్ రెండు బార్లు." @@ -370,7 +371,7 @@ "సెట్టింగ్‌లు" "సమయం" "నేను" - "వినియోగదారు" + "యూజర్" "కొత్త వినియోగదారు" "Wi-Fi" "కనెక్ట్ చేయబడలేదు" @@ -472,30 +473,30 @@ "వినియోగదారుని మార్చు, ప్రస్తుత వినియోగదారు %s" "ప్రస్తుత వినియోగదారు %s" "ప్రొఫైల్‌ని చూపు" - "వినియోగదారుని జోడించండి" + "యూజర్‌ను జోడించండి" "కొత్త వినియోగదారు" - "అతిథిని తీసివేయాలా?" - "ఈ సెషన్‌లోని అన్ని అనువర్తనాలు మరియు డేటా తొలగించబడతాయి." + "గెస్ట్‌ను తీసివేయాలా?" + "ఈ సెషన్‌లోని అన్ని యాప్‌లు మరియు డేటా తొలగించబడతాయి." "తీసివేయి" - "పునఃస్వాగతం, అతిథి!" + "గెస్ట్‌కు తిరిగి స్వాగతం!" "మీరు మీ సెషన్‌ని కొనసాగించాలనుకుంటున్నారా?" "మొదటి నుండి ప్రారంభించు" "అవును, కొనసాగించు" "అతిథి వినియోగదారు" - "అనువర్తనాలు, డేటా తొలగించేందుకు అతిథి వినియోగదారు తీసివేయండి" + "యాప్‌లు, డేటా తొలగించేందుకు అతిథి వినియోగదారు తీసివేయండి" "అతిథిని తీసివేయి" "వినియోగదారుని లాగ్ అవుట్ చేయండి" "ప్రస్తుత వినియోగదారును లాగ్ అవుట్ చేయండి" "వినియోగదారుని లాగ్ అవుట్ చేయి" - "కొత్త వినియోగదారుని జోడించాలా?" - "మీరు కొత్త వినియోగదారుని జోడించినప్పుడు, ఆ వ్యక్తి తన స్థలాన్ని సెటప్ చేసుకోవాలి.\n\nఏ వినియోగదారు అయినా మిగతా అందరు వినియోగదారుల కోసం అనువర్తనాలను నవీకరించగలరు." + "కొత్త యూజర్‌ను జోడించాలా?" + "ఒక కొత్త యూజర్‌ను మీరు జోడించినప్పుడు, ఆ వ్యక్తి తన స్పేస్‌ను సెటప్ చేసుకోవాలి.\n\nఏ యూజర్ అయినా మిగతా అందరు యూజర్‌ల కోసం యాప్‌లను అప్‌డేట్ చేయగలరు." "వినియోగదారు పరిమితిని చేరుకున్నారు" మీరు %d వినియోగదారుల వరకు జోడించవచ్చు. ఒక్క వినియోగదారుని మాత్రమే సృష్టించవచ్చు. "వినియోగదారుని తీసివేయాలా?" - "ఈ వినియోగదారుకు సంబంధించిన అన్ని అనువర్తనాలు మరియు డేటా తొలగించబడతాయి." + "ఈ వినియోగదారుకు సంబంధించిన అన్ని యాప్‌లు మరియు డేటా తొలగించబడతాయి." "తీసివేయి" "బ్యాటరీ సేవర్ ఆన్‌లో ఉంది" "పనితీరుని మరియు నేపథ్య డేటాను తగ్గిస్తుంది" @@ -549,29 +550,29 @@ "మీ కార్యాలయ ప్రొఫైల్‌లో మీ సంస్థ ఒక ప్రమాణపత్ర అధికారాన్ని ఇన్‌స్టాల్ చేసింది. మీ సురక్షిత నెట్‌వర్క్ ట్రాఫిక్ పర్యవేక్షించబడవచ్చు లేదా సవరించబడవచ్చు." "ఈ పరికరంలో ప్రమాణపత్ర అధికారం ఇన్‌స్టాల్ చేయబడింది. మీ సురక్షిత నెట్‌వర్క్ ట్రాఫిక్ పర్యవేక్షించబడవచ్చు లేదా సవరించబడవచ్చు." "మీ నిర్వాహకులు మీ పరికరంలోని ట్రాఫిక్‌ని పర్యవేక్షించగల నెట్‌వర్క్ లాగింగ్‌ని ఆన్ చేసారు." - "మీరు %1$sకి కనెక్ట్ చేయబడ్డారు, ఇది ఇమెయిల్‌లు, అనువర్తనాలు మరియు వెబ్‌సైట్‌లతో సహా మీ నెట్‌వర్క్ కార్యాచరణను పర్యవేక్షించగలదు." - "మీరు ఇమెయిల్‌లు, అనువర్తనాలు మరియు వెబ్‌సైట్‌లతో సహా మీ నెట్‌వర్క్ కార్యాచరణను పర్యవేక్షించగల %1$s మరియు %2$sకి కనెక్ట్ చేయబడ్డారు." - "మీ కార్యాలయ ప్రొఫైల్ ఇమెయిల్‌లు, అనువర్తనాలు మరియు వెబ్‌సైట్‌లతో సహా మీ నెట్‌వర్క్ కార్యాచరణను పర్యవేక్షించగల %1$sకి కనెక్ట్ చేయబడింది." - "మీ వ్యక్తిగత ప్రొఫైల్ ఇమెయిల్‌లు, అనువర్తనాలు మరియు వెబ్‌సైట్‌లతో సహా మీ నెట్‌వర్క్ కార్యాచరణను పర్యవేక్షించగల %1$sకి కనెక్ట్ చేయబడింది." + "మీరు %1$sకి కనెక్ట్ చేయబడ్డారు, ఇది ఇమెయిల్‌లు, యాప్‌లు మరియు వెబ్‌సైట్‌లతో సహా మీ నెట్‌వర్క్ కార్యాచరణను పర్యవేక్షించగలదు." + "మీరు ఇమెయిల్‌లు, యాప్‌లు మరియు వెబ్‌సైట్‌లతో సహా మీ నెట్‌వర్క్ కార్యాచరణను పర్యవేక్షించగల %1$s మరియు %2$sకి కనెక్ట్ చేయబడ్డారు." + "మీ కార్యాలయ ప్రొఫైల్ ఇమెయిల్‌లు, యాప్‌లు మరియు వెబ్‌సైట్‌లతో సహా మీ నెట్‌వర్క్ కార్యాచరణను పర్యవేక్షించగల %1$sకి కనెక్ట్ చేయబడింది." + "మీ వ్యక్తిగత ప్రొఫైల్ ఇమెయిల్‌లు, యాప్‌లు మరియు వెబ్‌సైట్‌లతో సహా మీ నెట్‌వర్క్ కార్యాచరణను పర్యవేక్షించగల %1$sకి కనెక్ట్ చేయబడింది." "మీ పరికరం %1$s ద్వారా నిర్వహించబడుతోంది." "%1$s మీ పరికరాన్ని నిర్వహించడానికి %2$sని ఉపయోగిస్తుంది." "మీ పరికరంతో అనుబంధించబడిన సెట్టింగ్‌లు, కార్పొరేట్ యాక్సెస్, యాప్‌లు, డేటా మరియు మీ పరికరం యొక్క స్థాన సమాచారాన్ని మీ నిర్వాహకులు పర్యవేక్షించగలరు మరియు నిర్వహించగలరు." " " "మరింత తెలుసుకోండి" - "మీరు %1$sకి కనెక్ట్ చేయబడ్డారు, ఇది ఇమెయిల్‌లు, అనువర్తనాలు మరియు వెబ్‌సైట్‌లతో సహా మీ వ్యక్తిగత నెట్‌వర్క్ కార్యాచరణను పర్యవేక్షించగలదు." + "మీరు %1$sకి కనెక్ట్ చేయబడ్డారు, ఇది ఇమెయిల్‌లు, యాప్‌లు మరియు వెబ్‌సైట్‌లతో సహా మీ వ్యక్తిగత నెట్‌వర్క్ కార్యాచరణను పర్యవేక్షించగలదు." " " "VPN సెట్టింగ్‌లను తెరవండి" " " "విశ్వసనీయ ఆధారాలను తెరువు" "మీ నిర్వాహకులు మీ పరికరంలోని ట్రాఫిక్‌ని పర్యవేక్షించగల నెట్‌వర్క్ లాగింగ్‌ని ఆన్ చేసారు.\n\nమరింత సమాచారం కావాలంటే, మీ నిర్వాహకులను సంప్రదించండి." "మీరు VPN కనెక్షన్ సెటప్ చేయడానికి ఒక యాప్‌నకు అనుమతి ఇచ్చారు.\n\nఈ యాప్ ఇమెయిల్‌లు,యాప్‌లు మరియు వెబ్‌సైట్‌లతో సహా మీ డివైజ్ మరియు నెట్‌వర్క్ కార్యకలాపాన్ని పర్యవేక్షించగలదు." - "%1$s ద్వారా మీ కార్యాలయ ప్రొఫైల్ నిర్వహించబడుతోంది.\n\nఇమెయిల్‌లు, అనువర్తనాలు మరియు వెబ్‌సైట్‌లతో సహా మీ నెట్‌వర్క్ కార్యాచరణను పర్యవేక్షించగల సామర్థ్యం మీ నిర్వాహకులకు ఉంది.\n\nమరింత సమాచారం కావాలంటే, మీ నిర్వాహకులను సంప్రదించండి.\n\nమీరు VPNకి కూడా కనెక్ట్ అయ్యారు, ఇది మీ నెట్‌వర్క్ కార్యాచరణను పర్యవేక్షించగలదు." + "%1$s ద్వారా మీ కార్యాలయ ప్రొఫైల్ నిర్వహించబడుతోంది.\n\nఇమెయిల్‌లు, యాప్‌లు మరియు వెబ్‌సైట్‌లతో సహా మీ నెట్‌వర్క్ కార్యాచరణను పర్యవేక్షించగల సామర్థ్యం మీ నిర్వాహకులకు ఉంది.\n\nమరింత సమాచారం కావాలంటే, మీ నిర్వాహకులను సంప్రదించండి.\n\nమీరు VPNకి కూడా కనెక్ట్ అయ్యారు, ఇది మీ నెట్‌వర్క్ కార్యాచరణను పర్యవేక్షించగలదు." "VPN" - "మీరు ఇమెయిల్‌లు, అనువర్తనాలు మరియు వెబ్‌సైట్‌లతో సహా మీ నెట్‌వర్క్ కార్యాచరణను పర్యవేక్షించగల %1$sకి కనెక్ట్ చేయబడ్డారు." - "మీరు %1$sకి కనెక్ట్ చేయబడ్డారు, ఇది ఇమెయిల్‌లు, అనువర్తనాలు మరియు వెబ్‌‍సైట్‌లతో సహా మీ వ్యక్తిగత నెట్‌వర్క్ కార్యాచరణను పర్యవేక్షించగలదు." - "మీరు %1$sకి కనెక్ట్ చేయబడ్డారు, ఇది ఇమెయిల్‌లు, అనువర్తనాలు మరియు వెబ్‌సైట్‌లతో సహా మీ వ్యక్తిగత నెట్‌వర్క్ కార్యాచరణను పర్యవేక్షించగలదు." - "మీ కార్యాలయ ప్రొఫైల్ %1$s నిర్వహణలో ఉంది. ఇమెయిల్‌లు, అనువర్తనాలు మరియు వెబ్‌సైట్‌లతో సహా మీ కార్యాలయ నెట్‌వర్క్ కార్యాచరణను పర్యవేక్షించగల %2$sకి ప్రొఫైల్ కనెక్ట్ చేయబడింది.\n\nమరింత సమాచారం కోసం, మీ నిర్వాహకులను సంప్రదించండి." - "మీ కార్యాలయ ప్రొఫైల్ %1$s నిర్వహణలో ఉంది. ఇమెయిల్‌లు, అనువర్తనాలు మరియు వెబ్‌సైట్‌లతో సహా మీ కార్యాలయ నెట్‌వర్క్ కార్యాచరణను పర్యవేక్షించగల %2$sకి ప్రొఫైల్ కనెక్ట్ చేయబడింది.\n\nమీ వ్యక్తిగత నెట్‌వర్క్ కార్యాచరణను పర్యవేక్షించగల %3$sకి కూడా మీరు కనెక్ట్ చేయబడ్డారు." + "మీరు ఇమెయిల్‌లు, యాప్‌లు మరియు వెబ్‌సైట్‌లతో సహా మీ నెట్‌వర్క్ కార్యాచరణను పర్యవేక్షించగల %1$sకి కనెక్ట్ చేయబడ్డారు." + "మీరు %1$sకి కనెక్ట్ చేయబడ్డారు, ఇది ఇమెయిల్‌లు, యాప్‌లు మరియు వెబ్‌‍సైట్‌లతో సహా మీ వ్యక్తిగత నెట్‌వర్క్ కార్యాచరణను పర్యవేక్షించగలదు." + "మీరు %1$sకి కనెక్ట్ చేయబడ్డారు, ఇది ఇమెయిల్‌లు, యాప్‌లు మరియు వెబ్‌సైట్‌లతో సహా మీ వ్యక్తిగత నెట్‌వర్క్ కార్యాచరణను పర్యవేక్షించగలదు." + "మీ కార్యాలయ ప్రొఫైల్ %1$s నిర్వహణలో ఉంది. ఇమెయిల్‌లు, యాప్‌లు మరియు వెబ్‌సైట్‌లతో సహా మీ కార్యాలయ నెట్‌వర్క్ కార్యాచరణను పర్యవేక్షించగల %2$sకి ప్రొఫైల్ కనెక్ట్ చేయబడింది.\n\nమరింత సమాచారం కోసం, మీ నిర్వాహకులను సంప్రదించండి." + "మీ కార్యాలయ ప్రొఫైల్ %1$s నిర్వహణలో ఉంది. ఇమెయిల్‌లు, యాప్‌లు మరియు వెబ్‌సైట్‌లతో సహా మీ కార్యాలయ నెట్‌వర్క్ కార్యాచరణను పర్యవేక్షించగల %2$sకి ప్రొఫైల్ కనెక్ట్ చేయబడింది.\n\nమీ వ్యక్తిగత నెట్‌వర్క్ కార్యాచరణను పర్యవేక్షించగల %3$sకి కూడా మీరు కనెక్ట్ చేయబడ్డారు." "TrustAgent ద్వారా అన్‌లాక్ చేయబడింది" "మీరు మాన్యువల్‌గా అన్‌లాక్ చేస్తే మినహా పరికరం లాక్ చేయబడి ఉంటుంది" "%1$s\n%2$s" @@ -748,7 +749,7 @@ "అలర్ట్ చేయడం" "బబుల్‌ను చూపించు" "బబుల్స్ తీసివేయి" - "హోమ్ స్క్రీన్‌కు జోడించు" + "హోమ్ స్క్రీన్‌కు జోడించండి" "%1$s %2$s" "నోటిఫికేషన్ నియంత్రణలు" "నోటిఫికేషన్ తాత్కాలిక ఆపివేత ఎంపికలు" @@ -922,7 +923,7 @@ "పరిమాణం మార్చు" "వేడెక్కినందుకు ఫోన్ ఆఫ్ చేయబడింది" "మీ ఫోన్ ఇప్పుడు సాధారణంగా పని చేస్తోంది.\nమరింత సమాచారం కోసం ట్యాప్ చేయండి" - "మీ ఫోన్ చాలా వేడిగా ఉంది, కనుక చల్లబర్చడానికి ఆఫ్ చేయబడింది. మీ ఫోన్ ఇప్పుడు సాధారణంగా పని చేస్తుంది.\n\nమీరు ఇలా చేస్తే మీ ఫోన్ చాలా వేడెక్కవచ్చు:\n • వనరు-ఆధారిత అనువర్తనాలు (గేమింగ్, వీడియో లేదా నావిగేషన్ వంటి అనువర్తనాలు) ఉపయోగించడం\n • పెద్ద ఫైల్‌లను డౌన్‌లోడ్ లేదా అప్‌లోడ్ చేయడం\n • అధిక ఉష్ణోగ్రతలలో మీ ఫోన్‌ని ఉపయోగించడం" + "మీ ఫోన్ చాలా వేడిగా ఉంది, కనుక చల్లబర్చడానికి ఆఫ్ చేయబడింది. మీ ఫోన్ ఇప్పుడు సాధారణంగా పని చేస్తుంది.\n\nమీరు ఇలా చేస్తే మీ ఫోన్ చాలా వేడెక్కవచ్చు:\n • వనరు-ఆధారిత యాప్‌లు (గేమింగ్, వీడియో లేదా నావిగేషన్ వంటి యాప్‌లు) ఉపయోగించడం\n • పెద్ద ఫైల్‌లను డౌన్‌లోడ్ లేదా అప్‌లోడ్ చేయడం\n • అధిక ఉష్ణోగ్రతలలో మీ ఫోన్‌ని ఉపయోగించడం" "తీసుకోవాల్సిన జాగ్రత్తలు ఏమిటో చూడండి" "ఫోన్ వేడెక్కుతోంది" "ఫోన్‌ను చల్లబరిచే క్రమంలో కొన్ని ఫీచర్లు పరిమితం చేయబడ్డాయి.\nమరింత సమాచారం కోసం ట్యాప్ చేయండి" @@ -1097,4 +1098,6 @@ "%1$s (డిస్‌కనెక్ట్ అయ్యింది)" "కనెక్ట్ చేయడం సాధ్యపడలేదు. మళ్లీ ట్రై చేయండి." "కొత్త పరికరాన్ని పెయిర్ చేయండి" + "మీ బ్యాటరీ మీటర్‌ను చదవడంలో సమస్య" + "మరింత సమాచారం కోసం ట్యాప్ చేయండి" diff --git a/packages/SystemUI/res/values-th/strings.xml b/packages/SystemUI/res/values-th/strings.xml index 2bde0db6c8e..b542be31cd0 100644 --- a/packages/SystemUI/res/values-th/strings.xml +++ b/packages/SystemUI/res/values-th/strings.xml @@ -88,7 +88,7 @@ "แอปหรือองค์กรของคุณไม่อนุญาตให้จับภาพหน้าจอ" "ปิดภาพหน้าจอ" "ตัวอย่างภาพหน้าจอ" - "โปรแกรมอัดหน้าจอ" + "โปรแกรมบันทึกหน้าจอ" "กำลังประมวลผลการอัดหน้าจอ" "การแจ้งเตือนต่อเนื่องสำหรับเซสชันการบันทึกหน้าจอ" "เริ่มบันทึกเลยไหม" @@ -181,6 +181,7 @@ "แบตเตอรี่สองขีด" "แบตเตอรี่สามขีด" "แบตเตอรี่เต็ม" + "ไม่ทราบเปอร์เซ็นต์แบตเตอรี่" "ไม่มีสัญญาณโทรศัพท์" "สัญญาณโทรศัพท์หนึ่งขีด" "สัญญาณโทรศัพท์สองขีด" @@ -477,7 +478,7 @@ "ต้องการนำผู้เข้าร่วมออกไหม" "ระบบจะลบแอปและข้อมูลทั้งหมดในเซสชันนี้" "นำออก" - "ยินดีต้อนรับท่านผู้เยี่ยมชมกลับมาอีกครั้ง!" + "ยินดีต้อนรับผู้เข้าร่วมกลับมาอีกครั้ง" "คุณต้องการอยู่ในเซสชันต่อไปไหม" "เริ่มต้นใหม่" "ใช่ ดำเนินการต่อ" @@ -751,7 +752,7 @@ "เพิ่มลงในหน้าจอหลัก" "%1$s %2$s" "ส่วนควบคุมการแจ้งเตือน" - "ตัวเลือกการปิดเสียงแจ้งเตือนชั่วคราว" + "ตัวเลือกการเลื่อนการแจ้งเตือน" "เตือนฉัน" "การตั้งค่า" "เลิกทำ" @@ -1097,4 +1098,6 @@ "%1$s (ยกเลิกการเชื่อมต่อแล้ว)" "เชื่อมต่อไม่ได้ ลองใหม่" "จับคู่อุปกรณ์ใหม่" + "พบปัญหาในการอ่านเครื่องวัดแบตเตอรี่" + "แตะดูข้อมูลเพิ่มเติม" diff --git a/packages/SystemUI/res/values-tl/strings.xml b/packages/SystemUI/res/values-tl/strings.xml index 53c889dbbda..238fbc92b1e 100644 --- a/packages/SystemUI/res/values-tl/strings.xml +++ b/packages/SystemUI/res/values-tl/strings.xml @@ -181,6 +181,7 @@ "Baterya na dalawang bar." "Baterya na tatlong bar." "Puno na ang baterya." + "Hindi alam ang porsyento ng baterya." "Walang telepono." "Telepono na isang bar." "Telepono na dalawang bar." @@ -389,7 +390,7 @@ "AUTO" "I-invert ang mga kulay" "Correction mode ng kulay" - "Marami pang setting" + "Higit pang setting" "Tapos na" "Nakakonekta" "Nakakonekta, baterya %1$s" @@ -477,7 +478,7 @@ "Alisin ang bisita?" "Ide-delete ang lahat ng app at data sa session na ito." "Alisin" - "Maligayang pagbabalik, bisita!" + "Welcome ulit, bisita!" "Gusto mo bang ipagpatuloy ang iyong session?" "Magsimulang muli" "Oo, magpatuloy" @@ -1097,4 +1098,6 @@ "%1$s (nakadiskonekta)" "Hindi makakonekta. Subukan ulit." "Magpares ng bagong device" + "Nagkaproblema sa pagbabasa ng iyong battery meter" + "I-tap para sa higit pang impormasyon" diff --git a/packages/SystemUI/res/values-tr/strings.xml b/packages/SystemUI/res/values-tr/strings.xml index 74bfb7542c0..093f18f699a 100644 --- a/packages/SystemUI/res/values-tr/strings.xml +++ b/packages/SystemUI/res/values-tr/strings.xml @@ -181,6 +181,7 @@ "Pil gücü iki çubuk." "Pil gücü üç çubuk." "Pil tam dolu." + "Pil yüzdesi bilinmiyor." "Telefon sinyali yok." "Telefon sinyali bir çubuk." "Telefon sinyali iki çubuk." @@ -477,7 +478,7 @@ "Misafir oturumu kaldırılsın mı?" "Bu oturumdaki tüm uygulamalar ve veriler silinecek." "Kaldır" - "Tekrar hoş geldiniz sayın misafir!" + "Misafir kullanıcı, tekrar hoşgeldiniz" "Oturumunuza devam etmek istiyor musunuz?" "Baştan başla" "Evet, devam et" @@ -1097,4 +1098,6 @@ "%1$s (bağlı değil)" "Bağlanılamadı. Tekrar deneyin." "Yeni cihaz eşle" + "Pil ölçeriniz okunurken sorun oluştu" + "Daha fazla bilgi için dokunun" diff --git a/packages/SystemUI/res/values-uk/strings.xml b/packages/SystemUI/res/values-uk/strings.xml index de1f6362c31..52e41ff5705 100644 --- a/packages/SystemUI/res/values-uk/strings.xml +++ b/packages/SystemUI/res/values-uk/strings.xml @@ -181,6 +181,7 @@ "Заряд акумулятора: дві смужки." "Заряд акумулятора: три смужки." "Акумулятор заряджений." + "Відсоток заряду акумулятора невідомий." "Немає сигналу телефону." "Одна смужка сигналу телефону." "Дві смужки сигналу телефону." @@ -478,7 +479,7 @@ "Показати профіль" "Додати користувача" "Новий користувач" - "Вийти з режиму гостя?" + "Видалити гостя?" "Усі додатки й дані з цього сеансу буде видалено." "Вийти" "З поверненням!" @@ -1109,4 +1110,6 @@ "%1$s (відключено)" "Не вдалося підключитися. Повторіть спробу." "Підключити новий пристрій" + "Не вдалось отримати дані лічильника акумулятора" + "Натисніть, щоб дізнатися більше" diff --git a/packages/SystemUI/res/values-ur/strings.xml b/packages/SystemUI/res/values-ur/strings.xml index 39d251b079b..0a3853ecfc0 100644 --- a/packages/SystemUI/res/values-ur/strings.xml +++ b/packages/SystemUI/res/values-ur/strings.xml @@ -181,6 +181,7 @@ "بیٹری کے دو بارز۔" "بیٹری کے تین بارز۔" "بیٹری بھری ہے۔" + "بیٹری کی فیصد نامعلوم ہے۔" "کوئی فون نہیں ہے۔" "فون کا ایک بار۔" "فون کے دو بارز۔" @@ -1097,4 +1098,6 @@ "%1$s (غیر منسلک ہو گیا)" "منسلک نہیں ہو سکا۔ پھر کوشش کریں۔" "نئے آلہ کا جوڑا بنائیں" + "آپ کے بیٹری میٹر کو پڑھنے میں دشواری" + "مزید معلومات کے لیے تھپتھپائیں" diff --git a/packages/SystemUI/res/values-uz/strings.xml b/packages/SystemUI/res/values-uz/strings.xml index 80f5d6fc330..59240ee1754 100644 --- a/packages/SystemUI/res/values-uz/strings.xml +++ b/packages/SystemUI/res/values-uz/strings.xml @@ -181,6 +181,7 @@ "Batareya ikkta panelda." "Batareya uchta panelda." "Batareya to‘la." + "Batareya quvvati foizi nomaʼlum." "Signal yo‘q." "Telefon bitta panelda." "Telefon ikkita panelda." @@ -474,7 +475,7 @@ "Profilni ko‘rsatish" "Foydalanuvchi" "Yangi foydalanuvchi" - "Mehmon hisobi o‘chirib tashlansinmi?" + "Mehmon olib tashlansinmi?" "Ushbu seansdagi barcha ilovalar va ma’lumotlar o‘chirib tashlanadi." "Olib tashlash" "Xush kelibsiz, mehmon!" @@ -483,7 +484,7 @@ "Ha, davom ettirilsin" "Mehmon foydalanuvchi" "Ilova va ma’l-ni o‘chirish u-n mehmon hisobini o‘chiring" - "MEHMON HISOBINI O‘CHIRISH" + "MEHMONNI OLIB TASHLASH" "Foydalanuvchi nomidan chiqish" "Joriy foydalanuvchini tizimdan chiqaring" "FOYDALANUVCHI NOMIDAN CHIQISH" @@ -513,7 +514,7 @@ "Bildirishnomalar" "Suhbatlar" "Barcha sokin bildirishnomalarni tozalash" - "Bezovta qilinmasin rejimida bildirishnomalar pauza qilingan" + "Bezovta qilinmasin rejimida bildirishnomalar pauza qilinadi" "Boshlash" "Bildirishnomalar yo‘q" "Profil kuzatilishi mumkin" @@ -1097,4 +1098,6 @@ "%1$s (uzilgan)" "Ulanmadi. Qayta urining." "Yangi qurilmani ulash" + "Batareya quvvati aniqlanmadi" + "Batafsil axborot olish uchun bosing" diff --git a/packages/SystemUI/res/values-vi/strings.xml b/packages/SystemUI/res/values-vi/strings.xml index 378a47c0b32..e51036a745e 100644 --- a/packages/SystemUI/res/values-vi/strings.xml +++ b/packages/SystemUI/res/values-vi/strings.xml @@ -181,6 +181,7 @@ "Mức pin hai vạch." "Mức pin ba vạch." "Mức pin đầy." + "Tỷ lệ phần trăm pin không xác định." "Không có điện thoại nào." "Tín hiệu điện thoại một vạch." "Tín hiệu điện thoại hai vạch." @@ -389,7 +390,7 @@ "TỰ ĐỘNG" "Đảo ngược màu" "Chế độ chỉnh màu" - "Cài đặt khác" + "Chế độ cài đặt khác" "Xong" "Đã kết nối" "Đã kết nối, mức pin %1$s" @@ -714,7 +715,7 @@ "Có thể đổ chuông hoặc rung tùy theo chế độ cài đặt trên điện thoại" "Có thể đổ chuông hoặc rung tùy theo chế độ cài đặt trên điện thoại. Theo mặc định, các cuộc trò chuyện từ %1$s được phép hiển thị dưới dạng bong bóng." "Luôn chú ý vào nội dung này bằng phím tắt nổi." - "Hiển thị cuộc trò chuyện ở đầu phần cuộc trò chuyện và dưới dạng bong bóng nổi, hiển thị ảnh hồ sơ trên màn hình khóa" + "Hiển thị ở đầu phần cuộc trò chuyện, dưới dạng bong bóng nổi và hiển thị ảnh hồ sơ trên màn hình khóa" "Cài đặt" "Mức độ ưu tiên" "%1$s không hỗ trợ các tính năng trò chuyện" @@ -737,7 +738,7 @@ "Đã mở điều khiển thông báo đối với %1$s" "Đã đóng điều khiển thông báo đối với %1$s" "Cho phép thông báo từ kênh này" - "Cài đặt khác" + "Chế độ cài đặt khác" "Tùy chỉnh" "Xong" "Hoàn tác" @@ -832,7 +833,7 @@ "Loại nút bổ sung bên phải" "(mặc định)" - "Khay nhớ tạm" + "Bảng nhớ tạm" "Mã phím" "Xác nhận xoay, trình chuyển đổi bàn phím" "Không có" @@ -847,7 +848,7 @@ "Lưu" "Đặt lại" "Điều chỉnh chiều rộng nút" - "Khay nhớ tạm" + "Bảng nhớ tạm" "Nút điều hướng tùy chỉnh" "Mã phím bên trái" "Mã phím bên phải" @@ -1097,4 +1098,6 @@ "%1$s (đã ngắt kết nối)" "Không thể kết nối. Hãy thử lại." "Ghép nối thiết bị mới" + "Đã xảy ra vấn đề khi đọc dung lượng pin của bạn" + "Nhấn để biết thêm thông tin" diff --git a/packages/SystemUI/res/values-zh-rCN/strings.xml b/packages/SystemUI/res/values-zh-rCN/strings.xml index 748298c1741..d7717333bbf 100644 --- a/packages/SystemUI/res/values-zh-rCN/strings.xml +++ b/packages/SystemUI/res/values-zh-rCN/strings.xml @@ -63,9 +63,9 @@ "允许" "不允许使用 USB 调试功能" "目前已登录此设备的用户无法开启 USB 调试功能。要使用此功能,请切换为主要用户的帐号。" - "要允许在此网络上进行无线调试吗?" + "要允许通过此网络上进行无线调试吗?" "网络名称 (SSID)\n%1$s\n\nWLAN 地址 (BSSID)\n%2$s" - "在此网络上始终允许" + "始终允许通过此网络进行调试" "允许" "不允许使用无线调试功能" "目前已登录此设备的用户无法开启无线调试功能。要使用此功能,请切换为主要用户的帐号。" @@ -181,6 +181,7 @@ "电池电量为两格。" "电池电量为三格。" "电池电量满格。" + "电池电量百分比未知。" "没有手机信号。" "手机信号强度为一格。" "手机信号强度为两格。" @@ -508,7 +509,7 @@ "全部清除" "管理" "历史记录" - "新" + "最新" "静音" "通知" "对话" @@ -1097,11 +1098,14 @@ "%1$s(已断开连接)" "无法连接。请重试。" "与新设备配对" - + + 重启 重启... 系统 恢复模式 引导模式 设置 + "读取电池计量器时出现问题" + "点按即可了解详情" diff --git a/packages/SystemUI/res/values-zh-rHK/strings.xml b/packages/SystemUI/res/values-zh-rHK/strings.xml index 259a975d81f..a1e7054c9fa 100644 --- a/packages/SystemUI/res/values-zh-rHK/strings.xml +++ b/packages/SystemUI/res/values-zh-rHK/strings.xml @@ -181,6 +181,7 @@ "電池電量為兩格。" "電池電量為三格。" "電池已滿。" + "電量百分比不明。" "沒有電話訊號。" "電話訊號強度為一格。" "電話訊號強度為兩格。" @@ -714,9 +715,9 @@ "可能會根據手機設定發出鈴聲或震動" "可能會根據手機設定發出鈴聲或震動。「%1$s」的對話會預設以對話氣泡顯示。" "為此內容建立浮動捷徑以保持注意力。" - "以浮動對話泡顯示在對話部分的頂部,並在上鎖畫面顯示個人檔案相片" + "在對話部分頂部顯示浮動對話氣泡,並在上鎖畫面上顯示個人檔案相片" "設定" - "重要" + "優先" "「%1$s」不支援對話功能" "沒有最近曾使用的小視窗" "最近使用和關閉的小視窗會在這裡顯示" @@ -1097,4 +1098,6 @@ "%1$s (已中斷連線)" "無法連線,請再試一次。" "配對新裝置" + "讀取電池計量器時發生問題" + "輕按即可瞭解詳情" diff --git a/packages/SystemUI/res/values-zh-rTW/strings.xml b/packages/SystemUI/res/values-zh-rTW/strings.xml index 05ff15513b6..ed114c488ff 100644 --- a/packages/SystemUI/res/values-zh-rTW/strings.xml +++ b/packages/SystemUI/res/values-zh-rTW/strings.xml @@ -71,7 +71,7 @@ "目前登入這部裝置的使用者無法開啟無線偵錯功能。如要使用這項功能,請切換到主要使用者。" "USB 連接埠已停用" "為了避免液體或灰塵導致你的裝置受損,系統已停用 USB 連接埠,因此目前無法偵測任何配件。\n\n系統會在可繼續使用 USB 連接埠時通知你。" - "USB 通訊埠已啟用,可偵測充電器和配件" + "USB 連接埠已啟用,可偵測充電器和配件" "啟用 USB 連接埠" "瞭解詳情" "放大為全螢幕" @@ -181,6 +181,7 @@ "電池電量兩格。" "電池電量三格。" "電池電量已滿。" + "電池電量不明。" "沒有電話訊號。" "電話訊號強度一格。" "電話訊號強度兩格。" @@ -419,7 +420,7 @@ "%s 開啟" "%s 關閉" "深色主題" - "省電模式" + "節約耗電量" "於日落時開啟" "於日出時關閉" "開啟時間:%s" @@ -766,7 +767,7 @@ "電池用量" "充電時無法使用省電模式" - "省電模式" + "節約耗電量" "降低效能並限制背景資料傳輸" "%1$s 按鈕" "Home 鍵" @@ -1097,4 +1098,6 @@ "%1$s (已中斷連線)" "無法連線,請再試一次。" "配對新裝置" + "讀取電池計量器時發生問題" + "輕觸即可瞭解詳情" diff --git a/packages/SystemUI/res/values-zu/strings.xml b/packages/SystemUI/res/values-zu/strings.xml index eda3079e286..c8356fa25c1 100644 --- a/packages/SystemUI/res/values-zu/strings.xml +++ b/packages/SystemUI/res/values-zu/strings.xml @@ -181,6 +181,7 @@ "Amabha amabili ebhethri" "Amabha amathathu ebhethri" "Ibhethri igcwele." + "Iphesenti lebhethri alaziwa." "Ayikho ifoni." "Ibha eyodwa yefoni" "Amabha amabilil efoni." @@ -1097,4 +1098,6 @@ "%1$s (inqamukile)" "Ayikwazanga ukuxhumeka. Zama futhi." "Bhangqa idivayisi entsha" + "Kube khona inkinga ngokufunda imitha yakho yebhethri" + "Thepha ukuze uthole olunye ulwazi" diff --git a/packages/SystemUI/res/values/config.xml b/packages/SystemUI/res/values/config.xml index 17cca4c2f50..6c01c3b587a 100644 --- a/packages/SystemUI/res/values/config.xml +++ b/packages/SystemUI/res/values/config.xml @@ -587,4 +587,8 @@ true + + false + + diff --git a/packages/SystemUI/res/values/strings.xml b/packages/SystemUI/res/values/strings.xml index a27a2359bf6..74c132ba4b0 100644 --- a/packages/SystemUI/res/values/strings.xml +++ b/packages/SystemUI/res/values/strings.xml @@ -437,6 +437,8 @@ Battery three bars. Battery full. + + Battery percentage unknown. No phone. @@ -2882,4 +2884,11 @@ Recovery Bootloader Settings + + + Problem reading your battery meter + + Tap for more information diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java b/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java index 6174b3030a0..326eeba9973 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java @@ -1729,7 +1729,7 @@ public void handleMessage(Message msg) { } // Take a guess at initial SIM state, battery status and PLMN until we get an update - mBatteryStatus = new BatteryStatus(BATTERY_STATUS_UNKNOWN, 100, 0, 0, 0, 0, 0, 0, false); + mBatteryStatus = new BatteryStatus(BATTERY_STATUS_UNKNOWN, 100, 0, 0, 0, 0, 0, 0, false, false, false, false, false, true); // Watch for interesting updates final IntentFilter filter = new IntentFilter(); @@ -2601,6 +2601,8 @@ private boolean isBatteryUpdateInteresting(BatteryStatus old, BatteryStatus curr final boolean wasPluggedIn = old.isPluggedIn(); final boolean stateChangedWhilePluggedIn = wasPluggedIn && nowPluggedIn && (old.status != current.status); + final boolean nowPresent = current.present; + final boolean wasPresent = old.present; // change in plug state is always interesting if (wasPluggedIn != nowPluggedIn || stateChangedWhilePluggedIn) { @@ -2635,6 +2637,11 @@ private boolean isBatteryUpdateInteresting(BatteryStatus old, BatteryStatus curr return true; } + // Battery either showed up or disappeared + if (wasPresent != nowPresent) { + return true; + } + return false; } @@ -3082,4 +3089,4 @@ public void dump(FileDescriptor fd, PrintWriter pw, String[] args) { pw.println(" Running on Automotive build"); } } -} \ No newline at end of file +} diff --git a/packages/SystemUI/src/com/android/systemui/BatteryMeterView.java b/packages/SystemUI/src/com/android/systemui/BatteryMeterView.java index 31e36f2cdd3..fad7079939a 100644 --- a/packages/SystemUI/src/com/android/systemui/BatteryMeterView.java +++ b/packages/SystemUI/src/com/android/systemui/BatteryMeterView.java @@ -34,6 +34,7 @@ import android.content.res.TypedArray; import android.database.ContentObserver; import android.graphics.Rect; +import android.graphics.drawable.Drawable; import android.net.Uri; import android.os.Handler; import android.provider.Settings; @@ -97,12 +98,15 @@ public class BatteryMeterView extends LinearLayout implements private int mTextColor; private int mLevel; private int mShowPercentMode = MODE_DEFAULT; - private boolean mForceShowPercent; private boolean mShowPercentAvailable; // Some places may need to show the battery conditionally, and not obey the tuner private boolean mIgnoreTunerUpdates; private boolean mIsSubscribedForTunerUpdates; private boolean mCharging; + // Error state where we know nothing about the current battery state + private boolean mBatteryStateUnknown; + // Lazily-loaded since this is expected to be a rare-if-ever state + private Drawable mUnknownStateDrawable; private int mDarkModeSingleToneColor; private int mDarkModeBackgroundColor; @@ -372,6 +376,11 @@ public void updatePercentView() { } private void updatePercentText() { + if (mBatteryStateUnknown) { + setContentDescription(getContext().getString(R.string.accessibility_battery_unknown)); + return; + } + if (mBatteryController == null) { return; } @@ -412,9 +421,13 @@ private void updateShowPercent() { final boolean systemSetting = 0 != whitelistIpcs(() -> Settings.System .getIntForUser(getContext().getContentResolver(), SHOW_BATTERY_PERCENT, 0, mUser)); + boolean shouldShow = + (mShowPercentAvailable && systemSetting && mShowPercentMode != MODE_OFF) + || mShowPercentMode == MODE_ON + || mShowPercentMode == MODE_ESTIMATE; + shouldShow = shouldShow && !mBatteryStateUnknown; - if ((mShowPercentAvailable && systemSetting && mShowPercentMode != MODE_OFF) - || mShowPercentMode == MODE_ON || mShowPercentMode == MODE_ESTIMATE) { + if (shouldShow) { if (!showing) { mBatteryPercentView = loadPercentView(); if (mPercentageStyleId != 0) { // Only set if specified as attribute @@ -440,6 +453,32 @@ public void onDensityOrFontScaleChanged() { scaleBatteryMeterViews(); } + private Drawable getUnknownStateDrawable() { + if (mUnknownStateDrawable == null) { + mUnknownStateDrawable = mContext.getDrawable(R.drawable.ic_battery_unknown); + mUnknownStateDrawable.setTint(mTextColor); + } + + return mUnknownStateDrawable; + } + + @Override + public void onBatteryUnknownStateChanged(boolean isUnknown) { + if (mBatteryStateUnknown == isUnknown) { + return; + } + + mBatteryStateUnknown = isUnknown; + + if (mBatteryStateUnknown) { + mBatteryIconView.setImageDrawable(getUnknownStateDrawable()); + } else { + mBatteryIconView.setImageDrawable(mDrawable); + } + + updateShowPercent(); + } + /** * Looks up the scale factor for status bar icons and scales the battery view by that amount. */ @@ -483,6 +522,10 @@ public void updateColors(int foregroundColor, int backgroundColor, int singleTon if (mBatteryPercentView != null) { mBatteryPercentView.setTextColor(singleToneColor); } + + if (mUnknownStateDrawable != null) { + mUnknownStateDrawable.setTint(singleToneColor); + } } private int getColorForDarkIntensity(float darkIntensity, int lightColor, int darkColor) { @@ -496,8 +539,8 @@ public void dump(FileDescriptor fd, PrintWriter pw, String[] args) { pw.println(" mDrawable.getPowerSave: " + powerSave); pw.println(" mBatteryPercentView.getText(): " + percent); pw.println(" mTextColor: #" + Integer.toHexString(mTextColor)); + pw.println(" mBatteryStateUnknown: " + mBatteryStateUnknown); pw.println(" mLevel: " + mLevel); - pw.println(" mForceShowPercent: " + mForceShowPercent); } private final class SettingObserver extends ContentObserver { diff --git a/packages/SystemUI/src/com/android/systemui/SwipeHelper.java b/packages/SystemUI/src/com/android/systemui/SwipeHelper.java index d17ca4041b3..0bb8c9cd81f 100644 --- a/packages/SystemUI/src/com/android/systemui/SwipeHelper.java +++ b/packages/SystemUI/src/com/android/systemui/SwipeHelper.java @@ -16,6 +16,8 @@ package com.android.systemui; +import static com.android.systemui.classifier.Classifier.NOTIFICATION_DISMISS; + import android.animation.Animator; import android.animation.AnimatorListenerAdapter; import android.animation.ObjectAnimator; @@ -697,14 +699,15 @@ public boolean isDismissGesture(MotionEvent ev) { float translation = getTranslation(mCurrView); return ev.getActionMasked() == MotionEvent.ACTION_UP && !mFalsingManager.isUnlockingDisabled() - && !isFalseGesture(ev) && (swipedFastEnough() || swipedFarEnough()) + && !isFalseGesture() && (swipedFastEnough() || swipedFarEnough()) && mCallback.canChildBeDismissedInDirection(mCurrView, translation > 0); } - public boolean isFalseGesture(MotionEvent ev) { + /** Returns true if the gesture should be rejected. */ + public boolean isFalseGesture() { boolean falsingDetected = mCallback.isAntiFalsingNeeded(); if (mFalsingManager.isClassifierEnabled()) { - falsingDetected = falsingDetected && mFalsingManager.isFalseTouch(); + falsingDetected = falsingDetected && mFalsingManager.isFalseTouch(NOTIFICATION_DISMISS); } else { falsingDetected = falsingDetected && !mTouchAboveFalsingThreshold; } diff --git a/packages/SystemUI/src/com/android/systemui/SystemUIService.java b/packages/SystemUI/src/com/android/systemui/SystemUIService.java index 708002d5b94..1f41038c260 100644 --- a/packages/SystemUI/src/com/android/systemui/SystemUIService.java +++ b/packages/SystemUI/src/com/android/systemui/SystemUIService.java @@ -32,6 +32,7 @@ import com.android.systemui.dump.DumpHandler; import com.android.systemui.dump.LogBufferFreezer; import com.android.systemui.dump.SystemUIAuxiliaryDumpService; +import com.android.systemui.statusbar.policy.BatteryStateNotifier; import java.io.FileDescriptor; import java.io.PrintWriter; @@ -44,18 +45,21 @@ public class SystemUIService extends Service { private final DumpHandler mDumpHandler; private final BroadcastDispatcher mBroadcastDispatcher; private final LogBufferFreezer mLogBufferFreezer; + private final BatteryStateNotifier mBatteryStateNotifier; @Inject public SystemUIService( @Main Handler mainHandler, DumpHandler dumpHandler, BroadcastDispatcher broadcastDispatcher, - LogBufferFreezer logBufferFreezer) { + LogBufferFreezer logBufferFreezer, + BatteryStateNotifier batteryStateNotifier) { super(); mMainHandler = mainHandler; mDumpHandler = dumpHandler; mBroadcastDispatcher = broadcastDispatcher; mLogBufferFreezer = logBufferFreezer; + mBatteryStateNotifier = batteryStateNotifier; } @Override @@ -68,6 +72,11 @@ public void onCreate() { // Finish initializing dump logic mLogBufferFreezer.attach(mBroadcastDispatcher); + // If configured, set up a battery notification + if (getResources().getBoolean(R.bool.config_showNotificationForUnknownBatteryState)) { + mBatteryStateNotifier.startListening(); + } + // For debugging RescueParty if (Build.IS_DEBUGGABLE && SystemProperties.getBoolean("debug.crash_sysui", false)) { throw new RuntimeException(); diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/AuthBiometricFaceView.java b/packages/SystemUI/src/com/android/systemui/biometrics/AuthBiometricFaceView.java index 1d47fc520ec..7daad1ca7e7 100644 --- a/packages/SystemUI/src/com/android/systemui/biometrics/AuthBiometricFaceView.java +++ b/packages/SystemUI/src/com/android/systemui/biometrics/AuthBiometricFaceView.java @@ -160,12 +160,12 @@ protected int getStateForAfterError() { @Override protected void handleResetAfterError() { - resetErrorView(mContext, mIndicatorView); + resetErrorView(); } @Override protected void handleResetAfterHelp() { - resetErrorView(mContext, mIndicatorView); + resetErrorView(); } @Override @@ -185,7 +185,7 @@ public void updateState(@BiometricState int newState) { if (newState == STATE_AUTHENTICATING_ANIMATING_IN || (newState == STATE_AUTHENTICATING && mSize == AuthDialog.SIZE_MEDIUM)) { - resetErrorView(mContext, mIndicatorView); + resetErrorView(); } // Do this last since the state variable gets updated. @@ -204,9 +204,8 @@ public void onAuthenticationFailed(String failureReason) { super.onAuthenticationFailed(failureReason); } - static void resetErrorView(Context context, TextView textView) { - textView.setTextColor(context.getResources().getColor( - R.color.biometric_dialog_gray, context.getTheme())); - textView.setVisibility(View.INVISIBLE); + private void resetErrorView() { + mIndicatorView.setTextColor(mTextColorHint); + mIndicatorView.setVisibility(View.INVISIBLE); } } diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/AuthBiometricFingerprintView.java b/packages/SystemUI/src/com/android/systemui/biometrics/AuthBiometricFingerprintView.java index 176e9e6b1c9..45ee4ad9ae5 100644 --- a/packages/SystemUI/src/com/android/systemui/biometrics/AuthBiometricFingerprintView.java +++ b/packages/SystemUI/src/com/android/systemui/biometrics/AuthBiometricFingerprintView.java @@ -78,7 +78,7 @@ void onAttachedToWindowInternal() { private void showTouchSensorString() { mIndicatorView.setText(R.string.fingerprint_dialog_touch_sensor); - mIndicatorView.setTextColor(R.color.biometric_dialog_gray); + mIndicatorView.setTextColor(mTextColorHint); } private void updateIcon(int lastState, int newState) { diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/AuthBiometricView.java b/packages/SystemUI/src/com/android/systemui/biometrics/AuthBiometricView.java index 7c25d281179..f9c6d32d1d1 100644 --- a/packages/SystemUI/src/com/android/systemui/biometrics/AuthBiometricView.java +++ b/packages/SystemUI/src/com/android/systemui/biometrics/AuthBiometricView.java @@ -82,7 +82,7 @@ public abstract class AuthBiometricView extends LinearLayout { * Authenticated, dialog animating away soon. */ protected static final int STATE_AUTHENTICATED = 6; - + @Retention(RetentionPolicy.SOURCE) @IntDef({STATE_IDLE, STATE_AUTHENTICATING_ANIMATING_IN, STATE_AUTHENTICATING, STATE_HELP, STATE_ERROR, STATE_PENDING_CONFIRMATION, STATE_AUTHENTICATED}) @@ -155,8 +155,8 @@ public int getMediumToLargeAnimationDurationMs() { private final Injector mInjector; private final Handler mHandler; private final AccessibilityManager mAccessibilityManager; - private final int mTextColorError; - private final int mTextColorHint; + protected final int mTextColorError; + protected final int mTextColorHint; private AuthPanelController mPanelController; private Bundle mBiometricPromptBundle; @@ -169,7 +169,7 @@ public int getMediumToLargeAnimationDurationMs() { private TextView mSubtitleView; private TextView mDescriptionView; protected ImageView mIconView; - @VisibleForTesting protected TextView mIndicatorView; + protected TextView mIndicatorView; @VisibleForTesting Button mNegativeButton; @VisibleForTesting Button mPositiveButton; @VisibleForTesting Button mTryAgainButton; diff --git a/packages/SystemUI/src/com/android/systemui/bubbles/Bubble.java b/packages/SystemUI/src/com/android/systemui/bubbles/Bubble.java index b71e3adae8a..ed9b904e523 100644 --- a/packages/SystemUI/src/com/android/systemui/bubbles/Bubble.java +++ b/packages/SystemUI/src/com/android/systemui/bubbles/Bubble.java @@ -43,6 +43,7 @@ import com.android.internal.logging.InstanceId; import com.android.systemui.shared.system.SysUiStatsLog; import com.android.systemui.statusbar.notification.collection.NotificationEntry; +import com.android.systemui.statusbar.phone.StatusBar; import java.io.FileDescriptor; import java.io.PrintWriter; @@ -623,7 +624,8 @@ public int getAppUid() { private int getUid(final Context context) { if (mAppUid != -1) return mAppUid; - final PackageManager pm = context.getPackageManager(); + final PackageManager pm = StatusBar.getPackageManagerForUser(context, + mUser.getIdentifier()); if (pm == null) return -1; try { final ApplicationInfo info = pm.getApplicationInfo(mShortcutInfo.getPackage(), 0); diff --git a/packages/SystemUI/src/com/android/systemui/bubbles/BubbleController.java b/packages/SystemUI/src/com/android/systemui/bubbles/BubbleController.java index 5deae925ba3..fb819f04e0e 100644 --- a/packages/SystemUI/src/com/android/systemui/bubbles/BubbleController.java +++ b/packages/SystemUI/src/com/android/systemui/bubbles/BubbleController.java @@ -1386,10 +1386,10 @@ public void applyUpdate(BubbleData.Update update) { } } } - mDataRepository.removeBubbles(mCurrentUserId, bubblesToBeRemovedFromRepository); + mDataRepository.removeBubbles(bubblesToBeRemovedFromRepository); if (update.addedBubble != null && mStackView != null) { - mDataRepository.addBubble(mCurrentUserId, update.addedBubble); + mDataRepository.addBubble(update.addedBubble); mStackView.addBubble(update.addedBubble); } @@ -1400,7 +1400,7 @@ public void applyUpdate(BubbleData.Update update) { // At this point, the correct bubbles are inflated in the stack. // Make sure the order in bubble data is reflected in bubble row. if (update.orderChanged && mStackView != null) { - mDataRepository.addBubbles(mCurrentUserId, update.bubbles); + mDataRepository.addBubbles(update.bubbles); mStackView.updateBubbleOrder(update.bubbles); } diff --git a/packages/SystemUI/src/com/android/systemui/bubbles/BubbleDataRepository.kt b/packages/SystemUI/src/com/android/systemui/bubbles/BubbleDataRepository.kt index db64a13f3df..a363208e8f1 100644 --- a/packages/SystemUI/src/com/android/systemui/bubbles/BubbleDataRepository.kt +++ b/packages/SystemUI/src/com/android/systemui/bubbles/BubbleDataRepository.kt @@ -16,7 +16,6 @@ package com.android.systemui.bubbles import android.annotation.SuppressLint -import android.annotation.UserIdInt import android.content.pm.LauncherApps import android.content.pm.LauncherApps.ShortcutQuery.FLAG_MATCH_DYNAMIC import android.content.pm.LauncherApps.ShortcutQuery.FLAG_MATCH_PINNED_BY_ANY_LAUNCHER @@ -51,31 +50,31 @@ internal class BubbleDataRepository @Inject constructor( * Adds the bubble in memory, then persists the snapshot after adding the bubble to disk * asynchronously. */ - fun addBubble(@UserIdInt userId: Int, bubble: Bubble) = addBubbles(userId, listOf(bubble)) + fun addBubble(bubble: Bubble) = addBubbles(listOf(bubble)) /** * Adds the bubble in memory, then persists the snapshot after adding the bubble to disk * asynchronously. */ - fun addBubbles(@UserIdInt userId: Int, bubbles: List) { + fun addBubbles(bubbles: List) { if (DEBUG) Log.d(TAG, "adding ${bubbles.size} bubbles") - val entities = transform(userId, bubbles).also(volatileRepository::addBubbles) + val entities = transform(bubbles).also(volatileRepository::addBubbles) if (entities.isNotEmpty()) persistToDisk() } /** * Removes the bubbles from memory, then persists the snapshot to disk asynchronously. */ - fun removeBubbles(@UserIdInt userId: Int, bubbles: List) { + fun removeBubbles(bubbles: List) { if (DEBUG) Log.d(TAG, "removing ${bubbles.size} bubbles") - val entities = transform(userId, bubbles).also(volatileRepository::removeBubbles) + val entities = transform(bubbles).also(volatileRepository::removeBubbles) if (entities.isNotEmpty()) persistToDisk() } - private fun transform(userId: Int, bubbles: List): List { + private fun transform(bubbles: List): List { return bubbles.mapNotNull { b -> BubbleEntity( - userId, + b.user.identifier, b.packageName, b.metadataShortcutId ?: return@mapNotNull null, b.key, diff --git a/packages/SystemUI/src/com/android/systemui/bubbles/BubbleViewInfoTask.java b/packages/SystemUI/src/com/android/systemui/bubbles/BubbleViewInfoTask.java index 1929fc4e9db..a6cf69a0f0a 100644 --- a/packages/SystemUI/src/com/android/systemui/bubbles/BubbleViewInfoTask.java +++ b/packages/SystemUI/src/com/android/systemui/bubbles/BubbleViewInfoTask.java @@ -48,6 +48,7 @@ import com.android.launcher3.icons.BitmapInfo; import com.android.systemui.R; import com.android.systemui.statusbar.notification.collection.NotificationEntry; +import com.android.systemui.statusbar.phone.StatusBar; import java.lang.ref.WeakReference; import java.util.List; @@ -146,7 +147,8 @@ static BubbleViewInfo populate(Context c, BubbleStackView stackView, } // App name & app icon - PackageManager pm = c.getPackageManager(); + PackageManager pm = StatusBar.getPackageManagerForUser( + c, b.getUser().getIdentifier()); ApplicationInfo appInfo; Drawable badgedIcon; Drawable appIcon; diff --git a/packages/SystemUI/src/com/android/systemui/classifier/FalsingManagerFake.java b/packages/SystemUI/src/com/android/systemui/classifier/FalsingManagerFake.java index 646e62062df..6961b45c3c3 100644 --- a/packages/SystemUI/src/com/android/systemui/classifier/FalsingManagerFake.java +++ b/packages/SystemUI/src/com/android/systemui/classifier/FalsingManagerFake.java @@ -70,7 +70,7 @@ public void setIsFalseTouch(boolean isFalseTouch) { } @Override - public boolean isFalseTouch() { + public boolean isFalseTouch(@Classifier.InteractionType int interactionType) { return mIsFalseTouch; } diff --git a/packages/SystemUI/src/com/android/systemui/classifier/FalsingManagerImpl.java b/packages/SystemUI/src/com/android/systemui/classifier/FalsingManagerImpl.java index cc64fb53f15..decaec10e57 100644 --- a/packages/SystemUI/src/com/android/systemui/classifier/FalsingManagerImpl.java +++ b/packages/SystemUI/src/com/android/systemui/classifier/FalsingManagerImpl.java @@ -262,7 +262,7 @@ public boolean isUnlockingDisabled() { /** * @return true if the classifier determined that this is not a human interacting with the phone */ - public boolean isFalseTouch() { + public boolean isFalseTouch(@Classifier.InteractionType int interactionType) { if (FalsingLog.ENABLED) { // We're getting some false wtfs from touches that happen after the device went // to sleep. Only report missing sessions that happen when the device is interactive. diff --git a/packages/SystemUI/src/com/android/systemui/classifier/FalsingManagerProxy.java b/packages/SystemUI/src/com/android/systemui/classifier/FalsingManagerProxy.java index d0df46e86a4..c91a4a9e0f8 100644 --- a/packages/SystemUI/src/com/android/systemui/classifier/FalsingManagerProxy.java +++ b/packages/SystemUI/src/com/android/systemui/classifier/FalsingManagerProxy.java @@ -191,8 +191,8 @@ public boolean isUnlockingDisabled() { } @Override - public boolean isFalseTouch() { - return mInternalFalsingManager.isFalseTouch(); + public boolean isFalseTouch(@Classifier.InteractionType int interactionType) { + return mInternalFalsingManager.isFalseTouch(interactionType); } @Override diff --git a/packages/SystemUI/src/com/android/systemui/classifier/brightline/BrightLineFalsingManager.java b/packages/SystemUI/src/com/android/systemui/classifier/brightline/BrightLineFalsingManager.java index a50f9ce9713..9d847ca6246 100644 --- a/packages/SystemUI/src/com/android/systemui/classifier/brightline/BrightLineFalsingManager.java +++ b/packages/SystemUI/src/com/android/systemui/classifier/brightline/BrightLineFalsingManager.java @@ -189,7 +189,8 @@ public boolean isClassifierEnabled() { } @Override - public boolean isFalseTouch() { + public boolean isFalseTouch(@Classifier.InteractionType int interactionType) { + mDataProvider.setInteractionType(interactionType); if (!mDataProvider.isDirty()) { return mPreviousResult; } diff --git a/packages/SystemUI/src/com/android/systemui/classifier/brightline/FalsingDataProvider.java b/packages/SystemUI/src/com/android/systemui/classifier/brightline/FalsingDataProvider.java index ea46441c8fb..8d067489a8c 100644 --- a/packages/SystemUI/src/com/android/systemui/classifier/brightline/FalsingDataProvider.java +++ b/packages/SystemUI/src/com/android/systemui/classifier/brightline/FalsingDataProvider.java @@ -116,7 +116,10 @@ List getRecentMotionEvents() { * interactionType is defined by {@link com.android.systemui.classifier.Classifier}. */ final void setInteractionType(@Classifier.InteractionType int interactionType) { - this.mInteractionType = interactionType; + if (mInteractionType != interactionType) { + mInteractionType = interactionType; + mDirty = true; + } } public boolean isDirty() { diff --git a/packages/SystemUI/src/com/android/systemui/doze/DozeSensors.java b/packages/SystemUI/src/com/android/systemui/doze/DozeSensors.java index 6dd08981a43..f9a7a665a3f 100644 --- a/packages/SystemUI/src/com/android/systemui/doze/DozeSensors.java +++ b/packages/SystemUI/src/com/android/systemui/doze/DozeSensors.java @@ -46,6 +46,7 @@ import com.android.internal.logging.UiEventLogger; import com.android.internal.logging.UiEventLoggerImpl; import com.android.internal.logging.nano.MetricsProto; +import com.android.internal.util.IndentingPrintWriter; import com.android.systemui.plugins.SensorManagerPlugin; import com.android.systemui.statusbar.phone.DozeParameters; import com.android.systemui.util.sensors.AsyncSensorManager; @@ -80,8 +81,9 @@ public class DozeSensors { private final ProximitySensor mProximitySensor; private long mDebounceFrom; private boolean mSettingRegistered; - private boolean mListening; private boolean mDisableProx; + private boolean mListening; + private boolean mListeningTouchScreenSensors; @VisibleForTesting public enum DozeSensorsUiEvent implements UiEventLogger.UiEventEnum { @@ -227,22 +229,25 @@ static Sensor findSensorWithType(SensorManager sensorManager, String type) { /** * If sensors should be registered and sending signals. */ - public void setListening(boolean listen) { - if (mListening == listen) { + public void setListening(boolean listen, boolean includeTouchScreenSensors) { + if (mListening == listen && mListeningTouchScreenSensors == includeTouchScreenSensors) { return; } mListening = listen; + mListeningTouchScreenSensors = includeTouchScreenSensors; updateListening(); } /** * Registers/unregisters sensors based on internal state. */ - public void updateListening() { + private void updateListening() { boolean anyListening = false; for (TriggerSensor s : mSensors) { - s.setListening(mListening); - if (mListening) { + boolean listen = mListening + && (!s.mRequiresTouchscreen || mListeningTouchScreenSensors); + s.setListening(listen); + if (listen) { anyListening = true; } } @@ -314,11 +319,15 @@ public void ignoreTouchScreenSensorsSettingInterferingWithDocking(boolean ignore /** Dump current state */ public void dump(PrintWriter pw) { + pw.println("mListening=" + mListening); + pw.println("mListeningTouchScreenSensors=" + mListeningTouchScreenSensors); + IndentingPrintWriter idpw = new IndentingPrintWriter(pw, " "); + idpw.increaseIndent(); for (TriggerSensor s : mSensors) { - pw.println(" Sensor: " + s.toString()); + idpw.println("Sensor: " + s.toString()); } - if (!mDisableProx) // Useless - pw.println(" ProxSensor: " + mProximitySensor.toString()); + if (mProximitySupported) // Useless + idpw.println("ProxSensor: " + mProximitySensor.toString()); } /** diff --git a/packages/SystemUI/src/com/android/systemui/doze/DozeTriggers.java b/packages/SystemUI/src/com/android/systemui/doze/DozeTriggers.java index cbf8f578744..043edee4449 100644 --- a/packages/SystemUI/src/com/android/systemui/doze/DozeTriggers.java +++ b/packages/SystemUI/src/com/android/systemui/doze/DozeTriggers.java @@ -38,6 +38,7 @@ import com.android.internal.logging.UiEventLogger; import com.android.internal.logging.UiEventLoggerImpl; import com.android.internal.logging.nano.MetricsProto.MetricsEvent; +import com.android.internal.util.IndentingPrintWriter; import com.android.systemui.Dependency; import com.android.systemui.broadcast.BroadcastDispatcher; import com.android.systemui.dock.DockManager; @@ -408,15 +409,12 @@ public void transitionTo(DozeMachine.State oldState, DozeMachine.State newState) break; case DOZE_PULSE_DONE: mDozeSensors.requestTemporaryDisable(); - // A pulse will temporarily disable sensors that require a touch screen. - // Let's make sure that they are re-enabled when the pulse is over. - mDozeSensors.updateListening(); break; case FINISH: mBroadcastReceiver.unregister(mBroadcastDispatcher); mDozeHost.removeCallback(mHostCallback); mDockManager.removeListener(mDockEventListener); - mDozeSensors.setListening(false); + mDozeSensors.setListening(false, false); mDozeSensors.setProxListening(false); mWantSensors = false; mWantProx = false; @@ -424,20 +422,16 @@ public void transitionTo(DozeMachine.State oldState, DozeMachine.State newState) break; default: } + mDozeSensors.setListening(mWantSensors, mWantTouchScreenSensors); } @Override public void onScreenState(int state) { mDozeSensors.onScreenState(state); - if (state == Display.STATE_DOZE || state == Display.STATE_DOZE_SUSPEND - || state == Display.STATE_OFF) { - mDozeSensors.setProxListening(mWantProx); - mDozeSensors.setListening(mWantSensors); - mDozeSensors.setTouchscreenSensorsListening(mWantTouchScreenSensors); - } else { - mDozeSensors.setProxListening(false); - mDozeSensors.setListening(mWantSensors); - } + mDozeSensors.setProxListening(mWantProx && (state == Display.STATE_DOZE + || state == Display.STATE_DOZE_SUSPEND + || state == Display.STATE_OFF)); + mDozeSensors.setListening(mWantSensors, mWantTouchScreenSensors); } private void checkTriggersAtInit() { @@ -513,7 +507,9 @@ public void dump(PrintWriter pw) { pw.println(" pulsePending=" + mPulsePending); pw.println("DozeSensors:"); - mDozeSensors.dump(pw); + IndentingPrintWriter idpw = new IndentingPrintWriter(pw, " "); + idpw.increaseIndent(); + mDozeSensors.dump(idpw); } private class TriggerReceiver extends BroadcastReceiver { diff --git a/packages/SystemUI/src/com/android/systemui/media/MediaCarouselScrollHandler.kt b/packages/SystemUI/src/com/android/systemui/media/MediaCarouselScrollHandler.kt index 77cac5023db..486399979db 100644 --- a/packages/SystemUI/src/com/android/systemui/media/MediaCarouselScrollHandler.kt +++ b/packages/SystemUI/src/com/android/systemui/media/MediaCarouselScrollHandler.kt @@ -30,6 +30,7 @@ import com.android.settingslib.Utils import com.android.systemui.Gefingerpoken import com.android.systemui.qs.PageIndicator import com.android.systemui.R +import com.android.systemui.classifier.Classifier.NOTIFICATION_DISMISS import com.android.systemui.plugins.FalsingManager import com.android.systemui.util.animation.PhysicsAnimator import com.android.systemui.util.concurrency.DelayableExecutor @@ -315,7 +316,8 @@ class MediaCarouselScrollHandler( return false } - private fun isFalseTouch() = falsingProtectionNeeded && falsingManager.isFalseTouch + private fun isFalseTouch() = falsingProtectionNeeded && + falsingManager.isFalseTouch(NOTIFICATION_DISMISS) private fun getMaxTranslation() = if (showsSettingsButton) { settingsButton.width diff --git a/packages/SystemUI/src/com/android/systemui/media/MediaControlPanel.java b/packages/SystemUI/src/com/android/systemui/media/MediaControlPanel.java index eab6035a05a..735a1d3666d 100644 --- a/packages/SystemUI/src/com/android/systemui/media/MediaControlPanel.java +++ b/packages/SystemUI/src/com/android/systemui/media/MediaControlPanel.java @@ -16,6 +16,7 @@ package com.android.systemui.media; +import static android.app.Notification.safeCharSequence; import static android.provider.Settings.ACTION_MEDIA_CONTROLS_SETTINGS; import android.app.PendingIntent; @@ -268,12 +269,12 @@ public void bind(@NonNull MediaData data, String key) { // Song name TextView titleText = mViewHolder.getTitleText(); - titleText.setText(data.getSong()); + titleText.setText(safeCharSequence(data.getSong())); titleText.setTextColor(mForegroundColor); // Artist name TextView artistText = mViewHolder.getArtistText(); - artistText.setText(data.getArtist()); + artistText.setText(safeCharSequence(data.getArtist())); artistText.setTextColor(mForegroundColor); mViewHolder.getMediaText().setTextColor(mForegroundColor); diff --git a/packages/SystemUI/src/com/android/systemui/privacy/PrivacyItemController.kt b/packages/SystemUI/src/com/android/systemui/privacy/PrivacyItemController.kt index a46ecaff771..ed37b1a0487 100644 --- a/packages/SystemUI/src/com/android/systemui/privacy/PrivacyItemController.kt +++ b/packages/SystemUI/src/com/android/systemui/privacy/PrivacyItemController.kt @@ -106,9 +106,9 @@ class PrivacyItemController @Inject constructor( uiExecutor.execute(notifyChanges) } - var allIndicatorsAvailable = isAllIndicatorsEnabled() + var allIndicatorsAvailable = false private set - var micCameraAvailable = isMicCameraEnabled() + var micCameraAvailable = false private set private val devicePropertiesChangedListener = @@ -161,10 +161,6 @@ class PrivacyItemController @Inject constructor( } init { - deviceConfigProxy.addOnPropertiesChangedListener( - DeviceConfig.NAMESPACE_PRIVACY, - uiExecutor, - devicePropertiesChangedListener) dumpManager.registerDumpable(TAG, this) } diff --git a/packages/SystemUI/src/com/android/systemui/screenshot/SaveImageInBackgroundTask.java b/packages/SystemUI/src/com/android/systemui/screenshot/SaveImageInBackgroundTask.java index 4d768397913..be396b26135 100644 --- a/packages/SystemUI/src/com/android/systemui/screenshot/SaveImageInBackgroundTask.java +++ b/packages/SystemUI/src/com/android/systemui/screenshot/SaveImageInBackgroundTask.java @@ -294,8 +294,10 @@ Notification.Action createShareAction(Context context, Resources r, Uri uri) { .addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); // cancel current pending intent (if any) since clipData isn't used for matching - PendingIntent pendingIntent = PendingIntent.getActivityAsUser(context, 0, - sharingChooserIntent, PendingIntent.FLAG_CANCEL_CURRENT, null, UserHandle.CURRENT); + PendingIntent pendingIntent = PendingIntent.getActivityAsUser( + context, 0, sharingChooserIntent, + PendingIntent.FLAG_CANCEL_CURRENT | PendingIntent.FLAG_IMMUTABLE, + null, UserHandle.CURRENT); // Create a share action for the notification PendingIntent shareAction = PendingIntent.getBroadcastAsUser(context, requestCode, @@ -307,7 +309,8 @@ Notification.Action createShareAction(Context context, Resources r, Uri uri) { mSmartActionsEnabled) .setAction(Intent.ACTION_SEND) .addFlags(Intent.FLAG_RECEIVER_FOREGROUND), - PendingIntent.FLAG_CANCEL_CURRENT, UserHandle.SYSTEM); + PendingIntent.FLAG_CANCEL_CURRENT | PendingIntent.FLAG_IMMUTABLE, + UserHandle.SYSTEM); Notification.Action.Builder shareActionBuilder = new Notification.Action.Builder( Icon.createWithResource(r, R.drawable.ic_screenshot_share), @@ -336,7 +339,7 @@ Notification.Action createEditAction(Context context, Resources r, Uri uri) { editIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); PendingIntent pendingIntent = PendingIntent.getActivityAsUser(context, 0, - editIntent, 0, null, UserHandle.CURRENT); + editIntent, PendingIntent.FLAG_IMMUTABLE, null, UserHandle.CURRENT); // Make sure pending intents for the system user are still unique across users // by setting the (otherwise unused) request code to the current user id. @@ -351,7 +354,8 @@ Notification.Action createEditAction(Context context, Resources r, Uri uri) { mSmartActionsEnabled) .setAction(Intent.ACTION_EDIT) .addFlags(Intent.FLAG_RECEIVER_FOREGROUND), - PendingIntent.FLAG_CANCEL_CURRENT, UserHandle.SYSTEM); + PendingIntent.FLAG_CANCEL_CURRENT | PendingIntent.FLAG_IMMUTABLE, + UserHandle.SYSTEM); Notification.Action.Builder editActionBuilder = new Notification.Action.Builder( Icon.createWithResource(r, R.drawable.ic_screenshot_edit), r.getString(com.android.internal.R.string.screenshot_edit), editAction); @@ -373,7 +377,9 @@ Notification.Action createDeleteAction(Context context, Resources r, Uri uri) { .putExtra(GlobalScreenshot.EXTRA_SMART_ACTIONS_ENABLED, mSmartActionsEnabled) .addFlags(Intent.FLAG_RECEIVER_FOREGROUND), - PendingIntent.FLAG_CANCEL_CURRENT | PendingIntent.FLAG_ONE_SHOT); + PendingIntent.FLAG_CANCEL_CURRENT + | PendingIntent.FLAG_ONE_SHOT + | PendingIntent.FLAG_IMMUTABLE); Notification.Action.Builder deleteActionBuilder = new Notification.Action.Builder( Icon.createWithResource(r, R.drawable.ic_screenshot_delete), r.getString(com.android.internal.R.string.delete), deleteAction); @@ -414,7 +420,7 @@ private List buildSmartActions( PendingIntent broadcastIntent = PendingIntent.getBroadcast(context, mRandom.nextInt(), intent, - PendingIntent.FLAG_CANCEL_CURRENT); + PendingIntent.FLAG_CANCEL_CURRENT | PendingIntent.FLAG_IMMUTABLE); broadcastActions.add(new Notification.Action.Builder(action.getIcon(), action.title, broadcastIntent).setContextual(true).addExtras(extras).build()); } diff --git a/packages/SystemUI/src/com/android/systemui/stackdivider/DividerImeController.java b/packages/SystemUI/src/com/android/systemui/stackdivider/DividerImeController.java index 5aeca5e07bd..6c9f61be298 100644 --- a/packages/SystemUI/src/com/android/systemui/stackdivider/DividerImeController.java +++ b/packages/SystemUI/src/com/android/systemui/stackdivider/DividerImeController.java @@ -141,14 +141,14 @@ private void updateDimTargets() { @ImeAnimationFlags public int onImeStartPositioning(int displayId, int hiddenTop, int shownTop, boolean imeShouldShow, boolean imeIsFloating, SurfaceControl.Transaction t) { - mHiddenTop = hiddenTop; - mShownTop = shownTop; - mTargetShown = imeShouldShow; if (!isDividerVisible()) { return 0; } - final boolean splitIsVisible = !getView().isHidden(); + mHiddenTop = hiddenTop; + mShownTop = shownTop; + mTargetShown = imeShouldShow; mSecondaryHasFocus = getSecondaryHasFocus(displayId); + final boolean splitIsVisible = !getView().isHidden(); final boolean targetAdjusted = splitIsVisible && imeShouldShow && mSecondaryHasFocus && !imeIsFloating && !getLayout().mDisplayLayout.isLandscape() && !mSplits.mDivider.isMinimized(); diff --git a/packages/SystemUI/src/com/android/systemui/stackdivider/DividerView.java b/packages/SystemUI/src/com/android/systemui/stackdivider/DividerView.java index b6c6afd523b..e59dca9d98c 100644 --- a/packages/SystemUI/src/com/android/systemui/stackdivider/DividerView.java +++ b/packages/SystemUI/src/com/android/systemui/stackdivider/DividerView.java @@ -618,7 +618,7 @@ private ValueAnimator getFlingAnimator(int position, final SnapTarget snapTarget mEntranceAnimationRunning = false; mExitAnimationRunning = false; if (!dismissed && !wasMinimizeInteraction) { - WindowManagerProxy.applyResizeSplits(snapTarget.position, mSplitLayout); + mWindowManagerProxy.applyResizeSplits(snapTarget.position, mSplitLayout); } if (mCallback != null) { mCallback.onDraggingEnd(); @@ -845,15 +845,7 @@ void setMinimizedDockStack(boolean minimized, boolean isHomeStackResizable, } void enterSplitMode(boolean isHomeStackResizable) { - post(() -> { - final SurfaceControl sc = getWindowSurfaceControl(); - if (sc == null) { - return; - } - Transaction t = mTiles.getTransaction(); - t.show(sc).apply(); - mTiles.releaseTransaction(t); - }); + setHidden(false); SnapTarget miniMid = mSplitLayout.getMinimizedSnapAlgorithm(isHomeStackResizable).getMiddleTarget(); @@ -880,16 +872,19 @@ private SurfaceControl getWindowSurfaceControl() { } void exitSplitMode() { - // Reset tile bounds final SurfaceControl sc = getWindowSurfaceControl(); if (sc == null) { return; } Transaction t = mTiles.getTransaction(); - t.hide(sc).apply(); + t.hide(sc); + mImeController.setDimsHidden(t, true); + t.apply(); mTiles.releaseTransaction(t); + + // Reset tile bounds int midPos = mSplitLayout.getSnapAlgorithm().getMiddleTarget().position; - WindowManagerProxy.applyResizeSplits(midPos, mSplitLayout); + mWindowManagerProxy.applyResizeSplits(midPos, mSplitLayout); } public void setMinimizedDockStack(boolean minimized, long animDuration, diff --git a/packages/SystemUI/src/com/android/systemui/stackdivider/WindowManagerProxy.java b/packages/SystemUI/src/com/android/systemui/stackdivider/WindowManagerProxy.java index 410e3dd39a0..e593db86bd1 100644 --- a/packages/SystemUI/src/com/android/systemui/stackdivider/WindowManagerProxy.java +++ b/packages/SystemUI/src/com/android/systemui/stackdivider/WindowManagerProxy.java @@ -37,7 +37,6 @@ import android.window.TaskOrganizer; import android.window.WindowContainerToken; import android.window.WindowContainerTransaction; -import android.window.WindowOrganizer; import com.android.internal.annotations.GuardedBy; import com.android.systemui.TransactionPool; @@ -112,10 +111,10 @@ public void setTouchRegion(Rect region) { mExecutor.execute(mSetTouchableRegionRunnable); } - static void applyResizeSplits(int position, SplitDisplayLayout splitLayout) { + void applyResizeSplits(int position, SplitDisplayLayout splitLayout) { WindowContainerTransaction t = new WindowContainerTransaction(); splitLayout.resizeSplits(position, t); - WindowOrganizer.applyTransaction(t); + applySyncTransaction(t); } private static boolean getHomeAndRecentsTasks(List out, diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/DragDownHelper.java b/packages/SystemUI/src/com/android/systemui/statusbar/DragDownHelper.java index 2124bb07644..48de288cddc 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/DragDownHelper.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/DragDownHelper.java @@ -16,6 +16,8 @@ package com.android.systemui.statusbar; +import static com.android.systemui.classifier.Classifier.NOTIFICATION_DRAG_DOWN; + import android.animation.Animator; import android.animation.AnimatorListenerAdapter; import android.animation.ObjectAnimator; @@ -194,7 +196,7 @@ private boolean isFalseTouch() { if (!mDragDownCallback.isFalsingCheckNeeded()) { return false; } - return mFalsingManager.isFalseTouch() || !mDraggedFarEnough; + return mFalsingManager.isFalseTouch(NOTIFICATION_DRAG_DOWN) || !mDraggedFarEnough; } private void captureStartingChild(float x, float y) { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/KeyguardIndicationController.java b/packages/SystemUI/src/com/android/systemui/statusbar/KeyguardIndicationController.java index 3d73f171112..9a09618cf5e 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/KeyguardIndicationController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/KeyguardIndicationController.java @@ -124,6 +124,7 @@ public class KeyguardIndicationController implements StateListener, private int mChargingSpeed; private int mChargingWattage; private int mBatteryLevel; + private boolean mBatteryPresent = true; private long mChargingTimeRemaining; private float mDisclosureMaxAlpha; private int mChargingCurrent; @@ -395,79 +396,111 @@ protected final void updateIndication(boolean animate) { mWakeLock.setAcquired(false); } - if (mVisible) { - // Walk down a precedence-ordered list of what indication - // should be shown based on user or device state - if (mDozing) { - // When dozing we ignore any text color and use white instead, because - // colors can be hard to read in low brightness. - mTextView.setTextColor(Color.WHITE); - if (!TextUtils.isEmpty(mTransientIndication)) { - mTextView.switchIndication(mTransientIndication); - } else if (!TextUtils.isEmpty(mAlignmentIndication)) { - mTextView.switchIndication(mAlignmentIndication); - mTextView.setTextColor(mContext.getColor(R.color.misalignment_text_color)); - } else if (mPowerPluggedIn || mEnableBatteryDefender) { - String indication = computePowerIndication(); - if (animate) { - animateText(mTextView, indication); - } else { - mTextView.switchIndication(indication); - } - } else { - String percentage = NumberFormat.getPercentInstance() - .format(mBatteryLevel / 100f); - mTextView.switchIndication(percentage); - } - return; - } + if (!mVisible) { + return; + } - int userId = KeyguardUpdateMonitor.getCurrentUser(); - String trustGrantedIndication = getTrustGrantedIndication(); - String trustManagedIndication = getTrustManagedIndication(); + // A few places might need to hide the indication, so always start by making it visible + mIndicationArea.setVisibility(View.VISIBLE); - String powerIndication = null; - if (mPowerPluggedIn || mEnableBatteryDefender) { - powerIndication = computePowerIndication(); - } + boolean showAmbientBattery = Settings.System.getIntForUser(mContext.getContentResolver(), + Settings.System.AMBIENT_BATTERY_PERCENT, 0, UserHandle.USER_CURRENT) != 0; - boolean isError = false; - if (!mKeyguardUpdateMonitor.isUserUnlocked(userId)) { - mTextView.switchIndication(com.android.internal.R.string.lockscreen_storage_locked); - } else if (!TextUtils.isEmpty(mTransientIndication)) { + // Walk down a precedence-ordered list of what indication + // should be shown based on user or device state + if (mDozing) { + // When dozing we ignore any text color and use white instead, because + // colors can be hard to read in low brightness. + mTextView.setTextColor(Color.WHITE); + if (!TextUtils.isEmpty(mTransientIndication)) { mTextView.switchIndication(mTransientIndication); - isError = mTransientTextIsError; - } else if (!TextUtils.isEmpty(trustGrantedIndication) - && mKeyguardUpdateMonitor.getUserHasTrust(userId)) { - if (powerIndication != null) { - String indication = mContext.getResources().getString( - R.string.keyguard_indication_trust_unlocked_plugged_in, - trustGrantedIndication, powerIndication); - mTextView.switchIndication(indication); - } else { - mTextView.switchIndication(trustGrantedIndication); - } + } else if (!mBatteryPresent) { + // If there is no battery detected, hide the indication and bail + mIndicationArea.setVisibility(View.GONE); } else if (!TextUtils.isEmpty(mAlignmentIndication)) { mTextView.switchIndication(mAlignmentIndication); - isError = true; + mTextView.setTextColor(mContext.getColor(R.color.misalignment_text_color)); } else if (mPowerPluggedIn || mEnableBatteryDefender) { - if (DEBUG_CHARGING_SPEED) { - powerIndication += ", " + (mChargingWattage / 1000) + " mW"; - } + String indication = computePowerIndication(); if (animate) { - animateText(mTextView, powerIndication); + animateText(mTextView, indication); } else { - mTextView.switchIndication(powerIndication); + mTextView.switchIndication(indication); } - } else if (!TextUtils.isEmpty(trustManagedIndication) - && mKeyguardUpdateMonitor.getUserTrustIsManaged(userId) - && !mKeyguardUpdateMonitor.getUserHasTrust(userId)) { - mTextView.switchIndication(trustManagedIndication); } else { - mTextView.switchIndication(mRestingIndication); + if (showAmbientBattery) { + String bolt = "\u26A1\uFE0E"; + CharSequence chargeIndicator = (mPowerPluggedIn ? (bolt + " ") : "") + + NumberFormat.getPercentInstance().format(mBatteryLevel / 100f); + mTextView.switchIndication(chargeIndicator); + } else { + mTextView.switchIndication(null); + } } - mTextView.setTextColor(isError ? Utils.getColorError(mContext) - : mInitialTextColorState); + return; + } + + int userId = KeyguardUpdateMonitor.getCurrentUser(); + String trustGrantedIndication = getTrustGrantedIndication(); + String trustManagedIndication = getTrustManagedIndication(); + + String powerIndication = null; + if (mPowerPluggedIn || mEnableBatteryDefender) { + powerIndication = computePowerIndication(); + } + + // Some cases here might need to hide the indication (if the battery is not present) + boolean hideIndication = false; + boolean isError = false; + if (!mKeyguardUpdateMonitor.isUserUnlocked(userId)) { + mTextView.switchIndication(com.android.internal.R.string.lockscreen_storage_locked); + } else if (!TextUtils.isEmpty(mTransientIndication)) { + if (powerIndication != null && !mTransientIndication.equals(powerIndication)) { + String indication = mContext.getResources().getString( + R.string.keyguard_indication_trust_unlocked_plugged_in, + mTransientIndication, powerIndication); + mTextView.switchIndication(indication); + hideIndication = !mBatteryPresent; + } else { + mTextView.switchIndication(mTransientIndication); + } + isError = mTransientTextIsError; + } else if (!TextUtils.isEmpty(trustGrantedIndication) + && mKeyguardUpdateMonitor.getUserHasTrust(userId)) { + if (powerIndication != null) { + String indication = mContext.getResources().getString( + R.string.keyguard_indication_trust_unlocked_plugged_in, + trustGrantedIndication, powerIndication); + mTextView.switchIndication(indication); + hideIndication = !mBatteryPresent; + } else { + mTextView.switchIndication(trustGrantedIndication); + } + } else if (!TextUtils.isEmpty(mAlignmentIndication)) { + mTextView.switchIndication(mAlignmentIndication); + isError = true; + hideIndication = !mBatteryPresent; + } else if (mPowerPluggedIn || mEnableBatteryDefender) { + if (DEBUG_CHARGING_SPEED) { + powerIndication += ", " + (mChargingWattage / 1000) + " mW"; + } + if (animate) { + animateText(mTextView, powerIndication); + } else { + mTextView.switchIndication(powerIndication); + } + hideIndication = !mBatteryPresent; + } else if (!TextUtils.isEmpty(trustManagedIndication) + && mKeyguardUpdateMonitor.getUserTrustIsManaged(userId) + && !mKeyguardUpdateMonitor.getUserHasTrust(userId)) { + mTextView.switchIndication(trustManagedIndication); + } else { + mTextView.switchIndication(mRestingIndication); + } + mTextView.setTextColor(isError ? Utils.getColorError(mContext) + : mInitialTextColorState); + if (hideIndication) { + mIndicationArea.setVisibility(View.GONE); } } @@ -680,6 +713,7 @@ public void dump(FileDescriptor fd, PrintWriter pw, String[] args) { pw.println(" mMessageToShowOnScreenOn: " + mMessageToShowOnScreenOn); pw.println(" mDozing: " + mDozing); pw.println(" mBatteryLevel: " + mBatteryLevel); + pw.println(" mBatteryPresent: " + mBatteryPresent); pw.println(" mTextView.getText(): " + (mTextView == null ? null : mTextView.getText())); pw.println(" computePowerIndication(): " + computePowerIndication()); } @@ -723,6 +757,7 @@ public void onRefreshBatteryInfo(BatteryStatus status) { mBatteryLevel = status.level; mBatteryOverheated = status.isOverheated(); mEnableBatteryDefender = mBatteryOverheated && status.isPluggedIn(); + mBatteryPresent = status.present; try { mChargingTimeRemaining = mPowerPluggedIn ? mBatteryInfo.computeChargeTimeRemaining() : -1; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/PulseExpansionHandler.kt b/packages/SystemUI/src/com/android/systemui/statusbar/PulseExpansionHandler.kt index 7b2585324b9..38f96f42bdd 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/PulseExpansionHandler.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/PulseExpansionHandler.kt @@ -30,6 +30,7 @@ import android.view.ViewConfiguration import com.android.systemui.Gefingerpoken import com.android.systemui.Interpolators import com.android.systemui.R +import com.android.systemui.classifier.Classifier.NOTIFICATION_DRAG_DOWN import com.android.systemui.plugins.FalsingManager import com.android.systemui.plugins.statusbar.StatusBarStateController import com.android.systemui.statusbar.notification.NotificationWakeUpCoordinator @@ -106,7 +107,7 @@ constructor( private var velocityTracker: VelocityTracker? = null private val isFalseTouch: Boolean - get() = falsingManager.isFalseTouch + get() = falsingManager.isFalseTouch(NOTIFICATION_DRAG_DOWN) var qsExpanded: Boolean = false var pulseExpandAbortListener: Runnable? = null var bouncerShowing: Boolean = false diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarIconView.java b/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarIconView.java index 01d31039a74..412d3426117 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarIconView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarIconView.java @@ -33,6 +33,7 @@ import android.graphics.ColorMatrixColorFilter; import android.graphics.Paint; import android.graphics.Rect; +import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; import android.graphics.drawable.Icon; import android.os.Parcelable; @@ -83,6 +84,16 @@ public class StatusBarIconView extends AnimatedImageView implements StatusIconDi public static final int STATE_DOT = 1; public static final int STATE_HIDDEN = 2; + /** + * Maximum allowed byte count for an icon bitmap + * @see android.graphics.RecordingCanvas.MAX_BITMAP_SIZE + */ + private static final int MAX_BITMAP_SIZE = 100 * 1024 * 1024; // 100 MB + /** + * Maximum allowed width or height for an icon drawable, if we can't get byte count + */ + private static final int MAX_IMAGE_SIZE = 5000; + private static final String TAG = "StatusBarIconView"; private static final Property ICON_APPEAR_AMOUNT = new FloatProperty("iconAppearAmount") { @@ -378,6 +389,22 @@ private boolean updateDrawable(boolean withClear) { Log.w(TAG, "No icon for slot " + mSlot + "; " + mIcon.icon); return false; } + + if (drawable instanceof BitmapDrawable && ((BitmapDrawable) drawable).getBitmap() != null) { + // If it's a bitmap we can check the size directly + int byteCount = ((BitmapDrawable) drawable).getBitmap().getByteCount(); + if (byteCount > MAX_BITMAP_SIZE) { + Log.w(TAG, "Drawable is too large (" + byteCount + " bytes) " + mIcon); + return false; + } + } else if (drawable.getIntrinsicWidth() > MAX_IMAGE_SIZE + || drawable.getIntrinsicHeight() > MAX_IMAGE_SIZE) { + // Otherwise, check dimensions + Log.w(TAG, "Drawable is too large (" + drawable.getIntrinsicWidth() + "x" + + drawable.getIntrinsicHeight() + ") " + mIcon); + return false; + } + if (withClear) { setImageDrawable(null); } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationSwipeHelper.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationSwipeHelper.java index d7d09e05c23..ac528b245ce 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationSwipeHelper.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationSwipeHelper.java @@ -209,7 +209,7 @@ private void handleSwipeFromClosedState(MotionEvent ev, View animView, float vel || (isFastNonDismissGesture && isAbleToShowMenu); int menuSnapTarget = menuRow.getMenuSnapTarget(); boolean isNonFalseMenuRevealingGesture = - !isFalseGesture(ev) && isMenuRevealingGestureAwayFromMenu; + !isFalseGesture() && isMenuRevealingGestureAwayFromMenu; if ((isNonDismissGestureTowardsMenu || isNonFalseMenuRevealingGesture) && menuSnapTarget != 0) { // Menu has not been snapped to previously and this is menu revealing gesture diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/EdgeBackGestureHandler.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/EdgeBackGestureHandler.java index 603679afc10..14f8363b434 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/EdgeBackGestureHandler.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/EdgeBackGestureHandler.java @@ -560,20 +560,21 @@ private boolean isWithinTouchRegion(int x, int y) { if (mVocab != null) { app = mVocab.getOrDefault(mPackageName, -1); } - // Check if we are within the tightest bounds beyond which - // we would not need to run the ML model. - boolean withinRange = x <= mMLEnableWidth + mLeftInset - || x >= (mDisplaySize.x - mMLEnableWidth - mRightInset); - if (!withinRange) { + + // Denotes whether we should proceed with the gesture. Even if it is false, we may want to + // log it assuming it is not invalid due to exclusion. + boolean withinRange = x < mEdgeWidthLeft + mLeftInset + || x >= (mDisplaySize.x - mEdgeWidthRight - mRightInset); + if (withinRange) { int results = -1; - if (mUseMLModel && (results = getBackGesturePredictionsCategory(x, y, app)) != -1) { - withinRange = results == 1; - } else { - // Denotes whether we should proceed with the gesture. - // Even if it is false, we may want to log it assuming - // it is not invalid due to exclusion. - withinRange = x <= mEdgeWidthLeft + mLeftInset - || x >= (mDisplaySize.x - mEdgeWidthRight - mRightInset); + + // Check if we are within the tightest bounds beyond which we would not need to run the + // ML model + boolean withinMinRange = x < mMLEnableWidth + mLeftInset + || x >= (mDisplaySize.x - mMLEnableWidth - mRightInset); + if (!withinMinRange && mUseMLModel + && (results = getBackGesturePredictionsCategory(x, y, app)) != -1) { + withinRange = (results == 1); } } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardAffordanceHelper.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardAffordanceHelper.java index 858023dc6c6..ba942026584 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardAffordanceHelper.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardAffordanceHelper.java @@ -27,6 +27,7 @@ import com.android.systemui.Interpolators; import com.android.systemui.R; +import com.android.systemui.classifier.Classifier; import com.android.systemui.plugins.FalsingManager; import com.android.systemui.statusbar.FlingAnimationUtils; import com.android.systemui.statusbar.KeyguardAffordanceView; @@ -317,7 +318,9 @@ private void flingWithCurrentVelocity(boolean forceSnapBack, float lastX, float // We snap back if the current translation is not far enough boolean snapBack = false; if (mCallback.needsAntiFalsing()) { - snapBack = snapBack || mFalsingManager.isFalseTouch(); + snapBack = snapBack || mFalsingManager.isFalseTouch( + mTargetedView == mRightIcon + ? Classifier.RIGHT_AFFORDANCE : Classifier.LEFT_AFFORDANCE); } snapBack = snapBack || isBelowFalsingThreshold(); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelViewController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelViewController.java index 38b6f013596..b5ecbc91675 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelViewController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelViewController.java @@ -18,6 +18,7 @@ import static android.view.View.GONE; +import static com.android.systemui.classifier.Classifier.QUICK_SETTINGS; import static com.android.systemui.statusbar.notification.ActivityLaunchAnimator.ExpandAnimationParameters; import static com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayout.ROWS_ALL; @@ -72,6 +73,7 @@ import com.android.systemui.DejankUtils; import com.android.systemui.Interpolators; import com.android.systemui.R; +import com.android.systemui.classifier.Classifier; import com.android.systemui.dagger.qualifiers.DisplayId; import com.android.systemui.doze.DozeLog; import com.android.systemui.fragments.FragmentHostManager; @@ -1228,7 +1230,7 @@ private void logQsSwipeDown(float y) { } private boolean flingExpandsQs(float vel) { - if (mFalsingManager.isUnlockingDisabled() || isFalseTouch()) { + if (mFalsingManager.isUnlockingDisabled() || isFalseTouch(QUICK_SETTINGS)) { return false; } if (Math.abs(vel) < mFlingAnimationUtils.getMinVelocityPxPerSecond()) { @@ -1238,12 +1240,12 @@ private boolean flingExpandsQs(float vel) { } } - private boolean isFalseTouch() { + private boolean isFalseTouch(@Classifier.InteractionType int interactionType) { if (!mKeyguardAffordanceHelperCallback.needsAntiFalsing()) { return false; } if (mFalsingManager.isClassifierEnabled()) { - return mFalsingManager.isFalseTouch(); + return mFalsingManager.isFalseTouch(interactionType); } return !mQsTouchAboveFalsingThreshold; } 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 f43b20a53ad..a8a68ee8997 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelViewController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelViewController.java @@ -16,6 +16,10 @@ package com.android.systemui.statusbar.phone; +import static com.android.systemui.classifier.Classifier.BOUNCER_UNLOCK; +import static com.android.systemui.classifier.Classifier.QUICK_SETTINGS; +import static com.android.systemui.classifier.Classifier.UNLOCK; + import static java.lang.Float.isNaN; import android.animation.Animator; @@ -41,6 +45,7 @@ import com.android.systemui.DejankUtils; import com.android.systemui.Interpolators; import com.android.systemui.R; +import com.android.systemui.classifier.Classifier; import com.android.systemui.doze.DozeLog; import com.android.systemui.plugins.FalsingManager; import com.android.systemui.statusbar.FlingAnimationUtils; @@ -397,7 +402,12 @@ private void endMotionEvent(MotionEvent event, float x, float y, boolean forceCa mLockscreenGestureLogger.write(MetricsEvent.ACTION_LS_UNLOCK, heightDp, velocityDp); mLockscreenGestureLogger.log(LockscreenUiEvent.LOCKSCREEN_UNLOCK); } - fling(vel, expand, isFalseTouch(x, y)); + @Classifier.InteractionType int interactionType = vel > 0 + ? QUICK_SETTINGS : ( + mKeyguardStateController.canDismissLockScreen() + ? UNLOCK : BOUNCER_UNLOCK); + + fling(vel, expand, isFalseTouch(x, y, interactionType)); onTrackingStopped(expand); mUpdateFlingOnLayout = expand && mPanelClosedOnDown && !mHasLayoutedSinceDown; if (mUpdateFlingOnLayout) { @@ -480,7 +490,11 @@ protected boolean flingExpands(float vel, float vectorVel, float x, float y) { return true; } - if (isFalseTouch(x, y)) { + @Classifier.InteractionType int interactionType = vel > 0 + ? QUICK_SETTINGS : ( + mKeyguardStateController.canDismissLockScreen() ? UNLOCK : BOUNCER_UNLOCK); + + if (isFalseTouch(x, y, interactionType)) { return true; } if (Math.abs(vectorVel) < mFlingAnimationUtils.getMinVelocityPxPerSecond()) { @@ -499,12 +513,13 @@ protected boolean shouldExpandWhenNotFlinging() { * @param y the final y-coordinate when the finger was lifted * @return whether this motion should be regarded as a false touch */ - private boolean isFalseTouch(float x, float y) { + private boolean isFalseTouch(float x, float y, + @Classifier.InteractionType int interactionType) { if (!mStatusBar.isFalsingThresholdNeeded()) { return false; } if (mFalsingManager.isClassifierEnabled()) { - return mFalsingManager.isFalseTouch(); + return mFalsingManager.isFalseTouch(interactionType); } if (!mTouchAboveFalsingThreshold) { return true; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/BatteryController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/BatteryController.java index e5a46797d03..5009fce5216 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/BatteryController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/BatteryController.java @@ -97,6 +97,9 @@ default void onBatteryLevelChanged(int level, boolean pluggedIn, boolean chargin default void onPowerSaveChanged(boolean isPowerSave) { } + default void onBatteryUnknownStateChanged(boolean isUnknown) { + } + default void onReverseChanged(boolean isReverse, int level, String name) { } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/BatteryControllerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/BatteryControllerImpl.java index d30f01a658f..ea79c246f01 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/BatteryControllerImpl.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/BatteryControllerImpl.java @@ -16,6 +16,8 @@ package com.android.systemui.statusbar.policy; +import static android.os.BatteryManager.EXTRA_PRESENT; + import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; @@ -70,6 +72,7 @@ public class BatteryControllerImpl extends BroadcastReceiver implements BatteryC protected int mLevel; protected boolean mPluggedIn; protected boolean mCharging; + private boolean mStateUnknown = false; private boolean mCharged; protected boolean mPowerSave; private boolean mAodPowerSave; @@ -126,6 +129,7 @@ public void dump(FileDescriptor fd, PrintWriter pw, String[] args) { pw.print(" mCharging="); pw.println(mCharging); pw.print(" mCharged="); pw.println(mCharged); pw.print(" mPowerSave="); pw.println(mPowerSave); + pw.print(" mStateUnknown="); pw.println(mStateUnknown); } @Override @@ -139,8 +143,11 @@ public void addCallback(BatteryController.BatteryStateChangeCallback cb) { mChangeCallbacks.add(cb); } if (!mHasReceivedBattery) return; + + // Make sure new callbacks get the correct initial state cb.onBatteryLevelChanged(mLevel, mPluggedIn, mCharging); cb.onPowerSaveChanged(mPowerSave); + cb.onBatteryUnknownStateChanged(mStateUnknown); } @Override @@ -168,6 +175,13 @@ public void onReceive(final Context context, Intent intent) { mWirelessCharging = mCharging && intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, 0) == BatteryManager.BATTERY_PLUGGED_WIRELESS; + boolean present = intent.getBooleanExtra(EXTRA_PRESENT, true); + boolean unknown = !present; + if (unknown != mStateUnknown) { + mStateUnknown = unknown; + fireBatteryUnknownStateChanged(); + } + fireBatteryLevelChanged(); } else if (action.equals(PowerManager.ACTION_POWER_SAVE_MODE_CHANGED)) { updatePowerSave(); @@ -316,6 +330,15 @@ protected void fireBatteryLevelChanged() { } } + private void fireBatteryUnknownStateChanged() { + synchronized (mChangeCallbacks) { + final int n = mChangeCallbacks.size(); + for (int i = 0; i < n; i++) { + mChangeCallbacks.get(i).onBatteryUnknownStateChanged(mStateUnknown); + } + } + } + private void firePowerSaveChanged() { synchronized (mChangeCallbacks) { final int N = mChangeCallbacks.size(); @@ -340,6 +363,7 @@ public void dispatchDemoCommand(String command, Bundle args) { String level = args.getString("level"); String plugged = args.getString("plugged"); String powerSave = args.getString("powersave"); + String present = args.getString("present"); if (level != null) { mLevel = Math.min(Math.max(Integer.parseInt(level), 0), 100); } @@ -350,6 +374,10 @@ public void dispatchDemoCommand(String command, Bundle args) { mPowerSave = powerSave.equals("true"); firePowerSaveChanged(); } + if (present != null) { + mStateUnknown = !present.equals("true"); + fireBatteryUnknownStateChanged(); + } fireBatteryLevelChanged(); } } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/BatteryStateNotifier.kt b/packages/SystemUI/src/com/android/systemui/statusbar/policy/BatteryStateNotifier.kt new file mode 100644 index 00000000000..92e5b78f776 --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/BatteryStateNotifier.kt @@ -0,0 +1,90 @@ +/* + * Copyright (C) 2020 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.app.Notification +import android.app.NotificationChannel +import android.app.NotificationManager +import android.app.PendingIntent +import android.content.Context +import android.content.Intent +import android.net.Uri +import com.android.systemui.R +import com.android.systemui.util.concurrency.DelayableExecutor +import javax.inject.Inject + +/** + * Listens for important battery states and sends non-dismissible system notifications if there is a + * problem + */ +class BatteryStateNotifier @Inject constructor( + val controller: BatteryController, + val noMan: NotificationManager, + val delayableExecutor: DelayableExecutor, + val context: Context +) : BatteryController.BatteryStateChangeCallback { + var stateUnknown = false + + fun startListening() { + controller.addCallback(this) + } + + fun stopListening() { + controller.removeCallback(this) + } + + override fun onBatteryUnknownStateChanged(isUnknown: Boolean) { + stateUnknown = isUnknown + if (stateUnknown) { + val channel = NotificationChannel("battery_status", "Battery status", + NotificationManager.IMPORTANCE_DEFAULT) + noMan.createNotificationChannel(channel) + + val intent = Intent(Intent.ACTION_VIEW, + Uri.parse(context.getString(R.string.config_batteryStateUnknownUrl))) + val pi = PendingIntent.getActivity(context, 0, intent, 0) + + val builder = Notification.Builder(context, channel.id) + .setAutoCancel(false) + .setContentTitle( + context.getString(R.string.battery_state_unknown_notification_title)) + .setContentText( + context.getString(R.string.battery_state_unknown_notification_text)) + .setSmallIcon(com.android.internal.R.drawable.stat_sys_adb) + .setContentIntent(pi) + .setAutoCancel(true) + .setOngoing(true) + + noMan.notify(TAG, ID, builder.build()) + } else { + scheduleNotificationCancel() + } + } + + private fun scheduleNotificationCancel() { + val r = { + if (!stateUnknown) { + noMan.cancel(ID) + } + } + delayableExecutor.executeDelayed(r, DELAY_MILLIS) + } +} + +private const val TAG = "BatteryStateNotifier" +private const val ID = 666 +private const val DELAY_MILLIS: Long = 4 * 60 * 60 * 1000 \ No newline at end of file diff --git a/packages/SystemUI/src/com/android/systemui/util/wakelock/WakeLock.java b/packages/SystemUI/src/com/android/systemui/util/wakelock/WakeLock.java index 08cd6e38389..8d77c4a194a 100644 --- a/packages/SystemUI/src/com/android/systemui/util/wakelock/WakeLock.java +++ b/packages/SystemUI/src/com/android/systemui/util/wakelock/WakeLock.java @@ -33,7 +33,7 @@ public interface WakeLock { static final String REASON_WRAP = "wrap"; /** - * Default wake-lock timeout, to avoid battery regressions. + * Default wake-lock timeout in milliseconds, to avoid battery regressions. */ long DEFAULT_MAX_TIMEOUT = 20000; @@ -104,6 +104,7 @@ public void release(String why) { if (count == null) { Log.wtf(TAG, "Releasing WakeLock with invalid reason: " + why, new Throwable()); + return; } else if (count == 1) { mActiveClients.remove(why); } else { diff --git a/packages/SystemUI/src/com/android/systemui/wm/DisplayImeController.java b/packages/SystemUI/src/com/android/systemui/wm/DisplayImeController.java index dd4ea578daf..20e09a2df1c 100644 --- a/packages/SystemUI/src/com/android/systemui/wm/DisplayImeController.java +++ b/packages/SystemUI/src/com/android/systemui/wm/DisplayImeController.java @@ -24,12 +24,12 @@ import android.content.res.Configuration; import android.graphics.Point; import android.graphics.Rect; -import android.os.Handler; import android.os.RemoteException; import android.os.ServiceManager; import android.util.Slog; import android.util.SparseArray; import android.view.IDisplayWindowInsetsController; +import android.view.IWindowManager; import android.view.InsetsSource; import android.view.InsetsSourceControl; import android.view.InsetsState; @@ -39,11 +39,15 @@ import android.view.animation.Interpolator; import android.view.animation.PathInterpolator; +import androidx.annotation.BinderThread; +import androidx.annotation.VisibleForTesting; + import com.android.internal.view.IInputMethodManager; import com.android.systemui.TransactionPool; import com.android.systemui.dagger.qualifiers.Main; import java.util.ArrayList; +import java.util.concurrent.Executor; import javax.inject.Inject; import javax.inject.Singleton; @@ -66,20 +70,22 @@ public class DisplayImeController implements DisplayController.OnDisplaysChanged private static final int DIRECTION_HIDE = 2; private static final int FLOATING_IME_BOTTOM_INSET = -80; - SystemWindows mSystemWindows; - final Handler mHandler; + protected final IWindowManager mWmService; + protected final Executor mMainExecutor; final TransactionPool mTransactionPool; + final DisplayController mDisplayController; final SparseArray mImePerDisplay = new SparseArray<>(); final ArrayList mPositionProcessors = new ArrayList<>(); @Inject - public DisplayImeController(SystemWindows syswin, DisplayController displayController, - @Main Handler mainHandler, TransactionPool transactionPool) { - mHandler = mainHandler; - mSystemWindows = syswin; + public DisplayImeController(IWindowManager wmService, DisplayController displayController, + @Main Executor mainExecutor, TransactionPool transactionPool) { + mWmService = wmService; + mMainExecutor = mainExecutor; mTransactionPool = transactionPool; + mDisplayController = displayController; displayController.addDisplayWindowListener(this); } @@ -88,12 +94,8 @@ public void onDisplayAdded(int displayId) { // Add's a system-ui window-manager specifically for ime. This type is special because // WM will defer IME inset handling to it in multi-window scenarious. PerDisplay pd = new PerDisplay(displayId, - mSystemWindows.mDisplayController.getDisplayLayout(displayId).rotation()); - try { - mSystemWindows.mWmService.setDisplayWindowInsetsController(displayId, pd); - } catch (RemoteException e) { - Slog.w(TAG, "Unable to set insets controller on display " + displayId); - } + mDisplayController.getDisplayLayout(displayId).rotation()); + pd.register(); mImePerDisplay.put(displayId, pd); } @@ -103,7 +105,7 @@ public void onDisplayConfigurationChanged(int displayId, Configuration newConfig if (pd == null) { return; } - if (mSystemWindows.mDisplayController.getDisplayLayout(displayId).rotation() + if (mDisplayController.getDisplayLayout(displayId).rotation() != pd.mRotation && isImeShowing(displayId)) { pd.startAnimation(true, false /* forceRestart */); } @@ -112,7 +114,7 @@ public void onDisplayConfigurationChanged(int displayId, Configuration newConfig @Override public void onDisplayRemoved(int displayId) { try { - mSystemWindows.mWmService.setDisplayWindowInsetsController(displayId, null); + mWmService.setDisplayWindowInsetsController(displayId, null); } catch (RemoteException e) { Slog.w(TAG, "Unable to remove insets controller on display " + displayId); } @@ -180,9 +182,12 @@ public void removePositionProcessor(ImePositionProcessor processor) { } } - class PerDisplay extends IDisplayWindowInsetsController.Stub { + /** An implementation of {@link IDisplayWindowInsetsController} for a given display id. */ + public class PerDisplay { final int mDisplayId; final InsetsState mInsetsState = new InsetsState(); + protected final DisplayWindowInsetsControllerImpl mInsetsControllerImpl = + new DisplayWindowInsetsControllerImpl(); InsetsSourceControl mImeSourceControl = null; int mAnimationDirection = DIRECTION_NONE; ValueAnimator mAnimation = null; @@ -196,26 +201,32 @@ class PerDisplay extends IDisplayWindowInsetsController.Stub { mRotation = initialRotation; } - @Override + public void register() { + try { + mWmService.setDisplayWindowInsetsController(mDisplayId, mInsetsControllerImpl); + } catch (RemoteException e) { + Slog.w(TAG, "Unable to set insets controller on display " + mDisplayId); + } + } + public void insetsChanged(InsetsState insetsState) { - mHandler.post(() -> { - if (mInsetsState.equals(insetsState)) { - return; - } + if (mInsetsState.equals(insetsState)) { + return; + } - final InsetsSource newSource = insetsState.getSource(InsetsState.ITYPE_IME); - final Rect newFrame = newSource.getFrame(); - final Rect oldFrame = mInsetsState.getSource(InsetsState.ITYPE_IME).getFrame(); + mImeShowing = insetsState.getSourceOrDefaultVisibility(InsetsState.ITYPE_IME); - mInsetsState.set(insetsState, true /* copySources */); - if (mImeShowing && !newFrame.equals(oldFrame) && newSource.isVisible()) { - if (DEBUG) Slog.d(TAG, "insetsChanged when IME showing, restart animation"); - startAnimation(mImeShowing, true /* forceRestart */); - } - }); + final InsetsSource newSource = insetsState.getSource(InsetsState.ITYPE_IME); + final Rect newFrame = newSource.getFrame(); + final Rect oldFrame = mInsetsState.getSource(InsetsState.ITYPE_IME).getFrame(); + + mInsetsState.set(insetsState, true /* copySources */); + if (mImeShowing && !newFrame.equals(oldFrame) && newSource.isVisible()) { + if (DEBUG) Slog.d(TAG, "insetsChanged when IME showing, restart animation"); + startAnimation(mImeShowing, true /* forceRestart */); + } } - @Override public void insetsControlChanged(InsetsState insetsState, InsetsSourceControl[] activeControls) { insetsChanged(insetsState); @@ -225,27 +236,25 @@ public void insetsControlChanged(InsetsState insetsState, continue; } if (activeControl.getType() == InsetsState.ITYPE_IME) { - mHandler.post(() -> { - final Point lastSurfacePosition = mImeSourceControl != null - ? mImeSourceControl.getSurfacePosition() : null; - final boolean positionChanged = - !activeControl.getSurfacePosition().equals(lastSurfacePosition); - final boolean leashChanged = - !haveSameLeash(mImeSourceControl, activeControl); - mImeSourceControl = activeControl; - if (mAnimation != null) { - if (positionChanged) { - startAnimation(mImeShowing, true /* forceRestart */); - } - } else { - if (leashChanged) { - applyVisibilityToLeash(); - } - if (!mImeShowing) { - removeImeSurface(); - } + final Point lastSurfacePosition = mImeSourceControl != null + ? mImeSourceControl.getSurfacePosition() : null; + final boolean positionChanged = + !activeControl.getSurfacePosition().equals(lastSurfacePosition); + final boolean leashChanged = + !haveSameLeash(mImeSourceControl, activeControl); + mImeSourceControl = activeControl; + if (mAnimation != null) { + if (positionChanged) { + startAnimation(mImeShowing, true /* forceRestart */); + } + } else { + if (leashChanged) { + applyVisibilityToLeash(); } - }); + if (!mImeShowing) { + removeImeSurface(); + } + } } } } @@ -265,25 +274,22 @@ private void applyVisibilityToLeash() { } } - @Override public void showInsets(int types, boolean fromIme) { if ((types & WindowInsets.Type.ime()) == 0) { return; } if (DEBUG) Slog.d(TAG, "Got showInsets for ime"); - mHandler.post(() -> startAnimation(true /* show */, false /* forceRestart */)); + startAnimation(true /* show */, false /* forceRestart */); } - @Override public void hideInsets(int types, boolean fromIme) { if ((types & WindowInsets.Type.ime()) == 0) { return; } if (DEBUG) Slog.d(TAG, "Got hideInsets for ime"); - mHandler.post(() -> startAnimation(false /* show */, false /* forceRestart */)); + startAnimation(false /* show */, false /* forceRestart */); } - @Override public void topFocusedWindowChanged(String packageName) { // no-op } @@ -294,7 +300,7 @@ public void topFocusedWindowChanged(String packageName) { private void setVisibleDirectly(boolean visible) { mInsetsState.getSource(InsetsState.ITYPE_IME).setVisible(visible); try { - mSystemWindows.mWmService.modifyDisplayWindowInsets(mDisplayId, mInsetsState); + mWmService.modifyDisplayWindowInsets(mDisplayId, mInsetsState); } catch (RemoteException e) { } } @@ -313,7 +319,7 @@ private boolean calcIsFloating(InsetsSource imeSource) { // an IME inset). For now, we assume that no non-floating IME will be <= this nav bar // frame height so any reported frame that is <= nav-bar frame height is assumed to // be floating. - return frame.height() <= mSystemWindows.mDisplayController.getDisplayLayout(mDisplayId) + return frame.height() <= mDisplayController.getDisplayLayout(mDisplayId) .navBarFrameHeight(); } @@ -329,7 +335,7 @@ private void startAnimation(final boolean show, final boolean forceRestart) { // pretend the ime has some size just below the screen. mImeFrame.set(newFrame); final int floatingInset = (int) ( - mSystemWindows.mDisplayController.getDisplayLayout(mDisplayId).density() + mDisplayController.getDisplayLayout(mDisplayId).density() * FLOATING_IME_BOTTOM_INSET); mImeFrame.bottom -= floatingInset; } else if (newFrame.height() != 0) { @@ -446,6 +452,47 @@ public void onAnimationEnd(Animator animation) { setVisibleDirectly(true /* visible */); } } + + @VisibleForTesting + @BinderThread + public class DisplayWindowInsetsControllerImpl + extends IDisplayWindowInsetsController.Stub { + @Override + public void topFocusedWindowChanged(String packageName) throws RemoteException { + mMainExecutor.execute(() -> { + PerDisplay.this.topFocusedWindowChanged(packageName); + }); + } + + @Override + public void insetsChanged(InsetsState insetsState) throws RemoteException { + mMainExecutor.execute(() -> { + PerDisplay.this.insetsChanged(insetsState); + }); + } + + @Override + public void insetsControlChanged(InsetsState insetsState, + InsetsSourceControl[] activeControls) throws RemoteException { + mMainExecutor.execute(() -> { + PerDisplay.this.insetsControlChanged(insetsState, activeControls); + }); + } + + @Override + public void showInsets(int types, boolean fromIme) throws RemoteException { + mMainExecutor.execute(() -> { + PerDisplay.this.showInsets(types, fromIme); + }); + } + + @Override + public void hideInsets(int types, boolean fromIme) throws RemoteException { + mMainExecutor.execute(() -> { + PerDisplay.this.hideInsets(types, fromIme); + }); + } + } } void removeImeSurface() { diff --git a/packages/SystemUI/tests/src/com/android/systemui/bubbles/BubbleControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/bubbles/BubbleControllerTest.java index 1ad88560bf9..8fc2d1ad0fe 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/bubbles/BubbleControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/bubbles/BubbleControllerTest.java @@ -44,11 +44,19 @@ import android.app.INotificationManager; import android.app.Notification; import android.app.PendingIntent; +import android.content.Context; +import android.content.Intent; +import android.content.pm.ApplicationInfo; import android.content.pm.LauncherApps; +import android.content.pm.PackageManager; +import android.graphics.Rect; +import android.graphics.drawable.Drawable; +import android.graphics.drawable.Icon; import android.hardware.display.AmbientDisplayConfiguration; import android.hardware.face.FaceManager; import android.os.Handler; import android.os.PowerManager; +import android.os.UserHandle; import android.service.dreams.IDreamManager; import android.service.notification.NotificationListenerService; import android.service.notification.ZenModeConfig; @@ -77,6 +85,7 @@ import com.android.systemui.statusbar.notification.NotificationFilter; import com.android.systemui.statusbar.notification.collection.NotifPipeline; import com.android.systemui.statusbar.notification.collection.NotificationEntry; +import com.android.systemui.statusbar.notification.collection.NotificationEntryBuilder; import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow; import com.android.systemui.statusbar.notification.row.NotificationTestHelper; import com.android.systemui.statusbar.phone.DozeParameters; @@ -89,6 +98,7 @@ import com.android.systemui.statusbar.policy.ConfigurationController; import com.android.systemui.statusbar.policy.HeadsUpManager; import com.android.systemui.statusbar.policy.ZenModeController; +import com.android.systemui.tests.R; import com.android.systemui.util.FloatingContentCoordinator; import com.google.common.collect.ImmutableList; @@ -1022,6 +1032,74 @@ public void test_notVisuallyInterruptive_updateOverflowBubble_notAdded() { assertThat(mBubbleData.hasBubbleInStackWithKey(mRow.getEntry().getKey())).isFalse(); } + /** + * Verifies that the package manager for the user is used when loading info for the bubble. + */ + @Test + public void test_bubbleViewInfoGetPackageForUser() throws Exception { + final int workProfileUserId = 10; + final UserHandle workUser = new UserHandle(workProfileUserId); + final String workPkg = "work.pkg"; + + final Bubble bubble = createBubble(workProfileUserId, workPkg); + assertEquals(workProfileUserId, bubble.getUser().getIdentifier()); + + final Context context = setUpContextWithPackageManager(workPkg, null /* AppInfo */); + when(context.getResources()).thenReturn(mContext.getResources()); + final Context userContext = setUpContextWithPackageManager(workPkg, + mock(ApplicationInfo.class)); + + // If things are working correctly, StatusBar.getPackageManagerForUser will call this + when(context.createPackageContextAsUser(eq(workPkg), anyInt(), eq(workUser))) + .thenReturn(userContext); + + BubbleViewInfoTask.BubbleViewInfo info = BubbleViewInfoTask.BubbleViewInfo.populate(context, + mBubbleController.getStackView(), + new BubbleIconFactory(mContext), + bubble, + true /* skipInflation */); + + verify(userContext, times(1)).getPackageManager(); + verify(context, times(1)).createPackageContextAsUser(eq(workPkg), + eq(Context.CONTEXT_RESTRICTED), + eq(workUser)); + assertNotNull(info); + } + + /** Creates a bubble using the userId and package. */ + private Bubble createBubble(int userId, String pkg) { + final UserHandle userHandle = new UserHandle(userId); + NotificationEntry workEntry = new NotificationEntryBuilder() + .setPkg(pkg) + .setUser(userHandle) + .build(); + workEntry.setBubbleMetadata(getMetadata()); + workEntry.setFlagBubble(true); + + return new Bubble(workEntry, + null, + mock(BubbleController.PendingIntentCanceledListener.class)); + } + + /** Creates a context that will return a PackageManager with specific AppInfo. */ + private Context setUpContextWithPackageManager(String pkg, ApplicationInfo info) + throws Exception { + final PackageManager pm = mock(PackageManager.class); + when(pm.getApplicationInfo(eq(pkg), anyInt())).thenReturn(info); + + if (info != null) { + Drawable d = mock(Drawable.class); + when(d.getBounds()).thenReturn(new Rect()); + when(pm.getApplicationIcon(anyString())).thenReturn(d); + when(pm.getUserBadgedIcon(any(), any())).thenReturn(d); + } + + final Context context = mock(Context.class); + when(context.getPackageName()).thenReturn(pkg); + when(context.getPackageManager()).thenReturn(pm); + return context; + } + /** * Sets the bubble metadata flags for this entry. These ]flags are normally set by * NotificationManagerService when the notification is sent, however, these tests do not @@ -1038,4 +1116,13 @@ private void setMetadataFlags(NotificationEntry entry, int flag, boolean enableF } bubbleMetadata.setFlags(flags); } + + private Notification.BubbleMetadata getMetadata() { + Intent target = new Intent(mContext, BubblesTestActivity.class); + PendingIntent bubbleIntent = PendingIntent.getActivity(mContext, 0, target, 0); + + return new Notification.BubbleMetadata.Builder(bubbleIntent, + Icon.createWithResource(mContext, R.drawable.android)) + .build(); + } } diff --git a/packages/SystemUI/tests/src/com/android/systemui/doze/DozeSensorsTest.java b/packages/SystemUI/tests/src/com/android/systemui/doze/DozeSensorsTest.java index ebd2c3afe64..35e3bb392f7 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/doze/DozeSensorsTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/doze/DozeSensorsTest.java @@ -77,8 +77,6 @@ public class DozeSensorsTest extends SysuiTestCase { @Mock private Consumer mProxCallback; @Mock - private AlwaysOnDisplayPolicy mAlwaysOnDisplayPolicy; - @Mock private TriggerSensor mTriggerSensor; @Mock private DozeLog mDozeLog; @@ -110,7 +108,7 @@ public void testRegisterProx() { @Test public void testSensorDebounce() { - mDozeSensors.setListening(true); + mDozeSensors.setListening(true, true); mWakeLockScreenListener.onSensorChanged(mock(SensorManagerPlugin.SensorEvent.class)); mTestableLooper.processAllMessages(); @@ -128,7 +126,7 @@ public void testSensorDebounce() { @Test public void testSetListening_firstTrue_registerSettingsObserver() { verify(mSensorManager, never()).registerListener(any(), any(Sensor.class), anyInt()); - mDozeSensors.setListening(true); + mDozeSensors.setListening(true, true); verify(mTriggerSensor).registerSettingsObserver(any(ContentObserver.class)); } @@ -136,8 +134,8 @@ public void testSetListening_firstTrue_registerSettingsObserver() { @Test public void testSetListening_twiceTrue_onlyRegisterSettingsObserverOnce() { verify(mSensorManager, never()).registerListener(any(), any(Sensor.class), anyInt()); - mDozeSensors.setListening(true); - mDozeSensors.setListening(true); + mDozeSensors.setListening(true, true); + mDozeSensors.setListening(true, true); verify(mTriggerSensor, times(1)).registerSettingsObserver(any(ContentObserver.class)); } diff --git a/packages/SystemUI/tests/src/com/android/systemui/doze/DozeTriggersTest.java b/packages/SystemUI/tests/src/com/android/systemui/doze/DozeTriggersTest.java index 655f933d28f..be4fdb0babc 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/doze/DozeTriggersTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/doze/DozeTriggersTest.java @@ -149,6 +149,7 @@ public void testTransitionTo_disablesAndEnablesTouchSensors() { clearInvocations(mSensors); mTriggers.transitionTo(DozeMachine.State.DOZE_PULSING, DozeMachine.State.DOZE_PULSE_DONE); + mTriggers.transitionTo(DozeMachine.State.DOZE_PULSE_DONE, DozeMachine.State.DOZE_AOD); waitForSensorManager(); verify(mSensors).requestTriggerSensor(any(), eq(mTapSensor)); } diff --git a/packages/SystemUI/tests/src/com/android/systemui/media/MediaDataManagerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/media/MediaDataManagerTest.kt index b47ee292138..2f99b2a2a44 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/media/MediaDataManagerTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/media/MediaDataManagerTest.kt @@ -2,6 +2,7 @@ package com.android.systemui.media import android.app.Notification.MediaStyle import android.app.PendingIntent +import android.graphics.Bitmap import android.media.MediaDescription import android.media.MediaMetadata import android.media.session.MediaController @@ -246,4 +247,26 @@ class MediaDataManagerTest : SysuiTestCase() { verify(listener).onMediaDataRemoved(eq(KEY)) } + + @Test + fun testBadArtwork_doesNotUse() { + // WHEN notification has a too-small artwork + val artwork = Bitmap.createBitmap(1, 1, Bitmap.Config.ARGB_8888) + val notif = SbnBuilder().run { + setPkg(PACKAGE_NAME) + modifyNotification(context).also { + it.setSmallIcon(android.R.drawable.ic_media_pause) + it.setStyle(MediaStyle().apply { setMediaSession(session.sessionToken) }) + it.setLargeIcon(artwork) + } + build() + } + mediaDataManager.onNotificationAdded(KEY, notif) + + // THEN it loads and uses the default background color + assertThat(backgroundExecutor.runAllReady()).isEqualTo(1) + assertThat(foregroundExecutor.runAllReady()).isEqualTo(1) + verify(listener).onMediaDataLoaded(eq(KEY), eq(null), capture(mediaDataCaptor)) + assertThat(mediaDataCaptor.value!!.backgroundColor).isEqualTo(DEFAULT_COLOR) + } } diff --git a/packages/SystemUI/tests/src/com/android/systemui/privacy/PrivacyItemControllerFlagsTest.kt b/packages/SystemUI/tests/src/com/android/systemui/privacy/PrivacyItemControllerFlagsTest.kt deleted file mode 100644 index 25fb7d300b8..00000000000 --- a/packages/SystemUI/tests/src/com/android/systemui/privacy/PrivacyItemControllerFlagsTest.kt +++ /dev/null @@ -1,214 +0,0 @@ -/* - * Copyright (C) 2020 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.privacy - -import android.os.UserManager -import android.provider.DeviceConfig -import android.testing.AndroidTestingRunner -import androidx.test.filters.SmallTest -import com.android.internal.config.sysui.SystemUiDeviceConfigFlags -import com.android.systemui.SysuiTestCase -import com.android.systemui.appops.AppOpsController -import com.android.systemui.broadcast.BroadcastDispatcher -import com.android.systemui.dump.DumpManager -import com.android.systemui.util.DeviceConfigProxy -import com.android.systemui.util.DeviceConfigProxyFake -import com.android.systemui.util.concurrency.FakeExecutor -import com.android.systemui.util.time.FakeSystemClock -import org.junit.Assert.assertFalse -import org.junit.Assert.assertTrue -import org.junit.Before -import org.junit.Test -import org.junit.runner.RunWith -import org.mockito.ArgumentCaptor -import org.mockito.Mock -import org.mockito.Mockito -import org.mockito.Mockito.anyBoolean -import org.mockito.Mockito.atLeastOnce -import org.mockito.Mockito.never -import org.mockito.Mockito.verify -import org.mockito.MockitoAnnotations - -@RunWith(AndroidTestingRunner::class) -@SmallTest -class PrivacyItemControllerFlagsTest : SysuiTestCase() { - companion object { - fun capture(argumentCaptor: ArgumentCaptor): T = argumentCaptor.capture() - fun eq(value: T): T = Mockito.eq(value) ?: value - fun any(): T = Mockito.any() - - private const val ALL_INDICATORS = - SystemUiDeviceConfigFlags.PROPERTY_PERMISSIONS_HUB_ENABLED - private const val MIC_CAMERA = SystemUiDeviceConfigFlags.PROPERTY_MIC_CAMERA_ENABLED - } - - @Mock - private lateinit var appOpsController: AppOpsController - @Mock - private lateinit var callback: PrivacyItemController.Callback - @Mock - private lateinit var userManager: UserManager - @Mock - private lateinit var broadcastDispatcher: BroadcastDispatcher - @Mock - private lateinit var dumpManager: DumpManager - - private lateinit var privacyItemController: PrivacyItemController - private lateinit var executor: FakeExecutor - private lateinit var deviceConfigProxy: DeviceConfigProxy - - fun PrivacyItemController(): PrivacyItemController { - return PrivacyItemController( - appOpsController, - executor, - executor, - broadcastDispatcher, - deviceConfigProxy, - userManager, - dumpManager - ) - } - - @Before - fun setup() { - MockitoAnnotations.initMocks(this) - executor = FakeExecutor(FakeSystemClock()) - deviceConfigProxy = DeviceConfigProxyFake() - - privacyItemController = PrivacyItemController() - privacyItemController.addCallback(callback) - - executor.runAllReady() - } - - @Test - fun testNotListeningAllByDefault() { - assertFalse(privacyItemController.allIndicatorsAvailable) - } - - @Test - fun testMicCameraListeningByDefault() { - assertTrue(privacyItemController.micCameraAvailable) - } - - @Test - fun testMicCameraChanged() { - changeMicCamera(false) // default is true - executor.runAllReady() - - verify(callback).onFlagMicCameraChanged(false) - verify(callback, never()).onFlagAllChanged(anyBoolean()) - - assertFalse(privacyItemController.micCameraAvailable) - assertFalse(privacyItemController.allIndicatorsAvailable) - } - - @Test - fun testAllChanged() { - changeAll(true) - executor.runAllReady() - - verify(callback).onFlagAllChanged(true) - verify(callback, never()).onFlagMicCameraChanged(anyBoolean()) - - assertTrue(privacyItemController.allIndicatorsAvailable) - } - - @Test - fun testBothChanged() { - changeAll(true) - changeMicCamera(false) - executor.runAllReady() - - verify(callback, atLeastOnce()).onFlagAllChanged(true) - verify(callback, atLeastOnce()).onFlagMicCameraChanged(false) - - assertTrue(privacyItemController.allIndicatorsAvailable) - assertFalse(privacyItemController.micCameraAvailable) - } - - @Test - fun testAll_listeningToAll() { - changeAll(true) - executor.runAllReady() - - verify(appOpsController).addCallback(eq(PrivacyItemController.OPS), any()) - } - - @Test - fun testMicCamera_listening() { - changeMicCamera(true) - executor.runAllReady() - - verify(appOpsController).addCallback(eq(PrivacyItemController.OPS), any()) - } - - @Test - fun testAllFalse_notListening() { - changeAll(true) - executor.runAllReady() - changeAll(false) - changeMicCamera(false) - executor.runAllReady() - - verify(appOpsController).removeCallback(any(), any()) - } - - @Test - fun testSomeListening_stillListening() { - // Mic and camera are true by default - changeAll(true) - executor.runAllReady() - changeAll(false) - executor.runAllReady() - - verify(appOpsController, never()).removeCallback(any(), any()) - } - - @Test - fun testAllDeleted_micCameraFalse_stopListening() { - changeMicCamera(false) - changeAll(true) - executor.runAllReady() - changeAll(null) - executor.runAllReady() - - verify(appOpsController).removeCallback(any(), any()) - } - - @Test - fun testMicDeleted_stillListening() { - changeMicCamera(true) - executor.runAllReady() - changeMicCamera(null) - executor.runAllReady() - - verify(appOpsController, never()).removeCallback(any(), any()) - } - - private fun changeMicCamera(value: Boolean?) = changeProperty(MIC_CAMERA, value) - private fun changeAll(value: Boolean?) = changeProperty(ALL_INDICATORS, value) - - private fun changeProperty(name: String, value: Boolean?) { - deviceConfigProxy.setProperty( - DeviceConfig.NAMESPACE_PRIVACY, - name, - value?.toString(), - false - ) - } -} \ No newline at end of file diff --git a/packages/SystemUI/tests/src/com/android/systemui/privacy/PrivacyItemControllerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/privacy/PrivacyItemControllerTest.kt deleted file mode 100644 index 38e8823adfb..00000000000 --- a/packages/SystemUI/tests/src/com/android/systemui/privacy/PrivacyItemControllerTest.kt +++ /dev/null @@ -1,330 +0,0 @@ -/* - * Copyright (C) 2020 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.privacy - -import android.app.ActivityManager -import android.app.AppOpsManager -import android.content.Intent -import android.content.pm.UserInfo -import android.os.UserHandle -import android.os.UserManager -import android.provider.DeviceConfig -import android.testing.AndroidTestingRunner -import android.testing.TestableLooper.RunWithLooper -import androidx.test.filters.SmallTest -import com.android.internal.config.sysui.SystemUiDeviceConfigFlags -import com.android.systemui.SysuiTestCase -import com.android.systemui.appops.AppOpItem -import com.android.systemui.appops.AppOpsController -import com.android.systemui.broadcast.BroadcastDispatcher -import com.android.systemui.dump.DumpManager -import com.android.systemui.util.DeviceConfigProxy -import com.android.systemui.util.DeviceConfigProxyFake -import com.android.systemui.util.concurrency.FakeExecutor -import com.android.systemui.util.time.FakeSystemClock -import org.hamcrest.Matchers.hasItem -import org.hamcrest.Matchers.not -import org.hamcrest.Matchers.nullValue -import org.junit.Assert.assertEquals -import org.junit.Assert.assertThat -import org.junit.Assert.assertTrue -import org.junit.Before -import org.junit.Test -import org.junit.runner.RunWith -import org.mockito.ArgumentCaptor -import org.mockito.ArgumentMatchers.anyInt -import org.mockito.ArgumentMatchers.anyList -import org.mockito.Captor -import org.mockito.Mock -import org.mockito.Mockito -import org.mockito.Mockito.atLeastOnce -import org.mockito.Mockito.doReturn -import org.mockito.Mockito.mock -import org.mockito.Mockito.never -import org.mockito.Mockito.reset -import org.mockito.Mockito.verify -import org.mockito.Mockito.verifyNoMoreInteractions -import org.mockito.MockitoAnnotations - -@RunWith(AndroidTestingRunner::class) -@SmallTest -@RunWithLooper -class PrivacyItemControllerTest : SysuiTestCase() { - - companion object { - val CURRENT_USER_ID = ActivityManager.getCurrentUser() - val TEST_UID = CURRENT_USER_ID * UserHandle.PER_USER_RANGE - const val TEST_PACKAGE_NAME = "test" - - private const val ALL_INDICATORS = - SystemUiDeviceConfigFlags.PROPERTY_PERMISSIONS_HUB_ENABLED - private const val MIC_CAMERA = SystemUiDeviceConfigFlags.PROPERTY_MIC_CAMERA_ENABLED - fun capture(argumentCaptor: ArgumentCaptor): T = argumentCaptor.capture() - fun eq(value: T): T = Mockito.eq(value) ?: value - fun any(): T = Mockito.any() - } - - @Mock - private lateinit var appOpsController: AppOpsController - @Mock - private lateinit var callback: PrivacyItemController.Callback - @Mock - private lateinit var userManager: UserManager - @Mock - private lateinit var broadcastDispatcher: BroadcastDispatcher - @Mock - private lateinit var dumpManager: DumpManager - @Captor - private lateinit var argCaptor: ArgumentCaptor> - @Captor - private lateinit var argCaptorCallback: ArgumentCaptor - - private lateinit var privacyItemController: PrivacyItemController - private lateinit var executor: FakeExecutor - private lateinit var deviceConfigProxy: DeviceConfigProxy - - fun PrivacyItemController(): PrivacyItemController { - return PrivacyItemController( - appOpsController, - executor, - executor, - broadcastDispatcher, - deviceConfigProxy, - userManager, - dumpManager - ) - } - - @Before - fun setup() { - MockitoAnnotations.initMocks(this) - executor = FakeExecutor(FakeSystemClock()) - deviceConfigProxy = DeviceConfigProxyFake() - - changeAll(true) - - doReturn(listOf(object : UserInfo() { - init { - id = CURRENT_USER_ID - } - })).`when`(userManager).getProfiles(anyInt()) - - privacyItemController = PrivacyItemController() - } - - @Test - fun testSetListeningTrueByAddingCallback() { - privacyItemController.addCallback(callback) - executor.runAllReady() - verify(appOpsController).addCallback(eq(PrivacyItemController.OPS), - any()) - verify(callback).onPrivacyItemsChanged(anyList()) - } - - @Test - fun testSetListeningFalseByRemovingLastCallback() { - privacyItemController.addCallback(callback) - executor.runAllReady() - verify(appOpsController, never()).removeCallback(any(), - any()) - privacyItemController.removeCallback(callback) - executor.runAllReady() - verify(appOpsController).removeCallback(eq(PrivacyItemController.OPS), - any()) - verify(callback).onPrivacyItemsChanged(emptyList()) - } - - @Test - fun testDistinctItems() { - doReturn(listOf(AppOpItem(AppOpsManager.OP_CAMERA, TEST_UID, "", 0), - AppOpItem(AppOpsManager.OP_CAMERA, TEST_UID, "", 1))) - .`when`(appOpsController).getActiveAppOpsForUser(anyInt()) - - privacyItemController.addCallback(callback) - executor.runAllReady() - verify(callback).onPrivacyItemsChanged(capture(argCaptor)) - assertEquals(1, argCaptor.value.size) - } - - @Test - fun testRegisterReceiver_allUsers() { - privacyItemController.addCallback(callback) - executor.runAllReady() - verify(broadcastDispatcher, atLeastOnce()).registerReceiver( - eq(privacyItemController.userSwitcherReceiver), any(), eq(null), eq(UserHandle.ALL)) - verify(broadcastDispatcher, never()) - .unregisterReceiver(eq(privacyItemController.userSwitcherReceiver)) - } - - @Test - fun testReceiver_ACTION_USER_FOREGROUND() { - privacyItemController.userSwitcherReceiver.onReceive(context, - Intent(Intent.ACTION_USER_SWITCHED)) - executor.runAllReady() - verify(userManager).getProfiles(anyInt()) - } - - @Test - fun testReceiver_ACTION_MANAGED_PROFILE_ADDED() { - privacyItemController.userSwitcherReceiver.onReceive(context, - Intent(Intent.ACTION_MANAGED_PROFILE_AVAILABLE)) - executor.runAllReady() - verify(userManager).getProfiles(anyInt()) - } - - @Test - fun testReceiver_ACTION_MANAGED_PROFILE_REMOVED() { - privacyItemController.userSwitcherReceiver.onReceive(context, - Intent(Intent.ACTION_MANAGED_PROFILE_UNAVAILABLE)) - executor.runAllReady() - verify(userManager).getProfiles(anyInt()) - } - - @Test - fun testAddMultipleCallbacks() { - val otherCallback = mock(PrivacyItemController.Callback::class.java) - privacyItemController.addCallback(callback) - executor.runAllReady() - verify(callback).onPrivacyItemsChanged(anyList()) - - privacyItemController.addCallback(otherCallback) - executor.runAllReady() - verify(otherCallback).onPrivacyItemsChanged(anyList()) - // Adding a callback should not unnecessarily call previous ones - verifyNoMoreInteractions(callback) - } - - @Test - fun testMultipleCallbacksAreUpdated() { - doReturn(emptyList()).`when`(appOpsController).getActiveAppOpsForUser(anyInt()) - - val otherCallback = mock(PrivacyItemController.Callback::class.java) - privacyItemController.addCallback(callback) - privacyItemController.addCallback(otherCallback) - executor.runAllReady() - reset(callback) - reset(otherCallback) - - verify(appOpsController).addCallback(any(), capture(argCaptorCallback)) - argCaptorCallback.value.onActiveStateChanged(0, TEST_UID, "", true) - executor.runAllReady() - verify(callback).onPrivacyItemsChanged(anyList()) - verify(otherCallback).onPrivacyItemsChanged(anyList()) - } - - @Test - fun testRemoveCallback() { - doReturn(emptyList()).`when`(appOpsController).getActiveAppOpsForUser(anyInt()) - val otherCallback = mock(PrivacyItemController.Callback::class.java) - privacyItemController.addCallback(callback) - privacyItemController.addCallback(otherCallback) - executor.runAllReady() - executor.runAllReady() - reset(callback) - reset(otherCallback) - - verify(appOpsController).addCallback(any(), capture(argCaptorCallback)) - privacyItemController.removeCallback(callback) - argCaptorCallback.value.onActiveStateChanged(0, TEST_UID, "", true) - executor.runAllReady() - verify(callback, never()).onPrivacyItemsChanged(anyList()) - verify(otherCallback).onPrivacyItemsChanged(anyList()) - } - - @Test - fun testListShouldNotHaveNull() { - doReturn(listOf(AppOpItem(AppOpsManager.OP_ACTIVATE_VPN, TEST_UID, "", 0), - AppOpItem(AppOpsManager.OP_COARSE_LOCATION, TEST_UID, "", 0))) - .`when`(appOpsController).getActiveAppOpsForUser(anyInt()) - privacyItemController.addCallback(callback) - executor.runAllReady() - executor.runAllReady() - - verify(callback).onPrivacyItemsChanged(capture(argCaptor)) - assertEquals(1, argCaptor.value.size) - assertThat(argCaptor.value, not(hasItem(nullValue()))) - } - - @Test - fun testListShouldBeCopy() { - val list = listOf(PrivacyItem(PrivacyType.TYPE_CAMERA, - PrivacyApplication("", TEST_UID))) - privacyItemController.privacyList = list - val privacyList = privacyItemController.privacyList - assertEquals(list, privacyList) - assertTrue(list !== privacyList) - } - - @Test - fun testNotListeningWhenIndicatorsDisabled() { - changeAll(false) - changeMicCamera(false) - privacyItemController.addCallback(callback) - executor.runAllReady() - verify(appOpsController, never()).addCallback(eq(PrivacyItemController.OPS), - any()) - } - - @Test - fun testNotSendingLocationWhenOnlyMicCamera() { - changeAll(false) - changeMicCamera(true) - executor.runAllReady() - - doReturn(listOf(AppOpItem(AppOpsManager.OP_CAMERA, TEST_UID, "", 0), - AppOpItem(AppOpsManager.OP_COARSE_LOCATION, TEST_UID, "", 0))) - .`when`(appOpsController).getActiveAppOpsForUser(anyInt()) - - privacyItemController.addCallback(callback) - executor.runAllReady() - - verify(callback).onPrivacyItemsChanged(capture(argCaptor)) - - assertEquals(1, argCaptor.value.size) - assertEquals(PrivacyType.TYPE_CAMERA, argCaptor.value[0].privacyType) - } - - @Test - fun testNotUpdated_LocationChangeWhenOnlyMicCamera() { - doReturn(listOf(AppOpItem(AppOpsManager.OP_COARSE_LOCATION, TEST_UID, "", 0))) - .`when`(appOpsController).getActiveAppOpsForUser(anyInt()) - - privacyItemController.addCallback(callback) - changeAll(false) - changeMicCamera(true) - executor.runAllReady() - reset(callback) // Clean callback - - verify(appOpsController).addCallback(any(), capture(argCaptorCallback)) - argCaptorCallback.value.onActiveStateChanged( - AppOpsManager.OP_FINE_LOCATION, TEST_UID, TEST_PACKAGE_NAME, true) - - verify(callback, never()).onPrivacyItemsChanged(any()) - } - - private fun changeMicCamera(value: Boolean?) = changeProperty(MIC_CAMERA, value) - private fun changeAll(value: Boolean?) = changeProperty(ALL_INDICATORS, value) - - private fun changeProperty(name: String, value: Boolean?) { - deviceConfigProxy.setProperty( - DeviceConfig.NAMESPACE_PRIVACY, - name, - value?.toString(), - false - ) - } -} \ No newline at end of file diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/KeyguardIndicationControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/KeyguardIndicationControllerTest.java index 052f3382099..91144be7347 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/KeyguardIndicationControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/KeyguardIndicationControllerTest.java @@ -495,7 +495,7 @@ public void onRefreshBatteryInfo_computesChargingTime() throws RemoteException { createController(); BatteryStatus status = new BatteryStatus(BatteryManager.BATTERY_STATUS_CHARGING, 80 /* level */, BatteryManager.BATTERY_PLUGGED_WIRELESS, 100 /* health */, - 0 /* maxChargingWattage */); + 0 /* maxChargingWattage */, true /* present */); mController.getKeyguardCallback().onRefreshBatteryInfo(status); verify(mIBatteryStats).computeChargeTimeRemaining(); @@ -507,7 +507,7 @@ public void onRefreshBatteryInfo_computesChargingTime_onlyWhenCharging() createController(); BatteryStatus status = new BatteryStatus(BatteryManager.BATTERY_STATUS_CHARGING, 80 /* level */, 0 /* plugged */, 100 /* health */, - 0 /* maxChargingWattage */); + 0 /* maxChargingWattage */, true /* present */); mController.getKeyguardCallback().onRefreshBatteryInfo(status); verify(mIBatteryStats, never()).computeChargeTimeRemaining(); @@ -553,7 +553,8 @@ public void onRefreshBatteryInfo_chargingWithOverheat_presentChargingLimited() { createController(); BatteryStatus status = new BatteryStatus(BatteryManager.BATTERY_STATUS_CHARGING, 80 /* level */, BatteryManager.BATTERY_PLUGGED_AC, - BatteryManager.BATTERY_HEALTH_OVERHEAT, 0 /* maxChargingWattage */); + BatteryManager.BATTERY_HEALTH_OVERHEAT, 0 /* maxChargingWattage */, + true /* present */); mController.getKeyguardCallback().onRefreshBatteryInfo(status); mController.setVisible(true); @@ -569,7 +570,8 @@ public void onRefreshBatteryInfo_pluggedWithOverheat_presentChargingLimited() { createController(); BatteryStatus status = new BatteryStatus(BatteryManager.BATTERY_STATUS_DISCHARGING, 80 /* level */, BatteryManager.BATTERY_PLUGGED_AC, - BatteryManager.BATTERY_HEALTH_OVERHEAT, 0 /* maxChargingWattage */); + BatteryManager.BATTERY_HEALTH_OVERHEAT, 0 /* maxChargingWattage */, + true /* present */); mController.getKeyguardCallback().onRefreshBatteryInfo(status); mController.setVisible(true); @@ -585,7 +587,8 @@ public void onRefreshBatteryInfo_fullChargedWithOverheat_presentCharged() { createController(); BatteryStatus status = new BatteryStatus(BatteryManager.BATTERY_STATUS_CHARGING, 100 /* level */, BatteryManager.BATTERY_PLUGGED_AC, - BatteryManager.BATTERY_HEALTH_OVERHEAT, 0 /* maxChargingWattage */); + BatteryManager.BATTERY_HEALTH_OVERHEAT, 0 /* maxChargingWattage */, + true /* present */); mController.getKeyguardCallback().onRefreshBatteryInfo(status); mController.setVisible(true); @@ -599,7 +602,7 @@ public void onRefreshBatteryInfo_dischargingWithOverheat_presentBatteryPercentag createController(); BatteryStatus status = new BatteryStatus(BatteryManager.BATTERY_STATUS_DISCHARGING, 90 /* level */, 0 /* plugged */, BatteryManager.BATTERY_HEALTH_OVERHEAT, - 0 /* maxChargingWattage */); + 0 /* maxChargingWattage */, true /* present */); mController.getKeyguardCallback().onRefreshBatteryInfo(status); mController.setDozing(true); diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/StatusBarIconViewTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/StatusBarIconViewTest.java index 9971e0cf81a..edafa654902 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/StatusBarIconViewTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/StatusBarIconViewTest.java @@ -35,6 +35,7 @@ import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; import android.content.res.Resources; +import android.graphics.Bitmap; import android.graphics.Color; import android.graphics.drawable.Icon; import android.os.UserHandle; @@ -123,4 +124,13 @@ public void testGetContrastedStaticDrawableColor() { assertEquals("Transparent backgrounds should fallback to drawable color", color, mIconView.getStaticDrawableColor()); } + + @Test + public void testGiantImageNotAllowed() { + Bitmap largeBitmap = Bitmap.createBitmap(6000, 6000, Bitmap.Config.ARGB_8888); + Icon icon = Icon.createWithBitmap(largeBitmap); + StatusBarIcon largeIcon = new StatusBarIcon(UserHandle.ALL, "mockPackage", + icon, 0, 0, ""); + assertFalse(mIconView.set(largeIcon)); + } } \ No newline at end of file diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/BatteryControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/BatteryControllerTest.java index eca48c8c2ee..e985a61c7a5 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/BatteryControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/BatteryControllerTest.java @@ -16,7 +16,11 @@ package com.android.systemui.statusbar.policy; +import static android.os.BatteryManager.EXTRA_PRESENT; + +import static org.mockito.Mockito.atLeastOnce; import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import android.content.Intent; @@ -30,6 +34,7 @@ import com.android.systemui.SysuiTestCase; import com.android.systemui.broadcast.BroadcastDispatcher; import com.android.systemui.power.EnhancedEstimates; +import com.android.systemui.statusbar.policy.BatteryController.BatteryStateChangeCallback; import org.junit.Assert; import org.junit.Before; @@ -93,4 +98,36 @@ public void testIndependentAODBatterySaver_false() { Assert.assertFalse(mBatteryController.isAodPowerSave()); } + @Test + public void testBatteryPresentState_notPresent() { + // GIVEN a battery state callback listening for changes + BatteryStateChangeCallback cb = mock(BatteryStateChangeCallback.class); + mBatteryController.addCallback(cb); + + // WHEN the state of the battery becomes unknown + Intent i = new Intent(Intent.ACTION_BATTERY_CHANGED); + i.putExtra(EXTRA_PRESENT, false); + mBatteryController.onReceive(getContext(), i); + + // THEN the callback is notified + verify(cb, atLeastOnce()).onBatteryUnknownStateChanged(true); + } + + @Test + public void testBatteryPresentState_callbackAddedAfterStateChange() { + // GIVEN a battery state callback + BatteryController.BatteryStateChangeCallback cb = + mock(BatteryController.BatteryStateChangeCallback.class); + + // GIVEN the state has changed before adding a new callback + Intent i = new Intent(Intent.ACTION_BATTERY_CHANGED); + i.putExtra(EXTRA_PRESENT, false); + mBatteryController.onReceive(getContext(), i); + + // WHEN a callback is added + mBatteryController.addCallback(cb); + + // THEN it is informed about the battery state + verify(cb, atLeastOnce()).onBatteryUnknownStateChanged(true); + } } diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/BatteryStateNotifierTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/BatteryStateNotifierTest.kt new file mode 100644 index 00000000000..dcd57f137d7 --- /dev/null +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/BatteryStateNotifierTest.kt @@ -0,0 +1,81 @@ +/* + * Copyright (C) 2020 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.app.NotificationManager +import android.testing.AndroidTestingRunner +import android.testing.TestableLooper.RunWithLooper + +import androidx.test.filters.SmallTest + +import com.android.systemui.SysuiTestCase +import com.android.systemui.util.concurrency.FakeExecutor +import com.android.systemui.util.time.FakeSystemClock + +import org.junit.Before +import org.junit.Test +import org.junit.runner.RunWith +import org.mockito.ArgumentMatchers.anyInt +import org.mockito.ArgumentMatchers.anyString +import org.mockito.Mock +import org.mockito.Mockito +import org.mockito.Mockito.verify +import org.mockito.MockitoAnnotations + +private fun anyObject(): T { + return Mockito.anyObject() +} + +@RunWith(AndroidTestingRunner::class) +@RunWithLooper() +@SmallTest +class BatteryStateNotifierTest : SysuiTestCase() { + @Mock private lateinit var batteryController: BatteryController + @Mock private lateinit var noMan: NotificationManager + + private val clock = FakeSystemClock() + private val executor = FakeExecutor(clock) + + private lateinit var notifier: BatteryStateNotifier + + @Before + fun setup() { + MockitoAnnotations.initMocks(this) + notifier = BatteryStateNotifier(batteryController, noMan, executor, context) + notifier.startListening() + + context.ensureTestableResources() + } + + @Test + fun testNotifyWhenStateUnknown() { + notifier.onBatteryUnknownStateChanged(true) + verify(noMan).notify(anyString(), anyInt(), anyObject()) + } + + @Test + fun testCancelAfterDelay() { + notifier.onBatteryUnknownStateChanged(true) + notifier.onBatteryUnknownStateChanged(false) + + clock.advanceTime(DELAY_MILLIS + 1) + verify(noMan).cancel(anyInt()) + } +} + +// From BatteryStateNotifier.kt +private const val DELAY_MILLIS: Long = 40 * 60 * 60 * 1000 diff --git a/packages/Tethering/res/values-mcc310-mnc004-nl/strings.xml b/packages/Tethering/res/values-mcc310-mnc004-nl/strings.xml index 1d888942f49..b47f0258ada 100644 --- a/packages/Tethering/res/values-mcc310-mnc004-nl/strings.xml +++ b/packages/Tethering/res/values-mcc310-mnc004-nl/strings.xml @@ -18,7 +18,7 @@ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> "Tethering heeft geen internet" "Apparaten kunnen niet worden verbonden" - "Tethering uitschakelen" - "Hotspot of tethering is ingeschakeld" + "Tethering uitzetten" + "Hotspot of tethering staat aan" "Er kunnen extra kosten voor roaming in rekening worden gebracht." diff --git a/packages/Tethering/res/values-nl/strings.xml b/packages/Tethering/res/values-nl/strings.xml index 18b2bbfc767..82ada9d01fa 100644 --- a/packages/Tethering/res/values-nl/strings.xml +++ b/packages/Tethering/res/values-nl/strings.xml @@ -18,7 +18,7 @@ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> "Tethering of hotspot actief" "Tik om in te stellen." - "Tethering is uitgeschakeld" + "Tethering staat uit" "Neem contact op met je beheerder voor meer informatie" "Status van hotspot en tethering" diff --git a/services/backup/java/com/android/server/backup/BackupManagerService.java b/services/backup/java/com/android/server/backup/BackupManagerService.java index b13bef2de15..89a6eca8fda 100644 --- a/services/backup/java/com/android/server/backup/BackupManagerService.java +++ b/services/backup/java/com/android/server/backup/BackupManagerService.java @@ -30,6 +30,7 @@ import android.app.backup.IFullBackupRestoreObserver; import android.app.backup.IRestoreSession; import android.app.backup.ISelectBackupTransportCallback; +import android.app.compat.CompatChanges; import android.app.job.JobParameters; import android.app.job.JobScheduler; import android.app.job.JobService; @@ -506,6 +507,12 @@ public void setBackupServiceActive(int userId, boolean makeActive) { */ @Override public boolean isBackupServiceActive(int userId) { + int callingUid = Binder.getCallingUid(); + if (CompatChanges.isChangeEnabled( + BackupManager.IS_BACKUP_SERVICE_ACTIVE_ENFORCE_PERMISSION_IN_SERVICE, callingUid)) { + mContext.enforceCallingOrSelfPermission(android.Manifest.permission.BACKUP, + "isBackupServiceActive"); + } synchronized (mStateLock) { return !mGlobalDisable && isBackupActivatedForUser(userId); } diff --git a/services/core/java/com/android/server/BatteryService.java b/services/core/java/com/android/server/BatteryService.java index 94d2b148ce0..f4a94ddc61d 100644 --- a/services/core/java/com/android/server/BatteryService.java +++ b/services/core/java/com/android/server/BatteryService.java @@ -1532,6 +1532,8 @@ public void run() { if (Objects.equals(newService, oldService)) return; Slog.i(TAG, "health: new instance registered " + mInstanceName); + // #init() may be called with null callback. Skip null callbacks. + if (mCallback == null) return; mCallback.onRegistration(oldService, newService, mInstanceName); } catch (NoSuchElementException | RemoteException ex) { Slog.e(TAG, "health: Cannot get instance '" + mInstanceName diff --git a/services/core/java/com/android/server/BluetoothAirplaneModeListener.java b/services/core/java/com/android/server/BluetoothAirplaneModeListener.java index 31cd5d519d8..0b2cc889092 100644 --- a/services/core/java/com/android/server/BluetoothAirplaneModeListener.java +++ b/services/core/java/com/android/server/BluetoothAirplaneModeListener.java @@ -127,7 +127,9 @@ void handleAirplaneModeChange() { } return; } - mAirplaneHelper.onAirplaneModeChanged(mBluetoothManager); + if (mAirplaneHelper != null) { + mAirplaneHelper.onAirplaneModeChanged(mBluetoothManager); + } } @VisibleForTesting diff --git a/services/core/java/com/android/server/StorageManagerService.java b/services/core/java/com/android/server/StorageManagerService.java index e5eeeb3e6b3..02f885e8076 100644 --- a/services/core/java/com/android/server/StorageManagerService.java +++ b/services/core/java/com/android/server/StorageManagerService.java @@ -58,6 +58,7 @@ import android.Manifest; import android.annotation.Nullable; +import android.annotation.UserIdInt; import android.app.ActivityManager; import android.app.ActivityManagerInternal; import android.app.AppOpsManager; @@ -511,14 +512,21 @@ private String scrubPath(String path) { } } - private @Nullable VolumeInfo findStorageForUuid(String volumeUuid) { + private @Nullable VolumeInfo findStorageForUuidAsUser(String volumeUuid, + @UserIdInt int userId) { final StorageManager storage = mContext.getSystemService(StorageManager.class); if (Objects.equals(StorageManager.UUID_PRIVATE_INTERNAL, volumeUuid)) { - return storage.findVolumeById(VolumeInfo.ID_EMULATED_INTERNAL + ";" + 0); + return storage.findVolumeById(VolumeInfo.ID_EMULATED_INTERNAL + ";" + userId); } else if (Objects.equals(StorageManager.UUID_PRIMARY_PHYSICAL, volumeUuid)) { return storage.getPrimaryPhysicalVolume(); } else { - return storage.findEmulatedForPrivate(storage.findVolumeByUuid(volumeUuid)); + VolumeInfo info = storage.findVolumeByUuid(volumeUuid); + if (info == null) { + Slog.w(TAG, "findStorageForUuidAsUser cannot find volumeUuid:" + volumeUuid); + return null; + } + String emulatedUuid = info.getId().replace("private", "emulated") + ";" + userId; + return storage.findVolumeById(emulatedUuid); } } @@ -2769,8 +2777,9 @@ public void setPrimaryStorageUuid(String volumeUuid, IPackageMoveObserver callba return; } else { - from = findStorageForUuid(mPrimaryStorageUuid); - to = findStorageForUuid(volumeUuid); + int currentUserId = mCurrentUserId; + from = findStorageForUuidAsUser(mPrimaryStorageUuid, currentUserId); + to = findStorageForUuidAsUser(volumeUuid, currentUserId); if (from == null) { Slog.w(TAG, "Failing move due to missing from volume " + mPrimaryStorageUuid); diff --git a/services/core/java/com/android/server/TelephonyRegistry.java b/services/core/java/com/android/server/TelephonyRegistry.java index c4f1c805398..918aeb72105 100644 --- a/services/core/java/com/android/server/TelephonyRegistry.java +++ b/services/core/java/com/android/server/TelephonyRegistry.java @@ -2623,6 +2623,7 @@ private boolean checkListenerPermission(int events, int subId, String callingPac LocationAccessPolicy.LocationPermissionQuery.Builder locationQueryBuilder = new LocationAccessPolicy.LocationPermissionQuery.Builder() .setCallingPackage(callingPackage) + .setCallingFeatureId(callingFeatureId) .setMethod(message + " events: " + events) .setCallingPid(Binder.getCallingPid()) .setCallingUid(Binder.getCallingUid()); @@ -2761,6 +2762,7 @@ private boolean checkFineLocationAccess(Record r, int minSdk) { LocationAccessPolicy.LocationPermissionQuery query = new LocationAccessPolicy.LocationPermissionQuery.Builder() .setCallingPackage(r.callingPackage) + .setCallingFeatureId(r.callingFeatureId) .setCallingPid(r.callerPid) .setCallingUid(r.callerUid) .setMethod("TelephonyRegistry push") @@ -2779,6 +2781,7 @@ private boolean checkCoarseLocationAccess(Record r, int minSdk) { LocationAccessPolicy.LocationPermissionQuery query = new LocationAccessPolicy.LocationPermissionQuery.Builder() .setCallingPackage(r.callingPackage) + .setCallingFeatureId(r.callingFeatureId) .setCallingPid(r.callerPid) .setCallingUid(r.callerUid) .setMethod("TelephonyRegistry push") diff --git a/services/core/java/com/android/server/accounts/AccountManagerService.java b/services/core/java/com/android/server/accounts/AccountManagerService.java index 27c3ff1b4c0..2e04f9c2bcd 100644 --- a/services/core/java/com/android/server/accounts/AccountManagerService.java +++ b/services/core/java/com/android/server/accounts/AccountManagerService.java @@ -3071,7 +3071,8 @@ private void createNoCredentialsPermissionNotification(Account account, Intent i .setContentTitle(title) .setContentText(subtitle) .setContentIntent(PendingIntent.getActivityAsUser(mContext, 0, intent, - PendingIntent.FLAG_CANCEL_CURRENT, null, user)) + PendingIntent.FLAG_CANCEL_CURRENT | PendingIntent.FLAG_IMMUTABLE, + null, user)) .build(); installNotification(getCredentialPermissionNotificationId( account, authTokenType, uid), n, packageName, user.getIdentifier()); @@ -5293,7 +5294,8 @@ private void doNotification(UserAccounts accounts, Account account, CharSequence .setContentTitle(String.format(notificationTitleFormat, account.name)) .setContentText(message) .setContentIntent(PendingIntent.getActivityAsUser( - mContext, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT, + mContext, 0, intent, + PendingIntent.FLAG_CANCEL_CURRENT | PendingIntent.FLAG_IMMUTABLE, null, new UserHandle(userId))) .build(); installNotification(id, n, packageName, userId); diff --git a/services/core/java/com/android/server/am/ActiveServices.java b/services/core/java/com/android/server/am/ActiveServices.java index 69dddeb1b54..e292e6fb29d 100644 --- a/services/core/java/com/android/server/am/ActiveServices.java +++ b/services/core/java/com/android/server/am/ActiveServices.java @@ -119,6 +119,7 @@ import java.util.ArrayList; import java.util.Comparator; import java.util.List; +import java.util.Objects; import java.util.Set; import java.util.function.Predicate; @@ -433,6 +434,45 @@ boolean hasBackgroundServicesLocked(int callingUser) { return smap != null ? smap.mStartingBackground.size() >= mMaxStartingBackground : false; } + boolean hasForegroundServiceNotificationLocked(String pkg, int userId, String channelId) { + final ServiceMap smap = mServiceMap.get(userId); + if (smap != null) { + for (int i = 0; i < smap.mServicesByInstanceName.size(); i++) { + final ServiceRecord sr = smap.mServicesByInstanceName.valueAt(i); + if (sr.appInfo.packageName.equals(pkg) && sr.isForeground) { + if (Objects.equals(sr.foregroundNoti.getChannelId(), channelId)) { + if (DEBUG_FOREGROUND_SERVICE) { + Slog.d(TAG_SERVICE, "Channel u" + userId + "/pkg=" + pkg + + "/channelId=" + channelId + + " has fg service notification"); + } + return true; + } + } + } + } + return false; + } + + void stopForegroundServicesForChannelLocked(String pkg, int userId, String channelId) { + final ServiceMap smap = mServiceMap.get(userId); + if (smap != null) { + for (int i = 0; i < smap.mServicesByInstanceName.size(); i++) { + final ServiceRecord sr = smap.mServicesByInstanceName.valueAt(i); + if (sr.appInfo.packageName.equals(pkg) && sr.isForeground) { + if (Objects.equals(sr.foregroundNoti.getChannelId(), channelId)) { + if (DEBUG_FOREGROUND_SERVICE) { + Slog.d(TAG_SERVICE, "Stopping FGS u" + userId + "/pkg=" + pkg + + "/channelId=" + channelId + + " for conversation channel clear"); + } + stopServiceLocked(sr); + } + } + } + } + } + private ServiceMap getServiceMapLocked(int callingUser) { ServiceMap smap = mServiceMap.get(callingUser); if (smap == null) { @@ -4882,17 +4922,24 @@ private boolean shouldAllowWhileInUsePermissionInFgsLocked(String callingPackage return true; } - if (r.app != null) { + if (r != null && r.app != null) { ActiveInstrumentation instr = r.app.getActiveInstrumentation(); if (instr != null && instr.mHasBackgroundActivityStartsPermission) { return true; } } - final boolean hasAllowBackgroundActivityStartsToken = r.app != null - ? !r.app.mAllowBackgroundActivityStartsTokens.isEmpty() : false; - if (hasAllowBackgroundActivityStartsToken) { - return true; + for (int i = mAm.mProcessList.mLruProcesses.size() - 1; i >= 0; i--) { + final ProcessRecord pr = mAm.mProcessList.mLruProcesses.get(i); + if (pr.uid == callingUid) { + if (!pr.mAllowBackgroundActivityStartsTokens.isEmpty()) { + return true; + } + if (pr.getWindowProcessController() + .areBackgroundActivityStartsAllowedByGracePeriodSafe()) { + return true; + } + } } if (mAm.checkPermission(START_ACTIVITIES_FROM_BACKGROUND, callingPid, callingUid) @@ -4911,6 +4958,10 @@ private boolean shouldAllowWhileInUsePermissionInFgsLocked(String callingPackage return true; } + if (mAm.mInternal.isTempAllowlistedForFgsWhileInUse(callingUid)) { + return true; + } + final boolean isWhiteListedPackage = mWhiteListAllowWhileInUsePermissionInFgs.contains(callingPackage); if (isWhiteListedPackage) { @@ -4924,4 +4975,10 @@ private boolean shouldAllowWhileInUsePermissionInFgsLocked(String callingPackage } return false; } + + boolean canAllowWhileInUsePermissionInFgsLocked(int callingPid, int callingUid, + String callingPackage) { + return shouldAllowWhileInUsePermissionInFgsLocked( + callingPackage, callingPid, callingUid, null, null, false); + } } diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java index 8b5a8e8a0ee..51d1cf15cef 100644 --- a/services/core/java/com/android/server/am/ActivityManagerService.java +++ b/services/core/java/com/android/server/am/ActivityManagerService.java @@ -183,6 +183,7 @@ import android.app.PendingIntent; import android.app.ProcessMemoryState; import android.app.ProfilerInfo; +import android.app.PropertyInvalidatedCache; import android.app.WaitResult; import android.app.backup.IBackupManager; import android.app.usage.UsageEvents; @@ -1260,6 +1261,13 @@ void dumpDebug(ProtoOutputStream proto, long fieldId) { final PendingTempWhitelists mPendingTempWhitelist = new PendingTempWhitelists(this); + /** + * List of uids that are allowed to have while-in-use permission when FGS is started from + * background. + */ + private final FgsWhileInUseTempAllowList mFgsWhileInUseTempAllowList = + new FgsWhileInUseTempAllowList(); + /** * Information about and control over application operations */ @@ -2127,7 +2135,7 @@ public void setSystemProcess() { 0, new HostingRecord("system")); app.setPersistent(true); - app.pid = MY_PID; + app.pid = app.mPidForCompact = MY_PID; app.getWindowProcessController().setPid(MY_PID); app.maxAdj = ProcessList.SYSTEM_ADJ; app.makeActive(mSystemThread.getApplicationThread(), mProcessStats); @@ -5110,6 +5118,9 @@ private boolean attachApplicationLocked(@NonNull IApplicationThread thread, EventLogTags.writeAmProcBound(app.userId, app.pid, app.processName); app.curAdj = app.setAdj = app.verifiedAdj = ProcessList.INVALID_ADJ; + synchronized (mOomAdjuster.mCachedAppOptimizer) { + app.mSetAdjForCompact = ProcessList.INVALID_ADJ; + } mOomAdjuster.setAttachingSchedGroupLocked(app); app.forcingToImportant = null; updateProcessForegroundLocked(app, false, 0, false); @@ -6005,9 +6016,7 @@ private boolean isAppForeground(int uid) { } private boolean isAppBad(ApplicationInfo info) { - synchronized (this) { - return mAppErrors.isBadProcessLocked(info); - } + return mAppErrors.isBadProcess(info.processName, info.uid); } // NOTE: this is an internal method used by the OnShellCommand implementation only and should @@ -12844,6 +12853,10 @@ final void dumpBinderCacheContents(FileDescriptor fd, PrintWriter pw, String[] a if (r.thread != null) { pw.println("\n\n** Cache info for pid " + r.pid + " [" + r.processName + "] **"); pw.flush(); + if (r.pid == MY_PID) { + PropertyInvalidatedCache.dumpCacheInfo(fd, args); + continue; + } try { TransferPipe tp = new TransferPipe(); try { @@ -19724,6 +19737,22 @@ public boolean hasRunningForegroundService(int uid, int foregroundServicetype) { return false; } + @Override + public boolean hasForegroundServiceNotification(String pkg, int userId, + String channelId) { + synchronized (ActivityManagerService.this) { + return mServices.hasForegroundServiceNotificationLocked(pkg, userId, channelId); + } + } + + @Override + public void stopForegroundServicesForChannel(String pkg, int userId, + String channelId) { + synchronized (ActivityManagerService.this) { + mServices.stopForegroundServicesForChannelLocked(pkg, userId, channelId); + } + } + @Override public void registerProcessObserver(IProcessObserver processObserver) { ActivityManagerService.this.registerProcessObserver(processObserver); @@ -19776,6 +19805,24 @@ public void deletePendingTopUid(int uid) { public boolean isPendingTopUid(int uid) { return mPendingStartActivityUids.isPendingTopUid(uid); } + + @Override + public void tempAllowWhileInUsePermissionInFgs(int uid, long duration) { + mFgsWhileInUseTempAllowList.add(uid, duration); + } + + @Override + public boolean isTempAllowlistedForFgsWhileInUse(int uid) { + return mFgsWhileInUseTempAllowList.isAllowed(uid); + } + + @Override + public boolean canAllowWhileInUsePermissionInFgs(int pid, int uid, + @NonNull String packageName) { + synchronized (ActivityManagerService.this) { + return mServices.canAllowWhileInUsePermissionInFgsLocked(pid, uid, packageName); + } + } } long inputDispatchingTimedOut(int pid, final boolean aboveSystem, String reason) { @@ -20376,7 +20423,7 @@ public boolean enableAppFreezer(boolean enable) { int callerUid = Binder.getCallingUid(); // Only system can toggle the freezer state - if (callerUid == SYSTEM_UID) { + if (callerUid == SYSTEM_UID || Build.IS_DEBUGGABLE) { return mOomAdjuster.mCachedAppOptimizer.enableFreezer(enable); } else { throw new SecurityException("Caller uid " + callerUid + " cannot set freezer state "); diff --git a/services/core/java/com/android/server/am/AppErrors.java b/services/core/java/com/android/server/am/AppErrors.java index 50d2cab0af8..9838f01510a 100644 --- a/services/core/java/com/android/server/am/AppErrors.java +++ b/services/core/java/com/android/server/am/AppErrors.java @@ -97,9 +97,19 @@ class AppErrors { * a minimum amount of time; they are removed from it when they are * later restarted (hopefully due to some user action). The value is the * time it was added to the list. + * + * Read access is UNLOCKED, and must either be based on a single lookup + * call on the current mBadProcesses instance, or a local copy of that + * reference must be made and the local copy treated as the source of + * truth. Mutations are performed by synchronizing on mBadProcessLock, + * cloning the existing mBadProcesses instance, performing the mutation, + * then changing the volatile "live" mBadProcesses reference to point to the + * mutated version. These operations are very rare compared to lookups: + * we intentionally trade additional cost for mutations for eliminating + * lock operations from the simple lookup cases. */ - private final ProcessMap mBadProcesses = new ProcessMap<>(); - + private volatile ProcessMap mBadProcesses = new ProcessMap<>(); + private final Object mBadProcessLock = new Object(); AppErrors(Context context, ActivityManagerService service, PackageWatchdog watchdog) { context.assertRuntimeOverlayThemable(); @@ -109,7 +119,8 @@ class AppErrors { } void dumpDebug(ProtoOutputStream proto, long fieldId, String dumpPackage) { - if (mProcessCrashTimes.getMap().isEmpty() && mBadProcesses.getMap().isEmpty()) { + final ProcessMap badProcesses = mBadProcesses; + if (mProcessCrashTimes.getMap().isEmpty() && badProcesses.getMap().isEmpty()) { return; } @@ -144,8 +155,8 @@ void dumpDebug(ProtoOutputStream proto, long fieldId, String dumpPackage) { } - if (!mBadProcesses.getMap().isEmpty()) { - final ArrayMap> pmap = mBadProcesses.getMap(); + if (!badProcesses.getMap().isEmpty()) { + final ArrayMap> pmap = badProcesses.getMap(); final int processCount = pmap.size(); for (int ip = 0; ip < processCount; ip++) { final long btoken = proto.start(AppErrorsProto.BAD_PROCESSES); @@ -209,9 +220,10 @@ boolean dumpLocked(FileDescriptor fd, PrintWriter pw, boolean needSep, String du } } - if (!mBadProcesses.getMap().isEmpty()) { + final ProcessMap badProcesses = mBadProcesses; + if (!badProcesses.getMap().isEmpty()) { boolean printed = false; - final ArrayMap> pmap = mBadProcesses.getMap(); + final ArrayMap> pmap = badProcesses.getMap(); final int processCount = pmap.size(); for (int ip = 0; ip < processCount; ip++) { final String pname = pmap.keyAt(ip); @@ -263,12 +275,27 @@ boolean dumpLocked(FileDescriptor fd, PrintWriter pw, boolean needSep, String du return needSep; } - boolean isBadProcessLocked(ApplicationInfo info) { - return mBadProcesses.get(info.processName, info.uid) != null; + boolean isBadProcess(final String processName, final int uid) { + // NO LOCKING for the simple lookup + return mBadProcesses.get(processName, uid) != null; + } + + void clearBadProcess(final String processName, final int uid) { + synchronized (mBadProcessLock) { + final ProcessMap badProcesses = new ProcessMap<>(); + badProcesses.putAll(mBadProcesses); + badProcesses.remove(processName, uid); + mBadProcesses = badProcesses; + } } - void clearBadProcessLocked(ApplicationInfo info) { - mBadProcesses.remove(info.processName, info.uid); + void markBadProcess(final String processName, final int uid, BadProcessInfo info) { + synchronized (mBadProcessLock) { + final ProcessMap badProcesses = new ProcessMap<>(); + badProcesses.putAll(mBadProcesses); + badProcesses.put(processName, uid, info); + mBadProcesses = badProcesses; + } } void resetProcessCrashTimeLocked(ApplicationInfo info) { @@ -737,10 +764,10 @@ boolean handleAppCrashLocked(ProcessRecord app, String reason, app.info.processName); if (!app.isolated) { // XXX We don't have a way to mark isolated processes - // as bad, since they don't have a peristent identity. - mBadProcesses.put(app.info.processName, app.uid, + // as bad, since they don't have a persistent identity. + markBadProcess(app.info.processName, app.uid, new BadProcessInfo(now, shortMsg, longMsg, stackTrace)); - mProcessCrashTimes.remove(app.info.processName, app.uid); + mProcessCrashTimes.remove(app.processName, app.uid); } app.bad = true; app.removed = true; diff --git a/services/core/java/com/android/server/am/CachedAppOptimizer.java b/services/core/java/com/android/server/am/CachedAppOptimizer.java index 36d4a38c162..2f776fc5503 100644 --- a/services/core/java/com/android/server/am/CachedAppOptimizer.java +++ b/services/core/java/com/android/server/am/CachedAppOptimizer.java @@ -133,7 +133,7 @@ interface ProcessDependencies { static final int REPORT_UNFREEZE_MSG = 4; //TODO:change this static definition into a configurable flag. - static final int FREEZE_TIMEOUT_MS = 10000; + static final long FREEZE_TIMEOUT_MS = 600000; static final int DO_FREEZE = 1; static final int REPORT_UNFREEZE = 2; @@ -151,6 +151,7 @@ interface ProcessDependencies { */ final ServiceThread mCachedAppOptimizerThread; + @GuardedBy("this") private final ArrayList mPendingCompactionProcesses = new ArrayList(); private final ActivityManagerService mAm; @@ -348,51 +349,74 @@ void dump(PrintWriter pw) { @GuardedBy("mAm") void compactAppSome(ProcessRecord app) { - app.reqCompactAction = COMPACT_PROCESS_SOME; - mPendingCompactionProcesses.add(app); - mCompactionHandler.sendMessage( - mCompactionHandler.obtainMessage( - COMPACT_PROCESS_MSG, app.setAdj, app.setProcState)); + synchronized (this) { + app.reqCompactAction = COMPACT_PROCESS_SOME; + if (!app.mPendingCompact) { + app.mPendingCompact = true; + mPendingCompactionProcesses.add(app); + mCompactionHandler.sendMessage( + mCompactionHandler.obtainMessage( + COMPACT_PROCESS_MSG, app.setAdj, app.setProcState)); + } + } } @GuardedBy("mAm") void compactAppFull(ProcessRecord app) { - app.reqCompactAction = COMPACT_PROCESS_FULL; - mPendingCompactionProcesses.add(app); - mCompactionHandler.sendMessage( - mCompactionHandler.obtainMessage( - COMPACT_PROCESS_MSG, app.setAdj, app.setProcState)); - + synchronized (this) { + app.reqCompactAction = COMPACT_PROCESS_FULL; + if (!app.mPendingCompact) { + app.mPendingCompact = true; + mPendingCompactionProcesses.add(app); + mCompactionHandler.sendMessage( + mCompactionHandler.obtainMessage( + COMPACT_PROCESS_MSG, app.setAdj, app.setProcState)); + } + } } @GuardedBy("mAm") void compactAppPersistent(ProcessRecord app) { - app.reqCompactAction = COMPACT_PROCESS_PERSISTENT; - mPendingCompactionProcesses.add(app); - mCompactionHandler.sendMessage( - mCompactionHandler.obtainMessage( - COMPACT_PROCESS_MSG, app.curAdj, app.setProcState)); + synchronized (this) { + app.reqCompactAction = COMPACT_PROCESS_PERSISTENT; + if (!app.mPendingCompact) { + app.mPendingCompact = true; + mPendingCompactionProcesses.add(app); + mCompactionHandler.sendMessage( + mCompactionHandler.obtainMessage( + COMPACT_PROCESS_MSG, app.curAdj, app.setProcState)); + } + } } @GuardedBy("mAm") boolean shouldCompactPersistent(ProcessRecord app, long now) { - return (app.lastCompactTime == 0 - || (now - app.lastCompactTime) > mCompactThrottlePersistent); + synchronized (this) { + return (app.lastCompactTime == 0 + || (now - app.lastCompactTime) > mCompactThrottlePersistent); + } } @GuardedBy("mAm") void compactAppBfgs(ProcessRecord app) { - app.reqCompactAction = COMPACT_PROCESS_BFGS; - mPendingCompactionProcesses.add(app); - mCompactionHandler.sendMessage( - mCompactionHandler.obtainMessage( - COMPACT_PROCESS_MSG, app.curAdj, app.setProcState)); + synchronized (this) { + app.reqCompactAction = COMPACT_PROCESS_BFGS; + if (!app.mPendingCompact) { + app.mPendingCompact = true; + mPendingCompactionProcesses.add(app); + mCompactionHandler.sendMessage( + mCompactionHandler.obtainMessage( + COMPACT_PROCESS_MSG, app.curAdj, app.setProcState)); + } + } } @GuardedBy("mAm") boolean shouldCompactBFGS(ProcessRecord app, long now) { - return (app.lastCompactTime == 0 - || (now - app.lastCompactTime) > mCompactThrottleBFGS); + synchronized (this) { + return (app.lastCompactTime == 0 + || (now - app.lastCompactTime) > mCompactThrottleBFGS); + } } @GuardedBy("mAm") @@ -722,10 +746,12 @@ static String compactActionIntToString(int action) { // This will ensure app will be out of the freezer for at least FREEZE_TIMEOUT_MS void unfreezeTemporarily(ProcessRecord app) { - synchronized (mAm) { - if (app.frozen) { - unfreezeAppLocked(app); - freezeAppAsync(app); + if (mUseFreezer) { + synchronized (mAm) { + if (app.frozen) { + unfreezeAppLocked(app); + freezeAppAsync(app); + } } } } @@ -852,18 +878,19 @@ public void handleMessage(Message msg) { LastCompactionStats lastCompactionStats; int lastOomAdj = msg.arg1; int procState = msg.arg2; - synchronized (mAm) { + synchronized (CachedAppOptimizer.this) { proc = mPendingCompactionProcesses.remove(0); pendingAction = proc.reqCompactAction; - pid = proc.pid; + pid = proc.mPidForCompact; name = proc.processName; + proc.mPendingCompact = false; // don't compact if the process has returned to perceptible // and this is only a cached/home/prev compaction if ((pendingAction == COMPACT_PROCESS_SOME || pendingAction == COMPACT_PROCESS_FULL) - && (proc.setAdj <= ProcessList.PERCEPTIBLE_APP_ADJ)) { + && (proc.mSetAdjForCompact <= ProcessList.PERCEPTIBLE_APP_ADJ)) { if (DEBUG_COMPACTION) { Slog.d(TAG_AM, "Skipping compaction as process " + name + " is " @@ -1050,7 +1077,7 @@ public void handleMessage(Message msg) { lastOomAdj, ActivityManager.processStateAmToProto(procState), zramFreeKbBefore, zramFreeKbAfter); } - synchronized (mAm) { + synchronized (CachedAppOptimizer.this) { proc.lastCompactTime = end; proc.lastCompactAction = pendingAction; } @@ -1101,15 +1128,26 @@ public void handleMessage(Message msg) { } private void freezeProcess(ProcessRecord proc) { - final int pid; - final String name; + final int pid = proc.pid; + final String name = proc.processName; final long unfrozenDuration; final boolean frozen; - synchronized (mAm) { - pid = proc.pid; - name = proc.processName; + try { + // pre-check for locks to avoid unnecessary freeze/unfreeze operations + if (Process.hasFileLocks(pid)) { + if (DEBUG_FREEZER) { + Slog.d(TAG_AM, name + " (" + pid + ") holds file locks, not freezing"); + } + return; + } + } catch (Exception e) { + Slog.e(TAG_AM, "Not freezing. Unable to check file locks for " + name + "(" + pid + + "): " + e); + return; + } + synchronized (mAm) { if (proc.curAdj < ProcessList.CACHED_APP_MIN_ADJ || proc.shouldNotFreeze) { if (DEBUG_FREEZER) { @@ -1141,29 +1179,50 @@ private void freezeProcess(ProcessRecord proc) { frozen = proc.frozen; } - if (frozen) { - if (DEBUG_FREEZER) { - Slog.d(TAG_AM, "froze " + pid + " " + name); - } + if (!frozen) { + return; + } - EventLog.writeEvent(EventLogTags.AM_FREEZE, pid, name); - try { - freezeBinder(pid, true); - } catch (RuntimeException e) { - Slog.e(TAG_AM, "Unable to freeze binder for " + pid + " " + name); - proc.kill("Unable to freeze binder interface", - ApplicationExitInfo.REASON_OTHER, - ApplicationExitInfo.SUBREASON_INVALID_STATE, true); - } + if (DEBUG_FREEZER) { + Slog.d(TAG_AM, "froze " + pid + " " + name); + } + + EventLog.writeEvent(EventLogTags.AM_FREEZE, pid, name); - // See above for why we're not taking mPhenotypeFlagLock here - if (mRandom.nextFloat() < mFreezerStatsdSampleRate) { - FrameworkStatsLog.write(FrameworkStatsLog.APP_FREEZE_CHANGED, - FrameworkStatsLog.APP_FREEZE_CHANGED__ACTION__FREEZE_APP, - pid, - name, - unfrozenDuration); + try { + freezeBinder(pid, true); + } catch (RuntimeException e) { + Slog.e(TAG_AM, "Unable to freeze binder for " + pid + " " + name); + proc.kill("Unable to freeze binder interface", + ApplicationExitInfo.REASON_OTHER, + ApplicationExitInfo.SUBREASON_INVALID_STATE, true); + } + + // See above for why we're not taking mPhenotypeFlagLock here + if (mRandom.nextFloat() < mFreezerStatsdSampleRate) { + FrameworkStatsLog.write(FrameworkStatsLog.APP_FREEZE_CHANGED, + FrameworkStatsLog.APP_FREEZE_CHANGED__ACTION__FREEZE_APP, + pid, + name, + unfrozenDuration); + } + + try { + // post-check to prevent races + if (Process.hasFileLocks(pid)) { + if (DEBUG_FREEZER) { + Slog.d(TAG_AM, name + " (" + pid + ") holds file locks, reverting freeze"); + } + + synchronized (mAm) { + unfreezeAppLocked(proc); + } + } + } catch (Exception e) { + Slog.e(TAG_AM, "Unable to check file locks for " + name + "(" + pid + "): " + e); + synchronized (mAm) { + unfreezeAppLocked(proc); } } } diff --git a/services/core/java/com/android/server/am/FgsWhileInUseTempAllowList.java b/services/core/java/com/android/server/am/FgsWhileInUseTempAllowList.java new file mode 100644 index 00000000000..ed0f264049e --- /dev/null +++ b/services/core/java/com/android/server/am/FgsWhileInUseTempAllowList.java @@ -0,0 +1,82 @@ +/* + * 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.server.am; + +import static com.android.server.am.ActivityManagerDebugConfig.TAG_AM; + +import android.os.SystemClock; +import android.util.Slog; +import android.util.SparseLongArray; + +/** + * List of uids that are allowed to have while-in-use permission when FGS is started + * from background. + */ +final class FgsWhileInUseTempAllowList { + /** + * This list is supposed to have a small number of entries. If exceeds MAX_SIZE, log a warning + * message. + */ + private static final int MAX_SIZE = 100; + /** + * The key is the UID, the value is expiration elapse time in ms of this temp-allowed UID. + */ + private final SparseLongArray mTempAllowListFgs = new SparseLongArray(); + + private final Object mLock = new Object(); + + void add(int uid, long durationMs) { + synchronized (mLock) { + if (durationMs <= 0) { + Slog.e(TAG_AM, "FgsWhileInUseTempAllowList bad duration:" + durationMs + + " uid: " + uid); + return; + } + // The temp allowlist should be a short list with only a few entries in it. + final int size = mTempAllowListFgs.size(); + if (size > MAX_SIZE) { + Slog.w(TAG_AM, "FgsWhileInUseTempAllowList length:" + size + " exceeds " + + MAX_SIZE); + } + final long now = SystemClock.elapsedRealtime(); + for (int index = mTempAllowListFgs.size() - 1; index >= 0; index--) { + if (mTempAllowListFgs.valueAt(index) < now) { + mTempAllowListFgs.removeAt(index); + } + } + final long existingExpirationTime = mTempAllowListFgs.get(uid, -1); + final long expirationTime = now + durationMs; + if (existingExpirationTime == -1 || existingExpirationTime < expirationTime) { + mTempAllowListFgs.put(uid, expirationTime); + } + } + } + + boolean isAllowed(int uid) { + synchronized (mLock) { + final int index = mTempAllowListFgs.indexOfKey(uid); + if (index < 0) { + return false; + } else if (mTempAllowListFgs.valueAt(index) < SystemClock.elapsedRealtime()) { + mTempAllowListFgs.removeAt(index); + return false; + } else { + return true; + } + } + } +} diff --git a/services/core/java/com/android/server/am/OomAdjuster.java b/services/core/java/com/android/server/am/OomAdjuster.java index f0343e1d807..faa7dce3169 100644 --- a/services/core/java/com/android/server/am/OomAdjuster.java +++ b/services/core/java/com/android/server/am/OomAdjuster.java @@ -2198,6 +2198,9 @@ private final boolean applyOomAdjLocked(ProcessRecord app, boolean doingAll, lon } app.setAdj = app.curAdj; app.verifiedAdj = ProcessList.INVALID_ADJ; + synchronized (mCachedAppOptimizer) { + app.mSetAdjForCompact = app.setAdj; + } } final int curSchedGroup = app.getCurrentSchedulingGroup(); diff --git a/services/core/java/com/android/server/am/ProcessList.java b/services/core/java/com/android/server/am/ProcessList.java index c851a88b6e6..f1e4ae5ceec 100644 --- a/services/core/java/com/android/server/am/ProcessList.java +++ b/services/core/java/com/android/server/am/ProcessList.java @@ -2336,7 +2336,7 @@ final ProcessRecord startProcessLocked(String processName, ApplicationInfo info, if ((intentFlags & Intent.FLAG_FROM_BACKGROUND) != 0) { // If we are in the background, then check to see if this process // is bad. If so, we will just silently fail. - if (mService.mAppErrors.isBadProcessLocked(info)) { + if (mService.mAppErrors.isBadProcess(info.processName, info.uid)) { if (DEBUG_PROCESSES) Slog.v(TAG, "Bad process: " + info.uid + "/" + info.processName); return null; @@ -2349,11 +2349,11 @@ final ProcessRecord startProcessLocked(String processName, ApplicationInfo info, if (DEBUG_PROCESSES) Slog.v(TAG, "Clearing bad process: " + info.uid + "/" + info.processName); mService.mAppErrors.resetProcessCrashTimeLocked(info); - if (mService.mAppErrors.isBadProcessLocked(info)) { + if (mService.mAppErrors.isBadProcess(info.processName, info.uid)) { EventLog.writeEvent(EventLogTags.AM_PROC_GOOD, UserHandle.getUserId(info.uid), info.uid, info.processName); - mService.mAppErrors.clearBadProcessLocked(info); + mService.mAppErrors.clearBadProcess(info.processName, info.uid); if (app != null) { app.bad = false; } diff --git a/services/core/java/com/android/server/am/ProcessRecord.java b/services/core/java/com/android/server/am/ProcessRecord.java index c5152c081e7..284903d390d 100644 --- a/services/core/java/com/android/server/am/ProcessRecord.java +++ b/services/core/java/com/android/server/am/ProcessRecord.java @@ -59,6 +59,7 @@ import android.util.TimeUtils; import android.util.proto.ProtoOutputStream; +import com.android.internal.annotations.GuardedBy; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.app.procstats.ProcessState; import com.android.internal.app.procstats.ProcessStats; @@ -162,8 +163,11 @@ boolean containsKey(Object key) { int curCapability; // Current capability flags of this process. For example, // PROCESS_CAPABILITY_FOREGROUND_LOCATION is one capability. int setCapability; // Last set capability flags. + @GuardedBy("mService.mOomAdjuster.mCachedAppOptimizer") long lastCompactTime; // The last time that this process was compacted + @GuardedBy("mService.mOomAdjuster.mCachedAppOptimizer") int reqCompactAction; // The most recent compaction action requested for this app. + @GuardedBy("mService.mOomAdjuster.mCachedAppOptimizer") int lastCompactAction; // The most recent compaction action performed for this app. boolean frozen; // True when the process is frozen. long freezeUnfreezeTime; // Last time the app was (un)frozen, 0 for never @@ -352,6 +356,24 @@ boolean containsKey(Object key) { boolean mReachable; // Whether or not this process is reachable from given process + /** + * The snapshot of {@link #setAdj}, meant to be read by {@link CachedAppOptimizer} only. + */ + @GuardedBy("mService.mOomAdjuster.mCachedAppOptimizer") + int mSetAdjForCompact; + + /** + * The snapshot of {@link #pid}, meant to be read by {@link CachedAppOptimizer} only. + */ + @GuardedBy("mService.mOomAdjuster.mCachedAppOptimizer") + int mPidForCompact; + + /** + * This process has been scheduled for a memory compaction. + */ + @GuardedBy("mService.mOomAdjuster.mCachedAppOptimizer") + boolean mPendingCompact; + void setStartParams(int startUid, HostingRecord hostingRecord, String seInfo, long startTime) { this.startUid = startUid; @@ -447,8 +469,10 @@ void dump(PrintWriter pw, String prefix) { pw.print(" setRaw="); pw.print(setRawAdj); pw.print(" cur="); pw.print(curAdj); pw.print(" set="); pw.println(setAdj); - pw.print(prefix); pw.print("lastCompactTime="); pw.print(lastCompactTime); - pw.print(" lastCompactAction="); pw.println(lastCompactAction); + synchronized (mService.mOomAdjuster.mCachedAppOptimizer) { + pw.print(prefix); pw.print("lastCompactTime="); pw.print(lastCompactTime); + pw.print(" lastCompactAction="); pw.println(lastCompactAction); + } pw.print(prefix); pw.print("mCurSchedGroup="); pw.print(mCurSchedGroup); pw.print(" setSchedGroup="); pw.print(setSchedGroup); pw.print(" systemNoUi="); pw.print(systemNoUi); @@ -672,6 +696,9 @@ void dump(PrintWriter pw, String prefix) { public void setPid(int _pid) { pid = _pid; + synchronized (mService.mOomAdjuster.mCachedAppOptimizer) { + mPidForCompact = _pid; + } mWindowProcessController.setPid(pid); procStatFile = null; shortStringName = null; diff --git a/services/core/java/com/android/server/appop/AppOpsService.java b/services/core/java/com/android/server/appop/AppOpsService.java index a5d2ca3ad4f..3cf6b197a03 100644 --- a/services/core/java/com/android/server/appop/AppOpsService.java +++ b/services/core/java/com/android/server/appop/AppOpsService.java @@ -583,6 +583,10 @@ int evalMode(int op, int mode) { if (mActivityManagerInternal != null && mActivityManagerInternal.isPendingTopUid(uid)) { return MODE_ALLOWED; + } else if (mActivityManagerInternal != null + && mActivityManagerInternal.isTempAllowlistedForFgsWhileInUse( + uid)) { + return MODE_ALLOWED; } else if ((capability & PROCESS_CAPABILITY_FOREGROUND_CAMERA) != 0) { return MODE_ALLOWED; } else { @@ -592,6 +596,10 @@ int evalMode(int op, int mode) { if (mActivityManagerInternal != null && mActivityManagerInternal.isPendingTopUid(uid)) { return MODE_ALLOWED; + } else if (mActivityManagerInternal != null + && mActivityManagerInternal.isTempAllowlistedForFgsWhileInUse( + uid)) { + return MODE_ALLOWED; } else if ((capability & PROCESS_CAPABILITY_FOREGROUND_MICROPHONE) != 0) { return MODE_ALLOWED; } else { diff --git a/services/core/java/com/android/server/display/DisplayManagerService.java b/services/core/java/com/android/server/display/DisplayManagerService.java index 852868616af..713f9c8f173 100644 --- a/services/core/java/com/android/server/display/DisplayManagerService.java +++ b/services/core/java/com/android/server/display/DisplayManagerService.java @@ -1484,6 +1484,14 @@ void setDisplayWhiteBalanceLoggingEnabled(boolean enabled) { } } + void setDisplayModeDirectorLoggingEnabled(boolean enabled) { + synchronized (mSyncRoot) { + if (mDisplayModeDirector != null) { + mDisplayModeDirector.setLoggingEnabled(enabled); + } + } + } + void setAmbientColorTemperatureOverride(float cct) { if (mDisplayPowerController != null) { synchronized (mSyncRoot) { diff --git a/services/core/java/com/android/server/display/DisplayManagerShellCommand.java b/services/core/java/com/android/server/display/DisplayManagerShellCommand.java index 0c6c797b917..d1d04966bde 100644 --- a/services/core/java/com/android/server/display/DisplayManagerShellCommand.java +++ b/services/core/java/com/android/server/display/DisplayManagerShellCommand.java @@ -54,6 +54,10 @@ public int onCommand(String cmd) { return setDisplayWhiteBalanceLoggingEnabled(true); case "dwb-logging-disable": return setDisplayWhiteBalanceLoggingEnabled(false); + case "dmd-logging-enable": + return setDisplayModeDirectorLoggingEnabled(true); + case "dmd-logging-disable": + return setDisplayModeDirectorLoggingEnabled(false); case "dwb-set-cct": return setAmbientColorTemperatureOverride(); default: @@ -80,6 +84,10 @@ public void onHelp() { pw.println(" Enable display white-balance logging."); pw.println(" dwb-logging-disable"); pw.println(" Disable display white-balance logging."); + pw.println(" dmd-logging-enable"); + pw.println(" Enable display mode director logging."); + pw.println(" dmd-logging-disable"); + pw.println(" Disable display mode director logging."); pw.println(" dwb-set-cct CCT"); pw.println(" Sets the ambient color temperature override to CCT (use -1 to disable)."); pw.println(); @@ -132,6 +140,11 @@ private int setDisplayWhiteBalanceLoggingEnabled(boolean enabled) { return 0; } + private int setDisplayModeDirectorLoggingEnabled(boolean enabled) { + mService.setDisplayModeDirectorLoggingEnabled(enabled); + return 0; + } + private int setAmbientColorTemperatureOverride() { String cctText = getNextArg(); if (cctText == null) { diff --git a/services/core/java/com/android/server/display/DisplayModeDirector.java b/services/core/java/com/android/server/display/DisplayModeDirector.java index 3c050804f01..7d40654ba4c 100644 --- a/services/core/java/com/android/server/display/DisplayModeDirector.java +++ b/services/core/java/com/android/server/display/DisplayModeDirector.java @@ -50,9 +50,12 @@ import com.android.server.display.utils.AmbientFilterFactory; import java.io.PrintWriter; +import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Arrays; +import java.util.Date; import java.util.List; +import java.util.Locale; import java.util.Objects; /** @@ -61,7 +64,7 @@ */ public class DisplayModeDirector { private static final String TAG = "DisplayModeDirector"; - private static final boolean DEBUG = false; + private boolean mLoggingEnabled; private static final int MSG_REFRESH_RATE_RANGE_CHANGED = 1; private static final int MSG_BRIGHTNESS_THRESHOLDS_CHANGED = 2; @@ -130,6 +133,14 @@ public void start(SensorManager sensorManager) { } + public void setLoggingEnabled(boolean loggingEnabled) { + if (mLoggingEnabled == loggingEnabled) { + return; + } + mLoggingEnabled = loggingEnabled; + mBrightnessObserver.setLoggingEnabled(loggingEnabled); + } + @NonNull private SparseArray getVotesLocked(int displayId) { SparseArray displayVotes = mVotesByDisplay.get(displayId); @@ -231,7 +242,7 @@ public DesiredDisplayModeSpecs getDesiredDisplayModeSpecs(int displayId) { availableModes = filterModes(modes, primarySummary); if (availableModes.length > 0) { - if (DEBUG) { + if (mLoggingEnabled) { Slog.w(TAG, "Found available modes=" + Arrays.toString(availableModes) + " with lowest priority considered " + Vote.priorityToString(lowestConsideredPriority) @@ -244,7 +255,7 @@ public DesiredDisplayModeSpecs getDesiredDisplayModeSpecs(int displayId) { break; } - if (DEBUG) { + if (mLoggingEnabled) { Slog.w(TAG, "Couldn't find available modes with lowest priority set to " + Vote.priorityToString(lowestConsideredPriority) + " and with the following constraints: " @@ -266,7 +277,7 @@ public DesiredDisplayModeSpecs getDesiredDisplayModeSpecs(int displayId) { Math.min(appRequestSummary.minRefreshRate, primarySummary.minRefreshRate); appRequestSummary.maxRefreshRate = Math.max(appRequestSummary.maxRefreshRate, primarySummary.maxRefreshRate); - if (DEBUG) { + if (mLoggingEnabled) { Slog.i(TAG, String.format("App request range: [%.0f %.0f]", appRequestSummary.minRefreshRate, @@ -293,7 +304,7 @@ private int[] filterModes(Display.Mode[] supportedModes, VoteSummary summary) { for (Display.Mode mode : supportedModes) { if (mode.getPhysicalWidth() != summary.width || mode.getPhysicalHeight() != summary.height) { - if (DEBUG) { + if (mLoggingEnabled) { Slog.w(TAG, "Discarding mode " + mode.getModeId() + ", wrong size" + ": desiredWidth=" + summary.width + ": desiredHeight=" + summary.height @@ -308,7 +319,7 @@ private int[] filterModes(Display.Mode[] supportedModes, VoteSummary summary) { // comparison. if (refreshRate < (summary.minRefreshRate - FLOAT_TOLERANCE) || refreshRate > (summary.maxRefreshRate + FLOAT_TOLERANCE)) { - if (DEBUG) { + if (mLoggingEnabled) { Slog.w(TAG, "Discarding mode " + mode.getModeId() + ", outside refresh rate bounds" + ": minRefreshRate=" + summary.minRefreshRate @@ -391,7 +402,7 @@ private void updateVoteLocked(int priority, Vote vote) { } private void updateVoteLocked(int displayId, int priority, Vote vote) { - if (DEBUG) { + if (mLoggingEnabled) { Slog.i(TAG, "updateVoteLocked(displayId=" + displayId + ", priority=" + Vote.priorityToString(priority) + ", vote=" + vote + ")"); @@ -412,7 +423,7 @@ private void updateVoteLocked(int displayId, int priority, Vote vote) { } if (votes.size() == 0) { - if (DEBUG) { + if (mLoggingEnabled) { Slog.i(TAG, "No votes left for display " + displayId + ", removing."); } mVotesByDisplay.remove(displayId); @@ -1080,6 +1091,10 @@ public class BrightnessObserver extends ContentObserver { // valid threshold if any item from the array >= 0 private boolean mShouldObserveDisplayChange; private boolean mShouldObserveAmbientChange; + private boolean mShouldObserveDisplayLowChange; + private boolean mShouldObserveAmbientLowChange; + private boolean mShouldObserveAmbientHighChange; + private boolean mLoggingEnabled; private SensorManager mSensorManager; private Sensor mLightSensor; @@ -1094,6 +1109,7 @@ public class BrightnessObserver extends ContentObserver { // refresh rate changeable and low power mode off. After initialization, these states will // be updated from the same handler thread. private boolean mScreenOn = false; + private int mDefaultDisplayState = Display.STATE_UNKNOWN; private boolean mRefreshRateChangeable = false; private boolean mLowPowerModeEnabled = false; @@ -1131,6 +1147,14 @@ public void observe(SensorManager sensorManager) { mDeviceConfigDisplaySettings.startListening(); } + public void setLoggingEnabled(boolean loggingEnabled) { + if (mLoggingEnabled == loggingEnabled) { + return; + } + mLoggingEnabled = loggingEnabled; + mLightSensorListener.setLoggingEnabled(loggingEnabled); + } + public void onRefreshRateSettingChangedLocked(float min, float max) { boolean changeable = (max - min > 1f && max > 60f); if (mRefreshRateChangeable != changeable) { @@ -1176,7 +1200,11 @@ public void onDeviceConfigRefreshRateInZoneChanged(int refreshRate) { public void dumpLocked(PrintWriter pw) { pw.println(" BrightnessObserver"); pw.println(" mAmbientLux: " + mAmbientLux); - pw.println(" mRefreshRateInZone: " + mRefreshRateInZone); + pw.println(" mDefaultDisplayState: " + mDefaultDisplayState); + pw.println(" mLowPowerModeEnabled: " + mLowPowerModeEnabled); + pw.println(" mRefreshRateChangeable: " + mRefreshRateChangeable); + pw.println(" mShouldObserveDisplayLowChange: " + mShouldObserveDisplayLowChange); + pw.println(" mShouldObserveAmbientLowChange: " + mShouldObserveAmbientLowChange); for (int d: mDisplayBrightnessThresholds) { pw.println(" mDisplayBrightnessThreshold: " + d); @@ -1309,17 +1337,32 @@ private void onBrightnessChangedLocked() { if (insideZone) { vote = Vote.forRefreshRates(mRefreshRateInZone, mRefreshRateInZone); } + updateVoteLocked(Vote.PRIORITY_LOW_BRIGHTNESS, vote); + } - if (DEBUG) { - Slog.d(TAG, "Display brightness " + brightness + ", ambient lux " + mAmbientLux + - ", Vote " + vote); + private void updateDefaultDisplayState() { + Display display = mContext.getSystemService(DisplayManager.class) + .getDisplay(Display.DEFAULT_DISPLAY); + if (display == null) { + return; } - updateVoteLocked(Vote.PRIORITY_LOW_BRIGHTNESS, vote); } private void onScreenOn(boolean on) { if (mScreenOn != on) { mScreenOn = on; + } + } + + @VisibleForTesting + public void setDefaultDisplayState(int state) { + if (mLoggingEnabled) { + Slog.d(TAG, "setDefaultDisplayState: mDefaultDisplayState = " + + mDefaultDisplayState + ", state = " + state); + } + + if (mDefaultDisplayState != state) { + mDefaultDisplayState = state; updateSensorStatus(); } } @@ -1329,13 +1372,28 @@ private void updateSensorStatus() { return; } - if (mShouldObserveAmbientChange && mScreenOn && !mLowPowerModeEnabled - && mRefreshRateChangeable) { + if (mLoggingEnabled) { + Slog.d(TAG, "updateSensorStatus: mShouldObserveAmbientLowChange = " + + mShouldObserveAmbientLowChange + ", mShouldObserveAmbientHighChange = " + + mShouldObserveAmbientHighChange); + Slog.d(TAG, "updateSensorStatus: mLowPowerModeEnabled = " + + mLowPowerModeEnabled + ", mRefreshRateChangeable = " + + mRefreshRateChangeable); + } + + if ((mShouldObserveAmbientLowChange || mShouldObserveAmbientHighChange) + && isDeviceActive() && !mLowPowerModeEnabled && mRefreshRateChangeable) { mSensorManager.registerListener(mLightSensorListener, mLightSensor, LIGHT_SENSOR_RATE_MS * 1000, mHandler); + if (mLoggingEnabled) { + Slog.d(TAG, "updateSensorStatus: registerListener"); + } } else { mLightSensorListener.removeCallbacks(); mSensorManager.unregisterListener(mLightSensorListener); + if (mLoggingEnabled) { + Slog.d(TAG, "updateSensorStatus: unregisterListener"); + } } } @@ -1346,18 +1404,33 @@ private boolean isDefaultDisplayOn() { && mContext.getSystemService(PowerManager.class).isInteractive(); } + private boolean isDeviceActive() { + return mDefaultDisplayState == Display.STATE_ON; + } + private final class LightSensorEventListener implements SensorEventListener { final private static int INJECT_EVENTS_INTERVAL_MS = LIGHT_SENSOR_RATE_MS; private float mLastSensorData; + private long mTimestamp; + private boolean mLoggingEnabled; public void dumpLocked(PrintWriter pw) { pw.println(" mLastSensorData: " + mLastSensorData); + pw.println(" mTimestamp: " + formatTimestamp(mTimestamp)); + } + + + public void setLoggingEnabled(boolean loggingEnabled) { + if (mLoggingEnabled == loggingEnabled) { + return; + } + mLoggingEnabled = loggingEnabled; } @Override public void onSensorChanged(SensorEvent event) { mLastSensorData = event.values[0]; - if (DEBUG) { + if (mLoggingEnabled) { Slog.d(TAG, "On sensor changed: " + mLastSensorData); } @@ -1369,7 +1442,10 @@ public void onSensorChanged(SensorEvent event) { } long now = SystemClock.uptimeMillis(); - mAmbientFilter.addValue(now, mLastSensorData); + mTimestamp = System.currentTimeMillis(); + if (mAmbientFilter != null) { + mAmbientFilter.addValue(now, mLastSensorData); + } mHandler.removeCallbacks(mInjectSensorEventRunnable); processSensorData(now); @@ -1391,6 +1467,12 @@ public void removeCallbacks() { mHandler.removeCallbacks(mInjectSensorEventRunnable); } + private String formatTimestamp(long time) { + SimpleDateFormat dateFormat = + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS", Locale.US); + return dateFormat.format(new Date(time)); + } + private void processSensorData(long now) { mAmbientLux = mAmbientFilter.getEstimate(now); @@ -1526,5 +1608,4 @@ private int[] parseIntArray(@NonNull String strArray) { return array; } } - } diff --git a/services/core/java/com/android/server/display/WifiDisplayAdapter.java b/services/core/java/com/android/server/display/WifiDisplayAdapter.java index 57323170b32..551df49b550 100644 --- a/services/core/java/com/android/server/display/WifiDisplayAdapter.java +++ b/services/core/java/com/android/server/display/WifiDisplayAdapter.java @@ -91,6 +91,10 @@ final class WifiDisplayAdapter extends DisplayAdapter { private boolean mPendingStatusChangeBroadcast; + private static final String[] RECEIVER_PERMISSIONS_FOR_BROADCAST = { + android.Manifest.permission.ACCESS_FINE_LOCATION, + }; + // Called with SyncRoot lock held. public WifiDisplayAdapter(DisplayManagerService.SyncRoot syncRoot, Context context, Handler handler, Listener listener, @@ -432,7 +436,8 @@ private void handleSendStatusChangeBroadcast() { } // Send protected broadcast about wifi display status to registered receivers. - getContext().sendBroadcastAsUser(intent, UserHandle.ALL); + getContext().createContextAsUser(UserHandle.ALL, 0) + .sendBroadcastWithMultiplePermissions(intent, RECEIVER_PERMISSIONS_FOR_BROADCAST); } private final BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() { diff --git a/services/core/java/com/android/server/locksettings/SyntheticPasswordManager.java b/services/core/java/com/android/server/locksettings/SyntheticPasswordManager.java index d644b1dc6ca..e2943f0a35b 100644 --- a/services/core/java/com/android/server/locksettings/SyntheticPasswordManager.java +++ b/services/core/java/com/android/server/locksettings/SyntheticPasswordManager.java @@ -35,6 +35,7 @@ import android.service.gatekeeper.GateKeeperResponse; import android.service.gatekeeper.IGateKeeperService; import android.util.ArrayMap; +import android.util.ArraySet; import android.util.Slog; import com.android.internal.annotations.VisibleForTesting; @@ -904,7 +905,7 @@ public Set getPendingTokensForUser(int userId) { if (!tokenMap.containsKey(userId)) { return Collections.emptySet(); } - return tokenMap.get(userId).keySet(); + return new ArraySet<>(tokenMap.get(userId).keySet()); } public boolean removePendingToken(long handle, int userId) { diff --git a/services/core/java/com/android/server/media/MediaButtonReceiverHolder.java b/services/core/java/com/android/server/media/MediaButtonReceiverHolder.java index 6e655eafa0e..d1eaaf86d7c 100644 --- a/services/core/java/com/android/server/media/MediaButtonReceiverHolder.java +++ b/services/core/java/com/android/server/media/MediaButtonReceiverHolder.java @@ -18,6 +18,7 @@ import android.annotation.IntDef; import android.annotation.NonNull; +import android.app.BroadcastOptions; import android.app.PendingIntent; import android.content.ComponentName; import android.content.Context; @@ -196,6 +197,8 @@ public boolean send(Context context, KeyEvent keyEvent, String callingPackageNam // TODO: Find a way to also send PID/UID in secure way. mediaButtonIntent.putExtra(Intent.EXTRA_PACKAGE_NAME, callingPackageName); + final BroadcastOptions options = BroadcastOptions.makeBasic(); + options.setBackgroundActivityStartsAllowed(true); if (mPendingIntent != null) { if (DEBUG_KEY_EVENT) { Log.d(TAG, "Sending " + keyEvent + " to the last known PendingIntent " @@ -203,7 +206,8 @@ public boolean send(Context context, KeyEvent keyEvent, String callingPackageNam } try { mPendingIntent.send( - context, resultCode, mediaButtonIntent, onFinishedListener, handler); + context, resultCode, mediaButtonIntent, onFinishedListener, handler, + /* requiredPermission= */null, options.toBundle()); } catch (PendingIntent.CanceledException e) { Log.w(TAG, "Error sending key event to media button receiver " + mPendingIntent, e); return false; @@ -226,7 +230,8 @@ public boolean send(Context context, KeyEvent keyEvent, String callingPackageNam break; default: // Legacy behavior for other cases. - context.sendBroadcastAsUser(mediaButtonIntent, userHandle); + context.sendBroadcastAsUser(mediaButtonIntent, userHandle, + /* requiredPermission= */null, options.toBundle()); } } catch (Exception e) { Log.w(TAG, "Error sending media button to the restored intent " diff --git a/services/core/java/com/android/server/media/MediaSessionRecord.java b/services/core/java/com/android/server/media/MediaSessionRecord.java index 02b7582a863..348e9c122a9 100644 --- a/services/core/java/com/android/server/media/MediaSessionRecord.java +++ b/services/core/java/com/android/server/media/MediaSessionRecord.java @@ -986,6 +986,12 @@ class SessionCb { public boolean sendMediaButton(String packageName, int pid, int uid, boolean asSystemService, KeyEvent keyEvent, int sequenceId, ResultReceiver cb) { try { + if (KeyEvent.isMediaSessionKey(keyEvent.getKeyCode())) { + final String reason = "action=" + KeyEvent.actionToString(keyEvent.getAction()) + + ";code=" + KeyEvent.keyCodeToString(keyEvent.getKeyCode()); + mService.tempAllowlistTargetPkgIfPossible(getUid(), getPackageName(), + pid, uid, packageName, reason); + } if (asSystemService) { mCb.onMediaButton(mContext.getPackageName(), Process.myPid(), Process.SYSTEM_UID, createMediaButtonIntent(keyEvent), sequenceId, cb); @@ -1003,6 +1009,12 @@ public boolean sendMediaButton(String packageName, int pid, int uid, public boolean sendMediaButton(String packageName, int pid, int uid, boolean asSystemService, KeyEvent keyEvent) { try { + if (KeyEvent.isMediaSessionKey(keyEvent.getKeyCode())) { + final String reason = "action=" + KeyEvent.actionToString(keyEvent.getAction()) + + ";code=" + KeyEvent.keyCodeToString(keyEvent.getKeyCode()); + mService.tempAllowlistTargetPkgIfPossible(getUid(), getPackageName(), + pid, uid, packageName, reason); + } if (asSystemService) { mCb.onMediaButton(mContext.getPackageName(), Process.myPid(), Process.SYSTEM_UID, createMediaButtonIntent(keyEvent), 0, null); diff --git a/services/core/java/com/android/server/media/MediaSessionService.java b/services/core/java/com/android/server/media/MediaSessionService.java index 803eb862e0f..1a2743f73b4 100644 --- a/services/core/java/com/android/server/media/MediaSessionService.java +++ b/services/core/java/com/android/server/media/MediaSessionService.java @@ -25,6 +25,7 @@ import static com.android.server.media.MediaKeyDispatcher.isTripleTapOverridden; import android.app.ActivityManager; +import android.app.ActivityManagerInternal; import android.app.INotificationManager; import android.app.KeyguardManager; import android.app.PendingIntent; @@ -114,6 +115,8 @@ public class MediaSessionService extends SystemService implements Monitor { + /* Buffer for delayed delivery of key event */ 50; private static final int MULTI_TAP_TIMEOUT = ViewConfiguration.getMultiPressTimeout(); + private static final int TEMP_ALLOW_WHILE_IN_USE_PERMISSION_IN_FGS_DURATION_MS = 10_000; + private final Context mContext; private final SessionManagerImpl mSessionManagerImpl; private final MessageHandler mHandler = new MessageHandler(); @@ -133,6 +136,7 @@ public class MediaSessionService extends SystemService implements Monitor { private final List mSession2TokensListenerRecords = new ArrayList<>(); + private ActivityManagerInternal mActivityManagerInternal; private KeyguardManager mKeyguardManager; private AudioManagerInternal mAudioManagerInternal; private ContentResolver mContentResolver; @@ -168,6 +172,7 @@ public MediaSessionService(Context context) { public void onStart() { publishBinderService(Context.MEDIA_SESSION_SERVICE, mSessionManagerImpl); Watchdog.getInstance().addMonitor(this); + mActivityManagerInternal = LocalServices.getService(ActivityManagerInternal.class); mKeyguardManager = (KeyguardManager) mContext.getSystemService(Context.KEYGUARD_SERVICE); mAudioManagerInternal = LocalServices.getService(AudioManagerInternal.class); mAudioPlayerStateMonitor = AudioPlayerStateMonitor.getInstance(mContext); @@ -493,6 +498,25 @@ private void enforcePackageName(String packageName, int uid) { throw new IllegalArgumentException("packageName is not owned by the calling process"); } + void tempAllowlistTargetPkgIfPossible(int targetUid, String targetPackage, + int callingPid, int callingUid, String callingPackage, String reason) { + final long token = Binder.clearCallingIdentity(); + try { + enforcePackageName(callingPackage, callingUid); + if (targetUid != callingUid + && mActivityManagerInternal.canAllowWhileInUsePermissionInFgs(callingPid, + callingUid, callingPackage)) { + Log.d(TAG, "tempAllowlistTargetPkgIfPossible callingPackage:" + + callingPackage + " targetPackage:" + targetPackage + + " reason:" + reason); + mActivityManagerInternal.tempAllowWhileInUsePermissionInFgs(targetUid, + TEMP_ALLOW_WHILE_IN_USE_PERMISSION_IN_FGS_DURATION_MS); + } + } finally { + Binder.restoreCallingIdentity(token); + } + } + /** * Checks a caller's authorization to register an IRemoteControlDisplay. * Authorization is granted if one of the following is true: diff --git a/services/core/java/com/android/server/media/MediaShellCommand.java b/services/core/java/com/android/server/media/MediaShellCommand.java index 20df271a1de..b199325798f 100644 --- a/services/core/java/com/android/server/media/MediaShellCommand.java +++ b/services/core/java/com/android/server/media/MediaShellCommand.java @@ -64,7 +64,7 @@ public int onCommand(String cmd) { } if (sThread == null) { Looper.prepare(); - sThread = ActivityThread.systemMain(); + sThread = ActivityThread.currentActivityThread(); Context context = sThread.getSystemContext(); sMediaSessionManager = (MediaSessionManager) context.getSystemService(Context.MEDIA_SESSION_SERVICE); diff --git a/services/core/java/com/android/server/net/NetworkPolicyManagerService.java b/services/core/java/com/android/server/net/NetworkPolicyManagerService.java index 6102706f60b..eeccb73da3a 100644 --- a/services/core/java/com/android/server/net/NetworkPolicyManagerService.java +++ b/services/core/java/com/android/server/net/NetworkPolicyManagerService.java @@ -3092,23 +3092,19 @@ private void enforceSubscriptionPlanAccess(int subId, int callingUid, String cal // Verify they're not lying about package name mAppOps.checkPackage(callingUid, callingPackage); - final SubscriptionManager sm; - final SubscriptionInfo si; final PersistableBundle config; + final TelephonyManager tm; final long token = Binder.clearCallingIdentity(); try { - sm = mContext.getSystemService(SubscriptionManager.class); - si = sm.getActiveSubscriptionInfo(subId); config = mCarrierConfigManager.getConfigForSubId(subId); + tm = mContext.getSystemService(TelephonyManager.class); } finally { Binder.restoreCallingIdentity(token); } - // First check: is caller the CarrierService? - if (si != null) { - if (si.isEmbedded() && sm.canManageSubscription(si, callingPackage)) { - return; - } + // First check: does caller have carrier privilege? + if (tm != null && tm.hasCarrierPrivileges(subId)) { + return; } // Second check: has the CarrierService delegated access? diff --git a/services/core/java/com/android/server/notification/EventConditionProvider.java b/services/core/java/com/android/server/notification/EventConditionProvider.java index a4a94c29abf..25ad9280fa9 100644 --- a/services/core/java/com/android/server/notification/EventConditionProvider.java +++ b/services/core/java/com/android/server/notification/EventConditionProvider.java @@ -271,7 +271,7 @@ private void rescheduleAlarm(long now, long time) { new Intent(ACTION_EVALUATE) .addFlags(Intent.FLAG_RECEIVER_FOREGROUND) .putExtra(EXTRA_TIME, time), - PendingIntent.FLAG_UPDATE_CURRENT); + PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE); alarms.cancel(pendingIntent); if (time == 0 || time < now) { if (DEBUG) Slog.d(TAG, "Not scheduling evaluate: " + (time == 0 ? "no time specified" diff --git a/services/core/java/com/android/server/notification/NotificationManagerService.java b/services/core/java/com/android/server/notification/NotificationManagerService.java index 0e1a24a0fd9..191a4eb41a3 100755 --- a/services/core/java/com/android/server/notification/NotificationManagerService.java +++ b/services/core/java/com/android/server/notification/NotificationManagerService.java @@ -403,6 +403,7 @@ public class NotificationManagerService extends SystemService { private IActivityManager mAm; private ActivityTaskManagerInternal mAtm; private ActivityManager mActivityManager; + private ActivityManagerInternal mAmi; private IPackageManager mPackageManager; private PackageManager mPackageManagerClient; AudioManager mAudioManager; @@ -1876,7 +1877,7 @@ void init(WorkerHandler handler, RankingHandler rankingHandler, DevicePolicyManagerInternal dpm, IUriGrantsManager ugm, UriGrantsManagerInternal ugmInternal, AppOpsManager appOps, UserManager userManager, NotificationHistoryManager historyManager, StatsManager statsManager, - TelephonyManager telephonyManager) { + TelephonyManager telephonyManager, ActivityManagerInternal ami) { mHandler = handler; Resources resources = getContext().getResources(); mMaxPackageEnqueueRate = Settings.Global.getFloat(getContext().getContentResolver(), @@ -1897,6 +1898,7 @@ void init(WorkerHandler handler, RankingHandler rankingHandler, mAlarmManager = (AlarmManager) getContext().getSystemService(Context.ALARM_SERVICE); mCompanionManager = companionManager; mActivityManager = activityManager; + mAmi = ami; mDeviceIdleController = IDeviceIdleController.Stub.asInterface( ServiceManager.getService(Context.DEVICE_IDLE_CONTROLLER)); mDpm = dpm; @@ -2119,7 +2121,8 @@ null, snoozeHelper, new NotificationUsageStats(getContext()), new NotificationHistoryManager(getContext(), handler), mStatsManager = (StatsManager) getContext().getSystemService( Context.STATS_MANAGER), - getContext().getSystemService(TelephonyManager.class)); + getContext().getSystemService(TelephonyManager.class), + LocalServices.getService(ActivityManagerInternal.class)); // register for various Intents IntentFilter filter = new IntentFilter(); @@ -3405,15 +3408,30 @@ public NotificationChannel getNotificationChannelForPackage(String pkg, int uid, pkg, uid, channelId, conversationId, true, includeDeleted); } + // Returns 'true' if the given channel has a notification associated + // with an active foreground service. + private void enforceDeletingChannelHasNoFgService(String pkg, int userId, + String channelId) { + if (mAmi.hasForegroundServiceNotification(pkg, userId, channelId)) { + Slog.w(TAG, "Package u" + userId + "/" + pkg + + " may not delete notification channel '" + + channelId + "' with fg service"); + throw new SecurityException("Not allowed to delete channel " + channelId + + " with a foreground service"); + } + } + @Override public void deleteNotificationChannel(String pkg, String channelId) { checkCallerIsSystemOrSameApp(pkg); final int callingUid = Binder.getCallingUid(); + final int callingUser = UserHandle.getUserId(callingUid); if (NotificationChannel.DEFAULT_CHANNEL_ID.equals(channelId)) { throw new IllegalArgumentException("Cannot delete default channel"); } + enforceDeletingChannelHasNoFgService(pkg, callingUser, channelId); cancelAllNotificationsInt(MY_UID, MY_PID, pkg, channelId, 0, 0, true, - UserHandle.getUserId(callingUid), REASON_CHANNEL_BANNED, null); + callingUser, REASON_CHANNEL_BANNED, null); mPreferencesHelper.deleteNotificationChannel(pkg, callingUid, channelId); mListeners.notifyNotificationChannelChanged(pkg, UserHandle.getUserHandleForUid(callingUid), @@ -3426,19 +3444,23 @@ public void deleteNotificationChannel(String pkg, String channelId) { public void deleteConversationNotificationChannels(String pkg, int uid, String conversationId) { checkCallerIsSystem(); - final int callingUid = Binder.getCallingUid(); List channels = mPreferencesHelper.getNotificationChannelsByConversationId( pkg, uid, conversationId); if (!channels.isEmpty()) { + // Preflight for fg service notifications in these channels: do nothing + // unless they're all eligible + final int appUserId = UserHandle.getUserId(uid); for (NotificationChannel nc : channels) { + final String channelId = nc.getId(); + mAmi.stopForegroundServicesForChannel(pkg, appUserId, channelId); cancelAllNotificationsInt(MY_UID, MY_PID, pkg, nc.getId(), 0, 0, true, - UserHandle.getUserId(callingUid), REASON_CHANNEL_BANNED, null); - mPreferencesHelper.deleteNotificationChannel(pkg, callingUid, nc.getId()); + appUserId, REASON_CHANNEL_BANNED, null); + mPreferencesHelper.deleteNotificationChannel(pkg, uid, channelId); mListeners.notifyNotificationChannelChanged(pkg, - UserHandle.getUserHandleForUid(callingUid), + UserHandle.getUserHandleForUid(uid), mPreferencesHelper.getNotificationChannel( - pkg, callingUid, nc.getId(), true), + pkg, uid, channelId, true), NOTIFICATION_CHANNEL_OR_GROUP_DELETED); } handleSavePolicyFile(); @@ -3469,13 +3491,20 @@ public void deleteNotificationChannelGroup(String pkg, String groupId) { NotificationChannelGroup groupToDelete = mPreferencesHelper.getNotificationChannelGroup(groupId, pkg, callingUid); if (groupToDelete != null) { + // Preflight for allowability + final int userId = UserHandle.getUserId(callingUid); + List groupChannels = groupToDelete.getChannels(); + for (int i = 0; i < groupChannels.size(); i++) { + enforceDeletingChannelHasNoFgService(pkg, userId, + groupChannels.get(i).getId()); + } List deletedChannels = mPreferencesHelper.deleteNotificationChannelGroup(pkg, callingUid, groupId); for (int i = 0; i < deletedChannels.size(); i++) { final NotificationChannel deletedChannel = deletedChannels.get(i); cancelAllNotificationsInt(MY_UID, MY_PID, pkg, deletedChannel.getId(), 0, 0, true, - UserHandle.getUserId(Binder.getCallingUid()), REASON_CHANNEL_BANNED, + userId, REASON_CHANNEL_BANNED, null); mListeners.notifyNotificationChannelChanged(pkg, UserHandle.getUserHandleForUid(callingUid), @@ -5231,7 +5260,8 @@ private void createAutoGroupSummary(int userId, String pkg, String triggeringKey Intent appIntent = getContext().getPackageManager().getLaunchIntentForPackage(pkg); if (appIntent != null) { summaryNotification.contentIntent = PendingIntent.getActivityAsUser( - getContext(), 0, appIntent, 0, null, UserHandle.of(userId)); + getContext(), 0, appIntent, PendingIntent.FLAG_IMMUTABLE, null, + UserHandle.of(userId)); } final StatusBarNotification summarySbn = new StatusBarNotification(adjustedSbn.getPackageName(), @@ -5694,7 +5724,7 @@ void enqueueNotificationInternal(final String pkg, final String opPkg, final int + " trying to post for invalid pkg " + pkg + " in user " + incomingUserId); } - checkRestrictedCategories(notification); + checkRestrictedCategories(pkg, notification); // Fix the notification as best we can. try { @@ -6846,11 +6876,12 @@ void scheduleTimeoutLocked(NotificationRecord record) { final PendingIntent pi = PendingIntent.getBroadcast(getContext(), REQUEST_CODE_TIMEOUT, new Intent(ACTION_NOTIFICATION_TIMEOUT) + .setPackage(PackageManagerService.PLATFORM_PACKAGE_NAME) .setData(new Uri.Builder().scheme(SCHEME_TIMEOUT) .appendPath(record.getKey()).build()) .addFlags(Intent.FLAG_RECEIVER_FOREGROUND) .putExtra(EXTRA_KEY, record.getKey()), - PendingIntent.FLAG_UPDATE_CURRENT); + PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE); mAlarmManager.setExactAndAllowWhileIdle(AlarmManager.ELAPSED_REALTIME_WAKEUP, mSystemClock.elapsedRealtime() + record.getNotification().getTimeoutAfter(), pi); @@ -7153,15 +7184,7 @@ private boolean playVibration(final NotificationRecord record, long[] vibration, // so need to check the notification still valide for vibrate. synchronized (mNotificationLock) { if (mNotificationsByKey.get(record.getKey()) != null) { - // Vibrator checks the appops for the op package, not the caller, - // so we need to add the bypass dnd flag to be heard. it's ok to - // always add this flag here because we've already checked that we can - // bypass dnd - AudioAttributes.Builder aab = - new AudioAttributes.Builder(record.getAudioAttributes()) - .setFlags(FLAG_BYPASS_INTERRUPTION_POLICY); - mVibrator.vibrate(record.getSbn().getUid(), record.getSbn().getOpPkg(), - effect, "Notification (delayed)", aab.build()); + vibrate(record, effect, true); } else { Slog.e(TAG, "No vibration for canceled notification : " + record.getKey()); @@ -7169,8 +7192,7 @@ private boolean playVibration(final NotificationRecord record, long[] vibration, } }).start(); } else { - mVibrator.vibrate(record.getSbn().getUid(), record.getSbn().getPackageName(), - effect, "Notification", record.getAudioAttributes()); + vibrate(record, effect, false); } return true; } finally{ @@ -7178,6 +7200,16 @@ private boolean playVibration(final NotificationRecord record, long[] vibration, } } + private void vibrate(NotificationRecord record, VibrationEffect effect, boolean delayed) { + // We need to vibrate as "android" so we can breakthrough DND. VibratorManagerService + // doesn't have a concept of vibrating on an app's behalf, so add the app information + // to the reason so we can still debug from bugreports + String reason = "Notification (" + record.getSbn().getOpPkg() + " " + + record.getSbn().getUid() + ") " + (delayed ? "(Delayed)" : ""); + mVibrator.vibrate(Process.SYSTEM_UID, PackageManagerService.PLATFORM_PACKAGE_NAME, + effect, reason, record.getAudioAttributes()); + } + private boolean isNotificationForCurrentUser(NotificationRecord record) { final int currentUser; final long token = Binder.clearCallingIdentity(); @@ -8537,7 +8569,7 @@ private boolean isCallerAndroid(String callingPkg, int uid) { * Check if the notification is of a category type that is restricted to system use only, * if so throw SecurityException */ - private void checkRestrictedCategories(final Notification notification) { + private void checkRestrictedCategories(final String pkg, final Notification notification) { try { if (!mPackageManager.hasSystemFeature(PackageManager.FEATURE_AUTOMOTIVE, 0)) { return; @@ -8547,10 +8579,24 @@ private void checkRestrictedCategories(final Notification notification) { + "restrictions check thus the check will be done anyway"); } if (Notification.CATEGORY_CAR_EMERGENCY.equals(notification.category) - || Notification.CATEGORY_CAR_WARNING.equals(notification.category) - || Notification.CATEGORY_CAR_INFORMATION.equals(notification.category)) { + || Notification.CATEGORY_CAR_WARNING.equals(notification.category)) { checkCallerIsSystem(); } + + if (Notification.CATEGORY_CAR_INFORMATION.equals(notification.category)) { + checkCallerIsSystemOrSUW(pkg); + } + } + + private void checkCallerIsSystemOrSUW(final String pkg) { + + final PackageManagerInternal pmi = LocalServices.getService( + PackageManagerInternal.class); + String suwPkg = pmi.getSetupWizardPackageName(); + if (suwPkg != null && suwPkg.equals(pkg)) { + return; + } + checkCallerIsSystem(); } @VisibleForTesting diff --git a/services/core/java/com/android/server/notification/ScheduleConditionProvider.java b/services/core/java/com/android/server/notification/ScheduleConditionProvider.java index 961d3db867e..35170332a07 100644 --- a/services/core/java/com/android/server/notification/ScheduleConditionProvider.java +++ b/services/core/java/com/android/server/notification/ScheduleConditionProvider.java @@ -223,7 +223,7 @@ private void updateAlarm(long now, long time) { new Intent(ACTION_EVALUATE) .addFlags(Intent.FLAG_RECEIVER_FOREGROUND) .putExtra(EXTRA_TIME, time), - PendingIntent.FLAG_UPDATE_CURRENT); + PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE); alarms.cancel(pendingIntent); if (time > now) { if (DEBUG) Slog.d(TAG, String.format("Scheduling evaluate for %s, in %s, now=%s", diff --git a/services/core/java/com/android/server/pm/ApexManager.java b/services/core/java/com/android/server/pm/ApexManager.java index d9d949154ce..1be8390a875 100644 --- a/services/core/java/com/android/server/pm/ApexManager.java +++ b/services/core/java/com/android/server/pm/ApexManager.java @@ -757,12 +757,15 @@ boolean uninstallApex(String apexPackagePath) { void registerApkInApex(AndroidPackage pkg) { synchronized (mLock) { for (ActiveApexInfo aai : mActiveApexInfosCache) { - if (pkg.getBaseCodePath().startsWith(aai.apexDirectory.getAbsolutePath())) { + if (pkg.getBaseCodePath().startsWith( + aai.apexDirectory.getAbsolutePath() + File.separator)) { List apks = mApksInApex.get(aai.apexModuleName); if (apks == null) { apks = Lists.newArrayList(); mApksInApex.put(aai.apexModuleName, apks); } + Slog.i(TAG, "Registering " + pkg.getPackageName() + " as apk-in-apex of " + + aai.apexModuleName); apks.add(pkg.getPackageName()); } } diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index 969fa8282b7..ae0d9de17d7 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -20,6 +20,7 @@ import static android.Manifest.permission.INSTALL_PACKAGES; import static android.Manifest.permission.MANAGE_DEVICE_ADMINS; import static android.Manifest.permission.MANAGE_PROFILE_AND_DEVICE_OWNERS; +import static android.Manifest.permission.QUERY_ALL_PACKAGES; import static android.Manifest.permission.READ_EXTERNAL_STORAGE; import static android.Manifest.permission.REQUEST_DELETE_PACKAGES; import static android.Manifest.permission.SET_HARMFUL_APP_WARNINGS; @@ -28,6 +29,7 @@ import static android.app.AppOpsManager.MODE_DEFAULT; import static android.app.AppOpsManager.MODE_IGNORED; import static android.content.Intent.ACTION_MAIN; +import static android.content.Intent.CATEGORY_BROWSABLE; import static android.content.Intent.CATEGORY_DEFAULT; import static android.content.Intent.CATEGORY_HOME; import static android.content.Intent.EXTRA_LONG_VERSION_CODE; @@ -3671,8 +3673,6 @@ public boolean hasFeature(String feature) { PackageParser.readConfigUseRoundIcon(mContext.getResources()); mServiceStartWithDelay = SystemClock.uptimeMillis() + (60 * 1000L); - - Slog.i(TAG, "Fix for b/169414761 is applied"); } private void enableComponents(String[] components, boolean enable) { @@ -6233,6 +6233,10 @@ private static boolean isRecoverSignatureUpdateNeeded(VersionInfo ver) { @Override public List getAllPackages() { + // Allow iorapd to call this method. + if (Binder.getCallingUid() != Process.IORAPD_UID) { + enforceSystemOrRootOrShell("getAllPackages is limited to privileged callers"); + } final int callingUid = Binder.getCallingUid(); final int callingUserId = UserHandle.getUserId(callingUid); synchronized (mLock) { @@ -6511,14 +6515,10 @@ private ResolveInfo resolveIntentInternal(Intent intent, String resolvedType, in true /*allowDynamicSplits*/); Trace.traceEnd(TRACE_TAG_PACKAGE_MANAGER); - final boolean queryMayBeFiltered = - UserHandle.getAppId(filterCallingUid) >= Process.FIRST_APPLICATION_UID - && !resolveForStart; - final ResolveInfo bestChoice = chooseBestActivity( intent, resolvedType, flags, privateResolveFlags, query, userId, - queryMayBeFiltered); + queryMayBeFiltered(filterCallingUid, resolveForStart)); final boolean nonBrowserOnly = (privateResolveFlags & PackageManagerInternal.RESOLVE_NON_BROWSER_ONLY) != 0; if (nonBrowserOnly && bestChoice != null && bestChoice.handleAllWebDataURI) { @@ -6530,6 +6530,25 @@ private ResolveInfo resolveIntentInternal(Intent intent, String resolvedType, in } } + /** + * Returns whether the query may be filtered to packages which are visible to the caller. + * Filtering occurs except in the following cases: + *
    + *
  • system processes + *
  • applications granted {@link android.Manifest.permission#QUERY_ALL_PACKAGES} + *
  • when querying to start an app + *
+ * + * @param filterCallingUid the UID of the calling application + * @param queryForStart whether query is to start an app + * @return whether filtering may occur + */ + private boolean queryMayBeFiltered(int filterCallingUid, boolean queryForStart) { + return UserHandle.getAppId(filterCallingUid) >= Process.FIRST_APPLICATION_UID + && checkUidPermission(QUERY_ALL_PACKAGES, filterCallingUid) != PERMISSION_GRANTED + && !queryForStart; + } + @Override public ResolveInfo findPersistentPreferredActivity(Intent intent, int userId) { if (!UserHandle.isSameApp(Binder.getCallingUid(), Process.SYSTEM_UID)) { @@ -6895,7 +6914,7 @@ ResolveInfo findPreferredActivityNotLocked(Intent intent, String resolvedType, i boolean removeMatches, boolean debug, int userId) { return findPreferredActivityNotLocked( intent, resolvedType, flags, query, priority, always, removeMatches, debug, userId, - UserHandle.getAppId(Binder.getCallingUid()) >= Process.FIRST_APPLICATION_UID); + queryMayBeFiltered(Binder.getCallingUid(), /* queryForStart= */ false)); } // TODO: handle preferred activities missing while user has amnesia diff --git a/services/core/java/com/android/server/pm/PackageManagerShellCommand.java b/services/core/java/com/android/server/pm/PackageManagerShellCommand.java index 7b4e4d94baa..8ab2b35c6ce 100644 --- a/services/core/java/com/android/server/pm/PackageManagerShellCommand.java +++ b/services/core/java/com/android/server/pm/PackageManagerShellCommand.java @@ -168,6 +168,8 @@ public int onCommand(String cmd) { switch (cmd) { case "path": return runPath(); + case "validate": + return runValidate(); case "dump": return runDump(); case "list": @@ -322,6 +324,17 @@ public int onCommand(String cmd) { return -1; } + private int runValidate() { + final PrintWriter pw = getOutPrintWriter(); + String identifier = getNextArgRequired(); + if ("169414761".equals(identifier)) { + pw.println("applied"); + } else { + pw.println("missing"); + } + return 0; + } + /** * Shows module info * diff --git a/services/core/java/com/android/server/policy/PhoneWindowManager.java b/services/core/java/com/android/server/policy/PhoneWindowManager.java index b0e43a61ecb..d174f3e9071 100644 --- a/services/core/java/com/android/server/policy/PhoneWindowManager.java +++ b/services/core/java/com/android/server/policy/PhoneWindowManager.java @@ -2654,9 +2654,9 @@ private boolean shouldBeHiddenByKeyguard(WindowState win, WindowState imeTarget) /** {@inheritDoc} */ @Override - public StartingSurface addSplashScreen(IBinder appToken, String packageName, int theme, - CompatibilityInfo compatInfo, CharSequence nonLocalizedLabel, int labelRes, int icon, - int logo, int windowFlags, Configuration overrideConfig, int displayId) { + public StartingSurface addSplashScreen(IBinder appToken, int userId, String packageName, + int theme, CompatibilityInfo compatInfo, CharSequence nonLocalizedLabel, int labelRes, + int icon, int logo, int windowFlags, Configuration overrideConfig, int displayId) { if (!SHOW_SPLASH_SCREENS) { return null; } @@ -2683,10 +2683,12 @@ public StartingSurface addSplashScreen(IBinder appToken, String packageName, int if (theme != context.getThemeResId() || labelRes != 0) { try { - context = context.createPackageContext(packageName, CONTEXT_RESTRICTED); + context = context.createPackageContextAsUser(packageName, CONTEXT_RESTRICTED, + UserHandle.of(userId)); context.setTheme(theme); } catch (PackageManager.NameNotFoundException e) { - // Ignore + Slog.w(TAG, "Failed creating package context with package name " + + packageName + " for user " + userId, e); } } diff --git a/services/core/java/com/android/server/policy/WindowManagerPolicy.java b/services/core/java/com/android/server/policy/WindowManagerPolicy.java index 7da39ce263c..e82c871a0d8 100644 --- a/services/core/java/com/android/server/policy/WindowManagerPolicy.java +++ b/services/core/java/com/android/server/policy/WindowManagerPolicy.java @@ -939,9 +939,9 @@ default int getSubWindowLayerFromTypeLw(int type) { * @return The starting surface. * */ - public StartingSurface addSplashScreen(IBinder appToken, String packageName, int theme, - CompatibilityInfo compatInfo, CharSequence nonLocalizedLabel, int labelRes, int icon, - int logo, int windowFlags, Configuration overrideConfig, int displayId); + public StartingSurface addSplashScreen(IBinder appToken, int userId, String packageName, + int theme, CompatibilityInfo compatInfo, CharSequence nonLocalizedLabel, int labelRes, + int icon, int logo, int windowFlags, Configuration overrideConfig, int displayId); /** * Set or clear a window which can behave as the keyguard. diff --git a/services/core/java/com/android/server/stats/pull/StatsPullAtomService.java b/services/core/java/com/android/server/stats/pull/StatsPullAtomService.java index 96b53f0baa3..486de39deeb 100644 --- a/services/core/java/com/android/server/stats/pull/StatsPullAtomService.java +++ b/services/core/java/com/android/server/stats/pull/StatsPullAtomService.java @@ -1565,9 +1565,6 @@ int pullCpuTimePerUidFreqLocked(int atomTag, List pulledData) { // Aggregate times for the same uids. SparseArray aggregated = new SparseArray<>(); mCpuUidFreqTimeReader.readAbsolute((uid, cpuFreqTimeMs) -> { - // For uids known to be aggregated from many entries allow mutating in place to avoid - // many copies. Otherwise, copy before aggregating. - boolean mutateInPlace = false; if (UserHandle.isIsolated(uid)) { // Skip individual isolated uids because they are recycled and quickly removed from // the underlying data source. @@ -1575,26 +1572,18 @@ int pullCpuTimePerUidFreqLocked(int atomTag, List pulledData) { } else if (UserHandle.isSharedAppGid(uid)) { // All shared app gids are accounted together. uid = LAST_SHARED_APPLICATION_GID; - mutateInPlace = true; - } else if (UserHandle.isApp(uid)) { - // Apps are accounted under their app id. + } else { + // Everything else is accounted under their base uid. uid = UserHandle.getAppId(uid); } long[] aggCpuFreqTimeMs = aggregated.get(uid); - if (aggCpuFreqTimeMs != null) { - if (!mutateInPlace) { - aggCpuFreqTimeMs = Arrays.copyOf(aggCpuFreqTimeMs, cpuFreqTimeMs.length); - aggregated.put(uid, aggCpuFreqTimeMs); - } - for (int freqIndex = 0; freqIndex < cpuFreqTimeMs.length; ++freqIndex) { - aggCpuFreqTimeMs[freqIndex] += cpuFreqTimeMs[freqIndex]; - } - } else { - if (mutateInPlace) { - cpuFreqTimeMs = Arrays.copyOf(cpuFreqTimeMs, cpuFreqTimeMs.length); - } - aggregated.put(uid, cpuFreqTimeMs); + if (aggCpuFreqTimeMs == null) { + aggCpuFreqTimeMs = new long[cpuFreqTimeMs.length]; + aggregated.put(uid, aggCpuFreqTimeMs); + } + for (int freqIndex = 0; freqIndex < cpuFreqTimeMs.length; ++freqIndex) { + aggCpuFreqTimeMs[freqIndex] += cpuFreqTimeMs[freqIndex]; } }); @@ -2621,7 +2610,6 @@ private int pullProcStatsLocked(int section, int atomTag, List pulle try { // force procstats to flush & combine old files into one store long lastHighWaterMark = readProcStatsHighWaterMark(section); - List statsFiles = new ArrayList<>(); ProtoOutputStream[] protoStreams = new ProtoOutputStream[MAX_PROCSTATS_SHARDS]; for (int i = 0; i < protoStreams.length; i++) { @@ -2631,7 +2619,7 @@ private int pullProcStatsLocked(int section, int atomTag, List pulle ProcessStats procStats = new ProcessStats(false); // Force processStatsService to aggregate all in-storage and in-memory data. long highWaterMark = processStatsService.getCommittedStatsMerged( - lastHighWaterMark, section, true, statsFiles, procStats); + lastHighWaterMark, section, true, null, procStats); procStats.dumpAggregatedProtoForStatsd(protoStreams, MAX_PROCSTATS_RAW_SHARD_SIZE); for (int i = 0; i < protoStreams.length; i++) { diff --git a/services/core/java/com/android/server/storage/StorageUserConnection.java b/services/core/java/com/android/server/storage/StorageUserConnection.java index 1c29c69239f..af2628971bd 100644 --- a/services/core/java/com/android/server/storage/StorageUserConnection.java +++ b/services/core/java/com/android/server/storage/StorageUserConnection.java @@ -23,6 +23,7 @@ import static com.android.server.storage.StorageSessionController.ExternalStorageServiceException; import android.annotation.MainThread; +import android.annotation.NonNull; import android.annotation.Nullable; import android.content.ComponentName; import android.content.Context; @@ -34,13 +35,12 @@ import android.os.ParcelFileDescriptor; import android.os.ParcelableException; import android.os.RemoteCallback; +import android.os.RemoteException; import android.os.UserHandle; -import android.os.UserManagerInternal; import android.os.storage.StorageManagerInternal; import android.os.storage.StorageVolume; import android.service.storage.ExternalStorageService; import android.service.storage.IExternalStorageService; -import android.text.TextUtils; import android.util.Slog; import com.android.internal.annotations.GuardedBy; @@ -48,14 +48,14 @@ import com.android.server.LocalServices; import java.io.IOException; +import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; import java.util.Map; import java.util.Objects; import java.util.Set; -import java.util.concurrent.CountDownLatch; +import java.util.concurrent.CompletableFuture; import java.util.concurrent.TimeUnit; -import java.util.concurrent.TimeoutException; /** * Controls the lifecycle of the {@link ActiveConnection} to an {@link ExternalStorageService} @@ -66,25 +66,20 @@ public final class StorageUserConnection { private static final int DEFAULT_REMOTE_TIMEOUT_SECONDS = 20; - private final Object mLock = new Object(); + private final Object mSessionsLock = new Object(); private final Context mContext; private final int mUserId; private final StorageSessionController mSessionController; private final ActiveConnection mActiveConnection = new ActiveConnection(); - private final boolean mIsDemoUser; @GuardedBy("mLock") private final Map mSessions = new HashMap<>(); - @GuardedBy("mLock") @Nullable private HandlerThread mHandlerThread; + private final HandlerThread mHandlerThread; public StorageUserConnection(Context context, int userId, StorageSessionController controller) { mContext = Objects.requireNonNull(context); mUserId = Preconditions.checkArgumentNonnegative(userId); mSessionController = controller; - mIsDemoUser = LocalServices.getService(UserManagerInternal.class) - .getUserInfo(userId).isDemo(); - if (mIsDemoUser) { - mHandlerThread = new HandlerThread("StorageUserConnectionThread-" + mUserId); - mHandlerThread.start(); - } + mHandlerThread = new HandlerThread("StorageUserConnectionThread-" + mUserId); + mHandlerThread.start(); } /** @@ -101,13 +96,12 @@ public void startSession(String sessionId, ParcelFileDescriptor pfd, String uppe Objects.requireNonNull(upperPath); Objects.requireNonNull(lowerPath); - prepareRemote(); - synchronized (mLock) { + Session session = new Session(sessionId, upperPath, lowerPath); + synchronized (mSessionsLock) { Preconditions.checkArgument(!mSessions.containsKey(sessionId)); - Session session = new Session(sessionId, upperPath, lowerPath); mSessions.put(sessionId, session); - mActiveConnection.startSessionLocked(session, pfd); } + mActiveConnection.startSession(session, pfd); } /** @@ -121,10 +115,13 @@ public void notifyVolumeStateChanged(String sessionId, StorageVolume vol) Objects.requireNonNull(sessionId); Objects.requireNonNull(vol); - prepareRemote(); - synchronized (mLock) { - mActiveConnection.notifyVolumeStateChangedLocked(sessionId, vol); + synchronized (mSessionsLock) { + if (!mSessions.containsKey(sessionId)) { + Slog.i(TAG, "No session found for sessionId: " + sessionId); + return; + } } + mActiveConnection.notifyVolumeStateChanged(sessionId, vol); } /** @@ -135,7 +132,7 @@ public void notifyVolumeStateChanged(String sessionId, StorageVolume vol) * with {@link #waitForExit}. **/ public Session removeSession(String sessionId) { - synchronized (mLock) { + synchronized (mSessionsLock) { return mSessions.remove(sessionId); } } @@ -153,10 +150,7 @@ public void removeSessionAndWait(String sessionId) throws ExternalStorageService } Slog.i(TAG, "Waiting for session end " + session + " ..."); - prepareRemote(); - synchronized (mLock) { - mActiveConnection.endSessionLocked(session); - } + mActiveConnection.endSession(session); } /** Restarts all available sessions for a user without blocking. @@ -164,7 +158,7 @@ public void removeSessionAndWait(String sessionId) throws ExternalStorageService * Any failures will be ignored. **/ public void resetUserSessions() { - synchronized (mLock) { + synchronized (mSessionsLock) { if (mSessions.isEmpty()) { // Nothing to reset if we have no sessions to restart; we typically // hit this path if the user was consciously shut down. @@ -179,7 +173,7 @@ public void resetUserSessions() { * Removes all sessions, without waiting. */ public void removeAllSessions() { - synchronized (mLock) { + synchronized (mSessionsLock) { Slog.i(TAG, "Removing " + mSessions.size() + " sessions for user: " + mUserId + "..."); mSessions.clear(); } @@ -191,68 +185,54 @@ public void removeAllSessions() { */ public void close() { mActiveConnection.close(); - if (mIsDemoUser) { - mHandlerThread.quit(); - } + mHandlerThread.quit(); } /** Returns all created sessions. */ public Set getAllSessionIds() { - synchronized (mLock) { + synchronized (mSessionsLock) { return new HashSet<>(mSessions.keySet()); } } - private void prepareRemote() throws ExternalStorageServiceException { - try { - waitForLatch(mActiveConnection.bind(), "remote_prepare_user " + mUserId); - } catch (IllegalStateException | TimeoutException e) { - throw new ExternalStorageServiceException("Failed to prepare remote", e); - } - } - - private void waitForLatch(CountDownLatch latch, String reason) throws TimeoutException { - try { - if (!latch.await(DEFAULT_REMOTE_TIMEOUT_SECONDS, TimeUnit.SECONDS)) { - // TODO(b/140025078): Call ActivityManager ANR API? - Slog.wtf(TAG, "Failed to bind to the ExternalStorageService for user " + mUserId); - throw new TimeoutException("Latch wait for " + reason + " elapsed"); - } - } catch (InterruptedException e) { - Thread.currentThread().interrupt(); - throw new IllegalStateException("Latch wait for " + reason + " interrupted"); - } + @FunctionalInterface + interface AsyncStorageServiceCall { + void run(@NonNull IExternalStorageService service, RemoteCallback callback) throws + RemoteException; } private final class ActiveConnection implements AutoCloseable { + private final Object mLock = new Object(); + // Lifecycle connection to the external storage service, needed to unbind. @GuardedBy("mLock") @Nullable private ServiceConnection mServiceConnection; - // True if we are connecting, either bound or binding - // False && mRemote != null means we are connected - // False && mRemote == null means we are neither connecting nor connected - @GuardedBy("mLock") @Nullable private boolean mIsConnecting; - // Binder object representing the external storage service. - // Non-null indicates we are connected - @GuardedBy("mLock") @Nullable private IExternalStorageService mRemote; - // Exception, if any, thrown from #startSessionLocked or #endSessionLocked - // Local variables cannot be referenced from a lambda expression :( so we - // save the exception received in the callback here. Since we guard access - // (and clear the exception state) with the same lock which we hold during - // the entire transaction, there is no risk of race. - @GuardedBy("mLock") @Nullable private ParcelableException mLastException; - // Not guarded by any lock intentionally and non final because we cannot - // reset latches so need to create a new one after one use - private CountDownLatch mLatch; + + // A future that holds the remote interface + @GuardedBy("mLock") + @Nullable private CompletableFuture mRemoteFuture; + + // A list of outstanding futures for async calls, for which we are still waiting + // for a callback. Used to unblock waiters if the service dies. + @GuardedBy("mLock") + private ArrayList> mOutstandingOps = new ArrayList<>(); @Override public void close() { ServiceConnection oldConnection = null; synchronized (mLock) { Slog.i(TAG, "Closing connection for user " + mUserId); - mIsConnecting = false; oldConnection = mServiceConnection; mServiceConnection = null; - mRemote = null; + if (mRemoteFuture != null) { + // Let folks who are waiting for the connection know it ain't gonna happen + mRemoteFuture.cancel(true); + mRemoteFuture = null; + } + // Let folks waiting for callbacks from the remote know it ain't gonna happen + for (CompletableFuture op : mOutstandingOps) { + op.cancel(true); + } + mOutstandingOps.clear(); } if (oldConnection != null) { @@ -266,37 +246,37 @@ public void close() { } } - public boolean isActiveLocked(Session session) { - if (!session.isInitialisedLocked()) { - Slog.i(TAG, "Session not initialised " + session); - return false; - } + private void waitForAsync(AsyncStorageServiceCall asyncCall) throws Exception { + CompletableFuture serviceFuture = connectIfNeeded(); + CompletableFuture opFuture = new CompletableFuture<>(); - if (mRemote == null) { - throw new IllegalStateException("Valid session with inactive connection"); - } - return true; - } + try { + synchronized (mLock) { + mOutstandingOps.add(opFuture); + } + serviceFuture.thenCompose(service -> { + try { + asyncCall.run(service, + new RemoteCallback(result -> setResult(result, opFuture))); + } catch (RemoteException e) { + opFuture.completeExceptionally(e); + } - public void startSessionLocked(Session session, ParcelFileDescriptor fd) - throws ExternalStorageServiceException { - if (!isActiveLocked(session)) { - try { - fd.close(); - } catch (IOException e) { - // ignore + return opFuture; + }).get(DEFAULT_REMOTE_TIMEOUT_SECONDS, TimeUnit.SECONDS); + } finally { + synchronized (mLock) { + mOutstandingOps.remove(opFuture); } - return; } + } - CountDownLatch latch = new CountDownLatch(1); + public void startSession(Session session, ParcelFileDescriptor fd) + throws ExternalStorageServiceException { try { - mRemote.startSession(session.sessionId, + waitForAsync((service, callback) -> service.startSession(session.sessionId, FLAG_SESSION_TYPE_FUSE | FLAG_SESSION_ATTRIBUTE_INDEXABLE, - fd, session.upperPath, session.lowerPath, new RemoteCallback(result -> - setResultLocked(latch, result))); - waitForLatch(latch, "start_session " + session); - maybeThrowExceptionLocked(); + fd, session.upperPath, session.lowerPath, callback)); } catch (Exception e) { throw new ExternalStorageServiceException("Failed to start session: " + session, e); } finally { @@ -308,73 +288,49 @@ fd, session.upperPath, session.lowerPath, new RemoteCallback(result -> } } - public void endSessionLocked(Session session) throws ExternalStorageServiceException { - if (!isActiveLocked(session)) { - // Nothing to end, not started yet - return; - } - - CountDownLatch latch = new CountDownLatch(1); + public void endSession(Session session) throws ExternalStorageServiceException { try { - mRemote.endSession(session.sessionId, new RemoteCallback(result -> - setResultLocked(latch, result))); - waitForLatch(latch, "end_session " + session); - maybeThrowExceptionLocked(); + waitForAsync((service, callback) -> + service.endSession(session.sessionId, callback)); } catch (Exception e) { throw new ExternalStorageServiceException("Failed to end session: " + session, e); } } - public void notifyVolumeStateChangedLocked(String sessionId, StorageVolume vol) throws + + public void notifyVolumeStateChanged(String sessionId, StorageVolume vol) throws ExternalStorageServiceException { - CountDownLatch latch = new CountDownLatch(1); try { - mRemote.notifyVolumeStateChanged(sessionId, vol, new RemoteCallback( - result -> setResultLocked(latch, result))); - waitForLatch(latch, "notify_volume_state_changed " + vol); - maybeThrowExceptionLocked(); + waitForAsync((service, callback) -> + service.notifyVolumeStateChanged(sessionId, vol, callback)); } catch (Exception e) { throw new ExternalStorageServiceException("Failed to notify volume state changed " + "for vol : " + vol, e); } } - private void setResultLocked(CountDownLatch latch, Bundle result) { - mLastException = result.getParcelable(EXTRA_ERROR); - latch.countDown(); - } - - private void maybeThrowExceptionLocked() throws IOException { - if (mLastException != null) { - ParcelableException lastException = mLastException; - mLastException = null; - try { - lastException.maybeRethrow(IOException.class); - } catch (IOException e) { - throw e; - } - throw new RuntimeException(lastException); + private void setResult(Bundle result, CompletableFuture future) { + ParcelableException ex = result.getParcelable(EXTRA_ERROR); + if (ex != null) { + future.completeExceptionally(ex); + } else { + future.complete(null); } } - public CountDownLatch bind() throws ExternalStorageServiceException { + private CompletableFuture connectIfNeeded() throws + ExternalStorageServiceException { ComponentName name = mSessionController.getExternalStorageServiceComponentName(); if (name == null) { // Not ready to bind throw new ExternalStorageServiceException( "Not ready to bind to the ExternalStorageService for user " + mUserId); } - synchronized (mLock) { - if (mRemote != null || mIsConnecting) { - // Connected or connecting (bound or binding) - // Will wait on a latch that will countdown when we connect, unless we are - // connected and the latch has already countdown, yay! - return mLatch; - } // else neither connected nor connecting - - mLatch = new CountDownLatch(1); - mIsConnecting = true; + if (mRemoteFuture != null) { + return mRemoteFuture; + } + CompletableFuture future = new CompletableFuture<>(); mServiceConnection = new ServiceConnection() { @Override public void onServiceConnected(ComponentName name, IBinder service) { @@ -406,16 +362,9 @@ public void onNullBinding(ComponentName name) { private void handleConnection(IBinder service) { synchronized (mLock) { - if (mIsConnecting) { - mRemote = IExternalStorageService.Stub.asInterface(service); - mIsConnecting = false; - mLatch.countDown(); - // Separate thread so we don't block the main thead - return; - } + future.complete( + IExternalStorageService.Stub.asInterface(service)); } - Slog.wtf(TAG, "Connection closed to the ExternalStorageService for user " - + mUserId); } private void handleDisconnection() { @@ -429,32 +378,19 @@ private void handleDisconnection() { }; Slog.i(TAG, "Binding to the ExternalStorageService for user " + mUserId); - if (mIsDemoUser) { - // Schedule on a worker thread for demo user to avoid deadlock - if (mContext.bindServiceAsUser(new Intent().setComponent(name), - mServiceConnection, - Context.BIND_AUTO_CREATE | Context.BIND_IMPORTANT, - mHandlerThread.getThreadHandler(), - UserHandle.of(mUserId))) { - Slog.i(TAG, "Bound to the ExternalStorageService for user " + mUserId); - return mLatch; - } else { - mIsConnecting = false; - throw new ExternalStorageServiceException( - "Failed to bind to the ExternalStorageService for user " + mUserId); - } + // Schedule on a worker thread, because the system server main thread can be + // very busy early in boot. + if (mContext.bindServiceAsUser(new Intent().setComponent(name), + mServiceConnection, + Context.BIND_AUTO_CREATE | Context.BIND_IMPORTANT, + mHandlerThread.getThreadHandler(), + UserHandle.of(mUserId))) { + Slog.i(TAG, "Bound to the ExternalStorageService for user " + mUserId); + mRemoteFuture = future; + return future; } else { - if (mContext.bindServiceAsUser(new Intent().setComponent(name), - mServiceConnection, - Context.BIND_AUTO_CREATE | Context.BIND_IMPORTANT, - UserHandle.of(mUserId))) { - Slog.i(TAG, "Bound to the ExternalStorageService for user " + mUserId); - return mLatch; - } else { - mIsConnecting = false; - throw new ExternalStorageServiceException( - "Failed to bind to the ExternalStorageService for user " + mUserId); - } + throw new ExternalStorageServiceException( + "Failed to bind to the ExternalStorageService for user " + mUserId); } } } @@ -476,10 +412,5 @@ public String toString() { return "[SessionId: " + sessionId + ". UpperPath: " + upperPath + ". LowerPath: " + lowerPath + "]"; } - - @GuardedBy("mLock") - public boolean isInitialisedLocked() { - return !TextUtils.isEmpty(upperPath) && !TextUtils.isEmpty(lowerPath); - } } } diff --git a/services/core/java/com/android/server/wallpaper/WallpaperManagerService.java b/services/core/java/com/android/server/wallpaper/WallpaperManagerService.java index 1300e657333..aaf27d32452 100644 --- a/services/core/java/com/android/server/wallpaper/WallpaperManagerService.java +++ b/services/core/java/com/android/server/wallpaper/WallpaperManagerService.java @@ -39,7 +39,7 @@ import android.app.WallpaperInfo; import android.app.WallpaperManager; import android.app.WallpaperManager.SetWallpaperFlags; -import android.app.admin.DevicePolicyManager; +import android.app.admin.DevicePolicyManagerInternal; import android.app.backup.WallpaperBackupHelper; import android.content.BroadcastReceiver; import android.content.ComponentName; @@ -2861,10 +2861,10 @@ public boolean isSetWallpaperAllowed(String callingPackage) { if (!uidMatchPackage) { return false; // callingPackage was faked. } - - // TODO(b/144048540): DPM needs to take into account the userId, not just the package. - final DevicePolicyManager dpm = mContext.getSystemService(DevicePolicyManager.class); - if (dpm.isDeviceOwnerApp(callingPackage) || dpm.isProfileOwnerApp(callingPackage)) { + DevicePolicyManagerInternal devicePolicyManagerInternal = + LocalServices.getService(DevicePolicyManagerInternal.class); + if (devicePolicyManagerInternal != null && + devicePolicyManagerInternal.isDeviceOrProfileOwnerInCallingUser(callingPackage)) { return true; } final int callingUserId = UserHandle.getCallingUserId(); diff --git a/services/core/java/com/android/server/wm/ActivityMetricsLogger.java b/services/core/java/com/android/server/wm/ActivityMetricsLogger.java index 8f59eef4951..eec2e41eb5d 100644 --- a/services/core/java/com/android/server/wm/ActivityMetricsLogger.java +++ b/services/core/java/com/android/server/wm/ActivityMetricsLogger.java @@ -264,7 +264,7 @@ void setLatestLaunchedActivity(ActivityRecord r) { return; } mLastLaunchedActivity = r; - if (!r.noDisplay) { + if (!r.noDisplay && !r.mDrawn) { if (DEBUG_METRICS) Slog.i(TAG, "Add pending draw " + r); mPendingDrawActivities.add(r); } @@ -546,7 +546,7 @@ void notifyActivityLaunched(@NonNull LaunchingState launchingState, int resultCo + " processSwitch=" + processSwitch + " info=" + info); } - if (launchedActivity.mDrawn) { + if (launchedActivity.mDrawn && launchedActivity.isVisible()) { // Launched activity is already visible. We cannot measure windows drawn delay. abort(info, "launched activity already visible"); return; diff --git a/services/core/java/com/android/server/wm/ActivityStarter.java b/services/core/java/com/android/server/wm/ActivityStarter.java index 7af237b80cf..54ad4acaca4 100644 --- a/services/core/java/com/android/server/wm/ActivityStarter.java +++ b/services/core/java/com/android/server/wm/ActivityStarter.java @@ -2545,7 +2545,11 @@ private void setTargetStackIfNeeded(ActivityRecord intentActivity) { private void resumeTargetStackIfNeeded() { if (mDoResume) { - mRootWindowContainer.resumeFocusedStacksTopActivities(mTargetStack, null, mOptions); + if (mTargetStack.isFocusable()) { + mRootWindowContainer.resumeFocusedStacksTopActivities(mTargetStack, null, mOptions); + } else { + mRootWindowContainer.ensureActivitiesVisible(null, 0, !PRESERVE_WINDOWS); + } } else { ActivityOptions.abort(mOptions); } diff --git a/services/core/java/com/android/server/wm/DisplayContent.java b/services/core/java/com/android/server/wm/DisplayContent.java index adf0b44040d..f1b110de37a 100644 --- a/services/core/java/com/android/server/wm/DisplayContent.java +++ b/services/core/java/com/android/server/wm/DisplayContent.java @@ -1513,6 +1513,13 @@ boolean handleTopActivityLaunchingInDifferentOrientation(@NonNull ActivityRecord } final int rotation = rotationForActivityInDifferentOrientation(r); if (rotation == ROTATION_UNDEFINED) { + // The display rotation won't be changed by current top activity. The client side + // adjustments of previous rotated activity should be cleared earlier. Otherwise if + // the current top is in the same process, it may get the rotated state. The transform + // will be cleared later with transition callback to ensure smooth animation. + if (hasTopFixedRotationLaunchingApp()) { + mFixedRotationLaunchingApp.notifyFixedRotationTransform(false /* enabled */); + } return false; } if (!r.getParent().matchParentBounds()) { @@ -5877,6 +5884,11 @@ public void hideInsets(@WindowInsets.Type.InsetsType int types, boolean fromIme) Slog.w(TAG, "Failed to deliver showInsets", e); } } + + @Override + public boolean getImeRequestedVisibility(@InternalInsetsType int type) { + return getInsetsStateController().getImeSourceProvider().isImeShowing(); + } } /** diff --git a/services/core/java/com/android/server/wm/EnsureActivitiesVisibleHelper.java b/services/core/java/com/android/server/wm/EnsureActivitiesVisibleHelper.java index c4e03f5c65f..aa76a07bc9c 100644 --- a/services/core/java/com/android/server/wm/EnsureActivitiesVisibleHelper.java +++ b/services/core/java/com/android/server/wm/EnsureActivitiesVisibleHelper.java @@ -16,8 +16,6 @@ package com.android.server.wm; -import static android.app.WindowConfiguration.WINDOWING_MODE_FREEFORM; - import static com.android.server.wm.ActivityStack.TAG_VISIBILITY; import static com.android.server.wm.ActivityTaskManagerDebugConfig.DEBUG_VISIBILITY; @@ -174,12 +172,7 @@ private void setActivityVisibilityState(ActivityRecord r, ActivityRecord startin } final int windowingMode = mContiner.getWindowingMode(); - if (windowingMode == WINDOWING_MODE_FREEFORM) { - // The visibility of tasks and the activities they contain in freeform stack are - // determined individually unlike other stacks where the visibility or fullscreen - // status of an activity in a previous task affects other. - mBehindFullscreenActivity = !mContainerShouldBeVisible; - } else if (!mBehindFullscreenActivity && mContiner.isActivityTypeHome() + if (!mBehindFullscreenActivity && mContiner.isActivityTypeHome() && r.isRootOfTask()) { if (DEBUG_VISIBILITY) Slog.v(TAG_VISIBILITY, "Home task: at " + mContiner + " stackShouldBeVisible=" + mContainerShouldBeVisible diff --git a/services/core/java/com/android/server/wm/ImeInsetsSourceProvider.java b/services/core/java/com/android/server/wm/ImeInsetsSourceProvider.java index 5ab48e158c4..d9dde754b73 100644 --- a/services/core/java/com/android/server/wm/ImeInsetsSourceProvider.java +++ b/services/core/java/com/android/server/wm/ImeInsetsSourceProvider.java @@ -35,6 +35,7 @@ class ImeInsetsSourceProvider extends InsetsSourceProvider { private InsetsControlTarget mImeTargetFromIme; private Runnable mShowImeRunner; private boolean mIsImeLayoutDrawn; + private boolean mImeShowing; ImeInsetsSourceProvider(InsetsSource source, InsetsStateController stateController, DisplayContent displayContent) { @@ -74,6 +75,7 @@ void scheduleShowImePostLayout(InsetsControlTarget imeTarget) { ProtoLog.i(WM_DEBUG_IME, "call showInsets(ime) on %s", target.getWindow() != null ? target.getWindow().getName() : ""); + setImeShowing(true); target.showInsets(WindowInsets.Type.ime(), true /* fromIme */); if (target != mImeTargetFromIme && mImeTargetFromIme != null) { ProtoLog.w(WM_DEBUG_IME, @@ -147,11 +149,29 @@ boolean isImeTargetFromDisplayContentAndImeSame() { @Override public void dump(PrintWriter pw, String prefix) { super.dump(pw, prefix); + pw.print(prefix); + pw.print("mImeShowing="); + pw.print(mImeShowing); if (mImeTargetFromIme != null) { - pw.print(prefix); - pw.print("showImePostLayout pending for mImeTargetFromIme="); + pw.print(" showImePostLayout pending for mImeTargetFromIme="); pw.print(mImeTargetFromIme); - pw.println(); } + pw.println(); + } + + /** + * Sets whether the IME is currently supposed to be showing according to + * InputMethodManagerService. + */ + public void setImeShowing(boolean imeShowing) { + mImeShowing = imeShowing; + } + + /** + * Returns whether the IME is currently supposed to be showing according to + * InputMethodManagerService. + */ + public boolean isImeShowing() { + return mImeShowing; } } diff --git a/services/core/java/com/android/server/wm/InsetsControlTarget.java b/services/core/java/com/android/server/wm/InsetsControlTarget.java index 5e7ed3f80e4..2af2a979233 100644 --- a/services/core/java/com/android/server/wm/InsetsControlTarget.java +++ b/services/core/java/com/android/server/wm/InsetsControlTarget.java @@ -38,6 +38,13 @@ default WindowState getWindow() { return null; } + /** + * @return The requested visibility of this target. + */ + default boolean getImeRequestedVisibility(@InsetsState.InternalInsetsType int type) { + return InsetsState.getDefaultVisibility(type); + } + /** * @return The requested {@link InsetsState} of this target. */ diff --git a/services/core/java/com/android/server/wm/InsetsPolicy.java b/services/core/java/com/android/server/wm/InsetsPolicy.java index be1d0fc0ecc..d0012d0faf0 100644 --- a/services/core/java/com/android/server/wm/InsetsPolicy.java +++ b/services/core/java/com/android/server/wm/InsetsPolicy.java @@ -27,6 +27,7 @@ import static android.view.SyncRtSurfaceTransactionApplier.applyParams; import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_FORCE_SHOW_STATUS_BAR; import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_STATUS_FORCE_SHOW_NAVIGATION; +import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_STARTING; import android.annotation.Nullable; import android.app.StatusBarManager; @@ -128,6 +129,9 @@ void setRemoteInsetsControllerControlsSystemBars(boolean controlsSystemBars) { /** Updates the target which can control system bars. */ void updateBarControlTarget(@Nullable WindowState focusedWin) { + if (focusedWin != null && (focusedWin.mAttrs.type == TYPE_APPLICATION_STARTING)) { + return; + } if (mFocusedWin != focusedWin){ abortTransient(); } diff --git a/services/core/java/com/android/server/wm/InsetsSourceProvider.java b/services/core/java/com/android/server/wm/InsetsSourceProvider.java index 9fdfbd0a09d..ca83d541a5e 100644 --- a/services/core/java/com/android/server/wm/InsetsSourceProvider.java +++ b/services/core/java/com/android/server/wm/InsetsSourceProvider.java @@ -279,7 +279,7 @@ void updateControlForTarget(@Nullable InsetsControlTarget target, boolean force) } mAdapter = new ControlAdapter(); if (getSource().getType() == ITYPE_IME) { - setClientVisible(InsetsState.getDefaultVisibility(mSource.getType())); + setClientVisible(target.getImeRequestedVisibility(mSource.getType())); } final Transaction t = mDisplayContent.getPendingTransaction(); mWin.startAnimation(t, mAdapter, !mClientVisible /* hidden */, diff --git a/services/core/java/com/android/server/wm/SplashScreenStartingData.java b/services/core/java/com/android/server/wm/SplashScreenStartingData.java index 726b7dac693..f77df2fc06c 100644 --- a/services/core/java/com/android/server/wm/SplashScreenStartingData.java +++ b/services/core/java/com/android/server/wm/SplashScreenStartingData.java @@ -53,8 +53,8 @@ class SplashScreenStartingData extends StartingData { @Override StartingSurface createStartingSurface(ActivityRecord activity) { - return mService.mPolicy.addSplashScreen(activity.token, mPkg, mTheme, mCompatInfo, - mNonLocalizedLabel, mLabelRes, mIcon, mLogo, mWindowFlags, + return mService.mPolicy.addSplashScreen(activity.token, activity.mUserId, mPkg, mTheme, + mCompatInfo, mNonLocalizedLabel, mLabelRes, mIcon, mLogo, mWindowFlags, mMergedOverrideConfiguration, activity.getDisplayContent().getDisplayId()); } } diff --git a/services/core/java/com/android/server/wm/Task.java b/services/core/java/com/android/server/wm/Task.java index db3c74fc94a..b19b8c1ce10 100644 --- a/services/core/java/com/android/server/wm/Task.java +++ b/services/core/java/com/android/server/wm/Task.java @@ -4597,11 +4597,11 @@ boolean setForceHidden(int flags, boolean set) { } final boolean wasHidden = isForceHidden(); mForceHiddenFlags = newFlags; - if (wasHidden && isFocusableAndVisible()) { - // The change in force-hidden state will change visibility without triggering a stack - // order change, so we should reset the preferred top focusable stack to ensure it's not - // used if a new activity is started from this task. - getDisplayArea().resetPreferredTopFocusableStackIfBelow(this); + if (wasHidden != isForceHidden() && isTopActivityFocusable()) { + // The change in force-hidden state will change visibility without triggering a root + // task order change, so we should reset the preferred top focusable root task to ensure + // it's not used if a new activity is started from this task. + getDisplayArea().resetPreferredTopFocusableRootTaskIfNeeded(this); } return true; } diff --git a/services/core/java/com/android/server/wm/TaskDisplayArea.java b/services/core/java/com/android/server/wm/TaskDisplayArea.java index 79f3b8340b2..676d7e50714 100644 --- a/services/core/java/com/android/server/wm/TaskDisplayArea.java +++ b/services/core/java/com/android/server/wm/TaskDisplayArea.java @@ -773,9 +773,10 @@ void onStackRemoved(ActivityStack stack) { onStackOrderChanged(stack); } - void resetPreferredTopFocusableStackIfBelow(Task task) { + /** Reset the mPreferredTopFocusableRootTask if it is or below the given task. */ + void resetPreferredTopFocusableRootTaskIfNeeded(Task task) { if (mPreferredTopFocusableStack != null - && mPreferredTopFocusableStack.compareTo(task) < 0) { + && mPreferredTopFocusableStack.compareTo(task) <= 0) { mPreferredTopFocusableStack = null; } } diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java index 56c52a4948d..7ab99ace412 100644 --- a/services/core/java/com/android/server/wm/WindowManagerService.java +++ b/services/core/java/com/android/server/wm/WindowManagerService.java @@ -7647,6 +7647,9 @@ public void hideIme(IBinder imeTargetWindowToken, int displayId) { dc.mInputMethodControlTarget.hideInsets( WindowInsets.Type.ime(), true /* fromIme */); } + if (dc != null) { + dc.getInsetsStateController().getImeSourceProvider().setImeShowing(false); + } } } diff --git a/services/core/java/com/android/server/wm/WindowProcessController.java b/services/core/java/com/android/server/wm/WindowProcessController.java index df49ac71334..e6a35f1267b 100644 --- a/services/core/java/com/android/server/wm/WindowProcessController.java +++ b/services/core/java/com/android/server/wm/WindowProcessController.java @@ -455,15 +455,13 @@ public void setAllowBackgroundActivityStarts(boolean allowBackgroundActivityStar mAllowBackgroundActivityStarts = allowBackgroundActivityStarts; } - boolean areBackgroundActivityStartsAllowed() { - // allow if the whitelisting flag was explicitly set - if (mAllowBackgroundActivityStarts) { - if (DEBUG_ACTIVITY_STARTS) { - Slog.d(TAG, "[WindowProcessController(" + mPid - + ")] Activity start allowed: mAllowBackgroundActivityStarts = true"); - } - return true; + public boolean areBackgroundActivityStartsAllowedByGracePeriodSafe() { + synchronized (mAtm.mGlobalLockWithoutBoost) { + return areBackgroundActivityStartsAllowedByGracePeriod(); } + } + + boolean areBackgroundActivityStartsAllowedByGracePeriod() { // allow if any activity in the caller has either started or finished very recently, and // it must be started or finished after last stop app switches time. final long now = SystemClock.uptimeMillis(); @@ -485,8 +483,24 @@ boolean areBackgroundActivityStartsAllowed() { + ACTIVITY_BG_START_GRACE_PERIOD_MS + "ms grace period but also within stop app switch window"); } + } + return false; + } + + boolean areBackgroundActivityStartsAllowed() { + // allow if the whitelisting flag was explicitly set + if (mAllowBackgroundActivityStarts) { + if (DEBUG_ACTIVITY_STARTS) { + Slog.d(TAG, "[WindowProcessController(" + mPid + + ")] Activity start allowed: mAllowBackgroundActivityStarts = true"); + } + return true; + } + if (areBackgroundActivityStartsAllowedByGracePeriod()) { + return true; } + // allow if the proc is instrumenting with background activity starts privs if (mInstrumentingWithBackgroundActivityStartPrivileges) { if (DEBUG_ACTIVITY_STARTS) { diff --git a/services/core/java/com/android/server/wm/WindowToken.java b/services/core/java/com/android/server/wm/WindowToken.java index d86f6c998ba..9b1526e9b96 100644 --- a/services/core/java/com/android/server/wm/WindowToken.java +++ b/services/core/java/com/android/server/wm/WindowToken.java @@ -622,11 +622,6 @@ void finishFixedRotationTransform(Runnable applyDisplayRotation) { state.mIsTransforming = false; if (applyDisplayRotation != null) { applyDisplayRotation.run(); - } else { - // The display will not rotate to the rotation of this container, let's cancel them. - for (int i = state.mAssociatedTokens.size() - 1; i >= 0; i--) { - state.mAssociatedTokens.get(i).cancelFixedRotationTransform(); - } } // The state is cleared at the end, because it is used to indicate that other windows can // use seamless rotation when applying rotation to display. @@ -634,11 +629,15 @@ void finishFixedRotationTransform(Runnable applyDisplayRotation) { final WindowToken token = state.mAssociatedTokens.get(i); token.mFixedRotationTransformState = null; token.notifyFixedRotationTransform(false /* enabled */); + if (applyDisplayRotation == null) { + // Notify cancellation because the display does not change rotation. + token.cancelFixedRotationTransform(); + } } } /** Notifies application side to enable or disable the rotation adjustment of display info. */ - private void notifyFixedRotationTransform(boolean enabled) { + void notifyFixedRotationTransform(boolean enabled) { FixedRotationAdjustments adjustments = null; // A token may contain windows of the same processes or different processes. The list is // used to avoid sending the same adjustments to a process multiple times. @@ -682,7 +681,6 @@ private void cancelFixedRotationTransform() { // The window may be detached or detaching. return; } - notifyFixedRotationTransform(false /* enabled */); final int originalRotation = getWindowConfiguration().getRotation(); onConfigurationChanged(parent.getConfiguration()); onCancelFixedRotationTransform(originalRotation); diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java index b8a20ed4fe5..ae354a953ee 100644 --- a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java +++ b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java @@ -12839,6 +12839,26 @@ public void resetOp(int op, String packageName, @UserIdInt int userId) { ? AppOpsManager.MODE_ALLOWED : AppOpsManager.opToDefaultMode(AppOpsManager.OP_INTERACT_ACROSS_PROFILES); } + + public boolean isDeviceOrProfileOwnerInCallingUser(String packageName) { + return isDeviceOwnerInCallingUser(packageName) + || isProfileOwnerInCallingUser(packageName); + } + + private boolean isDeviceOwnerInCallingUser(String packageName) { + final ComponentName deviceOwnerInCallingUser = + DevicePolicyManagerService.this.getDeviceOwnerComponent( + /* callingUserOnly= */ true); + return deviceOwnerInCallingUser != null + && packageName.equals(deviceOwnerInCallingUser.getPackageName()); + } + + private boolean isProfileOwnerInCallingUser(String packageName) { + final ComponentName profileOwnerInCallingUser = + getProfileOwnerAsUser(UserHandle.getCallingUserId()); + return profileOwnerInCallingUser != null + && packageName.equals(profileOwnerInCallingUser.getPackageName()); + } } private Intent createShowAdminSupportIntent(ComponentName admin, int userId) { @@ -14461,15 +14481,17 @@ public boolean isBackupServiceEnabled(ComponentName admin) { } enforceProfileOrDeviceOwner(admin); - synchronized (getLockObject()) { - try { - IBackupManager ibm = mInjector.getIBackupManager(); - return ibm != null && ibm.isBackupServiceActive( - mInjector.userHandleGetCallingUserId()); - } catch (RemoteException e) { - throw new IllegalStateException("Failed requesting backup service state.", e); + final int userId = mInjector.userHandleGetCallingUserId(); + return mInjector.binderWithCleanCallingIdentity(() -> { + synchronized (getLockObject()) { + try { + IBackupManager ibm = mInjector.getIBackupManager(); + return ibm != null && ibm.isBackupServiceActive(userId); + } catch (RemoteException e) { + throw new IllegalStateException("Failed requesting backup service state.", e); + } } - } + }); } @Override diff --git a/services/tests/mockingservicestests/src/com/android/server/am/CachedAppOptimizerTest.java b/services/tests/mockingservicestests/src/com/android/server/am/CachedAppOptimizerTest.java index 96a44a46bba..8d245ce4c64 100644 --- a/services/tests/mockingservicestests/src/com/android/server/am/CachedAppOptimizerTest.java +++ b/services/tests/mockingservicestests/src/com/android/server/am/CachedAppOptimizerTest.java @@ -134,11 +134,11 @@ private ProcessRecord makeProcessRecord(int pid, int uid, int packageUid, String ApplicationInfo ai = new ApplicationInfo(); ai.packageName = packageName; ProcessRecord app = new ProcessRecord(mAms, ai, processName, uid); - app.pid = pid; + app.pid = app.mPidForCompact = pid; app.info.uid = packageUid; // Exact value does not mater, it can be any state for which compaction is allowed. app.setProcState = PROCESS_STATE_BOUND_FOREGROUND_SERVICE; - app.setAdj = 905; + app.setAdj = app.mSetAdjForCompact = 905; return app; } diff --git a/services/tests/servicestests/src/com/android/server/display/DisplayModeDirectorTest.java b/services/tests/servicestests/src/com/android/server/display/DisplayModeDirectorTest.java index 43a396d8e5d..413c5ceff48 100644 --- a/services/tests/servicestests/src/com/android/server/display/DisplayModeDirectorTest.java +++ b/services/tests/servicestests/src/com/android/server/display/DisplayModeDirectorTest.java @@ -18,6 +18,8 @@ import static org.junit.Assert.assertTrue; import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; +import static org.mockito.internal.verification.VerificationModeFactory.times; import android.content.Context; import android.os.Handler; @@ -302,4 +304,375 @@ public void testBrightnessObserverCallWithRefreshRateSettings() { verifyBrightnessObserverCall(director, 90, 90, 0, 90, 90); verifyBrightnessObserverCall(director, 120, 90, 0, 120, 90); } + + @Test + public void testBrightnessObserverGetsUpdatedRefreshRatesForZone() { + DisplayModeDirector director = + createDirectorFromRefreshRateArray(new float[] {60.f, 90.f}, /* baseModeId= */ 0); + SensorManager sensorManager = createMockSensorManager(createLightSensor()); + + final int initialRefreshRate = 60; + mInjector.getDeviceConfig().setRefreshRateInLowZone(initialRefreshRate); + director.start(sensorManager); + assertThat(director.getBrightnessObserver().getRefreshRateInLowZone()) + .isEqualTo(initialRefreshRate); + + final int updatedRefreshRate = 90; + mInjector.getDeviceConfig().setRefreshRateInLowZone(updatedRefreshRate); + // Need to wait for the property change to propagate to the main thread. + waitForIdleSync(); + assertThat(director.getBrightnessObserver().getRefreshRateInLowZone()) + .isEqualTo(updatedRefreshRate); + } + + @Test + public void testBrightnessObserverThresholdsInZone() { + DisplayModeDirector director = + createDirectorFromRefreshRateArray(new float[] {60.f, 90.f}, /* baseModeId= */ 0); + SensorManager sensorManager = createMockSensorManager(createLightSensor()); + + final int[] initialDisplayThresholds = { 10 }; + final int[] initialAmbientThresholds = { 20 }; + + final FakeDeviceConfig config = mInjector.getDeviceConfig(); + config.setLowDisplayBrightnessThresholds(initialDisplayThresholds); + config.setLowAmbientBrightnessThresholds(initialAmbientThresholds); + director.start(sensorManager); + + assertThat(director.getBrightnessObserver().getLowDisplayBrightnessThresholds()) + .isEqualTo(initialDisplayThresholds); + assertThat(director.getBrightnessObserver().getLowAmbientBrightnessThresholds()) + .isEqualTo(initialAmbientThresholds); + + final int[] updatedDisplayThresholds = { 9, 14 }; + final int[] updatedAmbientThresholds = { -1, 19 }; + config.setLowDisplayBrightnessThresholds(updatedDisplayThresholds); + config.setLowAmbientBrightnessThresholds(updatedAmbientThresholds); + // Need to wait for the property change to propagate to the main thread. + waitForIdleSync(); + assertThat(director.getBrightnessObserver().getLowDisplayBrightnessThresholds()) + .isEqualTo(updatedDisplayThresholds); + assertThat(director.getBrightnessObserver().getLowAmbientBrightnessThresholds()) + .isEqualTo(updatedAmbientThresholds); + } + + @Test + public void testLockFpsForLowZone() throws Exception { + DisplayModeDirector director = + createDirectorFromRefreshRateArray(new float[] {60.f, 90.f}, 0); + setPeakRefreshRate(90); + director.getSettingsObserver().setDefaultRefreshRate(90); + director.getBrightnessObserver().setDefaultDisplayState(Display.STATE_ON); + + final FakeDeviceConfig config = mInjector.getDeviceConfig(); + config.setRefreshRateInLowZone(90); + config.setLowDisplayBrightnessThresholds(new int[] { 10 }); + config.setLowAmbientBrightnessThresholds(new int[] { 20 }); + + Sensor lightSensor = createLightSensor(); + SensorManager sensorManager = createMockSensorManager(lightSensor); + + director.start(sensorManager); + + ArgumentCaptor listenerCaptor = + ArgumentCaptor.forClass(SensorEventListener.class); + Mockito.verify(sensorManager, Mockito.timeout(TimeUnit.SECONDS.toMillis(1))) + .registerListener( + listenerCaptor.capture(), + eq(lightSensor), + anyInt(), + any(Handler.class)); + SensorEventListener listener = listenerCaptor.getValue(); + + setBrightness(10); + // Sensor reads 20 lux, + listener.onSensorChanged(TestUtils.createSensorEvent(lightSensor, 20 /*lux*/)); + + Vote vote = director.getVote(Display.DEFAULT_DISPLAY, PRIORITY_FLICKER); + assertVoteForRefreshRateLocked(vote, 90 /*fps*/); + + setBrightness(125); + // Sensor reads 1000 lux, + listener.onSensorChanged(TestUtils.createSensorEvent(lightSensor, 1000 /*lux*/)); + + vote = director.getVote(Display.DEFAULT_DISPLAY, PRIORITY_FLICKER); + assertThat(vote).isNull(); + } + + @Test + public void testLockFpsForHighZone() throws Exception { + DisplayModeDirector director = + createDirectorFromRefreshRateArray(new float[] {60.f, 90.f}, 0); + setPeakRefreshRate(90 /*fps*/); + director.getSettingsObserver().setDefaultRefreshRate(90); + director.getBrightnessObserver().setDefaultDisplayState(Display.STATE_ON); + + final FakeDeviceConfig config = mInjector.getDeviceConfig(); + config.setRefreshRateInHighZone(60); + config.setHighDisplayBrightnessThresholds(new int[] { 255 }); + config.setHighAmbientBrightnessThresholds(new int[] { 8000 }); + + Sensor lightSensor = createLightSensor(); + SensorManager sensorManager = createMockSensorManager(lightSensor); + + director.start(sensorManager); + + ArgumentCaptor listenerCaptor = + ArgumentCaptor.forClass(SensorEventListener.class); + Mockito.verify(sensorManager, Mockito.timeout(TimeUnit.SECONDS.toMillis(1))) + .registerListener( + listenerCaptor.capture(), + eq(lightSensor), + anyInt(), + any(Handler.class)); + SensorEventListener listener = listenerCaptor.getValue(); + + setBrightness(100); + // Sensor reads 2000 lux, + listener.onSensorChanged(TestUtils.createSensorEvent(lightSensor, 2000)); + + Vote vote = director.getVote(Display.DEFAULT_DISPLAY, PRIORITY_FLICKER); + assertThat(vote).isNull(); + + setBrightness(255); + // Sensor reads 9000 lux, + listener.onSensorChanged(TestUtils.createSensorEvent(lightSensor, 9000)); + + vote = director.getVote(Display.DEFAULT_DISPLAY, PRIORITY_FLICKER); + assertVoteForRefreshRateLocked(vote, 60 /*fps*/); + } + + @Test + public void testSensorRegistration() { + DisplayModeDirector director = + createDirectorFromRefreshRateArray(new float[] {60.f, 90.f}, 0); + setPeakRefreshRate(90 /*fps*/); + director.getSettingsObserver().setDefaultRefreshRate(90); + director.getBrightnessObserver().setDefaultDisplayState(Display.STATE_ON); + + Sensor lightSensor = createLightSensor(); + SensorManager sensorManager = createMockSensorManager(lightSensor); + + director.start(sensorManager); + ArgumentCaptor listenerCaptor = + ArgumentCaptor.forClass(SensorEventListener.class); + Mockito.verify(sensorManager, Mockito.timeout(TimeUnit.SECONDS.toMillis(1))) + .registerListener( + listenerCaptor.capture(), + eq(lightSensor), + anyInt(), + any(Handler.class)); + + // Dispaly state changed from On to Doze + director.getBrightnessObserver().setDefaultDisplayState(Display.STATE_DOZE); + Mockito.verify(sensorManager) + .unregisterListener(listenerCaptor.capture()); + + // Dispaly state changed from Doze to On + director.getBrightnessObserver().setDefaultDisplayState(Display.STATE_ON); + Mockito.verify(sensorManager, times(2)) + .registerListener( + listenerCaptor.capture(), + eq(lightSensor), + anyInt(), + any(Handler.class)); + + } + + private void assertVoteForRefreshRateLocked(Vote vote, float refreshRate) { + assertThat(vote).isNotNull(); + final DisplayModeDirector.RefreshRateRange expectedRange = + new DisplayModeDirector.RefreshRateRange(refreshRate, refreshRate); + assertThat(vote.refreshRateRange).isEqualTo(expectedRange); + } + + private static class FakeDeviceConfig extends FakeDeviceConfigInterface { + @Override + public String getProperty(String namespace, String name) { + Preconditions.checkArgument(DeviceConfig.NAMESPACE_DISPLAY_MANAGER.equals(namespace)); + return super.getProperty(namespace, name); + } + + @Override + public void addOnPropertiesChangedListener( + String namespace, + Executor executor, + DeviceConfig.OnPropertiesChangedListener listener) { + Preconditions.checkArgument(DeviceConfig.NAMESPACE_DISPLAY_MANAGER.equals(namespace)); + super.addOnPropertiesChangedListener(namespace, executor, listener); + } + + void setRefreshRateInLowZone(int fps) { + putPropertyAndNotify( + DeviceConfig.NAMESPACE_DISPLAY_MANAGER, KEY_REFRESH_RATE_IN_LOW_ZONE, + String.valueOf(fps)); + } + + void setLowDisplayBrightnessThresholds(int[] brightnessThresholds) { + String thresholds = toPropertyValue(brightnessThresholds); + + if (DEBUG) { + Slog.e(TAG, "Brightness Thresholds = " + thresholds); + } + + putPropertyAndNotify( + DeviceConfig.NAMESPACE_DISPLAY_MANAGER, + KEY_FIXED_REFRESH_RATE_LOW_DISPLAY_BRIGHTNESS_THRESHOLDS, + thresholds); + } + + void setLowAmbientBrightnessThresholds(int[] ambientThresholds) { + String thresholds = toPropertyValue(ambientThresholds); + + if (DEBUG) { + Slog.e(TAG, "Ambient Thresholds = " + thresholds); + } + + putPropertyAndNotify( + DeviceConfig.NAMESPACE_DISPLAY_MANAGER, + KEY_FIXED_REFRESH_RATE_LOW_AMBIENT_BRIGHTNESS_THRESHOLDS, + thresholds); + } + + void setRefreshRateInHighZone(int fps) { + putPropertyAndNotify( + DeviceConfig.NAMESPACE_DISPLAY_MANAGER, KEY_REFRESH_RATE_IN_HIGH_ZONE, + String.valueOf(fps)); + } + + void setHighDisplayBrightnessThresholds(int[] brightnessThresholds) { + String thresholds = toPropertyValue(brightnessThresholds); + + if (DEBUG) { + Slog.e(TAG, "Brightness Thresholds = " + thresholds); + } + + putPropertyAndNotify( + DeviceConfig.NAMESPACE_DISPLAY_MANAGER, + KEY_FIXED_REFRESH_RATE_HIGH_DISPLAY_BRIGHTNESS_THRESHOLDS, + thresholds); + } + + void setHighAmbientBrightnessThresholds(int[] ambientThresholds) { + String thresholds = toPropertyValue(ambientThresholds); + + if (DEBUG) { + Slog.e(TAG, "Ambient Thresholds = " + thresholds); + } + + putPropertyAndNotify( + DeviceConfig.NAMESPACE_DISPLAY_MANAGER, + KEY_FIXED_REFRESH_RATE_HIGH_AMBIENT_BRIGHTNESS_THRESHOLDS, + thresholds); + } + + @NonNull + private static String toPropertyValue(@NonNull int[] intArray) { + return Arrays.stream(intArray) + .mapToObj(Integer::toString) + .collect(Collectors.joining(",")); + } + } + + private void setBrightness(int brightness) { + Settings.System.putInt(mContext.getContentResolver(), Settings.System.SCREEN_BRIGHTNESS, + brightness); + mInjector.notifyBrightnessChanged(); + waitForIdleSync(); + } + + private void setPeakRefreshRate(float fps) { + Settings.System.putFloat(mContext.getContentResolver(), Settings.System.PEAK_REFRESH_RATE, + fps); + mInjector.notifyPeakRefreshRateChanged(); + waitForIdleSync(); + } + + private static SensorManager createMockSensorManager(Sensor... sensors) { + SensorManager sensorManager = Mockito.mock(SensorManager.class); + when(sensorManager.getSensorList(anyInt())).then((invocation) -> { + List requestedSensors = new ArrayList<>(); + int type = invocation.getArgument(0); + for (Sensor sensor : sensors) { + if (sensor.getType() == type || type == Sensor.TYPE_ALL) { + requestedSensors.add(sensor); + } + } + return requestedSensors; + }); + + when(sensorManager.getDefaultSensor(anyInt())).then((invocation) -> { + int type = invocation.getArgument(0); + for (Sensor sensor : sensors) { + if (sensor.getType() == type) { + return sensor; + } + } + return null; + }); + return sensorManager; + } + + private static Sensor createLightSensor() { + try { + return TestUtils.createSensor(Sensor.TYPE_LIGHT, Sensor.STRING_TYPE_LIGHT); + } catch (Exception e) { + // There's nothing we can do if this fails, just throw a RuntimeException so that we + // don't have to mark every function that might call this as throwing Exception + throw new RuntimeException("Failed to create a light sensor", e); + } + } + + private void waitForIdleSync() { + mHandler.runWithScissors(() -> { }, 500 /*timeout*/); + } + + static class FakesInjector implements DisplayModeDirector.Injector { + private final FakeDeviceConfig mDeviceConfig; + private ContentObserver mBrightnessObserver; + private ContentObserver mPeakRefreshRateObserver; + + FakesInjector() { + mDeviceConfig = new FakeDeviceConfig(); + } + + @NonNull + public FakeDeviceConfig getDeviceConfig() { + return mDeviceConfig; + } + + @Override + public void registerBrightnessObserver(@NonNull ContentResolver cr, + @NonNull ContentObserver observer) { + if (mBrightnessObserver != null) { + throw new IllegalStateException("Tried to register a second brightness observer"); + } + mBrightnessObserver = observer; + } + + @Override + public void unregisterBrightnessObserver(@NonNull ContentResolver cr, + @NonNull ContentObserver observer) { + mBrightnessObserver = null; + } + + void notifyBrightnessChanged() { + if (mBrightnessObserver != null) { + mBrightnessObserver.dispatchChange(false /*selfChange*/, DISPLAY_BRIGHTNESS_URI); + } + } + + @Override + public void registerPeakRefreshRateObserver(@NonNull ContentResolver cr, + @NonNull ContentObserver observer) { + mPeakRefreshRateObserver = observer; + } + + void notifyPeakRefreshRateChanged() { + if (mPeakRefreshRateObserver != null) { + mPeakRefreshRateObserver.dispatchChange(false /*selfChange*/, + PEAK_REFRESH_RATE_URI); + } + } + } } diff --git a/services/tests/servicestests/src/com/android/server/locksettings/SyntheticPasswordTests.java b/services/tests/servicestests/src/com/android/server/locksettings/SyntheticPasswordTests.java index 2c2fdcaab34..f33f9ed1337 100644 --- a/services/tests/servicestests/src/com/android/server/locksettings/SyntheticPasswordTests.java +++ b/services/tests/servicestests/src/com/android/server/locksettings/SyntheticPasswordTests.java @@ -246,7 +246,8 @@ public void testTokenBasedResetPassword() throws RemoteException { assertFalse(mLocalService.isEscrowTokenActive(handle, PRIMARY_USER_ID)); assertTrue(mService.hasPendingEscrowToken(PRIMARY_USER_ID)); - mService.verifyCredential(password, 0, PRIMARY_USER_ID).getResponseCode(); + assertEquals(VerifyCredentialResponse.RESPONSE_OK, mService.verifyCredential( + password, 0, PRIMARY_USER_ID).getResponseCode()); assertTrue(mLocalService.isEscrowTokenActive(handle, PRIMARY_USER_ID)); assertFalse(mService.hasPendingEscrowToken(PRIMARY_USER_ID)); @@ -275,7 +276,8 @@ public void testTokenBasedClearPassword() throws RemoteException { long handle = mLocalService.addEscrowToken(token, PRIMARY_USER_ID, null); assertFalse(mLocalService.isEscrowTokenActive(handle, PRIMARY_USER_ID)); - mService.verifyCredential(password, 0, PRIMARY_USER_ID).getResponseCode(); + assertEquals(VerifyCredentialResponse.RESPONSE_OK, mService.verifyCredential( + password, 0, PRIMARY_USER_ID).getResponseCode()); assertTrue(mLocalService.isEscrowTokenActive(handle, PRIMARY_USER_ID)); mLocalService.setLockCredentialWithToken(nonePassword(), handle, token, PRIMARY_USER_ID); @@ -301,7 +303,8 @@ public void testTokenBasedResetPasswordAfterCredentialChanges() throws RemoteExc long handle = mLocalService.addEscrowToken(token, PRIMARY_USER_ID, null); assertFalse(mLocalService.isEscrowTokenActive(handle, PRIMARY_USER_ID)); - mService.verifyCredential(password, 0, PRIMARY_USER_ID).getResponseCode(); + assertEquals(VerifyCredentialResponse.RESPONSE_OK, mService.verifyCredential( + password, 0, PRIMARY_USER_ID).getResponseCode()); assertTrue(mLocalService.isEscrowTokenActive(handle, PRIMARY_USER_ID)); mService.setLockCredential(pattern, password, PRIMARY_USER_ID); @@ -376,6 +379,36 @@ public void testEscrowTokenCannotBeActivatedOnUnmanagedUser() { } catch (SecurityException expected) { } } + @Test + public void testActivateMultipleEscrowTokens() throws Exception { + byte[] token0 = "some-high-entropy-secure-token-0".getBytes(); + byte[] token1 = "some-high-entropy-secure-token-1".getBytes(); + byte[] token2 = "some-high-entropy-secure-token-2".getBytes(); + + LockscreenCredential password = newPassword("password"); + LockscreenCredential pattern = newPattern("123654"); + initializeCredentialUnderSP(password, PRIMARY_USER_ID); + + long handle0 = mLocalService.addEscrowToken(token0, PRIMARY_USER_ID, null); + long handle1 = mLocalService.addEscrowToken(token1, PRIMARY_USER_ID, null); + long handle2 = mLocalService.addEscrowToken(token2, PRIMARY_USER_ID, null); + + // Activate token + assertEquals(VerifyCredentialResponse.RESPONSE_OK, mService.verifyCredential( + password, 0, PRIMARY_USER_ID).getResponseCode()); + + // Verify tokens work + assertTrue(mLocalService.isEscrowTokenActive(handle0, PRIMARY_USER_ID)); + assertTrue(mLocalService.setLockCredentialWithToken( + pattern, handle0, token0, PRIMARY_USER_ID)); + assertTrue(mLocalService.isEscrowTokenActive(handle1, PRIMARY_USER_ID)); + assertTrue(mLocalService.setLockCredentialWithToken( + pattern, handle1, token1, PRIMARY_USER_ID)); + assertTrue(mLocalService.isEscrowTokenActive(handle2, PRIMARY_USER_ID)); + assertTrue(mLocalService.setLockCredentialWithToken( + pattern, handle2, token2, PRIMARY_USER_ID)); + } + @Test public void testSetLockCredentialWithTokenFailsWithoutLockScreen() throws Exception { LockscreenCredential password = newPassword("password"); @@ -503,7 +536,8 @@ public void testUnlockUserWithToken() throws Exception { reset(mDevicePolicyManager); long handle = mLocalService.addEscrowToken(token, PRIMARY_USER_ID, null); - mService.verifyCredential(password, 0, PRIMARY_USER_ID).getResponseCode(); + assertEquals(VerifyCredentialResponse.RESPONSE_OK, mService.verifyCredential( + password, 0, PRIMARY_USER_ID).getResponseCode()); assertTrue(mLocalService.isEscrowTokenActive(handle, PRIMARY_USER_ID)); mService.onCleanupUser(PRIMARY_USER_ID); diff --git a/services/tests/uiservicestests/src/com/android/server/notification/BuzzBeepBlinkTest.java b/services/tests/uiservicestests/src/com/android/server/notification/BuzzBeepBlinkTest.java index 2e0f1992478..cfda07c5520 100644 --- a/services/tests/uiservicestests/src/com/android/server/notification/BuzzBeepBlinkTest.java +++ b/services/tests/uiservicestests/src/com/android/server/notification/BuzzBeepBlinkTest.java @@ -57,6 +57,7 @@ import android.media.AudioManager; import android.net.Uri; import android.os.Handler; +import android.os.Process; import android.os.RemoteException; import android.os.UserHandle; import android.os.VibrationEffect; @@ -77,10 +78,12 @@ import com.android.internal.util.IntPair; import com.android.server.UiServiceTestCase; import com.android.server.lights.LogicalLight; +import com.android.server.pm.PackageManagerService; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; +import org.mockito.ArgumentCaptor; import org.mockito.ArgumentMatcher; import org.mockito.Mock; import org.mockito.Mockito; @@ -407,12 +410,17 @@ private void verifyNeverVibrate() { } private void verifyVibrate() { + ArgumentCaptor captor = ArgumentCaptor.forClass(AudioAttributes.class); verify(mVibrator, times(1)).vibrate(anyInt(), anyString(), argThat(mVibrateOnceMatcher), - anyString(), any()); + anyString(), captor.capture()); + assertEquals(0, (captor.getValue().getAllFlags() + & AudioAttributes.FLAG_BYPASS_INTERRUPTION_POLICY)); } private void verifyVibrate(int times) { - verify(mVibrator, times(times)).vibrate(anyInt(), anyString(), any(), anyString(), any()); + verify(mVibrator, times(times)).vibrate(eq(Process.SYSTEM_UID), + eq(PackageManagerService.PLATFORM_PACKAGE_NAME), any(), anyString(), + any(AudioAttributes.class)); } private void verifyVibrateLooped() { 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 7f0b4dbabc3..1a4cce466c6 100755 --- a/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java +++ b/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java @@ -84,6 +84,7 @@ import android.app.ActivityManager; import android.app.ActivityManagerInternal; +import android.app.AlarmManager; import android.app.AppOpsManager; import android.app.AutomaticZenRule; import android.app.IActivityManager; @@ -111,6 +112,7 @@ import android.content.pm.IPackageManager; import android.content.pm.LauncherApps; import android.content.pm.PackageManager; +import android.content.pm.PackageManagerInternal; import android.content.pm.ParceledListSlice; import android.content.pm.ShortcutInfo; import android.content.pm.ShortcutServiceInternal; @@ -171,6 +173,7 @@ import com.android.server.lights.LogicalLight; import com.android.server.notification.NotificationManagerService.NotificationAssistants; import com.android.server.notification.NotificationManagerService.NotificationListeners; +import com.android.server.pm.PackageManagerService; import com.android.server.statusbar.StatusBarManagerInternal; import com.android.server.uri.UriGrantsManagerInternal; import com.android.server.wm.ActivityTaskManagerInternal; @@ -178,7 +181,6 @@ import org.junit.After; import org.junit.Before; -import org.junit.Ignore; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.ArgumentCaptor; @@ -244,6 +246,8 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { Resources mResources; @Mock RankingHandler mRankingHandler; + @Mock + protected PackageManagerInternal mPackageManagerInternal; private static final int MAX_POST_DELAY = 1000; @@ -283,6 +287,8 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { NotificationHistoryManager mHistoryManager; @Mock StatsManager mStatsManager; + @Mock + AlarmManager mAlarmManager; NotificationRecordLoggerFake mNotificationRecordLogger = new NotificationRecordLoggerFake(); private InstanceIdSequence mNotificationInstanceIdSequence = new InstanceIdSequenceFake( 1 << 30); @@ -424,6 +430,8 @@ public void setUp() throws Exception { LocalServices.addService(DeviceIdleInternal.class, deviceIdleInternal); LocalServices.removeServiceForTest(ActivityManagerInternal.class); LocalServices.addService(ActivityManagerInternal.class, activityManagerInternal); + mContext.addMockSystemService(Context.ALARM_SERVICE, mAlarmManager); + doNothing().when(mContext).sendBroadcastAsUser(any(), any(), any()); @@ -497,7 +505,8 @@ null, new ComponentName(PKG, "test_class"), mGroupHelper, mAm, mAtm, mAppUsageStats, mock(DevicePolicyManagerInternal.class), mUgm, mUgmInternal, mAppOpsManager, mUm, mHistoryManager, mStatsManager, - mock(TelephonyManager.class)); + mock(TelephonyManager.class), + mock(ActivityManagerInternal.class)); mService.onBootPhase(SystemService.PHASE_SYSTEM_SERVICES_READY); mService.setAudioManager(mAudioManager); @@ -831,6 +840,26 @@ private NotificationRecord addGroupWithBubblesAndValidateAdded(boolean summaryAu return nrSummary; } + @Test + public void testLimitTimeOutBroadcast() { + NotificationChannel channel = new NotificationChannel("id", "name", + NotificationManager.IMPORTANCE_HIGH); + Notification.Builder nb = new Notification.Builder(mContext, channel.getId()) + .setContentTitle("foo") + .setSmallIcon(android.R.drawable.sym_def_app_icon) + .setTimeoutAfter(1); + + StatusBarNotification sbn = new StatusBarNotification(PKG, PKG, 8, "tag", mUid, 0, + nb.build(), UserHandle.getUserHandleForUid(mUid), null, 0); + NotificationRecord r = new NotificationRecord(mContext, sbn, channel); + + mService.scheduleTimeoutLocked(r); + ArgumentCaptor captor = ArgumentCaptor.forClass(PendingIntent.class); + verify(mAlarmManager).setExactAndAllowWhileIdle(anyInt(), anyLong(), captor.capture()); + assertEquals(PackageManagerService.PLATFORM_PACKAGE_NAME, + captor.getValue().getIntent().getPackage()); + } + @Test public void testDefaultAssistant_overrideDefault() { final int userId = 0; @@ -1187,6 +1216,26 @@ public void testEnqueuedRestrictedNotifications_badUser() throws Exception { assertEquals(0, mBinderService.getActiveNotifications(PKG).length); } + @Test + public void testEnqueuedRestrictedNotifications_asSuwApp() throws Exception { + LocalServices.removeServiceForTest(PackageManagerInternal.class); + LocalServices.addService(PackageManagerInternal.class, mPackageManagerInternal); + when(mPackageManagerInternal.getSetupWizardPackageName()).thenReturn(PKG); + + when(mPackageManager.hasSystemFeature(PackageManager.FEATURE_AUTOMOTIVE, 0)) + .thenReturn(true); + + final StatusBarNotification sbn = + generateNotificationRecord(mTestNotificationChannel, 0, "", false).getSbn(); + sbn.getNotification().category = Notification.CATEGORY_CAR_INFORMATION; + mBinderService.enqueueNotificationWithTag(PKG, PKG, + "testEnqueuedRestrictedNotifications_asSuwApp", + sbn.getId(), sbn.getNotification(), sbn.getUserId()); + + waitForIdle(); + assertEquals(1, mBinderService.getActiveNotifications(PKG).length); + } + @Test public void testBlockedNotifications_blockedByAssistant() throws Exception { when(mPackageManager.isPackageSuspendedForUser(anyString(), anyInt())).thenReturn(false); diff --git a/services/tests/uiservicestests/src/com/android/server/notification/RoleObserverTest.java b/services/tests/uiservicestests/src/com/android/server/notification/RoleObserverTest.java index ac2c6193c67..1918edb3355 100644 --- a/services/tests/uiservicestests/src/com/android/server/notification/RoleObserverTest.java +++ b/services/tests/uiservicestests/src/com/android/server/notification/RoleObserverTest.java @@ -32,6 +32,7 @@ import static org.mockito.Mockito.when; import android.app.ActivityManager; +import android.app.ActivityManagerInternal; import android.app.AppOpsManager; import android.app.IActivityManager; import android.app.IUriGrantsManager; @@ -156,7 +157,8 @@ public void setUp() throws Exception { mock(DevicePolicyManagerInternal.class), mock(IUriGrantsManager.class), mock(UriGrantsManagerInternal.class), mock(AppOpsManager.class), mUm, mock(NotificationHistoryManager.class), - mock(StatsManager.class), mock(TelephonyManager.class)); + mock(StatsManager.class), mock(TelephonyManager.class), + mock(ActivityManagerInternal.class)); } catch (SecurityException e) { if (!e.getMessage().contains("Permission Denial: not allowed to send broadcast")) { throw e; diff --git a/services/tests/wmtests/src/com/android/server/wm/ActivityMetricsLaunchObserverTests.java b/services/tests/wmtests/src/com/android/server/wm/ActivityMetricsLaunchObserverTests.java index 5b516a9de35..53a6d3ff599 100644 --- a/services/tests/wmtests/src/com/android/server/wm/ActivityMetricsLaunchObserverTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/ActivityMetricsLaunchObserverTests.java @@ -311,6 +311,22 @@ public void testOnActivityLaunchCancelledTrampoline() { verifyNoMoreInteractions(mLaunchObserver); } + @Test + public void testActivityDrawnBeforeTransition() { + mTopActivity.setVisible(false); + notifyActivityLaunching(mTopActivity.intent); + // Assume the activity is launched the second time consecutively. The drawn event is from + // the first time (omitted in test) launch that is earlier than transition. + mTopActivity.mDrawn = true; + notifyWindowsDrawn(mTopActivity); + notifyActivityLaunched(START_SUCCESS, mTopActivity); + // If the launching activity was drawn when starting transition, the launch event should + // be reported successfully. + notifyTransitionStarting(mTopActivity); + + verifyOnActivityLaunchFinished(mTopActivity); + } + @Test public void testActivityRecordProtoIsNotTooBig() { // The ActivityRecordProto must not be too big, otherwise converting it at runtime diff --git a/services/tests/wmtests/src/com/android/server/wm/DisplayContentTests.java b/services/tests/wmtests/src/com/android/server/wm/DisplayContentTests.java index d99606b704e..b28220585c5 100644 --- a/services/tests/wmtests/src/com/android/server/wm/DisplayContentTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/DisplayContentTests.java @@ -88,6 +88,7 @@ import android.annotation.SuppressLint; import android.app.ActivityTaskManager; import android.app.WindowConfiguration; +import android.app.servertransaction.FixedRotationAdjustmentsItem; import android.content.res.Configuration; import android.graphics.Rect; import android.graphics.Region; @@ -1345,6 +1346,36 @@ public void testRecentsNotRotatingWithFixedRotation() { assertFalse(recentsActivity.hasFixedRotationTransform()); } + @Test + public void testClearIntermediateFixedRotationAdjustments() throws RemoteException { + final ActivityRecord activity = new ActivityTestsBase.StackBuilder(mWm.mRoot) + .setDisplay(mDisplayContent).build().getTopMostActivity(); + mDisplayContent.setFixedRotationLaunchingApp(activity, + (mDisplayContent.getRotation() + 1) % 4); + // Create a window so FixedRotationAdjustmentsItem can be sent. + createWindow(null, TYPE_APPLICATION_STARTING, activity, "AppWin"); + final ActivityRecord activity2 = new ActivityTestsBase.StackBuilder(mWm.mRoot) + .setDisplay(mDisplayContent).build().getTopMostActivity(); + activity2.setVisible(false); + clearInvocations(mWm.mAtmService.getLifecycleManager()); + // The first activity has applied fixed rotation but the second activity becomes the top + // before the transition is done and it has the same rotation as display, so the dispatched + // rotation adjustment of first activity must be cleared. + mDisplayContent.handleTopActivityLaunchingInDifferentOrientation(activity2, + false /* checkOpening */); + + final ArgumentCaptor adjustmentsCaptor = + ArgumentCaptor.forClass(FixedRotationAdjustmentsItem.class); + verify(mWm.mAtmService.getLifecycleManager(), atLeastOnce()).scheduleTransaction( + eq(activity.app.getThread()), adjustmentsCaptor.capture()); + // The transformation is kept for animation in real case. + assertTrue(activity.hasFixedRotationTransform()); + final FixedRotationAdjustmentsItem clearAdjustments = FixedRotationAdjustmentsItem.obtain( + activity.token, null /* fixedRotationAdjustments */); + // The captor may match other items. The first one must be the item to clear adjustments. + assertEquals(clearAdjustments, adjustmentsCaptor.getAllValues().get(0)); + } + @Test public void testRemoteRotation() { DisplayContent dc = createNewDisplay(); diff --git a/services/tests/wmtests/src/com/android/server/wm/ImeInsetsSourceProviderTest.java b/services/tests/wmtests/src/com/android/server/wm/ImeInsetsSourceProviderTest.java index 91cfd4e6a89..59d195b670a 100644 --- a/services/tests/wmtests/src/com/android/server/wm/ImeInsetsSourceProviderTest.java +++ b/services/tests/wmtests/src/com/android/server/wm/ImeInsetsSourceProviderTest.java @@ -18,7 +18,9 @@ import static android.view.InsetsState.ITYPE_IME; import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION; +import static android.view.WindowManager.LayoutParams.TYPE_INPUT_METHOD; +import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import android.graphics.PixelFormat; @@ -64,4 +66,22 @@ public void testInputMethodInputTargetCanShowIme() { mImeProvider.scheduleShowImePostLayout(target); assertTrue(mImeProvider.isImeTargetFromDisplayContentAndImeSame()); } + + @Test + public void testIsImeShowing() { + WindowState ime = createWindow(null, TYPE_INPUT_METHOD, "ime"); + makeWindowVisibleAndDrawn(ime); + mImeProvider.setWindow(ime, null, null); + + WindowState target = createWindow(null, TYPE_APPLICATION, "app"); + mDisplayContent.mInputMethodTarget = target; + mDisplayContent.mInputMethodControlTarget = target; + + mImeProvider.scheduleShowImePostLayout(target); + assertFalse(mImeProvider.isImeShowing()); + mImeProvider.checkShowImePostLayout(); + assertTrue(mImeProvider.isImeShowing()); + mImeProvider.setImeShowing(false); + assertFalse(mImeProvider.isImeShowing()); + } } diff --git a/services/tests/wmtests/src/com/android/server/wm/TestWindowManagerPolicy.java b/services/tests/wmtests/src/com/android/server/wm/TestWindowManagerPolicy.java index 4a8e8dafb57..979bbdad250 100644 --- a/services/tests/wmtests/src/com/android/server/wm/TestWindowManagerPolicy.java +++ b/services/tests/wmtests/src/com/android/server/wm/TestWindowManagerPolicy.java @@ -109,9 +109,9 @@ void setRunnableWhenAddingSplashScreen(Runnable r) { } @Override - public StartingSurface addSplashScreen(IBinder appToken, String packageName, int theme, - CompatibilityInfo compatInfo, CharSequence nonLocalizedLabel, int labelRes, int icon, - int logo, int windowFlags, Configuration overrideConfig, int displayId) { + public StartingSurface addSplashScreen(IBinder appToken, int userId, String packageName, + int theme, CompatibilityInfo compatInfo, CharSequence nonLocalizedLabel, int labelRes, + int icon, int logo, int windowFlags, Configuration overrideConfig, int displayId) { final com.android.server.wm.WindowState window; final ActivityRecord activity; final WindowManagerService wm = mWmSupplier.get(); diff --git a/services/tests/wmtests/src/com/android/server/wm/WindowTestsBase.java b/services/tests/wmtests/src/com/android/server/wm/WindowTestsBase.java index 156298c86d4..60242faf359 100644 --- a/services/tests/wmtests/src/com/android/server/wm/WindowTestsBase.java +++ b/services/tests/wmtests/src/com/android/server/wm/WindowTestsBase.java @@ -37,6 +37,8 @@ import static androidx.test.platform.app.InstrumentationRegistry.getInstrumentation; +import static com.android.server.wm.WindowStateAnimator.HAS_DRAWN; + import static org.mockito.Mockito.mock; import android.content.Context; @@ -261,6 +263,13 @@ static void makeWindowVisible(WindowState... windows) { } } + static void makeWindowVisibleAndDrawn(WindowState... windows) { + makeWindowVisible(windows); + for (WindowState win : windows) { + win.mWinAnimator.mDrawState = HAS_DRAWN; + } + } + /** Creates a {@link ActivityStack} and adds it to the specified {@link DisplayContent}. */ ActivityStack createTaskStackOnDisplay(DisplayContent dc) { return createTaskStackOnDisplay(WINDOWING_MODE_FULLSCREEN, ACTIVITY_TYPE_STANDARD, dc); diff --git a/telephony/java/android/telephony/CarrierConfigManager.java b/telephony/java/android/telephony/CarrierConfigManager.java index 9995a524670..8e28efce581 100644 --- a/telephony/java/android/telephony/CarrierConfigManager.java +++ b/telephony/java/android/telephony/CarrierConfigManager.java @@ -3928,6 +3928,20 @@ private static PersistableBundle getDefaults() { public static final String KEY_USE_LOWER_MTU_VALUE_IF_BOTH_RECEIVED = "use_lower_mtu_value_if_both_received"; + /** + * Indicates temporarily unmetered mobile data is supported by the carrier. + * @hide + */ + public static final String KEY_NETWORK_TEMP_NOT_METERED_SUPPORTED_BOOL = + "network_temp_not_metered_supported_bool"; + + /** + * Indicates whether RTT is supported while roaming. + * @hide + */ + public static final String KEY_RTT_SUPPORTED_WHILE_ROAMING_BOOL = + "rtt_supported_while_roaming_bool"; + /** The default value for every variable. */ private final static PersistableBundle sDefaults; @@ -4283,6 +4297,7 @@ private static PersistableBundle getDefaults() { sDefaults.putBoolean(KEY_RTT_SUPPORTED_BOOL, false); sDefaults.putBoolean(KEY_TTY_SUPPORTED_BOOL, true); sDefaults.putBoolean(KEY_HIDE_TTY_HCO_VCO_WITH_RTT_BOOL, false); + sDefaults.putBoolean(KEY_RTT_SUPPORTED_WHILE_ROAMING_BOOL, false); sDefaults.putBoolean(KEY_DISABLE_CHARGE_INDICATION_BOOL, false); sDefaults.putBoolean(KEY_SUPPORT_NO_REPLY_TIMER_FOR_CFNRY_BOOL, true); sDefaults.putStringArray(KEY_FEATURE_ACCESS_CODES_STRING_ARRAY, null); @@ -4466,6 +4481,7 @@ private static PersistableBundle getDefaults() { sDefaults.putBoolean(KEY_DISABLE_DUN_APN_WHILE_ROAMING_WITH_PRESET_APN_BOOL, false); sDefaults.putString(KEY_DEFAULT_PREFERRED_APN_NAME_STRING, ""); sDefaults.putBoolean(KEY_USE_LOWER_MTU_VALUE_IF_BOTH_RECEIVED, false); + sDefaults.putBoolean(KEY_NETWORK_TEMP_NOT_METERED_SUPPORTED_BOOL, true); } /** diff --git a/telephony/java/android/telephony/SubscriptionInfo.java b/telephony/java/android/telephony/SubscriptionInfo.java index 11667c83bc6..0ee6568b643 100644 --- a/telephony/java/android/telephony/SubscriptionInfo.java +++ b/telephony/java/android/telephony/SubscriptionInfo.java @@ -148,13 +148,14 @@ public class SubscriptionInfo implements Parcelable { /** * The access rules for this subscription, if it is embedded and defines any. + * This does not include access rules for non-embedded subscriptions. */ @Nullable private UiccAccessRule[] mNativeAccessRules; /** * The carrier certificates for this subscription that are saved in carrier configs. - * The other carrier certificates are embedded on Uicc and stored as part of mNativeAccessRules. + * This does not include access rules from the Uicc, whether embedded or non-embedded. */ @Nullable private UiccAccessRule[] mCarrierConfigAccessRules; @@ -661,7 +662,6 @@ public boolean canManageSubscription(Context context, String packageName) { * is authorized to manage this subscription. * TODO and fix it properly in R / master: either deprecate this and have 3 APIs * native + carrier + all, or have this return all by default. - * @throws UnsupportedOperationException if this subscription is not embedded. * @hide */ @SystemApi diff --git a/telephony/java/android/telephony/SubscriptionManager.java b/telephony/java/android/telephony/SubscriptionManager.java index e9ee06c246b..c8ba919aa40 100644 --- a/telephony/java/android/telephony/SubscriptionManager.java +++ b/telephony/java/android/telephony/SubscriptionManager.java @@ -2631,6 +2631,10 @@ public void setSubscriptionOverrideCongested(int subId, boolean overrideCongeste * Checks whether the app with the given context is authorized to manage the given subscription * according to its metadata. * + * Only supported for embedded subscriptions (if {@link SubscriptionInfo#isEmbedded} returns + * true). To check for permissions for non-embedded subscription as well, + * {@see android.telephony.TelephonyManager#hasCarrierPrivileges}. + * * @param info The subscription to check. * @return whether the app is authorized to manage this subscription per its metadata. */ @@ -2643,6 +2647,10 @@ public boolean canManageSubscription(SubscriptionInfo info) { * be authorized if it is included in the {@link android.telephony.UiccAccessRule} of the * {@link android.telephony.SubscriptionInfo} with the access status. * + * Only supported for embedded subscriptions (if {@link SubscriptionInfo#isEmbedded} returns + * true). To check for permissions for non-embedded subscription as well, + * {@see android.telephony.TelephonyManager#hasCarrierPrivileges}. + * * @param info The subscription to check. * @param packageName Package name of the app to check. * @return whether the app is authorized to manage this subscription per its access rules. diff --git a/telephony/java/android/telephony/TelephonyManager.java b/telephony/java/android/telephony/TelephonyManager.java index 35e26303669..10c3e6db520 100644 --- a/telephony/java/android/telephony/TelephonyManager.java +++ b/telephony/java/android/telephony/TelephonyManager.java @@ -8534,6 +8534,9 @@ public boolean isTetheringApnRequired(int subId) { * call will return true. This access is granted by the owner of the UICC * card and does not depend on the registered carrier. * + * Note that this API applies to both physical and embedded subscriptions and + * is a superset of the checks done in SubscriptionManager#canManageSubscription. + * * @return true if the app has carrier privileges. */ public boolean hasCarrierPrivileges() { @@ -8547,6 +8550,9 @@ public boolean hasCarrierPrivileges() { * call will return true. This access is granted by the owner of the UICC * card and does not depend on the registered carrier. * + * Note that this API applies to both physical and embedded subscriptions and + * is a superset of the checks done in SubscriptionManager#canManageSubscription. + * * @param subId The subscription to use. * @return true if the app has carrier privileges. * @hide diff --git a/telephony/java/android/telephony/ims/ImsReasonInfo.java b/telephony/java/android/telephony/ims/ImsReasonInfo.java index 0d6b31d349e..4cace2fecdf 100644 --- a/telephony/java/android/telephony/ims/ImsReasonInfo.java +++ b/telephony/java/android/telephony/ims/ImsReasonInfo.java @@ -889,6 +889,13 @@ public final class ImsReasonInfo implements Parcelable { */ public static final int CODE_WFC_SERVICE_NOT_AVAILABLE_IN_THIS_LOCATION = 1623; + /** + * Call failed because of network congestion, resource is not available, + * or no circuit or channel available, etc. + * @hide + */ + public static final int CODE_NETWORK_CONGESTION = 1624; + /** * The dialed RTT call should be retried without RTT * @hide @@ -1075,6 +1082,7 @@ public final class ImsReasonInfo implements Parcelable { CODE_REJECT_VT_AVPF_NOT_ALLOWED, CODE_REJECT_ONGOING_ENCRYPTED_CALL, CODE_REJECT_ONGOING_CS_CALL, + CODE_NETWORK_CONGESTION, CODE_RETRY_ON_IMS_WITHOUT_RTT, CODE_OEM_CAUSE_1, CODE_OEM_CAUSE_2, diff --git a/telephony/java/com/android/internal/telephony/ITelephony.aidl b/telephony/java/com/android/internal/telephony/ITelephony.aidl index b70937cee8a..363d6f57b60 100644 --- a/telephony/java/com/android/internal/telephony/ITelephony.aidl +++ b/telephony/java/com/android/internal/telephony/ITelephony.aidl @@ -2138,6 +2138,11 @@ interface ITelephony { */ int setImsProvisioningString(int subId, int key, String value); + /** + * Start emergency callback mode for testing. + */ + void startEmergencyCallbackMode(); + /** * Update Emergency Number List for Test Mode. */